From 5b6779a3a9264484271d07bc56775268b91171c0 Mon Sep 17 00:00:00 2001 From: Blair Duncan Date: Mon, 23 Apr 2012 16:51:10 -0400 Subject: [PATCH 001/112] Fix for menu selection that was broken with the change to CPEvent timestamp --- AppKit/CPMenu/_CPMenuManager.j | 10 +++++----- Tests/Manual/CPMenuTest/AppController.j | 22 ++++++++-------------- Tests/Manual/CPMenuTest/MyView.j | 18 ------------------ 3 files changed, 13 insertions(+), 37 deletions(-) delete mode 100644 Tests/Manual/CPMenuTest/MyView.j diff --git a/AppKit/CPMenu/_CPMenuManager.j b/AppKit/CPMenu/_CPMenuManager.j index 9b680674a..210c8b8b9 100644 --- a/AppKit/CPMenu/_CPMenuManager.j +++ b/AppKit/CPMenu/_CPMenuManager.j @@ -126,8 +126,8 @@ var STICKY_TIME_INTERVAL = 0.5, } if (_keyBuffer) - { - if (([anEvent timestamp] - _startTime) > (STICKY_TIME_INTERVAL + [activeMenu numberOfItems] / 2)) + { // periodic events have a timestamp of 0 so use the currentTimestamp + if (([CPEvent currentTimestamp] - _startTime) > (STICKY_TIME_INTERVAL + [activeMenu numberOfItems] / 2)) [self selectNextItemBeginningWith:_keyBuffer inMenu:menu clearBuffer:YES]; if (type === CPPeriodic) @@ -245,7 +245,7 @@ var STICKY_TIME_INTERVAL = 0.5, 3. The user clicks, drags and then releases. Tracking ends. */ - if (_mouseWasDragged || ([anEvent timestamp] - _startTime > STICKY_TIME_INTERVAL)) + if (_mouseWasDragged || ([CPEvent currentTimestamp] - _startTime > STICKY_TIME_INTERVAL)) { /* Close the menu if: @@ -485,7 +485,7 @@ var STICKY_TIME_INTERVAL = 0.5, { if (!_keyBuffer) { - _startTime = [CPDate date]; + _startTime = [CPEvent currentTimestamp]; _keyBuffer = character; [CPEvent stopPeriodicEvents]; @@ -522,7 +522,7 @@ var STICKY_TIME_INTERVAL = 0.5, _keyBuffer = Nil; } else - _startTime = [CPDate date]; + _startTime = [CPEvent currentTimestamp]; } - (void)scrollToBeginningOfDocument:(CPMenu)menu diff --git a/Tests/Manual/CPMenuTest/AppController.j b/Tests/Manual/CPMenuTest/AppController.j index 3c2e43393..09e1c15e9 100644 --- a/Tests/Manual/CPMenuTest/AppController.j +++ b/Tests/Manual/CPMenuTest/AppController.j @@ -1,14 +1,13 @@ /* * AppController.j - * CPMenuTest + * CPMenu * - * Created by Alexander Ljungberg on August 31, 2010. - * Copyright 2010, WireLoad, LLC All rights reserved. + * Created by Blair Duncan on April 23, 2012. + * Copyright 2012, SGL Studio, BBDO Toronto All rights reserved. */ @import -@import "MyView.j" @implementation AppController : CPObject { @@ -17,16 +16,10 @@ - (void)applicationDidFinishLaunching:(CPNotification)aNotification { var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask], - contentView = [[MyView alloc] initWithFrame:CGRectMakeZero()]; + contentView = [theWindow contentView], + popupButton = [[CPPopUpButton alloc] initWithFrame:CGRectMakeZero()]; - [contentView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; - [theWindow setContentView:contentView]; - - var popupButton = [[CPPopUpButton alloc] initWithFrame:CGRectMakeZero()]; - - [popupButton addItemWithTitle:@"Item 1"]; - [popupButton addItemWithTitle:@"Item 2"]; - [popupButton addItemWithTitle:@"Item 3"]; + [popupButton addItemsWithTitles:[[CPFontManager sharedFontManager] availableFonts]]; [popupButton sizeToFit]; [popupButton setAutoresizingMask:CPViewMinXMargin | CPViewMaxXMargin | CPViewMinYMargin | CPViewMaxYMargin]; @@ -37,7 +30,8 @@ [theWindow orderFront:self]; // Uncomment the following line to turn on the standard menu bar. - [CPMenu setMenuBarVisible:YES]; + //[CPMenu setMenuBarVisible:YES]; } + @end diff --git a/Tests/Manual/CPMenuTest/MyView.j b/Tests/Manual/CPMenuTest/MyView.j deleted file mode 100644 index 0f2b01870..000000000 --- a/Tests/Manual/CPMenuTest/MyView.j +++ /dev/null @@ -1,18 +0,0 @@ -@import - -@implementation MyView : CPView -{ -} - -- (CPMenu)menu -{ - var menu = [[CPMenu alloc] initWithTitle:@""]; - - [menu addItemWithTitle:@"Item 1" action:nil keyEquivalent:nil]; - [menu addItemWithTitle:@"Item 2" action:nil keyEquivalent:nil]; - [menu addItemWithTitle:@"Item 3" action:nil keyEquivalent:nil]; - - return menu; -} - -@end \ No newline at end of file From 5b5034da6390069c1a4f9b4611e4646e4b7d4d63 Mon Sep 17 00:00:00 2001 From: Blair Duncan Date: Mon, 23 Apr 2012 18:19:37 -0400 Subject: [PATCH 002/112] CPEvent - send a valid timestamp for periodic events --- AppKit/CPEvent.j | 2 +- AppKit/CPMenu/_CPMenuManager.j | 8 ++++---- Tests/Manual/CPMenuTest/AppController.j | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/AppKit/CPEvent.j b/AppKit/CPEvent.j index 4f309e350..a5fe949bd 100644 --- a/AppKit/CPEvent.j +++ b/AppKit/CPEvent.j @@ -634,7 +634,7 @@ var _CPEventPeriodicEventPeriod = 0, function _CPEventFirePeriodEvent() { - [CPApp sendEvent:[CPEvent otherEventWithType:CPPeriodic location:_CGPointMakeZero() modifierFlags:0 timestamp:0 windowNumber:0 context:nil subtype:0 data1:0 data2:0]]; + [CPApp sendEvent:[CPEvent otherEventWithType:CPPeriodic location:_CGPointMakeZero() modifierFlags:0 timestamp:[CPEvent currentTimestamp] windowNumber:0 context:nil subtype:0 data1:0 data2:0]]; } var CPEventClass = [CPEvent class]; diff --git a/AppKit/CPMenu/_CPMenuManager.j b/AppKit/CPMenu/_CPMenuManager.j index 210c8b8b9..00f508274 100644 --- a/AppKit/CPMenu/_CPMenuManager.j +++ b/AppKit/CPMenu/_CPMenuManager.j @@ -126,8 +126,8 @@ var STICKY_TIME_INTERVAL = 0.5, } if (_keyBuffer) - { // periodic events have a timestamp of 0 so use the currentTimestamp - if (([CPEvent currentTimestamp] - _startTime) > (STICKY_TIME_INTERVAL + [activeMenu numberOfItems] / 2)) + { + if (([anEvent timestamp] - _startTime) > (STICKY_TIME_INTERVAL + [activeMenu numberOfItems] / 2)) [self selectNextItemBeginningWith:_keyBuffer inMenu:menu clearBuffer:YES]; if (type === CPPeriodic) @@ -245,7 +245,7 @@ var STICKY_TIME_INTERVAL = 0.5, 3. The user clicks, drags and then releases. Tracking ends. */ - if (_mouseWasDragged || ([CPEvent currentTimestamp] - _startTime > STICKY_TIME_INTERVAL)) + if (_mouseWasDragged || ([anEvent timestamp] - _startTime > STICKY_TIME_INTERVAL)) { /* Close the menu if: @@ -485,7 +485,7 @@ var STICKY_TIME_INTERVAL = 0.5, { if (!_keyBuffer) { - _startTime = [CPEvent currentTimestamp]; + _startTime = [anEvent timestamp]; _keyBuffer = character; [CPEvent stopPeriodicEvents]; diff --git a/Tests/Manual/CPMenuTest/AppController.j b/Tests/Manual/CPMenuTest/AppController.j index 09e1c15e9..0de3663f2 100644 --- a/Tests/Manual/CPMenuTest/AppController.j +++ b/Tests/Manual/CPMenuTest/AppController.j @@ -1,6 +1,6 @@ /* * AppController.j - * CPMenu + * CPMenuTest * * Created by Blair Duncan on April 23, 2012. * Copyright 2012, SGL Studio, BBDO Toronto All rights reserved. From 02ebb6e4f7067ea94ddf776347c9f8cd760b0506 Mon Sep 17 00:00:00 2001 From: Blair Duncan Date: Mon, 23 Apr 2012 23:06:31 -0400 Subject: [PATCH 003/112] highlite menu item only if the active item was found --- AppKit/CPMenu/_CPMenuManager.j | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/AppKit/CPMenu/_CPMenuManager.j b/AppKit/CPMenu/_CPMenuManager.j index 00f508274..16554a4a5 100644 --- a/AppKit/CPMenu/_CPMenuManager.j +++ b/AppKit/CPMenu/_CPMenuManager.j @@ -211,7 +211,8 @@ var STICKY_TIME_INTERVAL = 0.5, _lastMouseOverMenuView = nil; } - [activeMenu _highlightItemAtIndex:activeItemIndex]; + if (activeItemIndex != CPNotFound) + [activeMenu _highlightItemAtIndex:activeItemIndex]; if (type === CPMouseMoved || type === CPLeftMouseDragged || type === CPLeftMouseDown || type === CPPeriodic) { From 864db16e3395139e64f00c6f648682ca3ac7b060 Mon Sep 17 00:00:00 2001 From: Blair Duncan Date: Mon, 23 Apr 2012 23:54:13 -0400 Subject: [PATCH 004/112] Fix for issue 1491, don't scroll if active menu container is menubar --- AppKit/CPMenu/_CPMenuManager.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPMenu/_CPMenuManager.j b/AppKit/CPMenu/_CPMenuManager.j index 16554a4a5..dbf2249b3 100644 --- a/AppKit/CPMenu/_CPMenuManager.j +++ b/AppKit/CPMenu/_CPMenuManager.j @@ -161,7 +161,7 @@ var STICKY_TIME_INTERVAL = 0.5, var mouseOverMenuView = [activeItem view]; - if (type === CPScrollWheel) + if (type === CPScrollWheel ![activeMenuContainer isMenuBar]) [activeMenuContainer scrollByDelta:[anEvent deltaY]]; if (type === CPPeriodic) From d6429e532bce98bfca133ab4c70777529865c236 Mon Sep 17 00:00:00 2001 From: Blair Duncan Date: Tue, 24 Apr 2012 00:02:12 -0400 Subject: [PATCH 005/112] typo fix --- AppKit/CPMenu/_CPMenuManager.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPMenu/_CPMenuManager.j b/AppKit/CPMenu/_CPMenuManager.j index dbf2249b3..e78b08475 100644 --- a/AppKit/CPMenu/_CPMenuManager.j +++ b/AppKit/CPMenu/_CPMenuManager.j @@ -161,7 +161,7 @@ var STICKY_TIME_INTERVAL = 0.5, var mouseOverMenuView = [activeItem view]; - if (type === CPScrollWheel ![activeMenuContainer isMenuBar]) + if (type === CPScrollWheel && ![activeMenuContainer isMenuBar]) [activeMenuContainer scrollByDelta:[anEvent deltaY]]; if (type === CPPeriodic) From 80b6788638fe1ca62e6ec4682557a7e0af217c6a Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 28 Apr 2012 17:11:37 +0200 Subject: [PATCH 006/112] CPImage -initWithData: --- AppKit/CPImage.j | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/AppKit/CPImage.j b/AppKit/CPImage.j index f82d65ddb..70601d128 100644 --- a/AppKit/CPImage.j +++ b/AppKit/CPImage.j @@ -158,6 +158,18 @@ function CPAppKitImage(aFilename, aSize) return self; } +/*! + Initializes the receiver with the specified data. The method loads the data into memory. + @param someData the CPData object representing the image + @return the initialized image +*/ +- (id)initWithData:(CPData)someData +{ + var dataURL = "data:image;base64," + [someData base64]; + + return [self initWithContentsOfFile:dataURL]; +} + /*! Returns the path of the file associated with this image. */ From d1dd177bfde6318cb40df61e678b963abe3dcb74 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 28 Apr 2012 17:12:22 +0200 Subject: [PATCH 007/112] CPImageView: support for CPDataBinding. Test. --- AppKit/CPImageView.j | 14 +- .../CPImageViewbindingsTest/AppController.j | 2 +- .../Resources/MainMenu.cib | 9 +- .../Resources/MainMenu.xib | 248 +++++++++++++++--- .../Resources/images.plist | 4 + 5 files changed, 230 insertions(+), 47 deletions(-) diff --git a/AppKit/CPImageView.j b/AppKit/CPImageView.j index 8540a9c1c..6ecba3738 100644 --- a/AppKit/CPImageView.j +++ b/AppKit/CPImageView.j @@ -66,7 +66,7 @@ var CPImageViewEmptyPlaceholderImage = nil; + (Class)_binderClassForBinding:(CPString)theBinding { - if (theBinding === CPValueBinding || theBinding === CPValueURLBinding || theBinding === CPValuePathBinding) + if (theBinding === CPValueBinding || theBinding === CPValueURLBinding || theBinding === CPValuePathBinding || theBinding === CPDataBinding) return [CPImageViewValueBinder class]; return [super _binderClassForBinding:theBinding]; @@ -466,10 +466,16 @@ var CPImageViewEmptyPlaceholderImage = nil; - (void)setValue:(id)aValue forBinding:(CPString)aBinding { - if (aBinding === CPValueURLBinding || aBinding === CPValuePathBinding) - aValue = [[CPImage alloc] initWithContentsOfFile:aValue]; + var image; - [_source setImage:aValue]; + if (aBinding === CPDataBinding) + image = [[CPImage alloc] initWithData:aValue]; + else if (aBinding === CPValueURLBinding || aBinding === CPValuePathBinding) + image = [[CPImage alloc] initWithContentsOfFile:aValue]; + else if (aBinding === CPValueBinding) + image = aValue; + + [_source setImage:image]; } @end diff --git a/Tests/Manual/CPImageViewbindingsTest/AppController.j b/Tests/Manual/CPImageViewbindingsTest/AppController.j index bdc431c95..1779ffc44 100644 --- a/Tests/Manual/CPImageViewbindingsTest/AppController.j +++ b/Tests/Manual/CPImageViewbindingsTest/AppController.j @@ -38,8 +38,8 @@ var path = [[CPBundle mainBundle] pathForResource:@"value.jpg"], image = [[CPImage alloc] initWithContentsOfFile:path], dict = [CPDictionary dictionaryWithObject:image forKey:@"image"]; - [theRows addObject:dict]; + [theRows insertObject:dict atIndex:1]; [self setContent:theRows]; } diff --git a/Tests/Manual/CPImageViewbindingsTest/Resources/MainMenu.cib b/Tests/Manual/CPImageViewbindingsTest/Resources/MainMenu.cib index 0578be53b..05651885f 100644 --- a/Tests/Manual/CPImageViewbindingsTest/Resources/MainMenu.cib +++ b/Tests/Manual/CPImageViewbindingsTest/Resources/MainMenu.cib @@ -1,4 +1,5 @@ -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;23E;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;24E;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;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;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;44E;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;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;2;51E;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;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;2;34E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;48E;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;52E;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;53E;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;49E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;54E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;26E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;55E;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;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;47E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;51E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;56E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;57E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;58E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;60E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;45E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;51E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;61E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;57E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;62E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;63E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;51E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;64E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;65E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;58E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;35E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;51E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;67E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;57E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;68E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;69E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;34E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;51E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;70E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;57E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;71E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;51E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;49E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;73E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;74E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;75E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;76E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;52E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;77E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;78E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;79E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;80E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;81E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;28E;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;27E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;83E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;83E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;84E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;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;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;86E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;87E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;88E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;89E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;90E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;92E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;2;93E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;40E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;37E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;94E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;94E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;94E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;94E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;95E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;95E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;95E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;2;96E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;2;97E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;92E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;98E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;98E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;92E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;12;$agrid-colorD;K;6;CP$UIDd;3;102E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;103E;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;104E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;105E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;2;82E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;103E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;2;95E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;95E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;2;95E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;2;95E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;95E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;106E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;102E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;1;0E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;107E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;109E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;39E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;110E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;111E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;112E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;114E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;115E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;116E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;107E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;2;95E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;117E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;111E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;112E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;118E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;119E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;116E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;107E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;107E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;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;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;82E;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;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;122E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;82E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;30E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;124E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;103E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;82E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;125E;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;38E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;93E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;126E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;126E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;93E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;32E;K;33;CPTableHeaderViewDrawsColumnLinesD;K;6;CP$UIDd;2;95E;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;82E;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;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;122E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;131E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;132E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;30E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;133E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;103E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;82E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;134E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPImageViewK;8;$classesA;S;11;CPImageViewS;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;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;135E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;136E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;89E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;116E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;82E;K;11;$aalignmentD;K;6;CP$UIDd;2;82E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;103E;K;23;CPImageViewHasShadowKeyD;K;6;CP$UIDd;1;0E;K;28;CPImageViewImageAlignmentKeyD;K;6;CP$UIDd;2;82E;K;24;CPImageViewIsEditableKeyD;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;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;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;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;89E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;139E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;6;$afontD;K;6;CP$UIDd;3;141E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;82E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;142E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;143E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;107E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;107E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;107E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;82E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;103E;K;31;CPTextFieldPlaceholderStringKeyD;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;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;144E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;136E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;89E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;116E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;82E;K;11;$aalignmentD;K;6;CP$UIDd;2;82E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;103E;K;23;CPImageViewHasShadowKeyD;K;6;CP$UIDd;1;0E;K;28;CPImageViewImageAlignmentKeyD;K;6;CP$UIDd;2;82E;K;24;CPImageViewIsEditableKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;145E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;138E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;89E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;139E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;6;$afontD;K;6;CP$UIDd;3;146E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;82E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;147E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;143E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;107E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;107E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;107E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;82E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;103E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;148E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;149E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;89E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;139E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;150E;K;6;$afontD;K;6;CP$UIDd;3;146E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;97E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;151E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;143E;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;100E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;97E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;103E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;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;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;89E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;139E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;6;$afontD;K;6;CP$UIDd;3;141E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;82E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;154E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;143E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;107E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;107E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;107E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;82E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;103E;K;31;CPTextFieldPlaceholderStringKeyD;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;155E;E;D;K;10;$classnameS;17;CPArrayControllerK;8;$classesA;S;17;CPArrayControllerS;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;50E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;156E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;2;95E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;107E;K;37;CPArrayControllerAvoidsEmptySelectionD;K;6;CP$UIDd;2;95E;K;49;CPArrayControllerClearsFilterPredicateOnInsertionD;K;6;CP$UIDd;2;95E;K;41;CPArrayControllerFilterRestrictsInsertionD;K;6;CP$UIDd;2;95E;K;35;CPArrayControllerPreservesSelectionD;K;6;CP$UIDd;2;95E;K;39;CPArrayControllerSelectsInsertedObjectsD;K;6;CP$UIDd;2;95E;K;47;CPArrayControllerAlwaysUsesMultipleValuesMarkerD;K;6;CP$UIDd;3;107E;K;47;CPArrayControllerAutomaticallyRearrangesObjectsD;K;6;CP$UIDd;3;107E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;E;E;S;8;delegateS;9;theWindowS;20;value: selection.urlS;5;valueS;13;selection.urlD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;10;CP.objectsD;E;E;S;22;value: selection.imageS;15;selection.imageD;K;6;$classD;K;6;CP$UIDd;2;59E;K;10;CP.objectsD;E;E;S;23;valueURL: selection.urlS;8;valueURLD;K;6;$classD;K;6;CP$UIDd;2;59E;K;10;CP.objectsD;E;E;S;38;value: arrangedObjects.image.classNameS;31;arrangedObjects.image.classNameD;K;6;$classD;K;6;CP$UIDd;2;59E;K;10;CP.objectsD;E;E;S;26;value: arrangedObjects.urlS;19;arrangedObjects.urlD;K;6;$classD;K;6;CP$UIDd;2;59E;K;10;CP.objectsD;E;E;S;21;contentArray: contentS;12;contentArrayS;7;contentD;K;6;$classD;K;6;CP$UIDd;2;59E;K;10;CP.objectsD;E;E;S;32;{10000000000000, 10000000000000}S;8;CPWindowS;24;{{335, 268}, {794, 370}}d;1;7S;6;Windowd;1;0S;20;{{0, 0}, {794, 370}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;42E;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;E;E;S;6;normalS;22;{{20, 29}, {381, 143}}S;20;{{0, 0}, {381, 143}}D;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;40E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;96E;E;E;d;2;36S;10;scrollviewD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;91E;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;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;157E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;158E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;159E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;122E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;160E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;32E;E;D;K;6;$classD;K;6;CP$UIDd;2;91E;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;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;161E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;162E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;163E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;122E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;160E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;39E;E;d;2;10T;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;164E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;164E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;E;d;1;2S;20;{{0, 0}, {430, 125}}D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;165E;E;S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;2;99E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;166E;E;d;1;4d;2;23S;6;{3, 2}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;35E;E;E;F;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;108E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;82E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;167E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;168E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;169E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;E;d;3;167d;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;113E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;164E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;164E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;170E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;171E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;16;$atext-alignmentD;K;6;CP$UIDd;2;82E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;172E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;146E;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;164E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;164E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;139E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;173E;K;6;$afontD;K;6;CP$UIDd;3;175E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;20;$avertical-alignmentD;K;6;CP$UIDd;2;97E;K;11;$aalignmentD;K;6;CP$UIDd;2;82E;K;15;$acontent-insetD;K;6;CP$UIDd;3;177E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;151E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;143E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;1;0E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;82E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;151E;E;d;1;3d;3;257D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;164E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;164E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;178E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;171E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;K;16;$atext-alignmentD;K;6;CP$UIDd;2;82E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;179E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;146E;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;164E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;164E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;139E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;173E;K;6;$afontD;K;6;CP$UIDd;3;180E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;20;$avertical-alignmentD;K;6;CP$UIDd;2;97E;K;11;$aalignmentD;K;6;CP$UIDd;2;82E;K;15;$acontent-insetD;K;6;CP$UIDd;3;181E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;151E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;143E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;1;0E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;82E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;151E;E;S;19;{{1, 1}, {379, 15}}S;19;{{0, 0}, {379, 15}}d;1;8S;8;scrollerS;29;_horizontalScrollerDidScroll:f;18;0.8813953488372093S;19;{{0, 0}, {430, 23}}S;14;tableHeaderRowS;22;{{224, 24}, {15, 102}}S;19;{{0, 0}, {15, 102}}d;11;-2147483648S;17;disabled+verticald;2;37S;27;_verticalScrollerDidScroll:f;18;0.1947367936372757S;23;{{421, 26}, {201, 149}}S;20;{{0, 0}, {201, 149}}S;23;{{637, 29}, {149, 131}}S;20;{{0, 0}, {149, 131}}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;140E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;182E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;183E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;107E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;107E;E;S;27;Editable -CPValueURLBinding.d;4;3072S;24;{{421, 188}, {201, 149}}S;24;{{637, 191}, {149, 131}}D;K;6;$classD;K;6;CP$UIDd;3;140E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;182E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;183E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;107E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;107E;E;S;24;Editable -CPValueBinding.S;22;{{14, 257}, {389, 29}}S;19;{{0, 0}, {389, 29}}S;19;bezeled+placeholderS;0;S;22;{{17, 206}, {387, 51}}S;19;{{0, 0}, {387, 51}}S;85;Image URL selection -Change to 'Resources/value.jpg' or an absolute url and hit enter.S;13;AppControllerS;19;CPMutableDictionaryS;20;{{1, 1}, {379, 125}}S;20;{{0, 0}, {379, 125}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;32E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;184E;E;S;21;{{1, 126}, {379, 17}}S;19;{{0, 0}, {379, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;39E;E;E;S;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;185E;E;E;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;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;185E;E;E;S;20;{{224, 0}, {16, 23}}S;18;{{0, 0}, {16, 23}}S;10;cornerviewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;188E;E;E;S;12;columnHeaderS;9;Image URLS;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;174E;K;4;nameD;K;6;CP$UIDd;3;189E;K;12;defaultValueD;K;6;CP$UIDd;3;146E;K;6;valuesD;K;6;CP$UIDd;3;190E;E;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;176E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;191E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;192E;E;E;S;7;CPImageD;K;6;$classD;K;6;CP$UIDd;3;174E;K;4;nameD;K;6;CP$UIDd;3;189E;K;12;defaultValueD;K;6;CP$UIDd;3;146E;K;6;valuesD;K;6;CP$UIDd;3;193E;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;191E;E;S;17;Arial, sans-serifd;2;12D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;185E;E;E;d;1;1f;3;0.5D;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;187E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;114E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;164E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;164E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;114E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;194E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;E;S;4;fontD;K;6;$classD;K;6;CP$UIDd;2;59E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;195E;K;6;normalD;K;6;CP$UIDd;3;146E;E;E;S;39;{"top":0,"right":5,"bottom":0,"left":5}D;K;6;$classD;K;6;CP$UIDd;3;187E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;118E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;164E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;164E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;118E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;194E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;85E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;195E;K;6;normalD;K;6;CP$UIDd;3;146E;E;E;d;2;18D;K;6;$classD;K;6;CP$UIDd;3;140E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;182E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;183E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;95E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;107E;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;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;2;34E;D;K;6;CP$UIDd;2;36E;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;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;45E;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;51E;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;53E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;56E;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;34E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;53E;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;57E;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;58E;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;54E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;59E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;54E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;28E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;60E;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;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;38E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;56E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;61E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;62E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;63E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;65E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;51E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;56E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;66E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;67E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;68E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;69E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;56E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;70E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;62E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;71E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;53E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;56E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;73E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;62E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;74E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;75E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;45E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;56E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;76E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;77E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;71E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;78E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;37E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;56E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;79E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;62E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;80E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;36E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;56E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;62E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;83E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;56E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;54E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;85E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;86E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;87E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;88E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;57E;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;89E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;90E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;91E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;92E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;93E;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;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;95E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;95E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;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;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;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;98E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;99E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;100E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;102E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;104E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;105E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;43E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;40E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;106E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;106E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;106E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;106E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;107E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;107E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;107E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;108E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;109E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;2;94E;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;33E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;104E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;110E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;110E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;104E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;112E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;12;$agrid-colorD;K;6;CP$UIDd;3;114E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;115E;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;116E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;117E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;2;94E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;115E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;107E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;107E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;107E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;107E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;107E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;118E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;114E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;2;94E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;119E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;121E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;42E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;122E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;123E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;124E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;126E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;127E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;128E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;119E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;107E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;129E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;123E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;124E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;130E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;131E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;128E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;119E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;119E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;132E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;106E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;133E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;134E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;135E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;128E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;119E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;107E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;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;39E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;32E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;136E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;137E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;32E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;138E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;139E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;140E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;141E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;32E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;142E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;115E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;94E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;143E;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;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;105E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;144E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;144E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;105E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;145E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;34E;K;33;CPTableHeaderViewDrawsColumnLinesD;K;6;CP$UIDd;3;107E;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;32E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;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;32E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;138E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;139E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;140E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;148E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;149E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;32E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;150E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;115E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;2;94E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;151E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPImageViewK;8;$classesA;S;11;CPImageViewS;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;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;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;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;128E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;115E;K;23;CPImageViewHasShadowKeyD;K;6;CP$UIDd;1;0E;K;28;CPImageViewImageAlignmentKeyD;K;6;CP$UIDd;2;94E;K;24;CPImageViewIsEditableKeyD;K;6;CP$UIDd;3;107E;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;46E;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;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;154E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;155E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;6;$afontD;K;6;CP$UIDd;3;158E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;3;115E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;107E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;159E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;160E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;119E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;119E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;119E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;94E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;115E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;46E;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;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;161E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;155E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;6;$afontD;K;6;CP$UIDd;3;162E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;3;115E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;107E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;163E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;160E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;119E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;119E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;119E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;94E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;115E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;46E;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;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;164E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;165E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;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;109E;K;11;$aalignmentD;K;6;CP$UIDd;3;115E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;107E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;168E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;160E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;107E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;107E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;107E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;112E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;109E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;115E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;46E;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;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;169E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;170E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;6;$afontD;K;6;CP$UIDd;3;158E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;3;115E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;107E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;171E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;160E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;119E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;119E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;119E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;94E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;115E;K;31;CPTextFieldPlaceholderStringKeyD;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;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;172E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;153E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;128E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;115E;K;23;CPImageViewHasShadowKeyD;K;6;CP$UIDd;1;0E;K;28;CPImageViewImageAlignmentKeyD;K;6;CP$UIDd;2;94E;K;24;CPImageViewIsEditableKeyD;K;6;CP$UIDd;3;107E;E;D;K;6;$classD;K;6;CP$UIDd;2;46E;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;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;173E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;155E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;6;$afontD;K;6;CP$UIDd;3;167E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;3;115E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;107E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;174E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;160E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;119E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;119E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;119E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;94E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;115E;K;31;CPTextFieldPlaceholderStringKeyD;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;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;175E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;153E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;128E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;94E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;115E;K;23;CPImageViewHasShadowKeyD;K;6;CP$UIDd;1;0E;K;28;CPImageViewImageAlignmentKeyD;K;6;CP$UIDd;2;94E;K;24;CPImageViewIsEditableKeyD;K;6;CP$UIDd;3;107E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;176E;E;D;K;10;$classnameS;17;CPArrayControllerK;8;$classesA;S;17;CPArrayControllerS;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;177E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;107E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;119E;K;37;CPArrayControllerAvoidsEmptySelectionD;K;6;CP$UIDd;3;107E;K;49;CPArrayControllerClearsFilterPredicateOnInsertionD;K;6;CP$UIDd;3;107E;K;41;CPArrayControllerFilterRestrictsInsertionD;K;6;CP$UIDd;3;107E;K;35;CPArrayControllerPreservesSelectionD;K;6;CP$UIDd;3;107E;K;39;CPArrayControllerSelectsInsertedObjectsD;K;6;CP$UIDd;3;107E;K;47;CPArrayControllerAlwaysUsesMultipleValuesMarkerD;K;6;CP$UIDd;3;119E;K;47;CPArrayControllerAutomaticallyRearrangesObjectsD;K;6;CP$UIDd;3;119E;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;theWindowS;37;value: arrangedObjects.data.classNameS;5;valueS;30;arrangedObjects.data.classNameD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;64E;K;10;CP.objectsD;E;E;S;20;data: selection.dataS;4;dataS;14;selection.dataD;K;6;$classD;K;6;CP$UIDd;2;64E;K;10;CP.objectsD;E;E;S;20;value: selection.urlS;13;selection.urlD;K;6;$classD;K;6;CP$UIDd;2;64E;K;10;CP.objectsD;E;E;S;22;value: selection.imageS;15;selection.imageD;K;6;$classD;K;6;CP$UIDd;2;64E;K;10;CP.objectsD;E;E;S;23;valueURL: selection.urlS;8;valueURLD;K;6;$classD;K;6;CP$UIDd;2;64E;K;10;CP.objectsD;E;E;S;38;value: arrangedObjects.image.classNameS;31;arrangedObjects.image.classNameD;K;6;$classD;K;6;CP$UIDd;2;64E;K;10;CP.objectsD;E;E;S;26;value: arrangedObjects.urlS;19;arrangedObjects.urlD;K;6;$classD;K;6;CP$UIDd;2;64E;K;10;CP.objectsD;E;E;S;21;contentArray: contentS;12;contentArrayS;7;contentD;K;6;$classD;K;6;CP$UIDd;2;64E;K;10;CP.objectsD;E;E;S;32;{10000000000000, 10000000000000}S;8;CPWindowS;23;{{335, 83}, {803, 555}}d;1;7S;6;Windowd;1;0S;20;{{0, 0}, {803, 555}}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;45E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;53E;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;E;E;S;6;normalS;22;{{20, 29}, {348, 143}}S;20;{{0, 0}, {348, 143}}D;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;2;43E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;108E;E;E;d;2;36S;10;scrollviewD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;103E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;32E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;178E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;110E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;179E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;32E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;138E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;180E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;181E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;34E;E;D;K;6;$classD;K;6;CP$UIDd;3;103E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;32E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;182E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;183E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;184E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;32E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;138E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;180E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;185E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;42E;E;d;2;10T;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;32E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;186E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;186E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;32E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;E;d;1;2S;20;{{0, 0}, {346, 125}}D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;111E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;187E;E;S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;3;111E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;188E;E;d;1;4d;2;23S;6;{3, 2}D;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;37E;D;K;6;CP$UIDd;2;38E;E;E;F;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;120E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;94E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;189E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;190E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;191E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;192E;E;d;3;167d;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;125E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;186E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;186E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;193E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;194E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;16;$atext-alignmentD;K;6;CP$UIDd;2;94E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;195E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;46E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;186E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;186E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;196E;K;6;$afontD;K;6;CP$UIDd;3;198E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;115E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;109E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;15;$acontent-insetD;K;6;CP$UIDd;3;200E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;168E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;160E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;1;0E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;115E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;94E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;168E;E;d;1;3d;2;88D;K;6;$classD;K;6;CP$UIDd;3;125E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;186E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;186E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;201E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;194E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;16;$atext-alignmentD;K;6;CP$UIDd;2;94E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;202E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;46E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;186E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;186E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;196E;K;6;$afontD;K;6;CP$UIDd;3;203E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;115E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;109E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;15;$acontent-insetD;K;6;CP$UIDd;3;204E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;168E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;160E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;1;0E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;115E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;94E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;168E;E;d;2;82f;22;3.4028234663852886e+38D;K;6;$classD;K;6;CP$UIDd;3;125E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;186E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;186E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;205E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;194E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;K;16;$atext-alignmentD;K;6;CP$UIDd;2;94E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;206E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;46E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;186E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;186E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;196E;K;6;$afontD;K;6;CP$UIDd;3;207E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;115E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;109E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;15;$acontent-insetD;K;6;CP$UIDd;3;208E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;168E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;160E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;1;0E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;115E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;94E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;168E;E;S;19;{{1, 1}, {346, 15}}S;19;{{0, 0}, {346, 15}}d;1;8d;11;-2147483648S;8;scrollerS;8;disabledS;29;_horizontalScrollerDidScroll:f;18;0.9942528735632183S;19;{{0, 0}, {346, 23}}S;14;tableHeaderRowS;22;{{224, 24}, {15, 102}}S;19;{{0, 0}, {15, 102}}S;17;disabled+verticald;2;37S;27;_verticalScrollerDidScroll:f;18;0.1947367936372757S;23;{{421, 26}, {201, 149}}S;20;{{0, 0}, {201, 149}}S;23;{{637, 29}, {149, 131}}S;20;{{0, 0}, {149, 131}}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;157E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;209E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;210E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;119E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;119E;E;S;27;Editable +CPValueURLBinding.d;4;3072S;24;{{637, 191}, {149, 131}}D;K;6;$classD;K;6;CP$UIDd;3;157E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;209E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;210E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;119E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;119E;E;S;24;Editable +CPValueBinding.S;22;{{14, 257}, {389, 29}}S;19;{{0, 0}, {389, 29}}S;19;bezeled+placeholderD;K;6;$classD;K;6;CP$UIDd;3;157E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;209E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;210E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;119E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;119E;E;S;0;S;22;{{17, 206}, {387, 51}}S;19;{{0, 0}, {387, 51}}S;85;Image URL selection +Change to 'Resources/value.jpg' or an absolute url and hit enter.S;24;{{421, 353}, {201, 149}}S;24;{{637, 356}, {149, 131}}S;23;Editable +CPDataBinding.S;24;{{421, 188}, {201, 149}}S;13;AppControllerS;19;CPMutableDictionaryS;20;{{1, 1}, {346, 125}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;111E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;211E;E;S;6;_NS:11S;21;{{1, 126}, {346, 17}}S;19;{{0, 0}, {346, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;E;E;S;6;_NS:15S;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;212E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;212E;E;E;S;20;{{224, 0}, {16, 23}}S;18;{{0, 0}, {16, 23}}S;10;cornerviewS;6;_NS:19D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;215E;E;E;S;12;columnHeaderS;9;Image URLS;11;placeholderD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;197E;K;4;nameD;K;6;CP$UIDd;3;216E;K;12;defaultValueD;K;6;CP$UIDd;3;167E;K;6;valuesD;K;6;CP$UIDd;3;217E;E;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;199E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;218E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;219E;E;E;S;7;CPImageD;K;6;$classD;K;6;CP$UIDd;3;197E;K;4;nameD;K;6;CP$UIDd;3;216E;K;12;defaultValueD;K;6;CP$UIDd;3;167E;K;6;valuesD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;218E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;221E;E;E;S;6;CPDataD;K;6;$classD;K;6;CP$UIDd;3;197E;K;4;nameD;K;6;CP$UIDd;3;216E;K;12;defaultValueD;K;6;CP$UIDd;3;167E;K;6;valuesD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;218E;E;S;17;Arial, sans-serifd;2;12D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;212E;E;E;d;1;1f;3;0.5D;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;214E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;126E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;186E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;186E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;126E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;223E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;E;S;4;fontD;K;6;$classD;K;6;CP$UIDd;2;64E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;224E;K;6;normalD;K;6;CP$UIDd;3;167E;E;E;S;39;{"top":0,"right":5,"bottom":0,"left":5}D;K;6;$classD;K;6;CP$UIDd;3;214E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;130E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;186E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;186E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;130E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;223E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;E;D;K;6;$classD;K;6;CP$UIDd;2;64E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;224E;K;6;normalD;K;6;CP$UIDd;3;167E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;214E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;186E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;186E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;223E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;97E;E;D;K;6;$classD;K;6;CP$UIDd;2;64E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;224E;K;6;normalD;K;6;CP$UIDd;3;167E;E;E;d;2;18D;K;6;$classD;K;6;CP$UIDd;3;157E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;209E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;210E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;107E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;119E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPImageViewbindingsTest/Resources/MainMenu.xib b/Tests/Manual/CPImageViewbindingsTest/Resources/MainMenu.xib index 01a07c8b2..18302c591 100644 --- a/Tests/Manual/CPImageViewbindingsTest/Resources/MainMenu.xib +++ b/Tests/Manual/CPImageViewbindingsTest/Resources/MainMenu.xib @@ -3,28 +3,28 @@ 1050 11D50 - 2427 + 2488 1138.32 568.00 com.apple.InterfaceBuilder.CocoaPlugin - 2427 + 2488 YES - NSScroller NSArrayController - NSTableHeaderView - NSScrollView - NSTextFieldCell - NSImageView - NSImageCell - NSTableView NSCustomObject + NSImageCell + NSImageView + NSScrollView + NSScroller + NSTableColumn + NSTableHeaderView + NSTableView + NSTextField + NSTextFieldCell NSView NSWindowTemplate - NSTableColumn - NSTextField YES @@ -48,7 +48,7 @@ 7 2 - {{335, 390}, {794, 370}} + {{335, 390}, {803, 555}} 1946157056 Window NSWindow @@ -72,7 +72,7 @@ 256 - {430, 125} + {346, 125} @@ -81,7 +81,7 @@ 256 - {430, 17} + {346, 17} @@ -156,7 +156,7 @@ - 257 + 88 40 1000 @@ -180,13 +180,44 @@ YES + + 82 + 10 + 3.4028234663852886e+38 + + 75628096 + 2048 + CPData + + + 6 + System + headerColor + + 3 + MQA + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + 3 2 - - 3 - MQA - + 6 System @@ -197,7 +228,7 @@ 17 - -566231040 + -564133888 4 @@ -208,7 +239,7 @@ 1 - {{1, 17}, {379, 125}} + {{1, 17}, {346, 125}} @@ -232,17 +263,16 @@ - 256 - {{1, 127}, {379, 15}} + -2147483392 + {{1, 127}, {346, 15}} _NS:60 - YES 1 _doScroller: - 0.88139534883720927 + 0.99425287356321834 @@ -251,7 +281,7 @@ YES - {{1, 0}, {379, 17}} + {{1, 0}, {346, 17}} @@ -261,12 +291,12 @@ 4 - {{20, 198}, {381, 143}} + {{20, 383}, {348, 143}} _NS:9 - 133810 + 133682 @@ -288,7 +318,7 @@ NeXT TIFF v4.0 pasteboard type - {{421, 195}, {201, 149}} + {{421, 380}, {201, 149}} @@ -308,7 +338,7 @@ 268 - {{637, 210}, {149, 131}} + {{637, 395}, {149, 131}} @@ -350,7 +380,7 @@ NeXT TIFF v4.0 pasteboard type - {{421, 33}, {201, 149}} + {{421, 218}, {201, 149}} @@ -370,10 +400,10 @@ 268 - {{637, 48}, {149, 131}} + {{637, 233}, {149, 131}} - + _NS:9 {250, 750} YES @@ -391,7 +421,7 @@ 268 - {{20, 87}, {381, 22}} + {{20, 272}, {381, 22}} @@ -422,7 +452,7 @@ 268 - {{17, 113}, {387, 51}} + {{17, 298}, {387, 51}} @@ -440,8 +470,61 @@ c29sdXRlIHVybCBhbmQgaGl0IGVudGVyLg + + + 268 + + YES + + YES + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + + {{421, 53}, {201, 149}} + + + + _NS:9 + YES + + 270532608 + 0 + _NS:9 + 0 + 3 + 2 + NO + + YES + + + + 268 + {{637, 68}, {149, 131}} + + + + _NS:9 + {250, 750} + YES + + 67108864 + 272629760 + RWRpdGFibGUKQ1BEYXRhQmluZGluZy4 + + _NS:9 + + + + + - {794, 370} + {803, 555} @@ -578,6 +661,38 @@ c29sdXRlIHVybCBhbmQgaGl0IGVudGVyLg 511 + + + data: selection.data + + + + + + data: selection.data + data + selection.data + 2 + + + 518 + + + + value: arrangedObjects.data.className + + + + + + value: arrangedObjects.data.className + value + arrangedObjects.data.className + 2 + + + 522 + @@ -625,10 +740,12 @@ c29sdXRlIHVybCBhbmQgaGl0IGVudGVyLg - + + + @@ -661,6 +778,7 @@ c29sdXRlIHVybCBhbmQgaGl0IGVudGVyLg YES + @@ -791,6 +909,48 @@ c29sdXRlIHVybCBhbmQgaGl0IGVudGVyLg + + 512 + + + YES + + + + + + 513 + + + YES + + + + + + 514 + + + + + 515 + + + + + 519 + + + YES + + + + + + 520 + + + @@ -827,6 +987,12 @@ c29sdXRlIHVybCBhbmQgaGl0IGVudGVyLg 507.IBPluginDependency 508.IBPluginDependency 509.IBPluginDependency + 512.IBPluginDependency + 513.IBPluginDependency + 514.IBPluginDependency + 515.IBPluginDependency + 519.IBPluginDependency + 520.IBPluginDependency YES @@ -860,6 +1026,12 @@ c29sdXRlIHVybCBhbmQgaGl0IGVudGVyLg 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 @@ -874,7 +1046,7 @@ c29sdXRlIHVybCBhbmQgaGl0IGVudGVyLg - 511 + 522 diff --git a/Tests/Manual/CPImageViewbindingsTest/Resources/images.plist b/Tests/Manual/CPImageViewbindingsTest/Resources/images.plist index 783ab3d40..e9a78fe12 100644 --- a/Tests/Manual/CPImageViewbindingsTest/Resources/images.plist +++ b/Tests/Manual/CPImageViewbindingsTest/Resources/images.plist @@ -6,5 +6,9 @@ url Resources/valueURL.jpg + + data + TU0AKgACgaL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///v///v/////////////////////////////////////////////+///+///+/v7+/v7+/v7+/v7+/v7+/vz+/v7+/v7////////////+///+///+///+///+///+///////////////////////////////////////////+///////+///////////////////////////////////////////////+///////+///////+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///+///+///+//////////////3///3///3///3///3///3//////////////v///v3//v3//v3///3//v///v///vz//vz///3///3//vz9/f3+/v79/v/8///8///9/v/9//7+/vz///3///3+//r//vz///3+/vz////+///8///7///7///5///4///8///+//3////+/v7//f///f///f/8/P78/P78/f/9/v/7///9//77//79//z9//z///3///3+/vz+/vz+/v7////+///+///+///8///9/v/7///+///8///+///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///+///+///+//////////////3///3///3///3//vz//vz+/v7//////////////v////3//v///f7///////////////3//vz///3///3///3////+///8///8///8///9//78/v38/v37/fr7+/n6+vj7+/n6+vj6+vj5+/r6/Pv4/P35/f74/v76/v/7+/v+/fv//f7//f7//f7//v/////////9/v/8///8///8///+///+//3///3///39/fv+/vz///3///3////////+/v78/v3+///+///+///+///9//79//79//7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///+//////////////3///3///3///3//vz///3////////////////+///9/v/+///+///9/v/7///8///8///9/v/9/v////////3///3+/vz6+vj2+Pf09vXy9vft8fLq7u/p7e7p7e7q7u/s7e/s7u3t7e3v7+3u7uzv7urv7urx7uny7+rz8Ov18Oz07+z28PD38fH28vH28vH19fP09vXy9/P5//35//v7//7+//3///3//vv//vv//f3///3///////////////3///3///3///3///3///3///3///3///3///3//vv///v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///+//////////////3///3///3///3//vz///3////////////////8/f/8/f/8/f/7///8///7///7///7///6/v/3+/7x9fbw9PPw8vHt7+7p6+rm6Ofl5+bi5ufh5ebe4+bc4eTd4uXf5Ofi5uni5uni5ufk5efk5uXl5ePl5ODn5N/p5N7r5N7s5d/r5eXs5ujt5+ns6Onq6Onq6urq7Ovo7Ovp7+3r8e/u9PL09vX5+Pb/+/r//P3//f3////+///+///9//79//7+/vz+/vz///3///3///3//v3///3//v3//v3//vv///3//v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3///3///3///3////////+/v79/f38/f/9/v/+///+///////+/vz7/fz2+vnz9/jv8/bq7/Ln7O/k6ezj6eni5ufi5ufi5ufi5ufg5OXe4uPd4eLa3t/Y3N/X3N/Z3uLY4OPX3+LW3uHT297W297X29zZ29ra2tja2dXc2NXa2dfb29vb3N7c3d/e3+Hf4OLg4ePg5OXh5ebh5+fi6Ojk6urn6+zr7O7v7/Hy8PPz8/X19vj2+vv6/v/8///8///+///9//79/f3//////////f7+/v7//v/////////+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3///3///3///3+/v7////////+///+///+///9/v/9//75+ff19fPv8e7p7ezn6+zm6uvk6ezj6Ovm7vDk7O7j6Ovh5unh5ebe4uPa3t3Y2tnT1dLR09LP0dDN0dLN0tXP1NfL09bJ0dTI0NPJ0dTL0NPM0NHP0dDO0M/Pz83O0M/N0dLM0tLN0tXP09TR1dbT1NbV1tjV2dra3t/b3+Dc4OHd4eLe4uPi4+Xk5enm5+nq7u/s8vLw9vb1+fr4/P36/v3+///+///////////////////////+///9/v/9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3///3///3///3////////////////8/v39//7+///+///9/v/2+vvx9fbu8vPq7Ovo6unk6Ofl6ejn6+zo7u7p7vHp7vHe5ujb4+XY3t7U2NnS1NPQ0M7MzcjKycXNzMjMzcjMzcjLzMfMzsvNz8zKzs3Hy8rIzs7Izs7Jzc7JzczLzczLzczKzMnIzcnIzszFzsvHzc3JzczMzs3MzMzNzc3Q0NDOzs7O0M/Q0tHT1dTX2djb3dzf4OLh4+Lh5eTj5+bl6ejq7Ovt7+7y9PP4+Pj7+/v7/P79/v/+///+///+///8///8///8///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/vz+/vz+/vz+/vz+/v7+/v7+/v79//7+///+///6+/319vju8vPp7e7m6uvk6Onn6+rm6unn6ejl6ejj5+bf4+TY3eDU2dzL09XI0NLFys3Bx8fDxMbExsPIx8XJyMTMzcjMzsnMzsnLzcjNzsnNz8rLzcjIysXKzMnJy8jIysfHycbGyMXGyMXGyMXEycXDycfAycbCyMbFysbHycbIycTJysXMzcjMzcjLzcjLzcjLzcjNzcvPz83R0c/T09HZ29jb3dre4N3h4+Dk5uPn6ebr6+nu7u719fX5+fn+/v/////9/v/8/f/9/v/+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/vz///3////+/v78/v39//7+///+///6+/3v8/Tq7u/n6+zk6Onk6Onn6+zp7e7l5+bh4+Dd3dvX2dbQ0s/Nz87IzM3Cx8q/x8rBys/Bys/AyszEyc3Fy8vJyszM0M/M0tLHz8/K09DL0c/Kz8vNz8rMz8jMzcfMzcXKy8PJysTKy8XJysXIycTGyMPHycTEycXDycXDyMTAxb/Axb/Dxr/Aw7zEx8DEx77FyL/Ex8DKy8XMy8bLyMPPysfQzMnQz8vR0s3T1M/W19Lb3Nfh4t3n6OPq6ujo6Obs6+nw7+339vT+/fv//vz+/fv//v/////////////////////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7///////////////////////////////39/fv8/Pz8/v3+///+///4+vny9PPp7e7l6erk6Onm6uvm6uvm6uvh5ebZ3d7Y2dvT1dTMzs3HycbGxsTGyMXGyMfDx8jDyMvCys3Cys3CyszEysrJy8rMzMrPzsrR0cnQ0MbV0snRz8PQyr7Syr3Ox7fMw7LIv67Hvq3Hvq/HwLDHv7LFv7PFv7PGwLTCvK7Evq7Kw7PJw7PNxrbNx7fJw7PKx7jGxLXExbfAwLTCwrjCwrrDwLvJxcLMyMXJyMTMzcjP0MvO0MvP0c7T1dLa3Nnf4d7l5ePr6+nr6ujp6OTz7+z9+fb//fr//fr///3+/v7+/v7////////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8/v3+///+///9//75+vzx9fbq7u/k6Onl6erm6uvl6erh5eba3t3X29rT19bLz9DGy8/HzNDGy87FycjHycbHyMPHyMPJycfIysfHycbKzMnNzsnOzsbSzsXVzcLXyrrYxKvSu5zLspS+o4W1mny5nHy3mnq0l3exlHSvlHaxlnmymXuwm36vm4Cvm4KxnH+1m3q2mnW6nHi5nXi8nX7BpIbBp4zDrZXHtZ/HuqfDvKzDv7PAwLi9v7rBw8C/xMDDxcLHycTKzMnHzMjHy8rJzczK0NDK0NDU2Nnd4eLl5+bn5+Xo5+Ps6OX18Oz++vf//vz////////9/f39/f3////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////////9//7+///8/v3z9/bq7u/k6Onj5+jj5+jh5ebf4+Td4eLV2djM0M/Kzs3Lz87Izs7EzdLDzNHAyMvBxcTIx8PKx8DMyL3RysDTzcHSyr/Tyb3SxrbLvKfCsJi6pIy2mXmpglmgdEeXaz6PZDmRZjubcEWhd02jfFOuiGGtimSvi2evjmutj2urjmyqjW2sjGawi16tg1GofEugckGbaz2fbkWkdEyofFeqg2Kwj3CymH24pIu6q5a5sJ6/uKi/uavEwLTIxLnIxbzExLzExcDGyMXIzMvIzs7L0NPM0tLS1tfd397n5+Xo6eTp6OTt7Oj09PL5+fn+/v7////+/v7+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7////////////////+///3+Prr7/Dk6Onj5+jk6urj6Ovh5una4ODS2NjO0tHM0M/JzczIzcnKzMnFy8vCzdO9ytC+xsjHx8XOysHQx7jOvq7MuqTGsJnAqI63nH6ukGyohV2mfFKkeEmlc0CeZS6WWSKXXiehajSrd0Wzg1O3i168kmjEnXTCn3nDn3vCoH3An3y8nnq5m3m5l3G4k1+xhk+ufUWiazWYWyWZVyOeWCehWyqcWCmgYjOiaTupdkesgVSwil24lWu3mXO+porBr5nJuqfLv6/JwbTGwrnDxL7BxsLDycnGzs7Jz8/K0NDW2tvi5uXn6ebn6ebq6urq6urx8fH+/v7////9/f37+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pzy8/Xt7vDk6Oni5ufj6enj6enc4eTV2t3U2trM0tLJzczKzs3IzcnHzMjKzMnKzMnHy8rIysfNysHPxbnGtaG8pIyzmHuukG6riWSqhF2feE2Zbz+dbjqjbzaqcje0eDysai6lYyevcTi/hk/JlWPLnG7Kn3XNp4DMqoXLqofMq4rMq4rNrIvMq4rHpoPEoXnGnmu+kVi6h1CwdT2kYSqjWiOmViGlVB2kUxyiVR2gVyClYymoazKncDeqdz6oeUWofVKpg16zkW7BpIbKtJzNvqvKwbLGw7rCw73Gy8fIzMvFy8nHzcvO0tHY3dnj5eLp6enq6urs7Ozw8PD4+Pj+/v7////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f329vbx8fHm5+nl6erl6ezi5unc4eTW297P1NfL0NPK0NDHzc3JzczKzs3HzMjGy8fIysXKx8DOwrLHtZ/FrZO6m3yjf1ubcUmfc0agcUOtf06zhVOxgk6vfka0gUizfUGxdzi3ez2tbzSrbje6gE7NmWrTpnzVrYnTspHXuZ3Rt5zRt57QtpvSt5rXuJvYt5jUsZHRq4TQp3nGmGTDj127gk2ycDyxaTavYiypWSSrXCSlWCCgVyCrZi2vcTiscTmpcDinbDSiZCmdXyacYy6mc0SziWG+nXzJsZfQwa7KwrXGwrfCwbzExsHIysXIysfLzcjS1NHh4eHo6Ojq6urm5ubq6ur39/f+/v79/f3///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3//v/////+///+///+//////3///3+///9//79/f/+/v/9/f339/fs7u3k5uXn6ejm5+ng5OXY3N3P1NfL0dHK0NDL0dHLz9DLzczMzMrPzMfOysHNxbjEuKi6qJK5mn2qhGCjeVOecUeXZDWeajiveEKxeEGyeUK5gkq0e0Ovdj63f0S2fkG4fj/EikvDiEzDilXRnnHdsIneuJTZupvXvJ/awqjdxa3bw6vawKnbwKPewJ7gvZfetI7brILQnm3Gk17Kkl/MkFzIiVTIhVHBe0e2bzm2cTqsZzCjYiyubzq4e0WyeUStc0GrbjepYiSnXRykXiKjYiyfYzGeaz6sglq5m3nLtpvNvqnKwrXEwLfEw77HyMPKzMfOz8rR0M7X1tTj4uDr6+nq6urm6Ofw8PD9/f3//v///v///v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3//Pn//v3+///7///7///7//7+//r+//r8///7///+///+/f/29Pfp6eni5ufl6+nm6Ofb29vT1dTP09LJz8/HzcvKzs3M0M/LzczMyMfQxsTVxLrUu6fBooWlf1iZbUCSXzSia0Kwd0qnbkCmbDqwdECxcjywbzmxcDivbjavbDW4dz/DhUy9gki7g0bIkFPMlVXLmGHarYbgvJzfwqTcxabcxabjyqzjxavnx67pybDlxKPgvpHlu4nhqXbLjFe/fkbFhErJiFDKjFPNjljMj1nFiVXAhlTBiVa4g1G9h1jAjFy9iFy/jF+6h1yncUKmZS2jXSKiWSKrXyutZC+qZS6iZS6dajWjfU64nHfKuKDOwrTKw73Dwr7Exb/KycXLx8TQy8jX1M/e3dnl5+To7Ovq6+3p6ev/+P3/+////v/+/v79/v/+/////v///f////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3//f3//v/8///5/v/8///+//3///r7/Pb5/fz8///8///x8vbo6Orn5+fk6Onf5eXZ2tzV1dXLz87Fy8nEysjIzsrL0MzJysXLxsDRw7rPt6q9nYapfl6XZj2UXCugYi+eXi6vbT28ekiwcTypaDKtbDSxbDO2cDW1bTO5cTe4cDa7dTrEgkjHhkzGik7KklXJklLNmmPds43kwqbgyKzey63fzK7p0bXszLPoxKrnwqXmwJnetoPVpGrKiU+7dDa6cDG/dTa/eDq/ez7DgUfEhU/Dh1HCiVTIk1/CjVnEkF7Ll2fOmmvUn3PPmnC+iFq6fU6yc0CrZzapYS6sYSqrYCepYSalZSicYyyZazqhfli6n4TOu6rPw7fHwLbEwbrMyMfJxcTIx8LQ0cnZ3tfh5uLo6evs6/Dw6+/69vf//v////39//79/v///v///v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7///7///+//3///v///r/+/j+///5/v/v9Pfj6Ovj5+jo6uni4+XW19vNztPHys/IzM3K0M7IzsrDysPFyMHKxrvNvKzBo4uwhGGfaD+aWy+aWiybWy+jYzWuaDeyaje0bDmrZi+pYiquaC2zazC6cDO1aS2/cTPBczW/czXAeTvDfT/Jh0rTllfJj1DPm2Lgs4zryKro0Lbk1Lrj07np1bzszrTrxqnnvJnfsITRoGjCik28eDu4bi3AcS7DdC/Acy+7cC+7cTK7dTm7dju8ej67ekC5e0C9f0bChEvIiVPRklzYlmLSlGXWnHTNmHDEjmC5f02wczyqaTGpYiyoXyipYCmsZy6kZzCgbjuvimDGq43Swa/Qx8DCwMG+wsPEy8PI0MPJz8XY29To6evo6e3m5+nu8O/4+fT///r///v//vz9/v/+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///+///7///+//3///v///r/+/j/+/v//v/+///r8PPe5ubh6enm7Org5OXW1drPztTJzNHKz9PIzs7Cx8PGx8HPy8DLv6+/qZKriGqebkiVWCmcViOwZzS5cD2sZjWjXSyyaTSzaDG0aTC3bDO6bzW8cjW7bzG7bS3CcjPEczTFdDXGdjfDdTW9czTEfT3VkVLIi0zOl1/gr4TsyKbs17zq28Tl2cPl07vnyKzswZ/gr4TMl2PAiE28f0C8dji8cjG2ayi8cS6+czK+dDXAeTvCfEDDfkPEgkjBgEbEg0nEg0nBgEbCgUnFhEzIhVDHiFXMkmrNmHDTn3DWonDQm2fDiVe3d0ezbTy0azazazGwaiynaiufbDWid0y5mHnRuqrPxsHCwsC9w7nCyr3Jz8PP0svZ2dfj5Obp7+/m7Orr7ej19vD//vn///v+///7///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///6///7//////v///j//vr//fr//P/+/f/w8fPj6ene5+Ti6+bd5uPQ1tbLzNHMz9THz8/G0c3HzcvJyMTPwrnPtqK8lXalcUmSVSaXVCCfVySnWymxZTO2aTWyZS2zZy26bjS8cDbAdDjEeDzCdji/cTHAcDHDcjHLdzfCbi6+airDby/EczK8bi66by7AeTnCgEPKj1XdqXrrxaDt17/p3Mvl2cni0LrmxaberobMkmC+gEW7eTy5dTS4cTG3cTO2dDi9f0bGh1HNkFrUmGTbn2vconDepnPepnPfqHLbpG7YoWvZn23UmmjMkF7GiljBgVHAglHEiljRmGrWoXXToHXPmnLOmGzDiVmtcTugZCaqbi+vczelaTWnbECygWDIrZjTx7nJx7u8v7TEx77GycDKy8Xb3drl6erl6+vn6+rq7+v19vD///r///38/v3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///4///7//////r/+/X//fr//v/8+//v8vfj5+jm6unk6ePc49zS2NbM0dTKz9PJztHGz8rFzcLPzcHSxbXDpI+pe1qbXjKZUR+cTxmkVR2oWyWoWyWqXSewYyu6ai/GdjnBcjfCczjAcjTAcjS5ayuwYiK1ZSa7aim6Zia4ZCS5ZCS7Zye7aim6aSi3Zyi0aCq7dDbHhkzXom7pv5fo0rvm2cnk18fizLXiupfKlme4ekG6dDa4cjSzbi25dDPEhEfTmmXXo3Peqnvhrn/ms4bnt4nntovpuI3mt4nouYvouIjouIjqt4rms4bgq3/dp3jXm2fQk13KjlzIj2HGj2bFkWnNnHTZqH/XpnvIlWa0f0uqcz2ucTutbjiraDOkZziqflvBo4nUwq7PxrfDwbXCxLnKy8PO0MvV2drk6Ovs8PPo7Ovr7ej4+fT////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///7///8//3//vr/+/j//P79/P/v8/zh6O7j6enn6eTg4dvV1tHN0dDL09XK0tTEzcrGy8TKx7bJtZqzj2ueaDyaVCOhUSCjUB6oVSGnVyKoWyOpXiSzaSy8cDS/bzTCcje9bjO7bzG3ay26bjC2aCqrXR2rWxyrWhuxYCG2ZSa8aCq5aCm3Zie6aSq8bC+6bC66bjDDf0LPll7htovmzbfl1cbj0sDfwafQoXfAg022cjO7dDS9dTrBfEHQkFPco2vhsYHjuI3mu5HmupPovJfnvZflu5XkvZbmv5bnwJfrwZfpv5XnvJLmu5HnupPou5Hlt4Xls4Dirn7fpnnVmm7MkWXLkmTOmmvQn3bXp4HXpoXKmna6hV2rc0KpbjKvdTarbzujbkS3jGzTtZ3VxbXKxrvHyMLEyMfMzdHb3OHp6u/q7vHp7ezv8fD6+Pv//v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///8///8/v3//fr//fv//f/v8vfg6fDa5enn7evh497Y19PQ0czLz87Jz83Gz8rLzcLPxrTBqY2pg1yYYjSaUh+mVR6uVyKpUh2zYiuxZCyxaS+xaS64bjG+cjTAcTbFdjvBdTe/czW5bS+6bjC3aSuvYSOzYyS0ZCW3Zie4Zyi5aCm2ZSa1ZCW5aCm8bC+7ayy+bi/BejrJjVHbr4Dly7To1cbmzbfatpTAiFe8ej67dDS/eDjIg0zam2bor3jksn3luo/mwJnnwZznwZ3pw5/nw6HlwZ/lw6DmxJ/kwp3mw53nxJ7owp3owp3owJ3lvpflv5Lku43kt43ptY3ps4flrH/apHXSnm/Il27Pn3nXqYjesI/gronQnXC3g0qqbzOraDGtajaiZTivf1nStJrYyLjHxL3Hy8rMzdHNztLb2t/s7O7u7/Ho6evv7/H+/P/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///+/v///Pz//f38+//d4ubc5erk7vDj5+bX2dbS0tLQ0tHJzczJzsfLzb/OxKnJp4Gmc0aZXC+dWSiiVCOqWSSwXyexYie5bzK6dDjAej67dTqzazDAdDrKe0DCdDbAdDa/dTTBdjXAdTS9by+5ayu7ay7AcDPAcDO9bTC8bC26aiu4Zyi4Zyi8ayy9bC2+bSy8cTDLjk/TpXPfxKnr0r7lw6fUpXvCgUmzbCy9eDfSkFPfoXDnsYPnt4flu4vqw5rqx6HtyaXty6jsyanpyKfpyKnryqvuzaztzKvsy6rryqnryqnqyajoxaflw6DjwZvjwJjivJfju5fnu5jnupPktYvgsILWpnbTo3LToHHYpXblsoXruI3Xo3u9hFmlYzGwaTOxazCmZzGrfFLGqI7SyL7KzMvFycrIzM3X1tTi3t3u7O/x8PXp6u7y8/X////+/v7+/v7////////////////+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v/9+////v///P3k5efi5+ri6uzj6OvZ3dzQ0tHN0dLM0M/LzcjQ0cPKw6m7oXypdEKkXyahWCOhVSOjViKtYCq2aTG8cTe9dji9eTrBfUC+ej29dTrHfUDMgELEeTjDeDe9czK7cC+8cTDAcjK/cTG9bzG7bS+/cTO6bC67bS2/bzC9bS68ayy8ayy9bCu+aym+cC7JiUnToWzfwKPoyrLhuZXMl2W7dTnAdjXSkVHgpW3kr4XqupTqw5rqx5/ty6buzarx0K/w0bLx0rXv0bXw0rjw0rbz1bnx1rnz1bnv1Lfv0bXu0LTszrTrzK/oyqjox6Tkw6Dhv5zhvZvkvJnluZTkt47ltYfksH7frHfYpXDXo3Pdqn/hr4rirofUl2u2dECzbTG1cTShZzWmfFbAq5bMxbvHysPIzcnS0c3a1tPn4+Tx7/Ls8PHp7e73+fj+/v7////+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////f///f///v/u7u7Z29rn7Ojo6uff4eDV1tjP09bK0tXL0c/OzsTNwqy7oX6neEqjXiWoWB2lWR+lXCWwZzK5cDu7bzu9cju9cjm9dzu9eTq9eTq9eTjBejrFejnDeDfAdTS7ci64bSy7cC/EdjbIejrFdzm+cjS5bS+2aiy3bCu5bi27bSu9biy/bi29bCu/bizCdDLFgj7NmWDgvJzqyKzer4O9gUu5cjTPiEjjqGzotoPnu5jrxKfryqnt0K7w07Xv1Lfx1rvy2L/02sPz28Pz2sTz2sTz2sTz3cX13cXy3MTy2sLy2sLx2MLy2L/w07Xv0a/rzankxqDiwpzivprkvJnnuZfmtI/nsojor4Hjq3rXo3HVo3LYqX3droTmtYzhrX7IjFa1eD+2eUKmdEGlg13BsJTOyLjIycHLysXW1dHh3dro5+Ps8e3p7+3v8fD8/Pz////9/f3////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v/8+f///f/4+f3a3t3i5+Pq7Ofh4t3a2tjT1NbS1tnN09POz8nOwrK6oYOkeU6hZS+nXCKnVxqnWyGwZSy2bTa2bTi0aza3bDW/dD3AeD2+eDq5dTS3dDC2cS65cjDAeTfAeTfCezvEfT3Jf0DOhEXUik3TiUzOh0nLhUnIgkTDfT+9eDe7cTK8cTC7bS2zZSW3aCa8cS29eTLGjlHdso/pwqHZp3aydz3EfkLamFzlsnvlvI7ow6bszLPs0bbt1bny2L3x2b/y2sL028Xz3cjz3cjz3Mrz3Mrx3Mfz3snz3snz3snz3cjz3snz3cj028X02bz12Ljz1rTt0azpy6nnxKTlvp/luprpu5not4/qtYvotIXgrn3YqHjUpXnQo3ncsYfuwZfntIfMl2XBiFG1fkanfEmmhl3EtJrMxrbPzMXT0s3b2NPg39rr8Oru8+/s7u319fX9/f3////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v/++////v/n6+7Y3N3s8e3o6uXb29nV1dXQ1NXP09LS0czQx7i+pImleVKhYzKpZCucVx6fWR6vZCu7bzW1aS+xZSu7cDfBeT/GfkTGfkTAeD27dDa6dTS5djK8fTjJikfNjU/Tk1bZl1vdmF3gm2Dhn2Xhn2XenWPeoGfanGHYml3VmFnRj1LKhknBez23cDKzaSq3biq3cSnFiEfcrITovJfXpG+8hEnRkFjhpXHiuIblxJvvzbLw1L7w2MDw2sLx2b/y2sDz28Py3MXx28bx2sjy28nz3Mr03sn138r03sf03sf33sj138j13Mbz28P22772273427322bv01bnxz7PryKjmwp7lv5jlvpXovZLou5HltozhsojerYXXp3/TqH3ds4npvpvitY7NmWm9iVC1g0ame0Stj2nPvafY0MXPzsnR0szd3tjr7ufu8Ovw8O7t7e34+Pj////+/v79/f3////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7////19ffa3uHj5+jo7Ovi5+PX29rR1dTT2dnNz8rTy77KspqpfVicXzCoXyqtYCiiXSamYSqyaTK8cTe5bS+9cTPIfj/FfkDEfT/BeT68dDm8dDnEfkDIh0XOk0/aoGDbo2jepW3ip2/lqHHnqnTnqnTlqXXhqHPfqHLcpW3krXXvuH/rs3jeo2fTlVrPjVHEgEG7dTC1bSHDgj7cp3vluI/Sn2jEjVTZn23ns4Tnwpbszqrz1bvx1cDt2MPt28Xu2sLw2sPx3Mfx3Mfx3Mnw28rx3Mvz3Mrz3Mrz3cj028f13Mb33sj54Mr438n23sb03ML03ML128T128T22sL02b7x1Lbtz63jw53jwpnjwJjjvJPkuJHluJHkso3bqoLXqHzYrYPZrozgtZLktYvSnmy+ik66iU6nflDFqIjVxbbTzsjT1M/Z29jk5uHu7+r09PLr6+v09PT////////+/v7////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/vz///vm6OXc3d/q7vHk6Ovb4OPS3N3O2tjP2tbMzsPItqC1jWqgYzagVCCqWSKqWSKuYjCxaTaxajS2cDS8dzbBfDnEfjm9dzK8djG+dzXBez3IhEfRj1PWmFveomTkrHHir3jgrnvhrXvjr33lr4DmsILlsYLlsoPjs4PitILqvIryxJDxv4rms3zgqXPdomraml3Qi0jEey7BfTbTm2rjtIjNnGTEk1vir4LtwJntzabx17b1173x1cDw28bu3cnw38vx4Mzz4M/04dD04dL04dL04dL14M/z3svy3cjy3Mfy3Mf23cf438n64cv44s3x4Mzv4M3v3szw3sry3cjy3sbw28Dw17nw1rXqzKrlw57ivJfiuJLmupPouJLjsonirYHbpnzVpHzcrIbkt5DfsIbOnGm+jFe3h1a3kGfJr5jZy8LW1NXT19rc4d3q7Ofz8/Hv7+/w8PD5+fn////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v79/fv5+vXd39rk5uXo7O/m6e7U3N/O2trS3dnL0MnSybi9nH2ibECkWyimUx2hThimVSCrXSy7bzu6cTq8djq/ezq6dzG9eDPAfDW9eDPFgUDRj1LbmmDeoWjhpG3kqHLmr3nls4LhsYHisoLktIbltInmtYrqu4/uwpXrv5LtwpXvxZXrwY/nu4rpu4npuYjlsn3mq3PpqWvemlPFhEDMlGHntIXVo27Rom7nu5Tuyqrt1LXx3L/028Xz3Mr35tb059b26dj16Nj16Nj26dn46t346t346Nv25tf15NT15NLz4M/y3crx3Mf03sn34cz34s315tPy5dTw49Lw4NDw383w38vv3cfv28Lw2Lzt0rXrzK3oxqPivJjiuJLkt5DmtY3lsIbnsobbqn/Wpn7gs4zhtI3TpHjLmGnJlmGzhVTDoIDXwrHTzc3T1tvb4Nzh5uDv8e7z8/Pu7u7y8vL////////7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3////////7+/v////////s7Ozc3Nzp6+rq7u/g5evS2t3O1tbX2NLYzMDNrpmsd0+kXi2oWCWjTRykUiKoWCetXSi6bjS8cDS6cDG+dze8dTO5dDHEgD/Pj0/Vl1rdoGfepW7gpnTjq3jnr37os4HmtIPnt4fquorrvI7uv5Pvwpjww5nww5nxxZjzx5rzx5rxxZjuwpXuwpXtwZTuv5HtuovtuITmsnjYpGrPnGfapnTqsn/ir4Lqw6Tv07vw3MTv4Mvx5NPy5tj46+L57+X68Ob58eb58eb58eb68ej68ej58Of48OX68Ob369/059f15dXz4tDw3czv3cnx38n05M305dD05dDz4tDy4c/y4c/x4Mzw3sjy3sby3MTv1brpyq3kwp/kvJnkuJPjto/ltozis4fftInar4TUqX/dsInfsovRonbGk17Bj1qyiV3DqIvX0MjT19jV3NXg5d7r7er19fP09PLy8vD5+fn////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////9/f3////9/f3j4eTh4ePt7+7k6Onb4OTX3N/U2tbV0cbVu6q7jnGnZzujViKjUB6kTh2mVCWvXy64aTC/cDW/cTO7bzG9czS5cjK/ezrQkFLcnmPdomrep3HfqnbjrnzmsIHnsYPmsoPtu4ruvo7wwZPxwpTvw5bxxJrxxpvyx5zww5nww5nvxJntwpfswZfrwZntw5vuxJzxxZ7twpjpvpHjt4jXqXjVo3LlrXzrt4/oxqvv2cTy49D06Nj07N/z7OL37uf38Or68+v49On59er59ez49Ov28+r38uz38+r49Ov58uj68OT77+H57Nz25tby4c/x4Mz05M325s/25dH15ND049H049Hz4tDy4c/04s7z38fx2b/s0bTox6jivpzkuZbkuJPkt47htoviuY3etYnXqoHXqoHZrYjYqX/QnWjDkFeugE6xkWvFvK3V19Lb4Nnd4tvp6+b09PL19fPy8vD39/f////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////+/v7////////////////39/fc2tvn5+fx8vTh5ebZ39/Z393Y2tfSyr/KqpGjcU6fXC+fUSCcSRWkThulUiCxYCu+bzbBczW+cjS6bjC2by+7dTfJh0ranF/hpGvgp3Dgq3firnzmsoLptYXsuInsuInxvo/ywpLzxJbyw5XuwpXtwZTuw5jwxZrvxJnuw5nswprrxJvsxZ7tx6Luyqbxz6z20rDy0K3wzqntyqLhupHVqH7dqn3pvJXqzLLy4Mz56dn58OH58+f28un68+368+369u369+77+O/69/D59u/19e349fD59u/59O789e3+9ez+9Or+8ub77eD16Njy49D05dD259D36NP259T15dX15dX05NTz49P15NDz4cvz3cX02b7uz7LnxKTlvZrnvJnpvZbkt47ftInhtYjgsYfaqoLVqH/YqX3Sn2rEkFezhFCriGC6q5bT0cXe39fd4Nno6eT09PL29vTy8vD19fX9/f3////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////////+/v7////////w8PDe3N3r6+vw8fPh5eTb4d3Y3dfV1tDPwrK9lnWeZTqdWSqfUyGcSxajThilTxyyXym8bTK/czW/czW5bzC5czXGhEfXllzdoGfdpG3gqHXirnzlsX/ns4PqtobwvIz0wZLzw5P1xpj3yJr2x5nxxZjvw5bvxJnvxJrvxZvuxJzsxqHvy6fxzq7007T217r33L/43cL43sP128Dw1bjtzKvivJjdsIfiupbv1bz25dX67N/68uf68+v48+379vD89/H69/D7+PH8+fL5+PP49/L39vH39vL49/L49fD79vD99u788+r88uj88ub67uD16Njz5tP259L259T25tb15dX15db05NX05NX05dLz4s724Mn23MP01rruza7oxKLmvpvtwZ7muZLesYfis4fltIvdrIPSpXvVpnjToGnGklnAjVi2jGK3ooXQx7bd2tHf3trm5uTz8/H4+Pbz8/Hz8/P7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////////+/v7////9/f3o6Ojg4N7s7u3q7u/f5ePd4tvZ3NPV0cjJtKGuf1WhYi2dVCeeUiGhUBmmURqsVyC4Ziy9by+9cjG/dTa/eDrGgkXVlFrfomvdpG/hqXbhrXvlsYHntYTotoXruYjwvo31w5LxwpTyxpn1yZz0yJvyxpnxxZjwxZruxJrtxp/uyKPwzqv01bj42sD538b848396NP66df669j66dn14tH33sjuz7Phu5fgvJry3MX36tr57+X58ur48+339O/7+PH9+vP8+fL5+PP5+PP5+PT5+PT4+fT4+Pb4+fT49/P6+fT69/L59O779Oz+9ez98+n47uL26dj16NX059T059b059fz5djz5djz5tby5dT05dL24cz23sb12r/01bjtyqzlvp3qv53pvZjktYnlsoXnsojfrIHRpXjTpXPWo2zNll7Lk2C8jV+2mHTNvaTf18zi3tvm5ePx8e/5+ff19fPy8vL4+Pj////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3////7+/vi4uLj4+Hv8fDq7u/e5OLe49zd3dHYzsS/o4ulazunXyWbUSKcTyGlVB2rWR+2YSjBbTHBczO8cjG/eDjJhUjTkljbnmfgp3LhqXjksIDjsIHksYLotoXsuonvvYzxv4zwwI/rv5LvwpjxxZjxxZjwxJfvw5buw5nswprtx6Lwzqv11rn53cX75dD86dj+7d397+L78eX58eb78un67eT76d3z2sbkw6Tkxaby4Mr57d/58Of68+359fL39vL8+fL8+fL7+vX6+fT6+fX6+fX6+vj6+vj5+ff5+ff4+Pb6+/b6+fX69/L79vD/+PD89e358eb47Nz16tj16Nf16dn36dz16dv159z159rz5tb25tb25ND04Mj33cT2277uz7LkwaPqw6LswJvmtYrkr4PpsonlsofVqXjPpG/Sn2jTnGTWmmbCjl6yjWDGr4/e0sbj3tvl5OLu7uz4+Pb4+Pbz8/P29vb+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////9/f3////4+Pje3t7m6Ofv8/Lp7+/h5+Xf5N3e3M/ayrq5lHemYy6oWB2cUB6eUiGpWSS0Yii+ai7AbzDBdjPAeTfIhEXVk1fdoGnepXDgqHfhrX7jsIPhsYPjs4XouIjtvYzvv47wwY3vwZDwxZrzyJ71yp/zyJ3xxZjwxJfvxJrvxZ3yzKj31rf84Mj85tH869v/8eb+9Ov89e359u339O379/T58e777uj249TqzLDnzK7048/47+D58On59PD49/X4+Pb7+/P5+fH7+vX7+vb7+vb7+vb5+ff5+ff5+fn5+fn4+Pj5+ff6+ff79/T69vP89/P69fH68+v37t/069r16dv169/67uL47uL46+L26t7z59n16Nj35tT148354cn33cTx07fqyKzvyq3twp/mtYrjr4Dqs4rqt4zbr37QpXDOnWXSm2PTlmDEi1auhU+5nXXZybrk39zl5OLr6+n39/X6+vjz8/P09PT8/Pz////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////9/f3+/v729vbb29vp6+ru8vPn7e3k6ujf5N3a18jYxKy2imeqXyimUBOgUB2hVSStXSi8ajLDbzO/bzDAdjXIhEPUklXcnmPjp3Hjq3rgrH3hroHhsIXjsofouIrsvIztvY3tvYzvwIzxw5L1yqD3zaX5zqT1yp/wxJfuwZfuw5nsxZ710a/73cH/59H97Nz97+T/9u//+vb8+PX5+PP29/L6+Pn08PH47uz97eDw1r3q0bP15tH48OP48en48/D49vf4+Pj7+vX6+vL7+vX8+/f8+/f7+vb4+Pb4+Pb4+Pj6+vr4+Pj4+Pb5+Pb49/X69vP69vP79vL69u327uH069zz6d347uT78ef78ef47uX27OL06Nzz59n25tb35tL65M3338fy17zu0LTty6/uxqPqu4/ns4TnsojntInds4HWrXfTpG7KlV/ChU+8gUmsfkKykmPTwrLl3dvk4+Hp6ef29vT7+/nz8/Pz8/P7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////////////+/v7+/v7////+/v7+/v7////+/v78/Pz////w8PDa2trs7e/t8fLp7+/j6efd4tzf18rSt5qwfVKoWSGrUBejUh2mWCeyYSy6aDC8ai67bS3EfTvRkFDenmHfpGzfp3Tfq3vgrYDgr4TisYbks4jouIrtvY3wwJDwwI/xw5HxxZb2zKT606z5z6Xxxpvvw5byxZvyx53wyaL21bT84cb/69j97+L98uz89/T59/j4+Pj6+fX49/P39/n59fb89PL77eL13cXx2b3y5dLy6t327+f48/D49vf5+fn6+/X6+vL6+fT9+vX7+vb7+vb7+vb6+fX5+ff5+ff5+Pb5+Pb5+Pb5+PT69vP69vP59vH69e/07uL17eL17eL47+b78un88+r58On27eTx593z59v059f15tP34s3138jz2cDv1Lnx0rXqxqTnu47ptofrt4/rvJDiuIbWr3jQom7MmWTGiVPChUyzgUKtiVXGtKDk3Nnm5eHp6ef29vT7+/nz8/Pz8/P8/Pz////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7////////////////+/v7////////////8/Pz+/v7s7Ozd3d/t7vLw8fXr7+7k6eXe4N3d08fOrYysckSoVR+oTRahUBuoWCWvXimxYCm1Ziu6cDHMiEnWmVrgo2rgp3Dgq3ngrX7fr4HhsIXhsIXjs4XouIruvo7xwZHzw5L1x5X2zJz2z6j50673zaXwxZvvwpjwxZrzyZ/0zqn827r+5Mv/7Nv/8+f/+PL8+Pf4+Pr6+vz8+/f6+fX59/j49vf99fP87uX33sjz28H059b07OH58uz69fL59/j5+ff6+/X5+vL9+vX9+vX7+vb7+vb6+fX6+fX5+ff5+ff6+ff6+ff5+PT49/P69vP59fL69/L69/D18eb27+X38Ob58On88+z88+z58On37ufz6eDz6d306Nj15tP25ND34cr13cXz2L3x07fryabpvpHouYvpupDrvpTkvIvbs3/VqnfToW7Pk13KjVS6h0avilXEspzh2tTl5ODo6Ob29vT8/Pr09PT09PT9/f3////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////9/f3////////////m5ubW1tju7/Px8vbr7+7l6ube4N3c0MLKon6naDWoVyKmTxqjUh2rWyawXyqxYCm4bTPCfkHRk1bboGbgp3DeqXXerHvfr4HfroPgr4ThsYPlsoXruInxvo/zw5P1xZX5y5r70KP706/71bH3zafwxZvuwZfuw5jyyJ7z0Kr/4MH+5sz+7dv/9uz/+/f8+vv5+fv8/Pz++/b9+PT6+ff69vX79vL77uX24Mvy3MX26tz38Ob89e/9+PT7+vj6+vj6+/X6+/X9+vX9+vX9+vX9+vX6+fX6+fX6+fX6+fX7+vb6+fX79/T69vP69/L69/L69/L7+PH49Ov38+r49Ov68+379O768+358uz38Oj06+L06t706Nr15dX35dH548z338f22sLx1Lbty6brwpbpvY7pvJXrv5jnwZTguonbsYHZqXjWn2nTmF7DjU20jFjBr5fe18/n5uLp6ef19fP6+vjz8/Px8fH5+fn////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz9/f3////////7+/v19fXu7u7c3NzZ2dvu7/Py8/ft7+zn6eTf4d7cz7/HmnGnZC+lVSKkTh2hUBupWCGyYCi4aTDBez/MjlPXnGLcpW3eqXXdqXncrHzer4Her4Pfr4HksYTotIXtuYnyvo70wZL1xZX6y5390qf81rH61LD1zqfwxpzvwpjtwpfwxpzz0Kr93r//58/+7t7/9ev/+/f8+/n6+vz+/P3/+vb9+PL9+fb5+PT89/P68Ob148/y4Mz57+P59ez/+PL++fP7+vb6+/b6+/b7+vX6+fT9+vX9+vX9+vX6+fX6+fX6+fX6+fX6+fX6+fX79/T79/T7+PP7+PP7+PP8+fT49e759O759O759O779O768+358uz48en37uX27OD16dv25tb35dH548z33sj22sLw07XszKbtxJjqv5LpvZjswZ7pwpnjvZDdtIbbrXzYo2/VnGTJk1W4jlvArJPc1cvq6eTr6+n19fP5+ffy8vLv7+/39/f////////////////////////////////////////////////////////////////////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////////+/v7////////+/v7////////29vbv7+/o6Ojk5OTX19fZ2dvv7vP19ffv7+3o6uXg4t3ezr7FlGmpYiyjVyWiUiGjUR+qVyG5ZSnHeTvQjlLXnGLao2veqXXfq3nbq3vcrX/er4PdroDfr4HmsoLqtYPvuojzvozzwZD0xJb5yp790qj61LD50rH2zqr0yqL0x57wxZrxx53z0Kr53L7+6ND/8OD+9Or++fP8+/f8+/n9/Pr/+/f++fP8+/f6+fX6+fT79Or359j25tf79Oz69/L++fP9+PL6+fT6+fX7+vb7+vb8+/f8+/f7+vb6+fX5+PT5+PT5+PT5+PT5+PT5+PT6+fX6+fX8+fT8+fT8+fT8+fT49fD59vH59vH49fD48+/48+/58uz48en37uX27OD26tz359f45tL548z33sj02MDv0LPty6bsxZrrwpbpwZ3rwqLrw5/lvpXgtozarn/Xo3HVnmjMlVy6kGC+qo/b1cfp6OPr6+n19fP6+vj09PTv7+/09PT9/f38/Pz8/Pz8/Pz8/Pz8/Pz7+/v8/Pz8/Pz8/Pz8/Pz8/Pz+/v7////////////////////////////+/v7+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////////////6+vrx8fHo6Ojo6Ojp6enq6ura2trU1NTu7vD29vjx8e/r7Ofh5N3dzrnBjV6pYCmlXCmnWyqqWCayXSbDbi7UhkTanF/cpW3dqHTgrHrern7brH7br4Lbr4LdrX/frH3msX/rs4DwuIXyvYnzv4/ywpT4yZ390ar81bT81bT60q74zqb5zKP0yZ/yyKDxzqj4273+6ND/8eH+9Oj/+PD++/b++vf++vf/+vb9+vX7/Pf4+vX5+vX69e/56+D56+D89/P6+fX8+fL7+O/5+fH6+fT9+fb9+fb9/Pj9/Pj8+/f6+fX5+PT49/P49/P49/P49/P5+PT6+fX7+vb9+vX9+vX8+fT8+fT39vH39vH59vH59vH59PD48+/58uz58ur37uX27OD26tz46Nj559P65M3338f02b7v0LHuyqbtxpvrxJnqxKDtxqfsw6PovZrjuZHbr4LXpXTTnmrOlmO9kWS9qIvd1sbq5+Ds7Or29vT8/Pr09PTp6eno6Ojx8fHy8vLz8/P09PT09PTz8/Pz8/P09PT19fX19fX19fX39/f5+fn7+/v8/Pz9/f39/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////7+/v19fXn5+fo6Ojr6+vt7e3n5+fm5ubb29vW1tbr6+v39/f19PLv8Orj5t3czba+hVeoXSakXiunXy2wXiy4YyrIczDYi0fanmDXpG3dqXfgrX7eroDcrYHcsIPbr4LdrX/frXzjrnrqsXzvtoHyuofxu4zyv5L2x537z6j91rX+17j81LD60Kj8z6b5zqT0zaTwzqn12rz65s3+79z+9Oj/+e//+vT9+PL9+vX9+PT5+PT5+/b1+vb2+/f49/L57+b78ej8+Pf5+ff8+fL7+O/6+vD7+/P9+vX8+PX8+/n7+/n6+vj5+ff4+Pb39/X3+PP4+fT4+fT4+fT6+fX6+fX6+fX6+fX6+fX6+fX49/P49/P69vP69vP69fH69fH68+358ur47+b37eH369v46db559P65M323sby17zy0bLuyqbtxp3sxZzsxaTvyKvxxajrvp/mupPdsYTYqHfUoG7Nl2i+kWi9qIvf2Mbt6uPu7uz29vT6+vjx8fHg4ODc3Nzk5OTt7e3u7u7w8PDw8PDw8PDw8PDy8vLz8/P09PT09PT19fX29vb4+Pj4+Pj4+Pj4+Pj6+vr7+/v9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////+/v7+/v7////7+/vx8fHm5ubp6eno6Ojq6urr6+vj4+Pj4+Pa2trS0tLo6Oj39/f19/Ty8+3m6N3ezLS5g1SjXCSmYC2sZDK3ZzK/bTHNfDrZkEzYoGPYp2/cqnnfr3/fsITer4PesYffsITeroDhrn/irXvosH3ttoDxuYbvuojvvI31xJn5zqT707D81bT60q760Kj90qj906n606r21K/22bn44MT66tP/8+L/+e//+fH89/H9+vX8+PX5+vX5+/j2+/f3/Pj5+vT68+v+9e76+ff5+ff6+vL6+vD7+/H8/PT9+vX79/T6+ff5+ff5+ff4+Pb4+Pb4+Pb5+vX6+/b5+vX5+vX6+fX6+fX5+PT5+PT6+fX6+fX5+PT5+PT49/P79/T7+PP79vL59O768+v68ej67uL469v46db45tL44sv03MTw1bry0LTuyqjrxaDqxJ/rx6fvy6vwx6nrwJ7mupPesoPaqnnVoW/Ommu9kWq/p4vj2snw7ebw8O729vb4+Pju7u7d3d3Y2Nji4uLx8fHy8vL09PT19fX19fX29vb4+Pj5+fn6+vr6+vr5+fn4+Pj4+Pj29vb19fX09PTy8vL09PT4+Pj7+/v+/v7////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////+/v7////////+/v739/ft7e3o6Ojp6ens7Ozq6url5+bj5eTg4uHf4eDc3t3Mzs3k5Ob29/n0+vju8+3x6uLp0bm7i1qiYSesZjOyaTa7cTTEejnOh0nUlFfUoGTVp2zcrXnbq3vbrIDdroLgsYfgsYfgr4Tfr4HeqnvmsoLrtoTst4PuuojxvYv0wpH4yZv1zqX40q371a781a791q3+16761K3z0Kr11LH02rn54cX86tT+8uL99+v89/H5+PT5+vX6+/b5+/b5+/b5+/b6+/X8+fL69/D7+vX6+/X7+/P5+vL5+vL4+fH5+vT6+/X7+vb6+fX5+PT5+PT6+fX6+fX5+PT49/P6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX3+PL3+PL29/H39vH39vH49fD48+348en47+b57OP56dz35tb35dH44sv13cXy1r7uzrXuy6/rx6fsyKbvzKzwzqvsyKTow5nluo3fsX/frXjVoW/NnW+5kmvCqI3p2crz7urw8PD5+fv39/fr7ezd397X2djl5+bx8/Lz9fT19/b2+Pf39/f4+Pj39/f39/f3+fj2+Pf2+Pf2+Pf3+fj2+Pf19/bz9fTz9fTx8/Lv8fDw8vH19/b6/Pv9//7+///+/vz///3////+/v7+/v7////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f3////////9/f3z8/Pq6uro6Ojp6enq6urn5+fl5eXh4+Lh4+Le4N/f4eDc3t3Nz87d3d/y8/X1/f3z+PT17OXr0ry8kF+fZCquaDW1bDe/eDbLiETUlFfYnWXWpGnXqW7drXzeroDer4Per4PfsIbfsIbfroXdrIHfrH/jsIHns4Prt4Xuu4buu4bxv4r2yJb70qb71a771a761K361K381q/917L617H31bD22LT33L755Mn97Nj/8+X/9+7++fP7+vX6+/X6+fT5+PP49/L6+fT7+/P6+vL9+vX7+vX7+vX5+vT6+fT5+vT5+vX6+/b7+vb6+fX6+fX6+fX6+fX6+fX5+PT5+PT6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX4+fP4+fP4+fP3+PL49/L59vH48+358uz78uv87+b87N/56Nj35dH24cz03sf02sPz1b3w0Lfuza7uzazx0LHwz67ryaTlwpjiuYvitILeqnjSnmzNn268lm/HrZTq3M/18O3z8/X5+fv09Pbn6ejc3t3a3Nvn6ejz9fT09vX09vXy9PPy8vLy8vLx8fHw8PDx8/Ly9PPz9fT09vX2+Pf2+Pf09vXz9fTw8vHw8vHv8fDu8O/t7+7v8fD3+fj+//////3///3////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3+/v7////////9/f3////6+vrw8PDo6Ojm5ubp6enp6enm5ubh4+Lg4uHe4N/g4uHe4N/f4eDe4N/S0tLV09Tt7e31/f32+vn07+vt2MXEnnGiazOybzq6cTrCfTzMi0nUl17YoWnap27brHbcrHvfr4HgsYXfsITesYfgs4rhsojfroPir4LjsIHmsoLsuIbvvIfuu4bwvon2xpX6z6T606r61K340qv31K772LL/27f/3rn/37n63Lj32rj23b7548v969X/8eH/9Of/+O7++fP++fP89/H69/D7+PH9+vX9+vX++fb9+fb9+fb7+vb8+Pf6+ff6+ff7+vj7+vb7+vb8+/f7+vb7+vb6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX5+PP5+fH5+PP5+PP69/L49fD59PD68+388+z98Oj77eL559n249L24c714Mv03sf33Mfz17/x1LTx07H00rfyz7PqyKXiv5fdt4rfsILZo3TTnmzOn2u7mWzMuKDu5dz38/L39/n4+fvu7/Hi5OPa3Nvc3t3o6uno6unp6+ro6unm6Ofl5+bl5+bm5ubm5ubp6+rq7Ovt7+7w8vHz9fT19/b19/b19/by9PPx8/Lw8vHu8O/o6unk5uXr7ez19/b+/v7+/v7+/v7////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3////////9/f39/f3////////////29vbt7e3n5+fo6Ojr6+vp6enl5eXi4uLg4uHf4eDe4N/h4+Lg4uHh4+Lh4+LW1tbPzszm5uT1+/v1+fr08O3x4dLQroinc0Gzcjy8djvEgD/MjEzTmGDYo23cqnXdrnrdrX3gsYPhsobgsYffsonjto3ktIzfsIbgr4TksYTns4Trt4fwvIrxvonywIv1xZT0yJv3zaP50qn506z31K761rL+3Lf/37n/5MH/4r763bv23Lv33cL748v+6NH/7Nv/8+f/9u3/+e//+vL++vH++fP9+PL9+PT++fb9+fb9+fj9+fj9+fj8+Pf9+fj9+fj7+vb8+/f9/Pj9/Pj8+/f7+vb6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fT49/L5+fH5+PP5+PP59vH49fD48+/68u/78u368Of67OP46Nv35df35NP25ND34s/34M713cXy2Lf01rT107jyzrToxqPgvZXdtovYqX3XnnHaonHKm2W6mWzUxbD18uv29fP5+fv29/no6evb3dzX2dja3Nvj5eTf4eDg4uHf4eDe4N/d397e4N/f39/f39/d397f4eDi5OPm6Ofq7Ovt7+7v8fDw8vHx8/Lv8fDu8O/t7+7q7Ovm6Ofk5uXm6Of29vb7+/v////////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////////////////8/Pz29vbq6urp6enq6urr6+vo6Ojj4+Ph4eHj4+Ph4+Lg4uHg4uHj5eTh4+Li5OPj5eTa2tjLysbf3tzz9/j2+vv19fP27ODcv6Gmek2qbTa8eDnJhUTOkVDVnGTbqHPerHnaqnrfsILhsobhsojesYffsonjto3js4vdroTerYLksYTmsoPns4PsuIbxvYvzwY7ywpH0xJT2yp370Kb606r61K/41rH62bb73bn/5ML/5ML/5ML94sT74sT64sj95c3859T77t788ub/9+z/+u7++u/++vH9+vP8+fT9+vX7+vX7+vb7+vX9+vX9+vX9+vX9+vX7+vb8+/f9/Pj9/Pj8+/f7+vb7+vb7+vb6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fT7+PP7+PH7+PP69/L59fL49PH48+/78/D88+767+n57OT46t/36dz56dr459f25dP04dDz38fz2rv017X307nzzrToxKThu5bgto7VpnrXnnHZoXDAkl69oHbf2MX4+vX09vX4+fvx8vTi4+XX2djT1dTU2NfZ3dzX29rX29rZ29rX2djV19bV19bU1tXT1dTR09LS1NPU1tXX2djb3dze4N/i5OPk5uXm6Ofo6unp6+rq7Ovs7u3s7u3o6uni5OPo6Oj09PT////////////////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////8/Pzy8vLo6Ojp6enr6+vr6+vm5ubi4uLi4uLi4uLg4ODh4+Lg4uHg4uHj5eTh4+Li5OPk5uXc3tvLysbU1NLt7vD3+/z5+/r79Orlz7ith2Kmbze5eDjFhEDMj07UnGHcqXTfrXzbq33er4PgsYXesYfdsIffsovitY7js4vfr4fdrIPisYbksYTksIHqtobwvIrywI/ywI/zwZD1xZX5yp76z6X606z61rL72rf83rz/4sD/5sb/7Mv/7c//68/+6ND959D66NT57Nz57+P88ub89ur79+z8+fD9+vP7+vX6+/X6+/X7/Pb7/Pb8/PT7+/H7+/H8/PT7+vX8+/f8+/f8+/f8+/f7+vb7+vb6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX7+PP7+PH7+PP69/L59fL49PH59PD59PD68u/58Ov37Ob36uL369/46t3359jz49Tz49Py4Mr13L7217j207fxzK/nw6PhuZXes4nWpnjYnm7OmWe2jFzKso7s6dj0+vbz9/b3+Prr7O7d3uDV19bS1NPS1tXT19bP09LQ1NPS1NPQ0tHO0M/Nz87Mzs3LzczMzs3Nz87Nz87O0M/Q0tHT1dTW2NfY2tnZ29rf4eDj5eTk5uXn6ejr7ezq7Ovl5+be3t7p6en39/f+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////+/v79/f34+Pjy8vLq7Ovl5+br6+vp6enl5eXh4eHg4uHj5eTi5OPe4N/i5OPh4+Lh4+Lk5uXi5OPj5eTm6Off4eDQ0s/Jy8jg4OL29vj6/Pv9+vPz49TCpYeoeUOzeDa7ejbFhkHQllfXo2rbqXjcrH7crYHer4PdsIbesYjesovgtI3itY7ktIzfroXisYbjsIPjsIHntIXsuonuu4zxv47yvozzwY71xZX3y575z6f61K/62LX827r63Lr84sH/6cv/7ND/7tb/7df+7dv97d387uP68Ob88uj68+n69u38+fL6+/X5+/b3/Pb3/Pb6/fb6/fT7/fL7/fD7/fD8/PL8+/b8+/f7+vb7+vb7+vb7+vb6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX8+fT7+PP69vP69vP59fL49PH49PH48+/38u748ev27eb16+L26eD26N305tvx49bw49Py4Mz128L01bjz0LDtyaflv5vgtpDbqn/Xo3PUm2bGlGO7mHDgzLH09Ojx+vX0+Pf09ffj5ObX2NrQ1NPP09LR1dTP09LM0M/N0dDN0dDM0M/Mzs3Mzs3LzczKzMvKzMvLzczLzczLzczLzczNz87P0dDR09LS1NPX2djb3dzc3t3f4eDi5OPl5+bl5+be4N/g4uHr6+v5+fn////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v+/v7////6+vrv7+/n5+fn6ejt7+7n5+fk5OTj4+Pk5OTi5OPg4uHh4+Lk5uXj5eTi5OPi5OPl5+bj5eTk5uXo6unf4+LV2djBxcTU1NTw7u/5+ff9/Pf99O3Xw6upgVCtdze0dTDDgj7Ok1HUnmLXo3HbqHvfroPgsYXgs4rgs4resovdsYrgs4zjto/fr4fhsIfgr4Tir4Lms4botYbruInvvYzzwIv0wYz2xJP4yZv5zKP5z6f30az20q7007D117X43b/748f96dH/7tr/8uL/9ub/8uf/8+r+9Or+9ez8+O/8+fT5+vX3+fT2+/f3/Pb4/ff4/fb6/fT6/fL7/fL7/fL8+/b7+vb6+fX6+fX7+vb7+vb6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX7+PP69/L59fL59fL49PH49PH38/D28+728e348ev37uf27OP26eD16d3159zz5djx4dHx38v32cH007TwzKjqxJ3iu5TfsonapnbXn2zOmWPClmfHqozv4tH5+vL1+/fz9/jw8fPc3d/Q0dPN0dDM0M/P09LM0M/Kzs3Kzs3JzczHy8rHycjGyMfFx8bExsXGyMfHycjHycjIysnIysnJy8rKzMvMzs3P0dDP0dDS1NPW2Nfa3Nvd397g4uHj5eTk5uXd397j4+P19fX////////9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////////+/v7+/v79/f3////5+/rr7ezl5+br7ezr7ezl5+bl5eXj4+Pi5OPi5OPi5OPh4+Li5OPj5eTk5uXk5uXk5uXk5uXk5uXl5+bm6Ofl6ejR2dvK0NDHxcbk4N329/L6+/b/+/ju4dG2l2uqfEC1eDfAfzvIi0jUmlvTnmrZpnnbqn/gsYXgs4rcr4barofetIzhtY7gs4zhtIvis4nisYbhsYPisoTltYfpuYvuu4zuuojxvon0wpH0xJT1xpr3yqD4zaP4zqb40aj41a/62bb73r7748f96dH+7dn/79//8OP/8+n/9Ov/9ez/+PD9+PT6+fX7+/n5+/r6/Pv7/fz7/fr7/Pf8/ff8+/b8+/b8+/f8+/f7+vb7+vb7+vb6+fX6+fX6+fX7+vb7+vb6+fX5+PT5+PT6+fX6+fX7+vb5+PT49/P29fH29fH49PH59fL49fD39O/38u748ev47+j47uX46+L16d3y5Nny4tPx4M7v2cTxz7bzz6/qx5/ivZHiuI7Zqnzao23Um2PIlmG+mW/fzbn+9+/y8+76//vz9Pbh4uTa3t/U2NnKzs3O0tHQ1NPGysnIzMvGysnEyMfCxsW/w8K7v767vby8vr2+wL+8vr29v76/wcDBw8LExsXGyMfHycjLzczNz87Q0tHS1NPU1tXX2dja3Nvd397i4+Xf4OLd3uDo6ev5+vz+///9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v739/ft7+7p6+rp6+ro6unm6Ofk5uXk5OTj4+Pi5OPi5OPi5OPi5OPj5eTk5uXk5uXl5+bl5+bk5uXk5uXl5+bm6Ofl6erY4uPHz9HIx8XRzcrq6eT9/vn39/n/+O7cxaOpgU24gka1eDfIi0jWnFzTnmjZpnfaqnzcrYHdsIbcsYfcsInds4vgtI3jt5Dgs4rfsongsYfhsIXhsIXktIbntovpuYvvvYzxv4zywI/0wZL1xZX5yZv6yZ75yp75zaD6z6T51Kr41rD32Ln33sD748v859L+7Nj/8d//8uT/9ej/+e//+fD9+PL9+vX7+vj7+/n8/Pr7+/n8+/n8+/n++vf++vf8+/f8+/f8+/f7+vb7+vb6+fX6+fX6+fX7+vb7+vb6+fX5+PT5+PT5+PT6+fX6+fX5+PT49/P49/P59fL49PH49fD59PD59O758ur58Of57+X57eH36dz15dbx4dLx3s/v2Mbx1b/wy67uxqPnwpbfuYrds4PXqHTQmWDTn2a7kWHKrYv26t7+/fv29vT09PTr7O7Y2dvY3N3Y3N3M0M/JzczIzMvIzMvFycjBxcS+wsG7v767v766vr26vLu5u7q1t7a4urm1t7a0trW5u7q5u7q7vbzExsXGyMfIysnLzczO0M/R09LU1tXX2dja3Nvf4OLf4OLd3uDj5Obz9Pb9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3////////////+/v7+/v7+/v79/f33+fjs7u3m6Ofo6unq7Ovm6Ofi5OPj5eTj5eTi5OPi5OPj5eTk5uXj5eTk5uXl5+bl5+bl5+bl5+bk5uXk5uXl5+bn6ejm6uvb5ebJ0dPKycfGwr/X1tHz9O/09fn//vn+7tXEp32xgVDAh0/Hi0zNk1TWomnXpXTZqXnYqX3arYPes4nesovbsYnds4vjuZHhtozhtIvjtIrjtIrjtIrktYnltozmt4vru4vtvY3wwJDywpL2w5T5xpf8yJn8yJn/zZz/z57/0aP80ab40aj21K/52Lf53sD75MX96sz/7NP/8Nf/9eD/9+b/9+j/+O3/+PD++fP/+vb++fb++fb/+vf/+Pn/+vf++vf8+/b8+/b7+vX7+vX7+vX6+fT6+fT7+vX6+fT5+PP5+PP49/L5+PP5+PP5+PP7+PP8+fT8+fT79vL48+/38uz58ur78un78ef88OT77eD66tv459f04dDy3cry2cXy1sD107jvx6TswJnov5PgtobYrXrSo2vUomfDlGC/nXfs2MD++vH29/n7+fzt6+7g4OLV1tjd3uDW19nHy8rHy8rDx8bDx8a9wcDCxsXKzs3Q1NPZ29re4N/e4N/c3t3a3NvO0M/ExsW5u7qwsrG1t7a7vby3ubi/wcDCxMPFx8bJy8rMzs3Q0tHU1tXX2dja293g4ePf4OLf4OLr7O76+/3+///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/f3+/v78/Pz4+Pjq7Ovp6+rp6+rp6+rn6ejl5+bj5eTi5OPi5OPi5OPi5OPk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bn6ejm6und5efQ1tbKysjHw8DFxL/c3dj0+Pv29vT/+Ofy3cC6lG26ilrFkVfJk1XWomnToWzcqnnaqnzdroLfsojes4nasIjcsoriuJDjuI7kuY/luI/nuI7mt43ltozltozltozmt4nsvY/xwpT0xZf2xpj4yJr7yJv9yZr/zJz/zp3+zp38zZ/4zaL1zqX30ar317H13bn24r/45cT458n87NL+79j/8t//9eX/9en/9+7/+PH/+fP/+PX/+fb/+ff/+ff++/b8+/b8+/b7+vX7+vX6+fT6+fT6+fT6+fT5+PP5+PP49/L49/L49/L5+PP7+PP7+PP89/H89/H89e/58ur38Ob47uT77+P77eD769z55tX449D24Mv03MTw1r/x07nvzbHux6bswJnnu47is4XbrXvXqnPSpW7Mnmq7lmndxqf/+Oj5+PTv8/b08/jn5eja2tzX2Nrf4OLQ0dPBxcTHy8rEyMfGysnS1tXf4+Lr7+7x9fT19/b4+vn4+vn3+fj4+vnx8/Lt7+7f4eDDxcS0trW2uLe2uLe5u7q8vr3AwsHExsXIysnMzs3R09LU1tXY2dvf4OLg4ePd3uDm5+n3+Pr+///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f3+/v79/f329vbv7+/o6unq7Ovq7Ovn6ejk5uXj5eTj5eTi5OPi5OPh4+Li5OPk5uXk5uXk5uXk5uXl5+bm6Ofm6Ofl5+bl5+bl5+bl5+bm6Ofn6ejl6ejY3NvIysnFxcO8vbfGx8Lp6uz09PL8+O//+ungxq2phWG7j17PnmTOnWPSoWnbqXbcrHzfsILfs4bdsojcsojbtIvet47iuJDkuY/lupDmuZDmuZDkt47kt47jto3luYzpvY7uwpX0x535zKL8z6X9zqT6y5//z6H+zqD7zJ76y534zaL4zqT71Kv82rT13bn25MD45cT15cT36Mv46tD57dX98t799OP+9un/+O3/+O//+vL/+vT/+fb++fX++/b++/b9+vX9+vX9+vX8+fT8+fT8+fT7+PP7+PP7+PP7+PP7+PP7+PP7+PP7+PP89/H99u789e378un78ef57+P67N/66tv56Nb55NH33sj02sH01rzx0rXvzbHuy6vrxaHovpbrvJLjs4PZp3TaqHPYqXPMonC2k2nVvZv67tj/+/D5+ffz9Pjl5urh4OXV1tjX2Nre3+HQ0dPDx8bHy8rO0tHe4uHw9PP3+/r6/v33+/r09vX09vX19/b09vX19/b6/Pv4+vn5+/rx8/LMzs2vsbCwsrGztbS2uLe7vby/wcDExsXJy8rO0M/R09LV1tjb3ODe3+He3+Hk5efz9Pb+///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////+/v74+Pjw8PDo6Oju8O/q7Ovm6Ofk5uXj5eTi5OPh4+Li5OPi5OPi5OPi5OPk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bm6Ofn6ebr6+ng4N7Nz87ExsXAwr27vLfKysjn5+X8+/n/+/P/7+DQtp20j2XFmmfMnmPUo2nZp3Ldq3rfr3/dsYLdsofetIret47et47ht4/iuJDkuY/lupDmuZDmuZDmuZLmuZDmuo3luYrnvJHuxJr5z6n/17H/2LL+1K7+1Kz60Kb3zKL2zKL4zqT606r/27T/48D95sf97ND97dP87NL67NL669b469j679399OX+9un/+e3/+e//+/L++/T++/T9+vX9+vX9+vX9+vX9+vX8+fT8+fT7+PP7+PP8+fT7+PP7+PP7+PP7+PP7+PP7+PP89/H99u788+r68ej78ef88OT879/769v66NT34s323sbz2L3x0rXxzq7vy6ntx6PrxJ3rwJXluYzltInerHvYpGvZpWvOnGm5j2XKr5H36NP//O329/H39/fr7PDg4ebc4OPNztLc3d/g4ePOz9HEyMfS1tXk6Of0+Pf0+Pf1+fjz9/bx9fTz9fT19/b19/b09vX19/b19/bx8/L19/b+///v8fDGyMelp6ausK+xs7K2uLe7vby/wcDFx8bKzMvO0M/S09fW19vc3d/e3+Hj5Obx8vT9/v/+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f3+/v7+/v75+fnx8fHq7Ovo6unu8O/o6unj5eTj5eTj5eTi5OPi5OPj5eTk5uXj5eTj5eTk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bn5+Xs6eTk497T19bEysrCx8O6vLe4t7PNzcvq6+3z8/P/+fP/8eHQs5HFn3DInmTUo2jWpG/aqHfbq3varn/bsIXetIret47et47gto7ht4/kuJHluZLluZLmupPmupXou5Lmuo3luYriuY3lvpftyaX31LT/3Lz/377827r31rP106700q300q341rP/3rv/5sr/797/9Of/9Of/8uX/9Oj+8ub68Ob68uf99uz9+e79+vH8+fL6+vL6+/X6+/X6+/X7+vX9+vP8+fL8+fL8+fL7+PH7+PH7+PH7+PH7+PH69/D69/D59u/59u/59u/69e/68ej57+X37eP47OD469v359f14tH038rw2L7v1Lfwz7Dty6juyKPsxZ7qwJjpvJLnuYffr37ZqH3WonLVnl7NllbGkmDKpID15NL/+/L1+O/y9O/s6u3f3uPg4+jW297IzM/i4+Xc3d/IycvLzczi5OP0+Pf2+vny9vXx9fTz9fT19/b4+vn5+/r3+fj19/b3+fj19/b4+vnz9fTv8fD4+vng4uGpq6qrrayusK+ytLO3ubi7vbzBw8LHycjLzczOz9PT1Nja293c3d/h4uTx8vT+///+///+///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3+/v78/Pz09PTq6uro6unt7+7n6ejn6ejm6Ofj5eTi5OPj5eTk5uXk5uXl5+bk5uXk5uXl5+bk5uXk5uXk5uXl5+bk5uXl5+bl5+bl5+bl5+bl5+bl5+bm5uTq5+Ln5uLW2tnGzMy/xMC+wLu9vrm7u7nMzc/r7O779/b/+vD/7dTVuZS5l2nLo2/Vo3DXpG/Zp3barHvar4Lcs4fbtInctYrgtozht43juI7juI7jt5DkuJHluZTluZLpvZDpvY7mvZHiu5Tivprsyan517v/4sX/58n/5Mb84cP74ML438H438H+5Mn/7db/9Or/9/H/9vD/9e//+PL/+fT/9/L/+PL9+PL9+vP9+vP6+fT5+PP5+vT6+/X6+/X6+fT8+fT8+fL8+fL7+PH7+O/7+PH69/D69/D79vD69e/69e/59ez49Ov49On68uf569756dr359f25dP04s7y3sbu2MDu1Lnqza/qyajrxaHrxJ3twZrqv5Tnu47muIflsn3hrHjap3jVo3DNm166jFHLoXn/48v/+/X9/f3w9fHq7+vi4OHe3uDe4+bN1dfR1djg5OXT1NbGysvU1tXm6un0+Pfw9PPy9vXy9vX09vX2+Pf19/b09vX09vX19/b19/bz9fT3+fj3+fj2+Pf7/fzg4uGtr6yqrKutr66xs7K1t7a6vLu/wcDGyMfKy83Mzc/S09XZ2tza293f4OLy8/X+///+///+///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f3+/v7+/v7+/v77/fz+///8/v3y9PPs7u3s7u3r7ezp6+rl5+bk5uXj5eTi5OPi5OPj5eTk5uXl5+bk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bk5uXl5+bl5+bl5+bl5+bl5+bm6Ofn6ejo6Obn5+Xf4eDN0dDAxMO9wr67vbqysrC2uLXQ0M7q5+L+9+///u/469jOvqW1m3rOnm7Yn2jVom3To3LWqnvbsoTZs4TYsoXdtIjhtovluI7kt43it43itpHjuJXmupXovZLnvY3ovZLovpTlvpflv5vsyKj007T+38P/5Mn/6M796dH66NL669T+79r/8+L/9+7/+PL/+PT/+PP/+fP/+vb/+vb++fX9+vX9+vX8+fT9+PT++fX++fX9+PT79vL8+PX79/T69/L69/D69u369uv59ez49Ov38+r58ur68+v79Oz68+n38eP279/67dz65M/84sv64Mf33cLx2Lrqz7HnyqrpyKXsxqHswprrvpXrvJLqu4/ouYvhtYThr37mqXrjp3XfrHXFmmOtilTNsof+6tL/+PH/+P/z8vrp6evg4uHf393f4d7X3N/O09bU2dzS2NjQ1NXK0NDP09Tj5+jy9vXw9PPw9PPx9fT09vX2+Pf29vbz8/Pz8/P19fX29/nz9Pb3+fjz9fT09vP7/frc3tupq6aoqqeqrKmusK2ztbK3ubi9v77ExcfKy83Oz9HQ0tHW2Nfa3Nvh4+Ly9PP+///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v76/Pv8/v32+Pfs7u3p6+ru8O/s7u3l5+bl5+bk5uXj5eTi5OPi5OPj5eTj5eTk5uXk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bk5uXl5+bl5+bl5+bl5+bl5+bm6Ofn6ejn6ejn6ejh4+LT1dTDx8a+wsG8vr21t7avr625urXNzMfm49z8+O///vTz6+DfzbfEmnDQnWjVo3DYqHfWqHbTp3bYrH3ht4fes4bes4bgs4nhtovit43ito/itpHjt5DjuY/juo7mu5HovZPovJXnvZfnv5vqw6Lxzq7217r74cb/6dH/7dn/8N3/8uH/8+P/9uz/9u3/9u3/9/D/+PD++fP++fP9+vP++/b9+vP9+PT79vD99vD+9+//9u/99u769fH69fH69u369uv79en69Oj48ub48OX47+b37eT67eX87+b97+L57Nv36NX25Mz74MX52r321bbx0K/ty6jqx6HqxJ3rxJvpvpPrv5LtvY/ruInntYTjsX7eq3bZpG7doW3jqXfJmmazj1/Rt5T+7tX//fT49PPy8PXs6/Hj4+Xe4N/f4d7d4eDV2t3O09fR1tnN09PP1dXR19fQ1tbZ39/q7u31+fjx9fTw9PPx8/Lx8/L09PT29vb39/f39/f4+fv09ff19/b4+vn7/frv8e7Fx8Kho56mqKOpq6ausK2ztbK3ubi8vr3DxMbJyszLzczS1NPW2NfY2tni5OP09vX+///9//7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////////////+/v7+/v77/fz2+Pfu8O/p6+rq7Ovs7u3p6+rk5uXk5uXk5uXj5eTj5eTj5eTj5eTj5eTj5eTk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bm6Ofm6Ofn6ejn6ejk5uXZ29rIzMvAxMO+wL+6vLu2uLWys665uLPKx8Dh3dT79+z//vT/8d7t0K7Io3bBl2XTpXHUom/VoW/eqnrcqXris4Xfs4bftIrgtYvfs4zes4njtIbkuIvgtpDdtZHgtpDjt5Dmu5HovZPpvJLnvJLqwJjvyaT31bL73sD/5cz/7NX/8N//8+P/8+P88+T99OX/9+r/+Ov99+v89ur79+v9+e78+Oz89ev58+f58eb78+b89Of89On58+f48ub68uX58uL48eH37t317Nv16dn569756dz559v+6Nv/6dn959L438n02r/z1rjv0a/tyaXsxKDswJnsv5XtvpLuv5HtvpDlt4bfr37erHfeqXPco2vbnWLYnF7Kl1a2iVC6k2zlxa7/9O7/+/v48vL09fDl6OHj5t3c3tnb3drg4ePa3eLR1tzO09nQ1djN09PS2NjX3d3S2NjQ1tbb4eHp7+/x9fTz9/b19/bz9fTy9PPz9fTz8/Px8fH09ff4+fv5+/r2+Pfx8/DW2NWytK+nqaSmqKOqrKewsq+1t7S4urm8vr3Cw8XIycvKzMvS1NPV19bX2djl5+b4+vn+///9//7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////////9/f38/Pz9/f37/fzw8vHp6+rs7u3t7+7o6unk5uXl5+bk5uXk5uXk5uXk5uXj5eTj5eTj5eTj5eTk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bm6Ofm6Ofn6ejn6ejn6ejg4uHO0tHCxsW/wcC8vr26vLmztbKwsay1tK/DwLnd2dD28un//Oz//eb04L/StY2/mWzHl2bYoWvepXDdpnDbp3Xaqnrbr4Les4jgtYrhtYjjtYTjtIbhtZDdso/br4rcr4jhtIvpuo7svZHpvZDqv5Tswpjtx6Lvy6n00rb63MT/5M//6tb86tb669b77tv/9OH/9uT88d/479758N/79OL79OL68eD37t347Nz57tz67936793469v66tv66tr669j669j46dT35tL35dH75tP54tD53sv63sj83MP62Lz007LwzqvnxaDnxJzpwpnrwJbuvZLtuo3suIjqtoTir3rlsnvir3bapmzWnmPWml7TkVXFik6uhEjDo3Ly17z/+PD/9vv17vbt7e/j6OTd49nd49nY3dfa293d4OXW2eDM0dXO09bP1dXR19fU2trW3NzT2dnQ1tbS2NjU2tri5uXr7+709vX19/b19/b2+Pf4+Pj39/f09ff5+vz19/bk5uXR09C5u7imqKOpq6aoqqWsrqmxs7C2uLW5u7q8vr3DxMbIycvLzczS1NPT1dTZ29rr7ez7/fz+///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////+/v79/f38/Pz8/Pz09vXs7u3q7Ovu8O/t7+7l5+bi5OPm6Ofl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bm6Ofm6Ofn5+Xn5+Xp6+rl5+bW2NfHyci+wsG7v763uba2uLWxsq2vrqmzsq2/vLXU0crq6uD5/PP+/O/+79rhxqjFmm3FkVjXm13cn2DjqG7gqXHcqHbZqXjbr37itofjt4ris4nmtY3jsorfroXdrIPgr4bltorouY3muY/rwJXqwJjowZrnwZ3rxKXwy67307n42L/02sHy3cL348r/69L/7dX76dH359D359D869f97Nj869f66tP56dL66tP66NL859L94s/+4c/94cz84Mr74cr64Mn538b63sb228D217v00bPxzavxyqPwxpztwpXpv4/lu4vmvIzovI3qu43ruInotITnr3zlrHXlqnDgpGbcoGLYnF7OklTAhEi+f0m6hlTXt4786cv//O3/9PDx7PDt7vPj6enX4N3X4Nvc4uDZ3OHZ3OXa3ebR1NnK0M7Q1tLO1NLS2NjT2dnT2dnU2trU2trR19fP1dXS1tfb3+Dj5+jm6uvq6+3u7/Hv8PLu7/Hp6uzi4+XZ29rKzMu7vbqxs7Cpq6iqrKmsrquvsa6ztbK3uba5u7q9v77ExcfJyszO0M/R09LT1dTf4eDy9PP8/v39//7+///+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v5+fnq7Ovs7u3u8O/s7u3p6+rm6Ofl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bm6Ofm5uTm5uTp6+rn6ejb3dzNz87BxcS8wL+5u7i5u7i0tLKxsq2xsq2trKe0s67Gx8LU3drs8u7//PH/9uH73rzYsoXDlFzLl1vUnGHZoGjbpGzbpnDbqXbdrX3er4Per4XisYjhsIfhsIfhsIXjsofks4jltInltorouY/ou5LpvZbqvpnrwJ3twqDtxKTtxqXsyanrzK3x0rX32rz63b/33L/2277228D638T64MX84Mj64MX74MX74MX74MX73cP/3sX/28P82L751rr207X00bP00LDzz63vyaXvx6Ptw5vqv5XpvZDrvYzqu4fouYPpuoTruYTpt4TntH/lsHzkq3Tjpm3jo2bnpmbfnl7TllfIjVG5gky6iFfaroH62LP/+eP//fD18ejq6eXp7e7c5ObS3NvZ4+TW3uDY4OPa3ebZ3OXX2uHP09bL0c3Q19DP1dPS2NjT2dnT2dnV29vT2dnS2NjW3NzT19jV2drW2tvX29zb3N7e3+He3+Hb3N7Y2dvJyszFx8bBw8K4ureztbKwsq+wsq+xs7CytLG1t7S4ure6vLu+wL/ExcfKy83Q0tHR09LY2tnm6Of19/b6/Pv7/fz9//79/f39/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////9/f3+/v7+/v75+fnx8fHo6unt7+7v8fDq7Ovm6Ofn6ejm6Ofk5uXl5+bl5+bl5+bk5uXk5uXk5uXk5uXl5+bk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bm6Ofl5+bl5+bl5+bl5+bl5+bm6Ofm5uTm5uTo6unn6eje4N/T1dTHy8rAxMO4vLu1uraztbKytK+wsq2trqmtrqmxsq3CxMPNz8zl5uD5+e3//e3+8tzo0bLKqoHBl2TJl1zSml/coWnepHLbpXfZpnnXqHzYrYPXrYPcr4bhsojjsofksYbmsYXosobnsYXqtYntuo/su5LsvZPqvZTpvZbpvZbqvpnrv5ruwp/wxaLzyKX0yaf1yqjzyqr1zKz0zaz1zK70zaz3zq74z6/4z6/2za320rLz0LDyy6rwyKTuxJ7swZfrvpTsvY/svI7uu4zsuYrqt4jouIjpuYnouIjmtoXptoHpsnrlrnXhqW7hpWfeoWDdmVjXkk/QiUfMiEu+gUq3g1TIonvs0bP/89r//O348+/08/Hr7ejf5N7V3tnT3trT3uDV3uPV3ObW3eXZ3OPX2t/T19jO0tHM0s7N08/Q1tbU2trT2dnT2dnU2trS2NjR19fX3d3W3NzX3d3a3t/b3+Dc3d/b3N7a293Z2tzU1tXJy8rHycjCxMO4ureytLGwsq+0trO1t7S1t7S3uba6vLm9v77AwsHGyMfKzMvP0dDU1tXg4uHt7+709vX3+fj5+/r5+/r7+/v8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8/Pz+/v7+/v719fXp6ens7u3u8O/t7+7q7Ovm6Ofl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXl5+bk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bm6Ofm6Ofl5+bl5+bl5+bl5+bm6Ofm5uTl5ePn6ejn6ejg4uHY2tnM0M/Dx8a/w8K3u7q2uLWztbKtr6yusKuwsaypqaerq6mytLHDyMTU2dPl6uT9/fP//u787NPpzajVsITFl2bGlGPPm2zVoXLapnfcrHzYrH3Vqn3YrH/droLhroPgq3/irIDmsITnroPosobqtIjqtYnptonpuYvrvI7svY/su5DuupLrupHquZDquZHtvJTvvpbuvpjuvpjrvpfsvJbqvZbuvpjxwZvxwZvuwZrqwJjnwJfnvZPou5HouY3ouIjquIfqtoTst4Pst4PqtYPns4Hns4PntYTksoHgrnviq3Xip2/eombcn17cm1fXl1DPjEjCgUGydDu8hFPRpH3tzK3/7Nf//e36/PHv9fHp7fDh5Onb4d/Y4dzW4dvU4N7U3uDU3eTV3ObW2uPX297V2djR1tLO08/M0tDK0NDM0tLT2dnT2dnQ1tbU2trU2trS2NjT2dnV29va4ODi5ufj5+je3+HW19nT1NbU1dfO0M/KzMvFx8a8vr23uba2uLW1t7S7vbq4ure4ure5u7i8vru/wcDDxcTHycjKzMvO0M/W2Nfm6Ofx8/Ly9PP19/b4+vn2+Pf7+/v7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/f3+/v739/fu7u7t7e3w8vHt7+7q7Ovn6ejl5+bl5+bl5+bl5+bl5+bm6Ofl5+bk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bm5ubo6Ojl5+bl5+bl5+bc3t3P0dDKzMvAxMO4vLu0uLezuLSytLGvsa6usK2srquprqqqr6utsbC3ubjExcDX18/u7OD/++///fP/7+Dt18DXupzJpHrGmmvQnGraom/ZpG7cp3Heq3beqnjeqnvfqn7frIHfrIHgrIThroPjsIXlsYLlsYLmsoDotILptYPntYTqt4jsuYrtuovsuYzpuYvpuYvquY7ot4zouY3quY7qu4/quY7puI3puI3ouIrnt4bnt4botoXntYTpt4bquIfntYLksn/msoDlsX/lsn3lsn3irXncp3PbpnLdqHLbomvipWzcnFzWk0/QjEW8eTOvcTS2g07RqYXny7P/7+D//vb6/Pfu9PLk7ere6eXb4+Pb4OPW3t7U3NzV3d/V3+DV3OLU2+HS19vV2dzW29fZ3tjT2NLJzsrJzc7Lz9DR1dbR1dbR1dbR1dbQ1tbQ1tbR19fS2NjT2dnX3d3e4uPi5uff4OLV1tjOz9HMzc/IysnFx8bAwsG7vby3ubi1t7a3ubi5u7q9v765u7q6vLu/wcDDxcTExsXHycjMzs3Q0tHh4+Lw8vHy9PPv8fDw8vH09vX2+Pf6+vr8/Pz+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f38/Pz8/Pz5+fnw8PDr6+vs7Ozt7+7r7ezo6unm6Ofl5+bl5+bm6Ofm6Ofl5+bl5+bl5+bk5uXk5uXl5+bl5+bk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXl5+bl5+bl5+bl5+bl5+bl5eXm5ubk5uXl5+bm6Ofg4uHT1dTKzMvBxcS6vr22urm1ubiztbKxs7Cvsa6qr6uqsKyqr6urraysrKyxsKy7urXMy8bY19Pq6On49PP/+vP/9OT748fszKbZr4fImWvRnWvSn2rVom3bp3Xdqnvdqn3bq33cq4DgrYLeq37dqnveqnvgrHzkr33lsHzlsHzlsX/ls4LotITotoXqtofotYblsoPjsIHlsoPms4TotYbptofotYbntIXms4Tns4Pnsn7nsnznsn7msX/jr33ksH7ksn/mtIHir3rjsHnhrXTfqG/gpWvfpGjdoWXXnGDVnGTSmWHDiE61ej65gEjGk17ftIf52LX/8Nv/+e39/Pjx9/fk7vDc5+nX4+PU3t3X39/V3d3U3NzU3N7X3N/X3N/W29/V2t3W2tvW2tnR1tLR1tDO083IzcnJzc7IzM3Lz9DN0dLQ1NXR1dbQ1tbQ1tbP1dXO1NTP1dXQ1tbT19jV2drV1tjP0NLKy83JyszFx8bBw8K9v766vLu4urm4urm6vLu9v766vLvAwsHDxcTBw8LAwsHGyMfMzs3P0dDe4N/q7Ov09vX19/bx8/Lw8vHz9fT19/b4+Pj7+/v9/f39/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v8/Pz8/Pz09PTr6+vq6uru7u7r7ezp6+rn6ejl5+bk5uXl5+bm6Ofn6ejl5+bm6Ofl5+bk5uXk5uXl5+bl5+bk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXl5+bl5+bl5+bk5uXl5+bk5uXk5uXl5+bl5+bj5eTZ29rLzczExsW/wcC7vby4urmytrWxtbSvs7Krr66rraysrqutrqmtrKeqqaWsq6mysrC5ubfIyMbX2NPp6OP49Ov/+O7/9eX76dP02bzfu5fXrYPLoHbHmnDKm23Nn27WpnXhr3zhrXvir3rjr33grHrdqXncqXrfrH3ir4Dirn/irn/kroDjr4Dlr4PksIHksIHksIHlsYLmsoPotIXotIXotIXns4TnsYPnsYLpsX7osH3lsH7lr4Dirn7fq3vgrHrir3rcqG/hqW7jqWrgo2Lcm1fWk03MiEG/fjq0fD+7iVTFmm3Vsozt0rX/7Nf/+en//vP//fL59u3s7OTg49zb3drX3dvV3d/T293U3NzV29vV29vV29vX29zW2tvU2NnS1tfQ1NPR1dTR1dTV2tbQ1dHGy8fFycjFycrJzc7N0dLQ1NXQ1NXP09TO0tPM0NHJzc7N0dDKzs3JzczLz87Mzs3Jy8rHycjGyMfDxcTAwsG8vr27vby7vby8vr29v76+wL++wL+9v76+wL/CxMPGyMfKzMvQ0tHV19bt7+7y9PP3+fj2+Pfy9PPw8vHx8/Ly9PP29vb5+fn7+/v9/f39/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v77+/v8/Pz5+fnu7u7q6urt7e3v7+/r7ezp6+rn6ejl5+bk5uXl5+bl5+bm6Ofm6Ofm6Ofm6Ofl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXl5+bl5+bk5uXk5uXl5+bj5eTk5uXk5uXj5eTk5uXc3t3O0M/GyMfCxMO+wL+6vLuzt7aytrWwtLOtr66srKyurauvrqmvr6euramtrKiurqyxs7CvtLCyt7G7wLzMzsvf3tzv7Of+9+///e//+OH/69D32rzqzKrevJfRrobKo3jHnnDGmmnOoG7Xp3fcqXrcqXrbqHvbqHvcqXzeqnvirH3jrX7jrX7hq3zhq3zjrnzmsX/jrnzkr33kr33lsH7lsH7kr33mrn3mrnvnr3zhrHjgq3fkr33lr4DhrHrdqHbdqHTZpG7UnWTKlFjCjFC+hku/h0zIkFXOm2ThuIrtzaf+5cf/9+P//vP//fry8vLl5+bi5OHg4dvc3dXb3NTa29XY2tfW2tvW297W3NzV29nW2tnW2tnW2tnU2NfT1dTR09LQ1NPP09LO08/R1tLIzcm6v7u+wsHGysvAxMXFycrJzc7Jzc7Kzs/M0NHLz9DIzM3IzMvGysnFycjGysnIysnGyMfDxcTDxcTCxMO/wcC9v76+wL/AwsHAwsG/wcC+wL++wL+9v77AwsHCxMPDxcTIysnZ29rq7Ovz9fT09vX19/b19/by9PPw8vHv8fDv8fD09PT39/f6+vr8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v77+/v8/Pz8/Pz09PTp6enr6+vv7+/t7e3q7Ovp6+rn6ejl5+bl5+bl5+bm6Ofm6Ofn6ejn6ejn6ejm6Ofm6Ofm6Ofl5+bk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXl5+bk5uXl5+bk5uXh4+Lj5eTg4t/V19TJy8jDxcK/wb67vbq3uba1t7S0trOxsa+xsKyxraquqqetqqWqqaSrrKSsr6iss6yosa6nsbCqtLWxubm7v77Fx8TT0tDg29jx6OH57+X/9+v/+en/9uP769Lv28Dmz6/ewZ/YtpDPqYLLoHbNnnTSn3TUn3PTn2/UoWzXpG3ap27cqXDeq3Leq3LgrHLhrXPkrnLkrnLjrXHjrXHjrXHkrnLmrnPmr3birnTbqG/YpGvYpGvZomzTnGbPmGLMl2PHlWLHmWjNpHjVsorewJ7pzrP23cf869n/+ur//fD//vX39vHq6efj4eLi4uLh4eHa2tjZ2tXZ2tTZ2tTY2dTW19LW1tbY2tnX29rV29nV2djU2dXT19bS1tXP09TN0dLO0tHM0c3Iz8jM08zJzsi+w7+9vsC8vb/AwcPExsXHycjIysnIzMvKzs3Kzs3IzMvFycjFycjGyMfGyMfExsXCxMPBw8LBw8LBw8LAwsG/wcDBw8LCxMPBw8K/wcC9v769v77Bw8LBw8LAwsHHycjZ29rr7ez09vXy9PPy9PPy9PP09vX09vXx8/Lu8O/s7u3y8vL29vb5+fn7+/v8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v78/Pz+/v77+/vw8PDq6uru7u7w8PDs7Ozp6+ro6unn6ejn6ejn6ejn6ejn6ejn6ejn6ejo6uno6unn6ejn6ejn6ejm6Ofl5+bl5+bl5+bm6Ofm6Ofn6ejm6Ofm6Ofm6Ofm6Ofm6Ofl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXl5+bj5eTi5OPk5uXj5eLd39zNz8zFx8S/wb69v7y6vLm4ure2uLW0trOzsq6vrqqsq6mrqqasq6arrKSrrqWor6emrKqosLCpsbGmrq6orqywtLO5ury/v8HExsXP0c7b3Nfl5N/w7eT69uv/+ez/9ub/8t3+7NT748n4273z0LLsxaTiupfas4zTrIHOqHnMo3XLo3LNpXTOpnXNo3PLoW/Po3LOo3DNom/MoW7MoW7Oo3DSpHLSpnXNpXTLpXbPpnjUq3/ar4XftYvmvJTqxJ3517L83rz+5sr/7tj/9+f//fT//vv6+vrx9/fl7+7f5+fd4+Pd3uDa293W19nS09XW19nS1tXR1dTT19bW2NfX2dbZ2dfY2tnU2tjT2dfS2NbS1tXR1dTQ1NPO0tPN0dLJzczIzszGzMjO1NDZ3trW2tnLzcy4urm9v769v76/wcDDxcTFycjHy8rHy8rHy8rGysnGysnIysnGyMfDxcTCxMPDxcTExsXExsXDxcTCxMPCxMPBw8K+wL+9v768vr29v76+wL/DxcTP0dDi5OPx8/L19/by9PPx8/Ly9PPz9fT09vX19/b09vXv8fDr7ezw8PD09PT39/f6+vr7+/v9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v78/Pz+/v739/fu7u7t7e3x8fHw8PDs7Ozp6+ro6uno6uno6uno6uno6uno6uno6unn6ejo6unp6+ro6uno6uno6unn6ejm6Ofm6Ofn6ejn6ejo6uno6uno6unn6ejn6ejm6Ofm6Ofm6Ofl5+bl5+bl5+bl5+bk5uXj5Obl5ujk5uXj5eTl5+bl5+bj4+Hj4+HV1dPJycfCwsDBwb+8vru5u7i3uba0ubWvtLCssq6ssa2usK2usKuur6msraerrKaoqaSsraitr6qsrqurraqssa2vs7KwtLOzuLS3vLi7wLy/xMDIysfT1dLe3tzl5ODy7+r59O7/+fH/+/D/9+v/9Ob/8+P/8+L+7dv459Px38vr2cPr1sHq1r7p07zn0bnnz7fnz7fmzrTlzbPmzLPozrXq0Lfr07nw3MPw3sbz48z25dP66tv+8OP/+Oz//PD/++3//PD++u769+719O/v8Ovj5eTa3Nvb3dzZ29rV2djT19bT19bS2NjT2NvR2N7R2ODR2ODS2eHT2uLU3N/V3d/W3NrU2tjQ2NjQ2NjP19fQ1tbP1dPO1NLN08/M0s7L0c/Izs7EyczP1Nje4uXh5ebe4N3V1tHCwsC9vb25u7q7vby/wcDBw8LDxcTGyMfFx8bGyMfGyMXFx8TDxcLDxcLExMLFxcPExsXDxcTBw8K/wcC+wL+9v77AwcPDxMbFxsjOz9Hd397t7+7z9fTy9PPy9PP19/bx8/Lz9fTz9fTz9fT19/b2+Pfy9PPs7u3t7e3x8fH19fX4+Pj6+vr9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v79/f37+/v7+/vy8vLr6+vv7+/y8vLu7u7t7e3p6+rp6+rp6+rp6+rp6+rp6+ro6unn6ejn6ejo6unp6+ro6uno6unp6+ro6unn6ejm6Ofn6ejo6uno6uno6uno6uno6unn6ejn6ejm6Ofm6Ofm6Ofm6Ofm6Ofl5+bl5+bk5efl5ujj5eTj5eTn6ejl5+bh4d/j4+Hc3NrNzcvExMLDw8G+wL25u7i3uba1uraxt7WstbKrsa2rsKysrqmrraisraiuramwr6qtrKesq6aur6qusK2srquqr6uus6+us62vtLCxtrKzube1u7u3vb29wcTBxcjFycrKzs/U1tXb29ng4t/m6OPt7ujx8uz18u359PD89/H++fP/9/L/9/L/+PH/+fL/9+7/9+7/9u3/9uz/9uz/9+3/+e///PH/+PD9+PL8+fT5+PT4+Pj2+Pfu8vPp7e7n6+zj5+bf4+Lb4d/Y3tzT2dfS2NbV2djV1dXZ2dnY2tnT19bT19bS2NjP19rQ2d7N1d/R2ePT2+bS2uTS2d/T297S2trR2dnQ2NjQ2NrQ2NrP19fP1dXO1NLM0s7M0s7HzcvFy8vIzdHa3eLh5One3+Hh497n6OPk5OLX19fIysnBw8K9v765u7q5u7q8vr2+wL+/wcDBw8DBw8DBw8DBw8DAwL6/v72/wcC+wL+9v768vr29v77Bw8LIycvQ0dPf4OLr7O719/b2+Pfz9fTz9fTy9PPv8fDw8vHz9fTz9fTx8/Lz9fT2+Pfz9fTt7+7r6+vv7+/09PT39/f6+vr8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/v33+fjq7Ovt7+7y9PPv8fDu8O/q7Ovp6+rq7Ovq7Ovp6+ro6unp6+rp6+ro6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6unn6ejn6ejn6ejm6Ofm6Ofl5+bl5+bl5+bl5+bk5uXl5+bl5+bl5+bk5uXk5uXk5uXj5eTh4+Li5OPU1tXGyMfBw8K/wb68vru5u7i4ure0ubWxtrKtsq6usK2tr6ysrqusrqutrautrqmsraisrairraqrraqrraqsrqutr6qusaqws6yxs66wtbGvtbGvuLWzube2vLq2urm7vbrAwL7Bwb/Bw8DCx8PIysfMzsvS087V1tHX2dba2tjf29rh3dzg4N7i4uDk5OLl5OLn4+Ll5ODj5N7h5N3h5N3i497k4uPh3+Lb3ODa293b3N7a293V2drS1tfW1drX1drV1NnS1tfO19TN1tHM1dDO1NLR1dbT1NbR1dbS1tfS1tfQ1djR1tnQ2NvQ2NvR2dzS2d/R2dzS19vR1tnR1tnS2NjS2NjU2trT2dnP1dXM0tLL0dHM0M/Kzs3GysnIzMvS1tfe3+Hg4ePc3t3c3tvh4+Dj5eTk5uXj5eTe4N/X2djP0dDGyMe/wcC7vby6vLu4urm3ubi3ubi4urm6vLu8vr29v76/wcDExsXLzczV19bg4uHq7Ovv8fD19/b09vXy9PPy9PPy9PPy9PPx8/Lx8/Lx8/Lx8/Lx8/Ly9PP09vX09vXz9fTy9PPr6+vn5+fy8vL39/f39/f8/Pz8/Pz////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz7/fz09vXp6+rt7+7x8/Lu8O/t7+7q7Ovp6+rq7Ovq7Ovp6+ro6unp6+rp6+ro6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6unn6ejn6ejn6ejm6Ofl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXj5eTi5OPj5eTi5OPh4+Lj5eTa3NvNz87DxcTAwr+/wb68vru4ure3uba0trOxs7Cwsq+vsa6usK2tr6ytr6ysrqusrqurraqrraqrraqrraqsrqutr6qsr6iusaqvsaywsq2tsq6us6+wtbGyt7O0ubW4ure7u7m8vLq5vrq6v7u/wcDBw8LAwsG/w8LAxsTDx8bIxsnKyMvHy8zHzc3IzM3Jzc7Jzc7Jzc7IzszHzcnHzcvHzcvOz9POz9PKz9LL0NPN0dLN0dDK0M7Kzs/R0NXS0NXR0NXR0tTM1dLL1tLM1dLO1NLP1dXQ1NfR1djR1djR1djQ1NfQ1djR1tnQ1djR1tnR1tnR1tnQ1djQ1djQ1djR1tnR19fR19fQ1tbO1NTM0tLK0NDKzs/IzM3GysnN0dDX2djd397d397c3t3e4N/g4uHh4+Lk5uXm6Ofn6ejn6ejm6Ofj5eTg4uHY2tnY2tnW2NfV19bT1dTT1dTU1tXV19be4N/h4+Lm6Ofs7u3w8vHy9PPz9fTz9fTz9fTz9fTy9PPy9PPx8/Lx8/Lw8vHw8vHx8/Lx8/Lx8/Ly9PPz9fT09vX09vXz9fTs7Ozm5ubu7u709PT29vb7+/v7+/v+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz6+vr5+/rw8vHp6+ru8O/x8/Lu8O/s7u3q7Ovp6+rq7Ovq7Ovp6+rp6+rp6+rp6+ro6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6unn6ejn6ejm6Ofm6Ofl5+bl5+bl5+bl5+bl5+bk5uXj5eTj5eTj5eTh4+Lh4+Li5OPh4+Lg4uHg4uHe4N/T1dTGyMfAwr/Awr+9v7y3uba4ure1t7SztbKxs7Cxs7Cvsa6usK2usK2tr6ysrqurraqsrqusrqurraqsrqutr6yqr6mssauvsaywsK6wsLCwsLCxsbGytLOytLOytrW1t7a2uLe1ubi4urm7u728vL69wcK8wsK8wsK/w8THwsjGxMnCxsm/x8nCx8rDyMvCyszDy8vFy8vGysnGysvGysnHzMjIzcnH0MvI0czJ0MnJzsjGz8rFzsnKzs/MzdHNztLM0NPK0tLL09PN09PO1NTP1NfO09bP1NfP1NfP1NfO09bO09bP1NfO09bO09bP1NfP1NfP1NfP1NfP1NfQ1djQ1tbO1NTN09PN09PL0dHJz8/Hy8zGysvJzczS1tXb3dzb3dza3Nvd397f4eDf4eDe4N/h4+Lj5eTl5+bn6ejp6+rq7Ovq7Ovt7+7u8O/u8O/u8O/t7+7u8O/v8fDv8fDw8vHx8/Lz9fT09vX09vX09vXz9fTy9PPx8/Lx8/Ly9PPy9PPx8/Lw8vHv8fDv8fDw8vHw8vHw8vHx8/Ly9PPz9fT09vX09vXu7u7l5eXo6Ojw8PD19fX4+Pj6+vr9/f39/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v6+vr2+Pft7+7q7Ovw8vHx8/Lu8O/s7u3r7ezq7Ovq7Ovq7Ovp6+rp6+rp6+rp6+ro6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6unn6ejn6ejm6Ofl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXi5OPh4+Lh4+Lh4+Lh4+Lg4uHe4N/e4N/Y2tnMzs3DxcLAwr+9v7y5u7i4ure2uLWztbKytLGytLGwsq+vsa6vsa6usK2srqusrqusrqusrqusrqusrqusrqursKyssa2vsa6xsa+xr7Czr7CysLGysrKytLOwtLOytrWzt7a0uLe4urm7uby7uby6u724vLu4vr67v8DAvsHCwMO+wsO8xMS/xcXBxcbBx8fCyMjDycnEyMnHyMrHycjJy8bHzsbH0cnH0cnKz8nIzcfHzsfHzcnJz83Kzs/NztLLz9LJ0dPJ09TM0dTO0tXO09bO09bO09bO09bO09bN0tXN0tXO09bO09bO09bP1NfP1NfP1NfP1NfP1NfQ1djP1dXN09PL0dHM0tLK0NDHzc3Hy8zJzc7P09LW2tnc3t3b3dza3Nvd397f4eDe4N/i5OPi5OPi5OPj5eTk5uXl5+bl5+bm6Ofp6+rq7Ovs7u3t7+7u8O/v8fDw8vHx8/Lw8vHw8vHv8fDu8O/v8fDw8vHx8/Ly9PPw8vHx8/Lx8/Lx8/Lw8vHv8fDv8fDv8fDv8fDv8fDv8fDv8fDw8vHy9PP09vX19/bx8fHm5ubk5OTr6+vz8/P39/f5+fn9/f39/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v6+vrz9fTq7Ovr7ezx8/Lw8vHu8O/s7u3s7u3q7Ovr7ezq7Ovp6+rp6+rq7Ovp6+rp6+rp6+rp6+rp6+ro6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6unn6ejn6ejl5+bl5+bl5+bl5+bl5+bl5+bk5uXj5eTj5eTj5eTi5OPh4+Lg4uHh4+Lg4uHf4eDd397f4eDc3t3U1tXIysfAwr+8vru8vru5u7i2uLW0trOztbKytLGxs7Cvsa6vsa6vsa6tr6ysrqutr6ytr6ysrqusrqusrquqr6urr66usK+vr6+wrq+yrq+xr7Cxr7Czs7OytLOxtbaytre1tri3t7m3tru3t7m7ubq7u7m8vr27v76+vr6/v7++wsG/xcPAxMPDxcTFxcXGxsbEyMfEyMfHx8fIyMjGyMPFysTFzMXHzMbMy8fNzMrMzMrJzczKzs3Kzs3OztDNztLJ0dPI0tPM0dTM0dTN09PN09PN09PO1NTN09PM0tLN09PO1NTP1dXP1dXP1dXP1dXQ1tbQ1tbP1dXP1dXP1dXM0tLL0dHK0NDIzs7Fy8vJzc7N0dLV2djX29ra3Nvb3dzc3t3d397e4N/f4eDh4+Lh4+Li5OPk5uXl5+bm6Ofn6ejo6unn6ejo6unp6+rq7Ovr7ezr7ezr7ezs7u3t7+7u8O/v8fDx8/Lx8/Lx8/Lw8vHv8fDw8vHw8vHw8vHv8fDu8O/u8O/u8O/v8fDu8O/u8O/u8O/u8O/v8fDx8/Lz9fT09vXz8/Pp6enh4eHn5+fx8fH19fX4+Pj8/Pz8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f36+vr5+fnv8fDo6unu8O/x8/Lu8O/t7+7s7u3r7ezr7ezr7ezr7ezq7Ovq7Ovq7Ovq7Ovp6+rp6+rp6+rp6+rp6+rp6+ro6uno6uno6uno6uno6uno6uno6uno6uno6unn6ejn6ejl5+bl5+bl5+bl5+bl5+bk5uXj5eTj5eTi5OPi5OPh4+Lg4uHf4eDg4uHf4eDe4N/d397d397d397Z29rO0M3Bw8C7vbq8vru6vLm3uba1t7S0trO0trOytLGxs7Cwsq+wsq+usK2tr6yusK2usK2tr6ysrqusrqurraysrq2tr66tr66vr6+wrq+wsLCwsLCxsbGxsbGvs7SwtLW0tLa2tri2t7m2t7m6tre8uLe6vLm6vLm6vLm7vbq9v7y/wb6/wb7Bwb/FwcDEw8HAxMPAxMPCxMPExMTIysnHycbHycbIysfMysvNy8zMzc/Jz8/Fzc3Gz8zLzM7Mzc/I0NPJ0dTM0NPN0dLN09PM0tLM0tLN09PN09PM0tLM0tLN09PP1dXP1dXP1dXP1dXP1dXP1dXP1dXO1NTN09PL0dHK0NDHzc3Fy8vGzMzM0NHS1tfY3NvW2tnZ29rc3t3d397d397d397f4eDe4N/e4N/g4uHi5OPk5uXl5+bm6Ofn6ejp6+rq7Ovr7ezs7u3t7+7t7+7t7+7t7+7s7u3s7u3u8O/v8fDw8vHv8fDv8fDu8O/w8vHv8fDv8fDu8O/u8O/t7+7u8O/v8fDt7+7t7+7t7+7t7+7t7+7v8fDx8/Lz9fT19fXt7e3h4eHk5OTu7u7y8vL39/f6+vr7+/v8/Pz+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz5+fn39/fs7u3o6unx8/Ly9PPs7u3u8O/t7+7r7ezr7ezs7u3s7u3r7ezq7Ovr7ezr7ezq7Ovq7Ovq7Ovq7Ovp6+rp6+rp6+rp6+ro6uno6uno6uno6uno6uno6uno6unn6ejn6ejm6Ofl5+bl5+bl5+bl5+bk5uXj5eTi5OPh4+Lh4+Lh4+Lf4eDf4eDf4eDe4N/c3t3c3t3b3dzb3dza3NvT1dLHyca+wL27vbq7vbq4ure2uLW1t7S0trOztbKxs7Cxs7Cxs7Cvsa6usK2usK2vsa6usK2tr6ysrquvra6urq6rsKyrsKyssa2tsq6wsq+wsq+wrq+xr7CwsrGysrK2srO2tLW0uLe1ubi6uLm9ubq7u7m7vbq8vru9v7zAwL7Cwb/Cwb/DwsDEwsPExMTBxcTAxsTCxsfExcfGx8vGx8vGx8nGx8nHyMzGyc7DytDBzM6/z87Az8zIzM3LzM7JztLLz9LOztDPz9HM0NHL0dHM0tLM0tLM0tLL0dHM0tLN09PP1dXO1NTN09PO1NTM1NTM1NTM1NTL09PK0NDK0NDIzs7Fy8vFy8vJz8/R1dbV2drY3NvX29rZ29rc3t3d397d397e4N/f4eDh4+Lg4uHh4+Lj5eTk5uXk5uXk5uXm6Ofm6Ofn6ejo6unp6+rq7Ovr7ezs7u3t7+7t7+7t7+7t7+7t7+7u8O/v8fDw8vHw8vHv8fDu8O/u8O/t7+7t7+7t7+7t7+7t7+7t7+7t7+7t7+7s7u3s7u3t7+7v8fDx8/L09PTv7+/h4eHg4ODq6urv7+/29vb4+Pj7+/v8/Pz9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v4+Pj29vbq7Ovo6un09vXz9fTr7ezu8O/u8O/r7ezr7ezs7u3s7u3r7ezr7ezr7ezr7ezq7Ovq7Ovq7Ovq7Ovq7Ovp6+rp6+rp6+rp6+ro6uno6uno6uno6uno6uno6unn6ejn6ejm6Ofl5+bl5+bl5+bk5uXk5uXi5OPh4+Lh4+Lh4+Lh4+Lf4eDf4eDf4eDe4N/c3t3c3t3a3Nvb3dzc3t3Y2tfO0M3DxcK8vru7vbq4ure2uLW1t7S0trOztbKytLGytLGxs7Cvsa6usK2vsa6vsa6usK2tr6ytrauvra6urqyrsKyqsKyrsa2ssq6us6+wsq+ysLGzsbKxs7KysrC2sa62sa6xtq+xuLG3t7e2tra0uLe0ura4vLu8vru/vb6/vry/vb6/v7/AwMC+wsG6xcG6xcG+xMS+xMTBxsnCyMjGx8nHyMrFyczCyc/Cy9DAztG+zsvAz8rJy8rLy83JzdDKztHNzc3Ozs7M0NHK0NDL0dHM0tLM0tLL0dHM0tLN09PO1NTN09PN09PN09PM1NTM1NTL09PK0tLJz8/Jz8/Hzc3EysrFy8vN09PV2drX29zW2tnX29rb3dzb3dzc3t3d397e4N/f4eDg4uHf4eDg4uHj5eTk5uXk5uXl5+bn6ejp6+rp6+rq7Ovq7Ovq7Ovr7ezs7u3t7+7s7u3t7+7u8O/u8O/v8fDu8O/t7+7s7u3t7+7t7+7t7+7t7+7u8O/t7+7s7u3r7ezs7u3t7+7s7u3s7u3r7ezs7u3u8O/w8vH09PTx8fHh4eHe3t7n5+fu7u719fX29vb7+/v8/Pz9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////+/v77+/v7+/v4+Pjy8vLn6ejt7+709vXy9PPt7+7t7+7u8O/r7ezs7u3s7u3r7ezr7ezr7ezr7ezr7ezr7ezq7Ovq7Ovp6+rp6+rp6+rp6+rp6+rp6+ro6uno6uno6uno6uno6uno6unn6ejn6ejm6Ofl5+bl5+bk5uXk5uXj5eTi5OPh4+Lh4+Lg4uHg4uHf4eDe4N/d397c3t3c3t3a3Nva3NvZ29rY2tnY2tfU1tPKzMm/wb66vLm5u7i2uLW1t7S1t7S1t7SztbKytLGxs7Cwsq+vsa6wsq+wsq+vsa6usK2usK2wsK6usK2rsa2ps6ursquss6ytsqywsq2zs7Gxs7Cts6+ssau9s7HCubKztai1u6+3vLiutLSzvbywvLivt7e5vby8ur28vLy0urq6xMO5v7+3wcCxxsGwxcC5w8K7xMG3yMC5yb7DyMHHysPBysfBy8zDzNG+yMrEz8vHzcnMy8nMysvHzM/Gzs7Jz8vK0MzK0M7L0dHL0dHL0dHL0dHL0dHM0tLM0tLN09PN09PM0tLM0tLN09PO1NTN09PN09PK0NDGzMzDycnEysrL0dHU2trX29zV2drY3NvZ3dzb3dzb3dzc3t3d397e4N/f4eDg4uHg4uHi5OPj5eTj5eTk5uXl5+bl5+bn6ejo6unp6+rq7Ovq7Ovr7ezs7u3t7+7u8O/u8O/u8O/u8O/u8O/u8O/u8O/u8O/t7+7t7+7t7+7s7u3s7u3t7+7s7u3r7ezs7u3r7ezs7u3s7u3r7ezr7ezt7+7v8fD09PT09PTk5OTa2tri4uLr6+vx8fH29vb6+vr7+/v9/f39/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////+/v77+/v6+vr29vbv7+/n6eju8O/09vXy9PPt7+7t7+7u8O/r7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovp6+ro6uno6uno6uno6unn6ejn6ejm6Ofl5+bl5+bk5uXk5uXj5eTi5OPh4+Lg4uHh4+Lg4uHf4eDe4N/e4N/d397c3t3b3dza3Nva3NvZ29rX2djX2dbV19TNz8zExsO9v7y6vLm3uba2uLW2uLW1t7S0trOztbKytLGxs7Cwsq+wsq+wsq+vsa6vsa6wsq+wsK6wsK6tsqyss6ytsqyss6yss6yttK2us6+wtbGuta62sauylJKthYW/nJa7nZXBo6HFq6rEsa3HtbPDsa/JtLPVuLrTtrjZwcHLtrXQuLbSv7vNwrzHvLbZxMHTu7fRwLbUwLXburHRtK7IvbvBwcHCw8fJzc7IzcnJzMXNycbOysnIzM3Gzs7H0MvJz8vK0M7K0NDK0NDL0dHK0NDK0NDL0dHL0dHK0NDL0dHN09PN09PN09PM0tLL0dHJz8/Hzc3EysrDycnJz8/R19fV29vX29zX29zZ3dzZ3dzc3t3c3t3d397e4N/f4eDf4eDg4uHh4+Li5OPj5eTj5eTk5uXl5+bm6Ofm6Ofn6ejo6unp6+rq7Ovr7ezs7u3t7+7s7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3r7ezs7u3s7u3r7ezr7ezs7u3r7ezp6+rr7ezq7Ovq7Ovr7ezr7ezr7ezs7u3v8fDy8vL09PTm5uba2trf39/o6Ojv7+/09PT4+Pj6+vr8/Pz9/f3+/v7////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v79/f37+/v5+fn09PTs7Ozo6unv8fD09vXy9PPu8O/t7+7t7+7s7u3r7ezr7ezr7ezr7ezr7ezs7u3s7u3s7u3r7ezq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovp6+rp6+ro6uno6unn6ejn6ejm6Ofl5+bl5+bk5uXk5uXj5eTj5eTi5OPh4+Lg4uHg4uHf4eDe4N/d397d397c3t3b3dza3Nva3Nva3NvY2tnW2NfW2NXV19TQ0s/KzMnBw8C9v7y4ure2uLW1t7S2uLW1t7S0trO0trOytLGwsq+vsa6vsa6vsa6wsq+ysrC0sK+1r6+ysa2xsq2ws6yus6yrta2qta2stbCqr6mys63HrqqvaHB+HimWMTmiOz+nQ0WyUlOsV1SvYFy6b2rGeHTGcnDReXjQdHXWenvZgX/WgX7Qe3bPenXWe3bPcm3NbmrJZWPIXFyuUlO1goHNtbXQxMbJxcTKy8XJzMPNysXMy8nKy83JzdDMzsvMzsvKzs3Kzs/Lz9DLz9DK0NDK0NDL0dHM0tLIzs7K0NDN09PO1NTM0tLK0NDIzs7Hzc3EysrCyMjGzMzQ1tbX3d3X3d3Y3N3Z3d7a3t3a3t3d397d397e4N/f4eDg4uHg4uHh4+Lh4+Li5OPi5OPj5eTk5uXl5+bm6Ofl5+bm6Ofo6unp6+rq7Ovq7Ovr7ezs7u3r7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezs7u3s7u3s7u3s7u3s7u3r7ezp6+rp6+rp6+rp6+rp6+rp6+rq7Ovs7u3u8O/v7+/09PTp6enZ2dna2trk5OTs7Ozy8vL39/f5+fn7+/v9/f3+/v7////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v79/f37+/v4+Pjy8vLp6eno6unx8/L19/bx8/Lu8O/u8O/t7+7s7u3r7ezr7ezr7ezr7ezr7ezs7u3s7u3s7u3q7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovp6+rp6+ro6uno6unn6ejn6ejm6Ofl5+bl5+bl5+bk5uXk5uXj5eTi5OPh4+Lg4uHf4eDf4eDe4N/d397c3t3c3t3b3dza3NvZ29rZ29rY2tnW2NfV19TU1tPR09DNz8zFx8TAwr+6vLm2uLW1t7S1t7S0trOztbK0trOytLGwsq+wsq+wsq+vsa6wsq+ysrCysa+0sK+ysa2ys66zsq6ys66stq6rtrCtuLKuta61tq7CpaG1X2iAChiFBhGPCA+VCg+LCQuEFBB8Ew+BFRN3Dgt+GBR7Dw2PEhaRExaDEA2IFRCNEQ+UFBGUEAybFBCeEhGfDQ6lCg6RDhOya2nWt7TTxcXLx8bKy8PKzMHLysXMy8nKy8/LzNDOzcvNzcvLzczKzs/Lz9DLz9DL0dHL0dHM0tLN09PL0dHL0dHL0dHM0tLL0dHJz8/Hzc3Hzc3CyMjFy8vM0tLV29vY3t7X3d3Y3N3a3t/b397b397d397e4N/e4N/f4eDg4uHh4+Lh4+Lh4+Li5OPi5OPj5eTk5uXl5+bm6Ofm6Ofm6Ofo6uno6unp6+rq7Ovr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezs7u3r7ezr7ezr7ezr7ezq7Ovp6+rp6+ro6uno6uno6uno6unp6+rr7ezu8O/u7u7z8/Ps7Oza2trX19fj4+Pr6+vw8PD29vb5+fn7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/f39/f36+vr4+Pjx8fHo6Ojp6+rz9fT19/bx8/Lv8fDu8O/s7u3t7+7s7u3s7u3s7u3r7ezr7ezr7ezr7ezr7ezr7ezq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovp6+rp6+ro6uno6uno6unn6ejm6Ofl5+bl5+bk5uXk5uXj5eTj5eTi5OPg4uHf4eDf4eDe4N/d397d397c3t3b3dza3Nva3NvZ29rY2tnX2djW2NfU1tPS1NHP0c7Nz8zJy8jDxcK9v7y4ure2uLW1t7S0trOztbKztbKxs7Cwsq+wsq+wsq+wsq+wsq+us6+ts6+ts6+us62xs661sa61sbCzs7GwtLOttrOtt6+wuK29qaCyZmiDGR2WIiOjJSaoHSKfHCGbODKxVE2uPT99DxKNODWtVVOnMDaMDxWIGhmVJSOrLiyjGRmsGhutFxavFhHAIR3IGx2eEA+8d3DVvrbIw8DFysbJzMPJzMHLzMbLy8nLzNHLzNHOzM3OzcvMzs3Lz9DLz9DLz9DM0NHM0NHN0dLN0dLO0tPM0NHLz9DM0NHK0NDHzc3Fy8vEysrEysrL0dHT2dnX3d3X3d3X3d3Z3d7a3t/a3t3a3t3d397d397e4N/f4eDg4uHg4uHi5OPi5OPi5OPi5OPj5eTk5uXl5+bm6Ofm6Ofn6ejo6uno6uno6unp6+rp6+rq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovp6+ro6uno6uno6uno6unn6ejo6uno6unn6ejo6unn6ejo6unq7Ovt7+7u7u7x8fHs7Oza2trV1dXi4uLp6enu7u709PT39/f7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f39/f38/Pz5+fn29vbw8PDn5+fq7Ov19/b2+Pfw8vHv8fDu8O/r7ezu8O/t7+7t7+7s7u3s7u3r7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezq7Ovp6+rp6+ro6uno6unn6ejm6Ofm6Ofk5uXk5uXj5eTi5OPi5OPh4+Lf4eDe4N/f4eDe4N/d397c3t3c3t3b3dza3NvZ29rY2tnX2djW2NfV19bT1dLQ0s/O0M3MzsvLzcrHycbAwr+7vbq4ure2uLW0trOztbKytLGxs7Cwsq+xs7Cwsq+wsq+vsa6tsq6qs66ptK6rtK+wsq22sLC2sLK0srOytLOwtLWssq6rs6jFs6mrX191CQmWJR+cJR+JCw6IFBflioXtmJO3UlaTMzfUjYv0qqnSbXN+FRq4Y175npn1fX6fEBS0GyC8Hh+/Ih3BHhnMGBujERK5eHLLvbTGyMe/x8fJy8bKy8XKy8bLy8vKytLLzNHMzMzMzMrNz87Lz9DLz9DLz9DKzs/Kzs/Kzs/Lz9DO0tPM0NHLz9DM0NHJz8/Fy8vDycnCyMjL0dHR19fX3d3X3d3W3NzX3d3Z3d7a3t/a3t3a3t3c3t3d397e4N/f4eDg4uHg4uHi5OPi5OPj5eTj5eTk5uXk5uXl5+bm6Ofm6Ofm6Ofn6ejn6ejn6ejo6uno6unp6+rp6+rp6+rp6+rp6+rp6+rp6+rp6+rp6+rq7Ovp6+ro6unm6Ofm6Ofn6ejn6ejm6Ofn6ejn6ejn6ejn6ejn6ejn6ejp6+rs7u3u7u7u7u7t7e3a2trU1NTf39/m5ubs7Ozy8vL29vb6+vr8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f39/f38/Pz4+Pj09PTu7u7m5ubr7ez2+Pf2+Pfw8vHw8vHu8O/r7ezu8O/t7+7t7+7s7u3s7u3r7ezr7ezr7ezr7ezs7u3r7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezq7Ovp6+rp6+ro6unn6ejm6Ofl5+bk5uXk5uXj5eTi5OPh4+Lg4uHf4eDe4N/e4N/d397c3t3b3dzb3dza3NvZ29rY2tnY2tnW2NfV19bU1tXS1NHP0c7Nz8zMzsvLzcrIysfDxcK9v7y5u7i2uLW0trO0trOytLGxs7Cwsq+wsq+wsq+wsq+vsa6us6+ts7Gqs66ssq6wsq+0sLG1sbKzs7Wys7WztLiztbStsKfIraSyXF2DDA6XHBWLFg2TNC6qUlC+ZGajTlGNRUjUlJXtrLDZl5uRRkuqamjiu6zrtqjSZmaZDBSiBhG8ICSmDgumCAW1AgicCxC/hIDGv7nCx8vDzNHIysnKycXKysjJyszIy9LIy9LIzcnIzcfKzs3Kzs/Kzs/Kzs/Jzc7Jzc7Jzc7Kzs/M0NHLz9DKzs/Lz9DIzM3FycrGysvJzc7T2dnU2trW3NzX3d3X3d3X3d3Z3d7a3t/a3t3a3t3c3t3d397e4N/e4N/f4eDg4uHh4+Li5OPj5eTj5eTj5eTk5uXl5+bl5+bl5+bl5+bm6Ofm6Ofm6Ofn6ejn6ejn6ejo6uno6uno6uno6uno6uno6uno6uno6unp6+rp6+ro6unm6Ofm6Ofn6ejm6Ofl5+bl5+bl5+bl5+bm6Ofm6Ofm6Ofo6unr7ezu7u7t7e3t7e3b29vS0tLc3Nzj4+Ps7Ozw8PD19fX6+vr8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/f39/f37+/v39/fz8/Pt7e3l5eXr7ez3+fj2+Pfw8vHw8vHu8O/r7ezu8O/t7+7t7+7s7u3s7u3s7u3r7ezr7ezr7ezr7ezr7ezr7ezr7ezq7Ovq7Ovq7Ovr7ezs7u3r7ezq7Ovp6+ro6unn6ejm6Ofl5+bl5+bk5uXj5eTi5OPi5OPh4+Lf4eDe4N/d397c3t3c3t3b3dza3NvZ29rZ29rY2tnY2tnW2NfU1tXT1dTR09DP0c7Nz8zMzsvKzMnIysfExsO/wb66vLm2uLW0trOztbKztbKxs7Cwsq+wsq+wsq+wsq+wsq+wsq+wsrGusrGssq6tsq6wsLCxsbGxsrSys7WwsbOwsK6wsKjIq6OxW1x7CAuCEwyYNy7NgnzgmpicSkxiFhjKlJTjsbLSkJRwLjKcZWrftrTavrKhdWp6JCXlcHnlW2iYDBWoLCriXlrhPEOYDBXBi4vMx8S7wMS/yM3HycjIyMbJycnJys7JydHIy9DHzcnHzsfJzczJzc7Kzs/Kzs/Kzs/Kzs/Kzs/Lz9DLz9DJzc7Jzc7Jzc7GysvFycrKzs/Q1tbY3t7U2trT2dnW3NzY3t7X3d3Y3N3a3t/a3t3a3t3c3t3d397e4N/f4eDf4eDg4uHg4uHh4+Li5OPi5OPj5eTj5eTj5eTk5uXj5eTk5uXl5+bl5+bm6Ofm6Ofm6Ofn6ejn6ejn6ejn6ejn6ejn6ejn6ejn6ejn6ejn6ejn6ejm6Ofl5+bl5+bl5+bl5+bj5eTk5uXk5uXl5+bm6Ofm6Ofm6Ofo6unq7Ovv7+/t7e3v7+/d3d3R0dHa2trh4eHs7Ozw8PD19fX6+vr8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v78/Pz6+vr39/fx8fHq6url5eXr7ez19/b09vXx8/Lv8fDt7+7u8O/t7+7s7u3t7+7t7+7s7u3s7u3s7u3s7u3s7u3r7ezr7ezr7ezr7ezr7ezr7ezs7u3s7u3s7u3r7ezq7Ovp6+ro6unn6ejm6Ofl5+bl5+bk5uXj5eTi5OPh4+Lg4uHe4N/d397d397c3t3b3dza3NvZ29rZ29rY2tnY2tnW2NfW2NfV19bT1dTS1NPP0dDNz87LzczJy8jFx8TBw8C+wL28vrm4urW1t7KztbCytK+ytK+ytK+xs66wsq+usK2usK+xsbGxr7Cxr7CusrGts7GrtLGrtLGts7Gvs7Kxsa+xsKyysqjEqaKsXWJxEhZ6MCfCgnjfpKC5fHtmIh++gX7gsrTIlJaFNzeeUlTdsLXatrqocnBzNzbTnKH3tL3LZnSOKDPel5H/trHjV2KTEB7Ik5nLwsPBwcPEysrEysbFysbIycvJyM3Kyc7Ky83HzcnIzsrKzs3Mzs3Mzs3Nz87Nz87Nz87Kzs3JzczJzc7IzM3Fy8vEysrFy8vJz8/Q1tbW3NzV29vT29vU3NzU3NzX3d3Y3t7Y3t7Z39/b397Z3dzb3dzd397e4N/e4N/f4d7f4d7g4t/g4t/h4+Di5OHj5eTj5eTh5eTi5uXi5ufh5ebk5uXl5+bl5+bl5+bl5+bm6Ofm6Ofm6Ofm6Ofm6Ofm6Ofm6Ofm6Ofm6Ofm6Ofm6Ofm6Ofl5+bl5+bl5+bl5+bl5+bl5+bm6Ofk5uXk5uXm6Ofm6Ofn6ejs7u3u8O/r7ezv8fDc3t3Nz87X2djh4+Lm6Ofv7+/09PT6+vr8/Pz8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz5+fn29vbw8PDo6Ojj4+Ps7u32+Pf19/by9PPw8vHu8O/v8fDt7+7u8O/u8O/u8O/t7+7t7+7t7+7t7+7s7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3r7ezq7Ovp6+rn6ejm6Ofm6Ofl5+bk5uXj5eTi5OPh4+Lg4uHe4N/e4N/d397c3t3b3dzb3dza3NvZ29rY2tnX2djW2NfW2NfV19bT1dTR09LP0dDMzs3KzMvHycbFx8TCxMG/wb67vbi3ubS0trG0trGztbCztbCwsq2usKuwsq+ytLGvsbCrq6uyrq+zr7CwsrGts7GrtLGrtLGusrGxs7CxsKy2tbCvsabFrqiqYWhkDxSwcWrZoJfHg4RzLzCma2Xao5zUmJiKRkeHOTfjnJrotLiufYGQTlLgoqXeuLekenyoX2jvnqX9vLbOe3eaEhyqLjnHlprMxMLCwMHBxcTGy8XGy8fIyc3KyM3LyczLy8nIzcnIzsrKzs3Mzs3Mzs3Mzs3Nz87Mzs3JzczIzMvHy8zGysvFy8vGzMzJz8/O1NTT2dnX3d3S2trS2trT29vT29vW3NzX3d3X3d3Y3t7a3t3Z3dzb3dzc3t3d397e4N/e4N3f4d7f4d7f4d7g4t/h4+Di5OPi5OPg5OPh5eTh5ebg5OXj5eTk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bm6Ofl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXl5+bj5eTj5eTl5+bl5+bm6Ofr7ezt7+7s7u3u8O/c3t3Mzs3W2Nfg4uHl5+bt7e3z8/P5+fn8/Pz8/Pz9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v5+fn19fXu7u7n5+fi4uLs7u32+Pf19/by9PPx8/Lv8fDv8fDt7+7u8O/v8fDv8fDu8O/t7+7t7+7t7+7s7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3r7ezq7Ovp6+ro6unn6ejm6Ofl5+bk5uXj5eTi5OPh4+Lg4uHf4eDe4N/c3t3c3t3c3t3b3dzb3dza3NvY2tnX2djW2NfW2NfU1tXT1dTQ0tHO0M/LzczKzMvGyMXFx8TDxcLAwr+7vbi2uLO0t7Cztq+xs66xs66ytK+0trGytLGtr6ytr66wsLCwr62xsK6vsa6us6+vsa6wsK6ysa+0sK+zr6ytrKersae+raWlY2dlEBe4bm3ShIKfPEFwFBnCh4PjqKKyU096GBe9eXjvs7LUiYRpGxnCgYXrt7m7l4uth3rqtbH6rq7MZmKRFBKiCxCyNzrPop/MycK/v73IysnJy8jJy8rKyc7LyM/OyMrOysnLzcjJzsjMzsvMzs3Mzs3Mzs3Mzs3LzczIzMvHy8rFycrFycrFy8vJz8/O1NTS2NjV29vV29vU2trU2trU2trV29vV29vW3NzY3NvY3NvZ3dzY3NvY3Nva3t3d397d397e4N/e4N/f4d7e4N3f4eDh4+Li5OPh4+Lf4+Tg5OXg5OXg5OXi4+Xk5efk5uXj5eTj5eTk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXl5+bj5eTi5OPk5uXk5uXm6Ofr7ezs7u3s7u3u8O/a3NvKzMvU1tXd397k5uXr6+vx8fH4+Pj7+/v8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v5+fn19fXv7+/n5+fi4uLs7u319/b19/by9PPx8/Lv8fDv8fDt7+7u8O/v8fDu8O/t7+7t7+7t7+7t7+7s7u3r7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezq7Ovp6+rn6ejm6Ofm6Ofl5+bk5uXj5eTi5OPh4+Lg4uHf4eDe4N/d397d397c3t3b3dzb3dza3NvY2tnX2djW2NfV19bU1tXS1NPQ0tHNz87LzczJy8rGyMXFx8TDxcK/wb67vbi3ubSztq+ws6yztbCxs66wsq2ztbCytLGvsa6tr66vsa6vr62vsa6us6+us6+xsK6zr660sK+0sK+0s6+ur6mutqu8r6ehZmpeDRR4KCuMMjSSISWSJSifVFGoWVSWHxuWHBmzXV7NfHunPjp9FhGpWVzFg4TNkoTjpZbQiYOdPz2LCwq9KyubBwe/TUzTrKTJxr3AwL7MzMzLy8nKzMvKy9DKyc/PycvPycnMzcjLzcjKzMnKzMvKzMvLzczLzczKzMvHy8rHy8rEyMnFycrGzMzK0NDP1dXT2dnU2trT2dnU2trU2trV29vV29vW3NzX3d3Y3NvZ3dzZ3dzY3NvY3Nva3t3d397d397d397e4N/f4eDf4d7f4eDh4+Li5OPh4+Lg5OXg5OXg5OXg5OXi4+Xk5efk5uXk5uXj5eTk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXk5uXl5+bj5eTi5OPk5uXk5uXm6Ofr7ezs7u3t7+7u8O/Y2tnJy8rS1NPb3dzi5OPq6urw8PD39/f7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v5+fn19fXu7u7n5+fi4uLr7ez19/b19/bz9fTy9PPv8fDw8vHt7+7t7+7u8O/u8O/t7+7t7+7t7+7t7+7s7u3s7u3s7u3s7u3s7u3s7u3r7ezr7ezr7ezr7ezr7ezr7ezq7Ovp6+ro6unn6ejm6Ofl5+bl5+bk5uXj5eTi5OPh4+Lg4uHf4eDe4N/d397c3t3b3dza3NvZ29rZ29rY2tnX2djW2NfU1tXS1NPQ0tHNz87LzczJy8rGyMXFx8TCxMG/wb68vrm4urWxtK2qraalqKGsr6iytK+xs66usK2tr6yusK2vsa6vsa6tsqyrta2ttK2wsayxsKywsK6xsa+sraiwta6msKW4r6ihb3JjGB9mFBpmCg12Cgh7CgZ9DQuEDgyTDgmcEQ6TCA2WCxKWDAq0MjCsPDutRUTAU06hLimMEBCTDhGbDA6iExWWEhCzVE7WtKvJxr3OysnGxMXKzMnIzMvFzc/IzM/Oyc3PycnMy8fLzMfJy8jJy8rIysnIysnGysnGysnFycjEyMfEyMnHy8zJzc7M0NHO1NTS2NjT2dnT2dnV2djV2djW2tnW2tnX29rY3NvY3NvZ3dzZ3d7Y3N3Z3d7a3t/b3+Db3+Db3+Dc4N/f4eDe4N/f4eDh4+Lf4+Lf4+Lf4+Tg5OXg5OXg5OXi4+Xj5Obk5uXj5eTj5eTk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bk5uXk5uXl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXj5eTi5OPk5uXk5uXm6Ofq7Ovr7ezu8O/u8O/W2NfHycjR09LZ29ri5OPq6urw8PD29vb6+vr9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f38/Pz6+vr4+Pj09PTu7u7m5ubh4eHq7Ov09vX2+Pf09vXy9PPw8vHx8/Lv8fDu8O/u8O/u8O/t7+7t7+7u8O/u8O/t7+7t7+7t7+7t7+7t7+7t7+7s7u3s7u3r7ezr7ezs7u3r7ezr7ezq7Ovp6+rn6ejm6Ofm6Ofl5+bk5uXj5eTj5eTi5OPg4uHf4eDf4eDe4N/c3t3b3dza3Nva3NvZ29rZ29rX2djW2NfU1tXS1NPQ0tHO0M/Mzs3KzMvHycbFx8TCxMG/wb69v7q5u7avsqulqKGVmJGXmpOipJ+wsq20trOusK2srquwsq+ssauss6yqtKyqtKywsayxsKywsK6wsK6xsq2ytK+stq24ta66mJehbW+rbXCgWFmgT0ubQjqVMzCWMCyOJSGOHRmZGx+GBQqcICKlMzOgOjiRLy52EA6EGBaRHx+jMDOpODqkPDujSEO9fnfZwrrJyMPJxcTLycrJy8jGzMrDzczEzM7LyczNycrKysjJy8jIysnHycjGyMfGyMfDx8bDx8bDx8bCxsXFycrIzM3Kzs/Lz9DM0tLR19fU2trV29vV2djV2djV2djW2tnW2tnX29rY3NvY3NvZ3d7Y3N3Z3d7a3t/b3+Db3+Db3+Dc4OHe4N/e4N/e4N/g4uHf4+Le4uHf4+Tf4+Tf4+Tf4+Th4uTi4+Xj5eTi5OPj5eTk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXj5eTi5OPj5eTi5OPh4+Lj5eTj5eTk5uXp6+rr7ezv8fDs7u3T1dTGyMfQ0tHY2tnh4+Lr6+vw8PD29vb6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f38/Pz6+vr4+Pjz8/Ps7Ozl5eXg4ODo6un09vX2+Pf09vXy9PPv8fDx8/Lw8vHu8O/v8fDv8fDu8O/u8O/u8O/u8O/t7+7t7+7t7+7u8O/u8O/t7+7t7+7s7u3s7u3r7ezr7ezs7u3r7ezq7Ovp6+rn6ejn6ejm6Ofl5+bl5+bk5uXj5eTi5OPh4+Lg4uHf4eDe4N/d397c3t3b3dza3NvZ29rY2tnX2djW2NfU1tXS1NPQ0tHO0M/Mzs3LzczIysfHycbDxcLAwr+/wby5u7ausaqipZ6Ym5SIi4SDhYCUlpGpq6ivsa6tr6ysrquusKussaursqussauyrquzrquwr62wr620rq6sq6evtq+ssaq7sqvFtK3Hs6zFqqPCo56/npm6nJS3lo+zjoivhH6tene5gYC2eny2foGqeHesgH2zi4m3koy+lZG+l5LCoZrHqqLOsanTwLnIxcDCxMHIyMjKyMnIysfGy8fDzMnDy8vIysnHycjBysfAy8fDycfDx8bCxsXCxsXCxsXCxsXDx8bDx8bGysnJzczKzs/Kzs/M0NHR1dbU2trU2trU2NfU2NfV2djV2djW2tnX29rX29rY3NvX3d3X3d3X3d3Z39/a4ODa4ODa3+La4ODb397b397c4OHd4eLe4uPe4uPe4uPf4+Tf4+Te4uPe4uPf4+Th4+Lh4+Li5OPj5eTk5uXk5uXk5uXj5eTj5eTj5eTj5eTj5eTj5eTj5eTk5uXk5uXk5uXj5eTj5eTj5eTh4+Lj5eTh4+Lh4+Lj5eTj5eTk5uXo6unr7ezv8fDq7OvQ0tHExsXP0dDX2Nrg4ePq6urv7+/09PT4+Pj7+/v+/v7////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v4+Pjz8/Ps7Ozk5OTf39/m6Ofz9fT19/b09vXx8/Lv8fDw8vHw8vHv8fDw8vHv8fDu8O/u8O/u8O/u8O/t7+7t7+7t7+7t7+7u8O/t7+7t7+7s7u3r7ezr7ezr7ezr7ezr7ezq7Ovo6unn6ejm6Ofm6Ofm6Ofl5+bk5uXj5eTj5eTh4+Lh4+Le4N/e4N/d397d397c3t3a3NvZ29rX2djX2djW2NfU1tXT1dTR09LP0dDNz87Mzs3Jy8jIysfFx8TCxMG/wby5u7atsKmhpJ2XmpOQk4yAgn1zdXB+gH2anJmusK2xs7Ctr6qtr6qssaussauvrqqvrqqtr6ytr6ywrKu0s7Gus6+qsaqusaiztaqvr6O2tqy6trO3trK5vLW4u7S9vLe7trLDuLLGt7LKtLfNt7rMvLzGu7nEv7u/vLfHwrzEwbrDxr/ExsHGx8LFxcPEyMfGysvGx8nIycvGyMfFysbEysjEysjIyMjGyMe/yci9ycfBx8XBxcTBxcTBxcTCxsXEyMfFycjFycjIzMvKzs3Kzs/Jzc7M0NHR1dbT2dnS2NjU2NfU2NfV2djV2djW2tnX29rX29rY3NvX3d3W3NzX3d3Z39/a4ODZ39/Z3uHa3+Lb3+Db397c4OHd4eLe4uPe4uPe4uPf4+Tg5OXe4uPe4uPf4+Th4+Lh4+Li5OPk5uXk5uXk5uXk5uXk5uXj5eTj5eTj5eTj5eTj5eTj5eTj5eTk5uXk5uXj5eTi5OPi5OPh4+Lj5eTi5OPi5OPk5uXj5eTk5uXo6unr7ezv8fDp6+rO0M/DxcTP0dDW19ng4ePp6enu7u7z8/P39/f7+/v9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8/Pz6+vr39/fx8fHr6+vl5eXd3d3m6Ofw8vH3+fj19/bx8/Lx8/Lx8/Lv8fDx8/Lx8/Lw8vHv8fDv8fDu8O/t7+7t7+7s7u3t7+7t7+7s7u3s7u3t7+7t7+7s7u3s7u3s7u3s7u3q7Ovq7Ovq7Ovp6+ro6unn6ejm6Ofl5+bk5uXj5eTi5OPh4+Lg4uHg4uHf4eDe4N/d397c3t3b3dza3Nva3NvY2tnX2djV19bT1dTS1NPQ0tHO0M/Mzs3LzczJy8rHycbBw8DBw768vrmrrqeipZ6anZaRlI2Gh4J4eXRpamVpamWDg4GhoZ+trauusK2ssa2rsKytr6yrsa2ks66jsq2rsa+tr66usK+vsa6vsaytsKmvsqmxtq+usrGutLKvtbGwtbGzs7G0s6+5tLG8tLK+tLW9tLW5uLa4uLa5uLa8tra/t7W/trfAurzBvMLEvcTEv8bDwcbCw8fAxcjAyMjBx8fDx8bDyMTFxcPGxcPFxMK+xMK7xMG/xcPAxMPAxMPBxcTCxsXEyMfGysnIzMvIzMvJzczKzs3M0M/N0dDP09LT19jW2tvY2tnX2djV2djV2djW2tnX29rX29zX29zX3d3X3d3X3d3X3d3Y3eDY3eDX3+HZ3uHc4OHb3+Db3+Dc4OHc4uLc4uLc4uLc4uLd4eLd4eLe4uPf4+Ti5OPi5OPi5OPi5OPj5eTi5OPi5OPi5OPi5OPj5eTj5eTj5eTj5eTj5eTj5eTi5OPi5OPi5OPi5OPh4+Lg4uHh4+Lh4+Lh4+Lh4+Li5OPm6Ofp6+rs7u3w8vHk5efIycvCw8XOz9HV1tje3+Hn5+ft7e309PT4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz6+vr39/fw8PDr6+vk5OTc3Nzk5uXv8fD3+fj2+Pfy9PPy9PPy9PPw8vHx8/Lw8vHw8vHv8fDv8fDv8fDu8O/u8O/t7+7u8O/u8O/t7+7t7+7u8O/u8O/t7+7t7+7t7+7s7u3r7ezr7ezr7ezq7Ovp6+rn6ejm6Ofl5+bk5uXj5eTi5OPh4+Lh4+Lg4uHf4eDe4N/d397c3t3b3dza3Nva3NvZ29rX2djW2NfU1tXT1dTS1NPP0dDO0M/Mzs3KzMvIysfDxcLDxcC9v7qsr6ijpp+fopuVmJGLjId/gHtvcGtfYFtbW1lgYF6IiIaampipqaesrKqqrKmqsKykta+jtK6mrq6pra6tra2urq6vsa6wta+vtq+rtK+utLSvtbWvtbOwtbGytLGzs7G1tLC2tbG2tLW2trazubezubW4uLi9ubq/ubnAurrAurzBvMDDvsXEv8bCwMXAwcW7w8W6xMW/xMfBwsTCwsDCwb3EwL/Cwb/Bw8C/xcO+wsG/w8LAxMPBxcTDx8bFycjHy8rIzMvJzczJzczKzs3M0M/M0M/N0dDQ1NXU2NnY2tnX2djV2djV2djW2tnX29rX29zX29zW3NzW3NzW3NzX3d3X3N/Y3eDW3uDZ3uHZ39/Z3d7Z3d7b3+Db4eHb4eHb4eHb4eHc4OHd4eLd4eLe4uPh4+Li5OPh4+Lh4+Li5OPi5OPi5OPi5OPi5OPi5OPj5eTj5eTj5eTj5eTi5OPi5OPh4+Lh4+Lg4uHg4uHg4uHg4uHg4uHh4+Lh4+Li5OPm6Ofp6+rr7ezw8vHh4uTExcfCw8XP0NLU1dfe3+Hn5+ft7e309PT4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v77+/v6+vr39/fw8PDr6+vk5OTc3Nzh4+Lt7+72+Pf2+Pfz9fTy9PPy9PPx8/Lw8vHw8vHw8vHw8vHw8vHw8vHv8fDv8fDu8O/v8fDv8fDu8O/u8O/u8O/u8O/t7+7t7+7u8O/t7+7s7u3r7ezs7u3r7ezp6+ro6unn6ejm6Ofk5uXj5eTj5eTi5OPh4+Lg4uHg4uHf4eDe4N/c3t3b3dza3Nva3NvZ29rY2tnW2NfV19bU1tXT1dTR09LP0dDO0M/Mzs3KzMnGyMXGyMO+wLutsKmlqKGgoZuXmJKNjoiHiIJ9fnlsbWhaW1ZQUE5OTUtvbW6TjY2hm5umoZ6qqaWorqqkr6uqsLCur7GurrCsrKyqrKuorqqnsKuosaywsbOysLGxsa+ys66xs7KytLGyta6xtq+ytrWytrewubSwurKzt7a2uLe4uLa5urW4ubG4u7S5u7q5ury4vLu5vby2vr64vcC8vcG9vb+/vry/vrrAv7vAwbzAwr2+w7+9wcC/w8LBxcTDx8bEyMfGysnIzMvJzczJzczJzczKzs3Lz87Lz87M0M/O0tHQ1NPS1tfS1tfS1tfS1tfT19jU2NnT2dnT2dnU2trV29vV29vW3NzX3d3X3d3Y3t7Y3t7Y3t7X3d3Y3eDZ3uHa3+La3+La3+La3+Lc4OHc4OHd4eLe4uPh4+Lh4+Lg4uHf4eDh4+Lh4+Lh4+Lh4+Lh4+Li5OPi5OPi5OPi5OPi5OPi5OPh4+Lg4uHf4eDf4eDe4N/f4eDf4eDf4eDf4eDg4uHh4+Lm6Ofq7Ovr7O7w8fPc3d+/wMLCw8XP0NLU1dfe3+Hn5+ft7e309PT4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v77+/v6+vr39/fw8PDr6+vk5OTb29ve4N/q7Ov19/b3+fj09vXz9fTz9fTy9PPw8vHw8vHw8vHw8vHw8vHw8vHw8vHw8vHu8O/v8fDv8fDu8O/u8O/u8O/u8O/t7+7t7+7u8O/t7+7s7u3s7u3s7u3r7ezq7Ovp6+ro6unm6Ofl5+bk5uXj5eTi5OPi5OPh4+Lg4uHf4eDe4N/d397c3t3b3dza3NvZ29rY2tnX2djW2NfV19bU1tXS1NPR09LP0dDNz87MzsvKzMnIysXAwr2usaqnqqOio52bnJaSk42LjIaEhYB4eXRqa2ZgYVxQT01HQ0JQSkpyamiTi4mempefoZyhp6Ohp6Wjp6ipqautra2urq6traursKywsq+wrq+xraywr6uvsKuwsq+vtK6utquvt6yxtrKwtrSuuLCwt7CxtrK0trO1t7S1uLG4vK63u622uLW1ubi2u7W3vre5vby6vr+6u7+9vMG+vry+v7q+v7q9vrm8vrm7wLy/w8LAxMPDx8bFycjGysnHy8rIzMvJzczJzczJzczJzczKzs3Lz87Lz87M0M/O0tHP09TO0tPP09TP09TQ1NXR1dbQ1tbQ1tbT2dnT2dnU2trV29vW3NzX3d3X3d3Y3t7Z39/Y3t7Y3eDa3+La3+La3+La3+Lb4OPb3+Db3+Dc4OHd4eLg4uHg4uHf4eDe4N/g4uHg4uHg4uHg4uHg4uHg4uHh4+Lh4+Lh4+Lh4+Lg4uHg4uHf4eDe4N/e4N/d397f4eDe4N/e4N/e4N/f4eDi5OPm6Ofq7Ovr7O7w8fPX2Nq8vb/Cw8XOz9HT1Nbe3+Hn5+ft7e309PT4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v77+/v6+vr39/fw8PDr6+vj4+Pb29vb3dzo6un09vX3+fj19/b09vXz9fTy9PPx8/Lx8/Lx8/Lx8/Lx8/Lx8/Lw8vHw8vHv8fDw8vHw8vHv8fDu8O/u8O/u8O/t7+7t7+7t7+7s7u3r7ezr7ezs7u3r7ezq7Ovp6+ro6unn6ejm6Ofl5+bk5uXj5eTj5eTh4+Lh4+Lg4uHf4eDe4N/d397c3t3c3t3a3NvZ29rY2tnX2djX2djW2NfU1tXT1dTR09LP0dDO0M3Nz8zLzcjBw76vsquprKWkpZ+hopyZmpSRkoyIiYR/gHt0c29ramZcXFpUU1FHQ0JAPDlMS0dqa2WEh4COk42bpJ+fpaOjpaSmpKWrpaewpqewpqeupqSwqqqvq6iuramur6mssaqss6uttKyus6yws6ywsq2vtLCytLG0tbC1trGzuLK2ubC6uKu6tqq4t7O4uLi4u7S5vLO7vLe7u7u8vcG6vsG7vbq5u7a5urW6uri8vLq+wL/BxcTDx8bFycjGysnHy8rIzMvIzMvIzMvJzczJzczJzczLz87Lz87Lz87M0M/N0dDN09PN09PO1NTO1NTP1dXQ1tbQ1tbQ1tbR19fS2NjT2dnU2trV29vW3NzX3d3X3d3Z3uHY3eDZ3uHa3+La3+LZ3uHZ3uHa3+La3+Lb4OPc4OHd4eLg4uHg4uHf4eDe4N/e4N/e4N/f4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDe4N/e4N/d397d397e4N/d397d397e4N/f4eDi5OPm6Ofq7Ovr7O7t7vDS09W6u73Cw8XMzc/T1Nbf4OLn5+ft7e309PT4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz6+vr39/fx8fHr6+vj4+Pb29va3Nvl5+by9PP3+fj3+fj19/b09vXz9fTx8/Ly9PPy9PPy9PPy9PPx8/Lw8vHw8vHw8vHx8/Lx8/Lv8fDv8fDv8fDu8O/t7+7t7+7t7+7s7u3r7ezr7ezs7u3r7ezq7Ovq7Ovp6+ro6unm6Ofl5+bl5+bk5uXj5eTi5OPi5OPh4+Lg4uHg4uHf4eDe4N/e4N/d397c3t3b3dza3Nva3NvZ29rX2djW2NfV19bR09LR09DQ0s/O0MvDxcCxtK2sr6inqKKkpZ+dnpiXmJKRko2Ki4aBgHx5eHRqa2ZgYVxWV1JLTEY6PTY0NzBKSURmZ2F8gXuMko6boJyhoZ+ln5+to6KupKOqoqCsqKWrqqarrKesr6irsaersaersKmrsKqusaqusaqwsK6ysLGxsq2xs66wta+ztq+1s6e4tKu4tre5ubu3vLW5vLO7urW6ubezt7ixt7eztbCztK61tbO6urq+wsPCyMjDx8bFycjGysnHy8rHy8rHy8rIzMvIzMvJzczJzczJzczLz87Lz87Lz87M0M/M0M/N09PO1NTO1NTP1dXQ1tbR19fR19fQ1tbR19fS2NjT2dnU2trV29vW3NzW3NzW3NzX3N/X3N/Y3eDZ3uHZ3uHY3eDY3eDa3+Lb4OPb4OPc4OHd4eLf4eDf4eDe4N/d397d397d397e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/d397e4N/d397d397e4N/g4uHj5eTn6ejr7ezs7e/o6evLzM66u73DxMbMzc/U1dff4OLn5+ft7e309PT4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz7+/v4+Pjx8fHr6+vj4+Pb29vX2dji5OPu8O/19/b2+Pf19/b09vXy9PPy9PPy9PPy9PPy9PPy9PPy9PPx8/Lw8vHx8/Lx8/Lx8/Lv8fDv8fDv8fDu8O/t7+7s7u3t7+7s7u3r7ezr7ezs7u3r7ezq7Ovq7Ovp6+ro6unn6ejm6Ofl5+bk5uXk5uXj5eTj5eTi5OPi5OPh4+Lh4+Lg4uHg4uHg4uHf4eDd397d397c3t3b3dza3NvY2tnY2tnU1tXU1tPU1tPR087Fx8Kztq+vsqusraenqKKgoZubnJaXlpGRkIuJiISEg398fXhub2lfYltYXlRTWU9LTEREPTc8MjBIRUBZW1Zyd3GFioSTlZCcnZiho56ip6Gho56jpaKkqaOmq6SprKOprKOrrKaqrKepsKmqr6myrK6yrK6ssa2qs66us6+xs66ztbC1t7a0t760ub+wurKwuK20tKyzsq6orqyrsa2ztK66t7K9ubi/v8G9yMq/zc7BycnFycjGysnGysnHy8rHy8rIzMvIzMvJzczIzMvJzczLz87M0M/Lz87Lz87M0M/N09PN0tXO09bP1NfQ1djQ1djQ1tbQ1tbR19fR19fT2dnU2trV29nV29nV29nV29vV2t3V2t3W297X3N/X3N/X3N/Y3eDZ3uHb4OPb4OPc4OHc4OHf4eDe4N/e4N/d397d397d397d397e4N/e4N/e4N/e4N/d397e4N/e4N/e4N/e4N/e4N/e4N/e4N/d397d397c3t3d397f4eDh4+Lk5uXo6evr7O7t7vDi4+XExce5urzExcfMzc/W19ne3+Hn5+ft7e309PT4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8/Pz7+/v4+Pjx8fHr6+vj4+Pb29vV19bf4eDs7u3z9fT2+Pf19/bz9fTy9PPx8/Ly9PPy9PPz9fTz9fTy9PPx8/Lx8/Lw8vHx8/Lw8vHv8fDu8O/u8O/t7+7s7u3t7+7t7+7s7u3r7ezr7ezs7u3r7ezq7Ovr7ezq7Ovo6unn6ejm6Ofl5+bl5+bk5uXj5eTj5eTj5eTi5OPi5OPi5OPh4+Lh4+Lh4+Lg4uHf4eDe4N/e4N/c3t3b3dzZ29rb3dzW2NfW2NXW2NXT1dLHycS1t7Kyta6trqmpqqSmp6Gio52en5mXmJKSkY2Oj4qEhX9/gnt1eG9nbWNdY1lbXFRbUk1VTEdDPjo4NzI3PDZKT0leY11uc219hH2LkouYnZeboJyfpJ6ip6GlqKGnqKKpqKSqq6amraaoramwqqyyrK6ssa2rtK+wtbGztbKztbSxtbatsrinr7KhqqWepZ2foJqfoJqoramts6+8u7bGw77JxcbFxsi9yMq6yMnDycnEyMfFycjGysnGysnHy8rIzMvJzczJzczIzMvJzczLz87M0M/Lz87Lz87Lz87O0tPN09PO09bP1dXQ1djQ1tbQ1tbQ1tbR19fR19fT2dnU2trV29nV29nW2tnV29nT2dnT2dnV2t3W3NzX3N/X3d3Z3eDa4ODc4OPc4OHc4OHc4OHe4N/e4N/d397d397d397d397e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/d397d397c3t3d397f4eDi5OPl5+bo6evr7O7u7/Hd3uC/wMK5urzFxsjNztDX2Nrd3uDn5+ft7e309PT4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz7+/v4+Pjx8fHr6+vk5OTc3NzU1tXa3Nvo6un09vX2+Pf19/b19/b09vXz9fTz9fTy9PPy9PPy9PPy9PPx8/Lw8vHw8vHw8vHx8/Lx8/Lx8/Lw8vHv8fDt7+7u8O/t7+7t7+7s7u3s7u3s7u3s7u3s7u3r7ezq7Ovp6+ro6unn6ejm6Ofl5+bl5+bj5+bi5uXj5eTj5eTj5eTj5eTj5eTi5OPi5OPh4+Lg4uHg4uHf4eDe4N/d397c3t3c3t3b3dzZ29rY2tnV19bIyse7vbq3ubSytLGusKuqrKemqKOjpaCfoZybnJaWmZKPkouJjIWBhH16fXZ0d3BvcGpqZ2JjYFtgXFlXVlJMTUhERUBAQD5DQ0FMTEpTVVBpamVxc25+gHuKjIeSk46XmJOcnZihop2jpaCkpqGnpqSop6WmqKWjpaKfoZ6cnpuVl5SSlJONkZKOkpGRlpKZnpinqaSytK+8vru8wb3CwsDExMLExsXDx8bCyMjAyMjFycjHycjIysnIysnJy8rKzMvLzczMzs3Mzs3Nz87Nz87O0M/O0M/P0dDQ0tHP09LP09LQ1NPR1dbS1tXS1tfS1tXR1dTR1dTU2NfT19bT19bU2NfW2tnX29rY2tnW2tnX29rX29rX29zW2tnW2tvV2djY2dvX29rb3N7c3t3d397d397d397d397d397d397d397d397d397e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/d397d397c3t3c3t3c3tve4N3d39zg4t/h4+Lk5uXs7e/p6uzs7e/S09W3uLq8vb/FxcfQ0NLY2Njg4ODo6Ojt7e309PT4+Pj6+vr8/Pz+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz7+/v4+Pjx8fHr6+vl5eXd3d3T1dTW2Nfj5eTx8/L2+Pf19/b09vXz9fTz9fTz9fTy9PPy9PPy9PPy9PPx8/Lx8/Lw8vHw8vHw8vHx8/Lx8/Lw8vHv8fDu8O/v8fDu8O/t7+7t7+7s7u3s7u3s7u3t7+7s7u3r7ezq7Ovp6+ro6unn6ejm6Ofl5+bj5+bj5+bk5uXk5uXk5uXk5uXj5eTi5OPj5eTj5eTi5OPh4+Lg4uHf4eDe4N/d397c3t3c3t3a3Nva3NvX2djLzcy+wL25u7i2uLWztbKusKurraioqqWkpqGfopubnpeZnJWVmJGPkouKjYaHiIKBgnx5enRyc21ubWltbGhramZnZmJhYF5ZWFZVVFJTUlBKS0ZNTklRUk1XWFNdXllkZWBsbWhyc252d3J3eHN4eXR5enV5eXd6enh8fHp+fnyDhYKKjImWmJWjpaKusK21t7S8vrvBw8C9v7y/wb7CxMPExsXDx8bDx8bDx8bDx8bHycjHycjIysnJy8rKzMvKzMvLzczMzs3Mzs3Nz87O0M/P0dDP0dDQ0tHS1NPT1dTU2NfU2NfU2NfU2NfU2NfU2NfU2NfU2NfU2NfU2NfU2NfV2djZ29rZ29rZ29rY2tnX29rX29rX29rW2tnY2tnY2tnY2tnZ29rb3dzb3dzb3dzb3dzc3t3d397e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/d397d397d397d397d397d397c3t3c3t3c3tve4N3e4N3g4t/k5uXo6uns7e/s7e/p6uzMzc+4ubu9vsDGxsjQ0NLY2Njh4eHo6Oju7u719fX5+fn7+/v9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz7+/v4+Pjy8vLs7Ozl5eXe3t7T1dTT1dTd397u8O/2+Pf2+Pf19/bz9fTz9fTz9fTy9PPy9PPy9PPy9PPx8/Lx8/Lw8vHw8vHw8vHw8vHw8vHw8vHw8vHv8fDv8fDv8fDu8O/u8O/t7+7t7+7t7+7t7+7s7u3r7ezr7ezq7Ovq7Ovo6unn6ejm6Ofl5+bl5+bm6Ofm6Ofm6Ofl5+bk5uXj5eTk5uXk5uXj5eTj5eTi5OPg4uHf4eDd397c3t3c3t3b3dzc3t3a3NvP0dDBw8C8vru6vLm2uLWytK+vsaysrqmpq6alp6KipJ+hpJ2eoZqZnJWWmZKUl5CPkouKi4aFhoGBgn1/gHt9fHh6eXV4d3V2dXN1dHJ2dXNxcW9ubmxsbWhrbGdrbGdsbWhub2pwcWx2d3J6e3Z/gHuEhYCKioiSkpCbm5mhoZ+pq6itr6y0trO6vLm7vbq6vLm4ure4ure/wcDBw8LDxcTExsXDx8bDx8bEyMfEyMfHycjHycjIysnJy8rKzMvLzczLzczMzs3LzczMzs3Nz87O0M/P0dDQ0tHS1NPT1dTT19bT19bT19bT19bU2NfV2djX29rY3NvY2tnY2tnY2tnZ29ra3Nvb3dza3NvZ29rX29rX29rX29rW2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29ra3Nvc3t3e4N/f4eDe4N/e4N/e4N/e4N/e4N/e4N/d397d397d397d397d397d397d397d397c3t3c3t3d39zd39zf4eDg4uHm6Ofq7Ovq6+3u7/Hj5ObBwsS5ury/wMLJycvQ0NLZ2dni4uLp6env7+/29vb6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz7+/v5+fnz8/Pt7e3n5+ff39/V19bQ0tHX2djp6+r09vX3+fj2+Pf09vX09vXz9fTy9PPy9PPy9PPy9PPx8/Lx8/Lx8/Lx8/Lw8vHw8vHw8vHw8vHw8vHw8vHw8vHw8vHv8fDu8O/u8O/u8O/t7+7t7+7s7u3r7ezr7ezr7ezq7Ovp6+rn6ejm6Ofm6Ofm6Ofm6Ofn6ejn6ejm6Ofl5+bk5uXk5uXk5uXj5eTj5eTi5OPg4uHe4N/d397c3t3c3t3b3dzc3t3b3dzR09LFx8S/wb68vru5u7i2uLOztbCxs66vsaysrqmqrKemqaKjpp+fopucn5ibnpeYm5SWl5KTlI+Rko2Oj4qMi4eLioaLioiKiYeLioiKioiLi4mLi4mMjYiQkYyTlI+VlpGXmJOZmpWen5qhop2lpqGnqKOoqKarq6mvr62zs7GztbK0trO2uLW4ure6vLm8vru/wb7Bw8DAwsHBw8LDxcTExsXDx8bDx8bDx8bEyMfHycjHycjIysnJy8rKzMvLzczMzs3Mzs3LzczMzs3Mzs3Nz87P0dDQ0tHR09LS1NPQ1NPQ1NPR1dTS1tXT19bV2djX29rZ3dza3Nva3Nvb3dzb3dzb3dzb3dzb3dza3NvX29rX29rX29rW2tnY2tnY2tnY2tnZ29rZ29rY2tnY2tnY2tnZ29ra3Nvc3t3d397e4N/e4N/e4N/e4N/e4N/e4N/e4N/d397d397d397d397d397d397d397c3t3c3t3e4N3e4N3g4uHh4+Ln6ejr7ezp6uzu7/HZ2ty3uLq6u73BwsTLy83R0dPZ2dnj4+Pq6urw8PD29vb7+/v9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz8/Pz5+fnz8/Pu7u7o6Ojg4ODW2NfO0M/S1NPi5OPv8fD2+Pf2+Pf09vX09vXz9fTy9PPy9PPy9PPy9PPy9PPx8/Ly9PPx8/Lw8vHw8vHw8vHw8vHw8vHv8fDw8vHw8vHv8fDv8fDu8O/t7+7t7+7t7+7s7u3s7u3s7u3r7ezr7ezq7Ovo6unn6ejo6unn6ejn6ejn6ejn6ejm6Ofm6Ofl5+bk5uXk5uXj5eTj5eTi5OPh4+Lf4eDd397c3t3c3t3a3Nva3Nva3NvT1dTIysfDxcLAwr++wL26vLe4urW2uLO0trGytK+wsq2tsKmqraanqqOlqKGjpaCipJ+foZyeoJudnpmbnJeZmZeZmZeYmJaWlpSUlJKUlJKZmZeXmZaXmZSYmpWYmpWanJedn5qgop2gop2jpaCnqaarraqtr6yvsa6ytLGztbK0trO2uLW3uba4ure6vLm7vbq+wL2/wb7Bw8LCxMPDxcTExsXCxsXDx8bDx8bEyMfHycjIysnIysnJy8rKzMvLzczMzs3Mzs3Nz87Nz87O0M/O0M/Q0tHR09LS1NPS1NPT1dTT1dTU1tXU1tXV19bW2NfX2djX2dja3Nva3Nvb3dzb3dzb3dza3Nva3Nva3NvY3NvX29rX29rW2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29ra3Nvc3t3d397e4N/e4N/e4N/e4N/e4N/e4N/d397d397d397d397d397d397d397c3t3d39ze4N3h4+Lj5eTo6uns7u3r7O7r7O7NztCxsrS7vL7DxMbMzMzS0tLa2trk5OTr6+vw8PD39/f6+vr9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz8/Pz6+vr09PTv7+/p6enh4eHZ29rP0dDO0M/b3dzp6+r09vX4+vn19/b09vX09vXy9PPy9PPy9PPy9PPy9PPy9PPy9PPx8/Lx8/Lw8vHw8vHw8vHw8vHv8fDw8vHw8vHv8fDv8fDu8O/t7+7t7+7t7+7t7+7t7+7s7u3s7u3s7u3r7ezp6+ro6unp6+ro6uno6uno6uno6unn6ejn6ejm6Ofl5+bk5uXk5uXj5eTj5eTh4+Lg4uHf4eDd397d397a3NvZ29rb3dzV19bLzcrGyMXExsPCxMG+wLu8vrm5u7a3ubS1t7K0trGwsq2vsquusaqsr6iqrKeoqqWlp6KkpqGlpqGio56fn52fn52fn52goJ6ioqCjo6GfoZ6foZ6ho56ipJ+jpaCkpqGnqaSqrKesrqmtr6qusK2wsq+xs7CytLGztbKztbK3uba5u7i8vru9v7y+wL3Awr/Awr/Awr/Bw8LCxMPDxcTExsXDx8bDx8bDx8bEyMfHycjIysnIysnJy8rKzMvLzczMzs3Mzs3O0M/Nz87O0M/P0dDQ0tHS1NPS1NPT1dTS1NPS1NPT1dTU1tXV19bV19bW2NfW2NfZ29rZ29ra3Nva3NvZ29rZ29rZ29ra3NvY3NvX29rW2tnW2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnb3dzc3t3d397e4N/e4N/e4N/e4N/e4N/d397d397d397d397d397c3t3c3t3c3t3c3tvf4d7h4+Lm6Ofo6uns7u3t7vDi4+XAwcOxsrS7vL7FxsjNzc3V1dXd3d3k5OTs7Ozx8fH39/f6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz6+vr19fXw8PDq6uri4uLa3NvQ0tHMzs3U1tXj5eTx8/L4+vn2+Pf19/b09vXy9PPy9PPy9PPy9PPy9PPy9PPy9PPx8/Lx8/Lw8vHx8/Lw8vHw8vHw8vHw8vHw8vHw8vHv8fDv8fDu8O/t7+7t7+7u8O/t7+7s7u3s7u3s7u3r7ezr6+vq6urp6+rp6+rp6+rp6+rp6+rp6+rn6ejm6Ofl5+bk5uXk5uXj5eTj5eTi5OPh4+Lg4uHe4N/e4N/b3dzb3dzc3t3Y2tnP0c7Jy8jGyMXExsPBw8C/wb69v7y7vbq5u7i4urWyt7GxtrCwta+us62usKusrqmqrKepq6apq6ioqqeoqqepq6ipq6inqaalp6Slp6SmqKWnqaapq6irraqrrairrairraisrqmvsaywsq2xs7CztbK0trO1t7S2uLe3ubi6vLm7vbq8vru7vbq8vru+wL2/wcC+wL/AwsHBw8LDxcTExsXDx8bDx8bDx8bDx8bIysnIysnIysnJy8rKzMvLzczMzs3Mzs3Nz87Nz87Nz87P0dDR09LT1dTU1tXU1tXS1NPS1NPS1NPT1dTU1tXV19bW2NfW2NfX2djY2tnY2tnY2tnZ2dna2trb29vb3dzZ3dzY3NvW2tnW2tnY2tnY2tnY2tnX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tna3Nvb3dzc3t3d397e4N/e4N/e4N/e4N/c3t3c3t3c3t3c3t3c3t3b3dzb3dzb3dzc3t3g4uHg4uHo6unp6+rq7Ovs7e/U1de2t7m2t7m8vb/HyMrNzc3X19fg4ODl5eXt7e3y8vL39/f6+vr8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f39/f37+/v19fXw8PDq6urj4+Pa3NvQ0tHKzMvP0dDd397u8O/3+fj19/b19/b09vXz9fTy9PPy9PPy9PPy9PPy9PPx8/Lx8/Lx8/Lx8/Lx8/Lx8/Lw8vHw8vHx8/Lw8vHw8vHw8vHv8fDu8O/t7+7t7+7t7+7t7+7s7u3r7ezr7ezq7Ovr6+vq6urp6+rq7Ovq7Ovr7ezr7ezq7Ovo6unn6ejl5+bk5uXj5eTj5eTj5eTi5OPh4+Lg4uHf4eDg4uHd397c3t3e4N/a3NvR09DLzcrHycbGyMXExsPCxMHBw8C/wb6+wL29v7y4vbe3vLa0ubOyt7GytK+xs66xs66xs66wsq+usK2tr6ysrqusrqurraqsrqutr6ytr6ysrqusrqutr6yusKuusKuvsaywsq2wsq2ytK+1t7S2uLW3uba4ure5u7q6vLu6vLm8vru8vru7vbq8vru+wL3AwsG/wcC/wcDAwsHCxMPDxcTCxsXCxsXCxsXCxsXIysnIysnIysnJy8rKzMvLzczMzs3Mzs3Nz87Nz87O0M/Q0tHT1dTW2NfX2djY2tnW2NfV19bU1tXU1tXU1tXU1tXV19bV19bX2djX2djY2tnY2tnZ2dna2trc3Nzd397b3dzY3NvW2tnW2tnY2tnY2tnY2tnX2djY2tnY2tnX2djX2djX2djY2tnZ29rZ29ra3Nvb3dzc3t3d397e4N/e4N/e4N/d397c3t3c3t3c3t3c3t3b3dzb3dza3Nva3Nvd397h4+Le4N/p6+rp6+ro6unq6+3HyMqwsbO5ury9vsDJyszNzc3Z2dni4uLm5ubv7+/z8/P4+Pj6+vr8/Pz9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/f37+/v29vby8vLt7e3m5ubb3dzT1dTKzMvJy8rY2tnn6ejt7+73+fj2+Pf09vXz9fTy9PPy9PPz9fT09vXz9fTy9PPy9PPy9PPz9fTz9fTy9PPy9PPx8/Lx8/Lw8vHw8vHw8vHv8fDv8fDu8O/t7+7v8fDu8O/u7u7t7e3t7e3t7e3t7e3t7e3r6+vr6+vr6+vt7e3t7e3s7Ozo6unm6Ofl5+bk5uXj5eTk5uXk5uXj5eTi5OPh4+Lg4uHg4uHe4N/c3t3e4N/e4N/X2djO0M/KzMvJy8rIysfHycbFx8TDxcLBw8DBw8C8wb26v7u4vbm2u7e3uba2uLW1t7S1t7SztbKytLGxs7Cxs7Cxs7Cxs7Cwsq+wsq+wsq+xs7Cxs7CytLGytLGztbKztbK0trO1t7S1t7S2uLW3uba4urm5u7q7vby7vby8vru9v7y9v768vr29v769v76/wcDAwsHBw8LBw8LCxMPDxcTBxcTCxsXDx8bEyMfIysnIysnJy8rJy8rLzczMzs3Nz87O0M/O0M/O0M/Q0tHT1dTY2tnb3dzb3dzb3dzZ29rY2tnX2djV19bU1tXV19bV19bW2NfX2djX2djX2djY2tnZ2dnZ2dna2trc3t3c3t3a3t3Y3NvW2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnX2djZ29rc3t3d397e4N/e4N/d397d397d397d397c3t3a3NvZ29ra3Nva3Nva3Nvf4eDh4+Lh4+Lo6unr7O7s7e/d3uC2t7m0tbe6u73CxMPKzMvT09Pb29vj4+Po6Ojx8fH19fX6+vr8/Pz9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/f38/Pz39/fz8/Pu7u7n5+fe4N/W2NfNz87Fx8bO0M/f4eDr7ez19/b3+fj2+Pf09vXz9fTz9fT09vXz9fTy9PPz9fTz9fTz9fT09vX09vXz9fTz9fTz9fTz9fTy9PPy9PPy9PPx8/Lx8/Lw8vHv8fDv8fDv8fDv7+/u7u7u7u7u7u7u7u7u7u7t7e3s7Ozt7e3t7e3u7u7t7e3q7Ovo6unm6Ofk5uXk5uXk5uXl5+bj5eTi5OPi5OPg4uHh4+Lf4eDe4N/f4eDf4eDZ29rR09LMzs3LzczJy8jIysfGyMXExsPDxcLDxcK/xMC+w7+8wb26v7u7vbq7vbq6vLm5u7i3uba2uLW2uLW1t7S1t7S1t7S0trO0trO1t7S1t7S1t7S2uLW2uLW2uLW2uLW3uba2uLW3uba3uba4ure5u7q6vLu7vby8vr29v7y9v7y9v769v769v76+wL/AwsHBw8LBw8LCxMPDxcTDxcTCxsXDx8bEyMfFycjJy8rJy8rKzMvLzczMzs3Nz87O0M/P0dDP0dDP0dDR09LU1tXY2tnb3dzb3dzb3dza3Nva3NvZ29rY2tnX2djX2djX2djX2djX2djX2djX2djY2tnZ2dnZ2dna2trb3dza3t3a3t3Z3dzX29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnX2djZ29rb3dzd397d397d397d397c3t3c3t3c3t3b3dzZ29rY2tnZ29ra3Nvb3dzi5OPf4eDn6ejs7u3s7e/o6evQ0dOur7G3uLq8vb/ExsXMzs3V1dXd3d3l5eXq6ury8vL29vb6+vr8/Pz9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3+/v79/f34+Pj19fXw8PDp6enh4+La3NvS1NPFx8bExsXV19bl5+bx8/L3+fj2+Pf19/b09vXz9fT09vXz9fTy9PPz9fTz9fT09vX09vX09vX09vX09vX09vXz9fTz9fTy9PPy9PPy9PPy9PPx8/Lw8vHx8fHx8fHw8PDw8PDw8PDw8PDv7+/v7+/u7u7u7u7t7e3u7u7u7u7u7u7s7Ozr6+vn6ejl5+bk5uXk5uXk5uXk5uXj5eTj5eTh4+Li5OPh4+Lf4eDh4+Lh4+Lb3dzU1tXP0dDNz87LzczKzMvIysnGyMfGyMfGyMfExsPDxcLBw8DAwr+/wb6+wL29v7y8vru7vbq6vLm5u7i4ure4ure4ure4ure3uba4urm4urm4ure4ure4ure4ure4ure4ure4ure5u7i5u7i6vLm7vby7vby7vby8vr29v76+wL++wL++wL++wL+/wcDBw8LCxMPCxMPCxMPDxcTExsXCxsXDx8bEyMfFycjKzMvKzMvKzMvLzczMzs3Nz87O0M/P0dDR09LR09LS1NPV19bZ29rb3dzb3dzb3dzb3dzb3dzc3t3c3t3b3dza3NvZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29ra3NvZ3dza3t3a3t3X29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnX2djY2tnb3dzc3t3d397c3t3b3dzb3dzb3dzb3dza3NvZ29rY2tnZ29rb3dzd397h4+Li5OPq7Ovs7u3t7vDd3uC7vL6trrC6u72/wMLHycjP0dDX19ff39/n5+Xt7evz8/P39/f7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v76+vr29vby8vLr6+vj5eTb3dzW2NfKzMvBw8LKzMvc3t3q7Ov19/b2+Pf2+Pf09vXz9fT09vX09vXy9PPz9fTz9fTz9fTz9fTz9fTz9fTz9fTz9fTz9fTz9fTy9PPy9PPy9PPy9PPx8/Lw8vHx8fHx8fHx8fHx8fHx8fHx8fHw8PDv7+/u7u7u7u7t7e3t7e3t7e3t7e3t7e3s7Ozo6unm6Ofk5uXk5uXk5uXk5uXj5eTj5eTi5OPj5eTi5OPh4+Lh4+Lh4+Ld397X2djS1NPP0dDNz87Mzs3KzMvJy8rIysnIysnGyMXFx8TExsPDxcLCxMHAwr+/wb6+wL29v7y8vru7vbq7vbq7vbq6vLm6vLm5u7i6vLu6vLu6vLm6vLm6vLm5u7i5u7i5u7i6vLm6vLm7vbq7vbq7vby8vr28vr28vr29v76+wL++wL+/wcC/wcDAwsHBw8LCxMPCxMPDxcTExsXFx8bDx8bEyMfFycjGysnKzMvKzMvKzMvLzczMzs3Nz87O0M/P0dDR09LR09LT1dTW2NfZ29rb3dzb3dzb3dzc3t3c3t3d397e4N/d397c3t3a3NvZ29rZ29rY2tnY2tnZ29rY2tnY2tnY2tnZ29rY3NvZ3dzZ3dzY3NvY2tnY2tnZ29rZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnX2djZ29rb3dzc3t3c3t3b3dzb3dza3Nva3Nva3Nva3Nva3Nva3Nva3Nvc3t3f4eDg4uHq7Ovq7Ovp6+rp6uzKy82rrK62t7m8vb/BwsTJy8rR09LZ2dnh4eHq6ujv7+309PT4+Pj8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////+/v77+/v4+Pj09PTt7e3l5+ba3NvX2djP0dDCxMPDxcTR09Lh4+Ly9PP19/b3+fj19/bz9fT09vX09vXz9fTz9fTz9fTz9fTz9fTy9PPy9PPy9PPy9PPz9fTz9fTy9PPy9PPy9PPy9PPx8/Lx8/Lx8fHx8fHx8fHx8fHx8fHx8fHw8PDv7+/w7u/v7e7t7e3t7e3t7e3t7e3t7e3t7e3p6+rn6ejl5+bl5+bl5+bk5uXj5eTk5uXj5eTj5eTi5OPh4+Lh4+Lh4+Le4N/a3NvT1dTR09LP0dDO0M/Nz87LzczJy8rIysnJy8rIysnHycjGyMfFx8bDxcTCxMPBw8LBw8LAwsG/wb6+wL2+wL29v7y9v7y9v7y8vr28vr28vr28vr28vru8vru8vru8vru8vru8vru8vr28vr28vr28vr28vr28vr2+wL++wL+/wcDAwsHAwsHBw8LCxMPDxcTExsXExsXFx8bGyMfEyMfFycjGysnHy8rIzMvJzczJzczKzs3Lz87M0M/N0dDN0dDP09LQ1NPS1tXU2NfX29rZ3dzZ3dzZ3dza3t3b397b397c4N/b397b397a3t3Z3dza3NvZ29rY2tnY2tnY2tnY2tnY2tnZ29rZ3dza3t3a3t3Y3NvY2tnY2tnY2tnZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tna3Nvb3dzc3t3c3t3b3dza3Nva3NvZ29rZ29ra3Nvc3t3b3dzb3dze4N/h4+Lk5uXt7+7r7O7q6+3a2921trirrK67vL69vsDDxMbLzczT1dTb29vk5OTs7Ory8vD29vb5+fn9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////+/v77+/v5+fn19fXv7+/o6unc3t3X2djR09LGyMfAwsHHycjX2djq7Ovy9PP3+fj3+fj09vX09vX09vXz9fT09vX09vXz9fTz9fTy9PPy9PPy9PPy9PPy9PPy9PPx8/Lx8/Lx8/Lx8/Lw8vHw8vHx8fHx8fHx8fHx8fHx8fHx8fHw8PDv7+/w7u/w7u/u7u7t7e3t7e3t7e3u7u7u7u7r7ezp6+rn6ejm6Ofm6Ofl5+bk5uXk5uXj5eTj5eTi5OPi5OPi5OPh4+Lf4eDc3t3W2NfT1dTR09LQ0tHP0dDNz87KzMvJy8rKzMvKzMvJy8rIysnHycjGyMfExsXDxcTExsXDxcTCxMHBw8DAwr/Awr+/wb6/wb6+wL++wL++wL++wL++wL2+wL2+wL2/wb6+wL2+wL29v769v76+wL++wL++wL+/wcDAwsHAwsHBw8LCxMPCxMPDxcTDxcTExsXFx8bGyMfHycjHycjGysnHy8rIzMvJzczKzs3Kzs3Kzs3Lz87M0M/N0dDO0tHO0tHP09LQ1NPS1tXV2djY3NvZ3dzZ3dzZ3dza3t3a3t3b397b397b397b397b397b397b3dzZ29rY2tnY2tnY2tnY2tnY2tnZ29rb397c4N/b397Y3NvY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tna3Nvb3dzb3dzc3t3b3dza3Nva3Nva3NvY2tnY2tna3Nvc3t3d397d397g4uHk5uXr7ezs7u3t7vDm5+nDxMaqq620tbe5ury/wMLFxsjNz87W2Nfe3t7m5ubu7uzz8/H39/f6+vr9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v77+/v6+vr39/fx8fHr7ezg4uHa3NvU1tXMzs3CxMPAwsHLzcze4N/q7Ov19/b3+fj19/b09vX09vXz9fT09vXz9fTz9fTy9PPy9PPy9PPy9PPy9PPx8/Lx8/Lx8/Lx8/Lx8/Lx8/Lx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHw8PDw8PDw7u/w7u/w7u/v7e7t7e3u7u7v7+/v7+/t7+7r7ezp6+ro6unn6ejm6Ofk5uXk5uXk5uXj5eTj5eTj5eTj5eTi5OPh4+Lg4uHa3NvW2NfT1dTS1NPR09LP0dDMzs3LzczLzczKzMvKzMvJy8rIysnIysnHycjGyMfGyMfFx8bExsXDxcTDxcLCxMHCxMHBw8DAwsHAwsHAwsHAwsHAwr/Awr/Awr/Awr/Awr/Awr+/wcC/wcDAwsHAwsHBwsTCw8XCxMPDxcTExsXExsXExsXFx8bFx8bGyMfHycjIysnJy8rKzMvIzMvJzczKzs3Lz87Lz87Lz87M0M/M0M/N0dDO0tHP09LP09LQ1NPS1tXU2NfW2tnY3NvZ3dzZ3dzZ3dza3t3a3t3b397c4N/c4N/d4eDd4eDd4eDZ3dzX29rV2djW2tnY2tnY2tnZ29ra3Nvb397b397Z3dzX29rY2tnY2tnY2tnX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnb3dzb3dzb3dzb3dza3Nva3NvZ29ra3NvY2tnY2tna3Nvd397d397e4N/j5eTp6+rt7+7s7u3o6evS09WxsrStrrC6u726u73DxMbJyszR09La3Nvi4uDp6efw8O719fP4+Pj7+/v+/v7////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3+/v7+/v77+/v6+vr39/fy8vLs7u3k5uXd397W2NfR09LGyMe9v77DxcTU1tXj5eTy9PP2+Pf19/b19/b19/b09vXz9fTz9fTy9PPy9PPy9PPy9PPy9PPy9PPz9fTy9PPy9PPy9PPy9PPy9PPy8vLy8vLx8fHx8fHx8fHx8fHx8fHx8fHx8fHw8PDw7u/w7u/w7u/v7e7t7e3u7u7u7u7v7+/v8fDs7u3q7Ovp6+ro6unn6ejl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXj5eTi5OPd397Z29rU1tXS1NPR09LQ0tHO0M/Nz87Mzs3Mzs3LzczLzczKzMvKzMvKzMvJy8rIysnHycjGyMfFx8bFx8TFx8TExsPDxcLCxMPCxMPCxMPCxMPCxMHCxMHCxMHCxMHCxMHBw8DBw8LBw8LBw8LCxMPExcfFxsjExsXFx8bGyMfGyMfGyMfHycjHycjIysnJy8rKzMvKzMvLzczKzs3Lz87M0M/M0M/M0M/M0M/M0M/N0dDN0dDO0tHP09LP09LR1dTT19bV2djX29rZ3dzZ3dzZ3dzZ3dza3t3a3t3b397c4N/d4eDe4uHe4uHe4uHa3t3X29rV2djV2djY2tnY2tnZ29ra3NvZ3dzY3NvX29rV2djX2djY2tnZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnb3dzb3dzb3dza3NvZ29rZ29rZ29rZ29rZ29rZ29ra3Nvd397e4N/g4uHm6Oft7+7p6+ru8O/i4+W7vL6qq621tri6u72/wMLGx8nMzc/U1tXc3t3k5OLr6+ny8vD39/X5+fn8/Pz+/v7////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v4+Pj39/fw8PDp6eni4uLb29vS0tLLy8vDw8O7u7vGx8nY2dvo6evx8vT4+vn2+Pfy9PH2+PXz9fLz9fLz9fT09vXz9fTz9fTy8/Xy8/Xy9PPy9PPy9PPy9PPz8/Pz8/Py8vLy8vLx8fHx8fHx8fHx8fHy8vLx8fHw8PDv7+/v7+/v7+/u7u7v7+/v7+/v7+/v7+/u7u7v7+/v7+/u7u7s7Ozp6enn5+fn5+fn5+fm6Ofl5+bk5uXk5uXk5uXk5uXj5eTj5eTg4uHc3t3X2djT1dTS1NPS1NPQ0tHO0M/Q0tHP0dDO0M/Nz87Nz87Mzs3Mzs3LzczKzMvJy8rIysnIysnIysnHycjHycjGyMfFx8bFx8bExsXExsXExsXFx8bFx8bFx8bGyMfGyMfGyMfFx8bFx8bGyMfGyMfGyMfEyMfEyMfFycjGysnGysnGysnGysnGysnIzMvIzMvJzczKzs3Lz87Lz87M0M/M0M/N0dLN0dLO0tPP09TP09TQ1NXR1dbR1dbS1tfV2drX29zY3N3Z3d7a3t/b3+Db3+Dd397d397d397e4N/f4eDf4eDf4eDg4uHd397c3t3b3dzZ29rZ29rZ29rZ29rZ29ra3NvZ29rY2tnY2tnY2tnY2tnY2tnX2djX2djY2tnZ29rZ29rZ29rZ29rb3dzc3t3a3t3Z3dzZ29rZ29ra3NvZ29ra3Nvb3dzZ29rb3dza2trg4ODh4eHi4uLt7e3v7+/s7e/p6uzAwcOur7GztbS1t7a/wcC+wL/IysnQ0tHa3Nvg4uHm6Oft7+709vX5+/r8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v5+fn39/fy8vLr6+vl5eXe3t7V1dXOzs7Gxsa+vr68vb/LzM7f4OLr7O7y9PP3+fj4+vfz9fLz9fLz9fL09vX19/b09vXy9PPx8vTx8vTy9PPy9PPy9PPy9PPz8/Pz8/Pz8/Py8vLy8vLy8vLx8fHx8fHx8fHx8fHx8fHx8fHv7+/v7+/v7+/v7+/v7+/v7+/v7+/u7u7w8PDx8fHx8fHv7+/t7e3r6+vp6enp6enn6ejm6Ofm6Ofl5+bl5+bl5+bk5uXj5eTi5OPf4eDa3NvW2NfU1tXT1dTR09LQ0tHQ0tHP0dDO0M/O0M/Nz87Nz87Nz87Mzs3LzczLzczKzMvJy8rJy8rJy8rJy8rIysnHycjHycjHycjGyMfGyMfGyMfGyMfGyMfHycjHycjHycjHycjHycjHycjIysnIysnGysnGysnHy8rHy8rIzMvIzMvIzMvIzMvJzczKzs3Kzs3Lz87Lz87M0M/M0M/N0dDN0dLN0dLO0tPP09TQ1NXR1dbS1tfS1tfU2NnW2tvZ3d7Z3d7Z3d7Z3d7a3t/b3+Dd397c3t3d397f4eDh4+Li5OPg4uHf4eDb3dza3NvZ29rZ29rY2tnZ29rZ29rZ29rZ29rY2tnY2tnY2tnY2tnY2tnY2tnX2djY2tnY2tnY2tnZ29ra3Nvb3dzb3dzb3dza3t3Y3NvZ29rZ29rZ29rZ29rZ29ra3Nvc3t3Z29rh4eHg4ODj4+Pu7u7s7Ozq6uru7/HQ0dOys7WtrrC0trW4urm+wL/Fx8bMzs3T1dTc3t3j5eTo6unv8fD19/b5+/r8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz6+vr4+Pj09PTu7u7o6Ojh4eHZ2dnS0tLKysrCwsK4ubu9vsDQ0dPh4uTr7ez19/b5+/rx8/Ly9PHz9fL19/b19/bz9fTy9PPx8vTx8vTy9PPy9PPy9PPx8/Ly8vLz8/Pz8/Pz8/Pz8/Py8vLx8fHx8fHx8fHx8fHy8vLy8vLw8PDw8PDw8PDw8PDw8PDw8PDv7+/v7+/v7+/w8PDx8fHx8fHu8O/r7ezp6+ro6unm6Ofm6Ofm6Ofm6Ofl5+bk5uXj5eTi5OPk5uXi5OPd397Z29rX2djU1tXT1dTS1NPR09LQ0tHP0dDP0dDP0dDO0M/O0M/Nz87Nz87Mzs3Mzs3LzczLzczLzczLzczKzMvKzMvKzMvJy8rJy8rIysnIysnIysnIysnJy8rJy8rJy8rJy8rJy8rKzMvKzMvKzMvIzMvIzMvJzczKzs3Kzs3Kzs3Kzs3Kzs3Lz87Lz87Lz87M0M/M0M/N0dDN0dDO0tHO0tPO0tPP09TQ1NXR1dbS1tfT19jT19jV2drY3N3a3t/a3t/a3t/a3t/b3+Db3+De4N/d397e4N/g4uHj5eTi5OPg4uHd397Y2tnY2tnY2tnY2tnZ29rZ29rZ29ra3NvZ29rY2tnX2djX2djY2tnY2tnY2tnY2tnZ29rY2tnY2tna3Nvb3dzc3t3b3dza3Nvb3dza3NvZ29rZ29rZ29rZ29rZ29rb3dze4N/b3dzh4eHj4+Pr6+vv7+/p6enu7u7f4OK0tberrK6xsrS2uLe9v77AwsHLzczR09LY2tng4uHm6Ofs7u3y9PP4+Pj7+/v8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v6+vr29vbw8PDq6url5eXd3d3W1tbOzs7Gxsa+v8G4ubvAwcPV1tjl5+bu8O/z9fT09vXz9fL09vP09vX09vXz9fTz9fTz9Pbz9Pby9PPy9PPx8/Lx8/Ly8vLy8vLz8/Pz8/Pz8/Py8vLx8fHx8fHx8fHx8fHw8PDw8PDw8PDw8PDv7+/v7+/v7+/v7+/u7u7u7u7u7u7v7+/w8PDx8fHv8fDt7+7r7ezq7Ovo6uno6unn6ejm6Ofm6Ofl5+bk5uXj5eTl5+bj5eTg4uHc3t3Z29rW2NfV19bV19bS1NPS1NPR09LQ0tHQ0tHQ0tHP0dDO0M/P0dDO0M/Nz87Nz87Mzs3Mzs3Mzs3LzczLzczLzczLzczLzczKzMvKzMvKzMvKzMvKzMvKzMvKzMvKzMvLzczLzczLzczLzczJzczKzs3Kzs3Lz87Lz87Lz87Lz87Lz87M0M/M0M/N0dDO0tHO0tHP09LP09LQ1NPP09TQ1NXQ1NXR1dbS1tfT19jU2NnU2NnW2tvZ3d7b3+Db3+Db3+Dc4OHc4OHd4eLg4uHg4uHg4uHh4+Lh4+Lg4uHc3t3a3NvY2tnY2tnY2tnZ29rZ29ra3Nva3Nva3NvY2tnY2tnX2djX2djY2tnY2tnZ29rZ29rZ29rZ29ra3Nvb3dzc3t3b3dza3NvZ29rZ29rZ29rZ29ra3Nva3Nva3Nvb3dzd397d397f4eDi4uLq6urq6urp6env7+/m5ubAwcOoqauwsbO3uLq5u7rCxMPFx8bP0dDW2Nfc3t3j5eTp6+rv8fD19/b6+vr7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz7+/v39/fx8fHt7e3o6Ojg4ODZ2dnR0dHJycnExce7vL62t7nExcfa3Nvm6Ofu8O/4+vn2+Pf2+Pf09vXy9PPy9PP09vX09vX09vXy9PPy9PPx8/Lx8/Ly8vLy8vLz8/Pz8/Pz8/Py8vLy8vLx8fHx8fHw8PDu7u7t7e3u7u7t7e3t7e3t7e3s7u3r7ezq7Ovq7Ovr7ezs7u3t7+7u8O/v8fDv8fDv8fDu8O/r7ezq7Ovp6+rn6ejn6ejm6Ofm6Ofm6Ofm6Ofl5+bi5OPf4eDb3dzY2tnW2NfW2NfV19bU1tXT1dTS1NPR09LR09LQ0tHP0dDQ0tHP0dDO0M/Nz87Nz87Mzs3Mzs3LzczMzs3Mzs3Mzs3Mzs3Mzs3Mzs3Mzs3Mzs3Mzs3Mzs3LzczLzczLzczLzczMzs3Mzs3Mzs3Mzs3Nz87Nz87O0M/O0M/O0M/O0M/P0dDQ0tHQ0tHR09LS1NPT1dTU1tXU1tXT1dTU1tXU1tXV19bW2NfW2NfX2djX2dja3Nvc3t3e4N/e4N/d397e4N/e4N/f4eDf4eDf4eDg4uHf4eDd397b3dzZ29rY2tnX2djY2tnY2tnZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnX2djY2tnY2tnZ29ra3Nva3Nvb3dzc3t3c3t3b3dza3NvZ29rZ29rZ29rZ29rZ29ra3Nva3Nva3Nvc3t3e4N/e4N/i5OPr6+vv7+/o6Ojv7+/r6+vExMSrrK6trrC1tri6u729v77DxcTKzMvS1NPa3Nvf4eDm6Ofs7u3z8/P4+Pj7+/v8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v79/f38/Pz7+/v5+fnz8/Pv7+/r6+vk5OTd3d3V1dXNzc3ExcfBwsS2t7m3uLrKzMvb3dzo6un19/b3+fj3+fj19/by9PPx8/Lz9fT09vXz9fTz9fTy9PPx8/Lx8/Lx8fHy8vLy8vLz8/Py8vLy8vLx8fHx8fHw8PDv7+/t7e3s7Ozr6+vr6+vq6urq6urp6+ro6unn6ejn6ejm6Ofn6ejn6ejp6+rq7Ovs7u3s7u3s7u3q7Ovp6+rn6ejl5+bl5+bl5+bl5+bl5+bl5+bk5uXi5OPf4eDc3t3Z29rY2tnX2djW2NfW2NfU1tXT1dTT1dTS1NPR09LQ0tHR09LR09LP0dDO0M/O0M/Nz87Mzs3Mzs3Mzs3Mzs3Nz87Nz87Nz87Nz87Nz87Nz87Nz87Nz87Nz87Mzs3Mzs3Mzs3Nz87Nz87Mzs3Nz87Nz87O0M/O0M/P0dDP0dDO0M/Q0tHR09LS1NPT1dTU1tXV19bW2NfW2NfW2NfW2NfW2NfW2NfX2djX2djX2djX2dja3Nvd397e4N/d397c3t3c3t3c3t3c3t3b3dzc3t3c3t3b3dzZ29rX2djX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29ra3Nvc3t3b3dzb3dzc3t3b3dza3NvZ29rZ29ra3Nva3NvZ29ra3Nva3Nva3Nvb3dzd397f4eDj5eTo6unu7u7s7Ozz8/Pt7e3GxsasrKyrrK61tri1tri7vL7CxMPExsXO0M/X2djd397j5eTq7Ovw8vH29vb6+vr8/Pz8/Pz+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v79/f38/Pz8/Pz29vby8vLu7u7o6Ojh4eHZ2dnR0dHIycvExce8vb+2t7m7vbzKzMvc3t3p6+ry9PP19/b2+Pfz9fTx8/Lz9fT09vXz9fTz9fTy9PPy9PPx8/Lx8fHx8fHy8vLy8vLz8/Py8vLx8fHw8PDv7+/u7u7t7e3s7Ozr7ezq7Ovq7Ovp6+rp6+ro6unn6ejm6Ofk5uXk5uXj5eTk5uXl5+bl5+bj5+bj5+bk5uXj5eTi5OPh4+Lg4uHg4uHg4uHf4eDg4uHg4uHf4eDe4N/c3t3a3NvZ29rY2tnX2djW2NfV19bU1tXU1tXT1dTS1NPS1NPT1dTS1NPQ0tHQ0tHP0dDP0dDO0M/Nz87O0M/O0M/O0M/O0M/O0M/O0M/O0M/Nz87O0M/O0M/O0M/O0M/O0M/O0M/O0M/O0M/O0M/O0M/P0dDQ0tHQ0tHQ0tHQ0tHQ0tHS1NPS1NPT1dTU1tXV19bW2NfX2djX2djX2djX2djX2djX2djY2tnY2tnY2tnY2tnZ29rb3dzc3t3b3dza3NvZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnX2djX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rb3dzd397c3t3b3dza3Nva3NvZ29rZ29ra3Nva3Nva3Nva3Nva3Nvb3dzb3dzd397g4uHj5eTq7Ovu8O/r7ezo6unt7e3Pz8+np6eurq6xsrS4ubu4ubu+v8HFx8bJy8rU1tXb3dzh4+Ln6ejv7+/09PT4+Pj7+/v9/f39/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v7+/v79/f38/Pz+/v74+Pj19fXx8fHq6urk5OTc3NzU1NTOz9HGx8nCw8W8vb+ztbS6vLvP0dDd397t7+7z9fT3+fj19/by9PPz9fT09vX09vXz9fTy9PPy9PPx8/Ly8vLx8fHx8fHx8fHz8/Py8vLw8PDv7+/u7u7u7u7t7e3t7e3t7+7s7u3r7ezr7ezr7ezq7Ovp6+ro6uno6unm6Ofl5+bk5uXk5uXj5eTg5OPf4+Lg4uHf4eDe4N/e4N/d397d397c3t3b3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dza3NvX2djX2djW2NfV19bU1tXU1tXT1dTT1dTT1dTS1NPR09LR09LQ0tHQ0tHP0dDP0dDP0dDP0dDQ0tHQ0tHP0dDP0dDO0M/O0M/P0dDP0dDP0dDP0dDP0dDQ0tHQ0tHQ0tHQ0tHQ0tHQ0tHR09LR09LS1NPS1NPS1NPT1dTT1dTU1tXV19bW2NfX2djX2djX2djX2djX2djY2tnY2tnY2tnY2tnZ29rZ29rW2NfY2tna3NvZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnX2djZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnZ29rY2tnY2tna3Nvc3t3d397c3t3b3dzZ29rY2tnZ29ra3Nvb3dza3Nva3Nva3Nvb3dzc3t3d397f4eDk5uXo6unt7+7u8O/t7+7s7u3Q0NCsrKyqqqqysrKxsrS3uLq/wMLDxMbHycjQ0tHZ29rc3t3k5uXq7Ovy8vL29vb5+fn8/Pz+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v6+vr39/fz8/Pu7u7n5+fg4ODa2trU1tXJy8rCxMPAwsG5uryztLa9v77P0dDd397p6+r09vX3+fj09vXz9fTz9fTz9fTz9fTz9fTy9PPz9fTz8/Py8vLx8fHx8fHx8fHx8fHx8fHx8fHw8PDv7+/t7e3s7Ozr7ezr7ezs7u3s7u3r7ezq7Ovp6+rp6+ro6unn6ejm6Ofl5+bj5+bi5uXh5eTg5OPi5OPi5OPh4+Lf4eDe4N/d397c3t3c3t3c3t3b3dza3NvZ29rZ29rZ29rY2tnY2tnY2tnY2tnX2djW2NfU1tXT1dTU1tXV19bV19bT1dTS1NPT1dTT1dTS1NPR09LS1NPS1NPR09LR09LR09LR09LQ0tHP0dDQ0tHQ0tHQ0tHQ0tHQ0tHQ0tHR09LR09LS1NPS1NPS1NPT1dTT1dTS1NPT1dTU1tXU1tXV19bV19bV19bW2NfX2djX2djY2tnY2tnZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29ra3Nva3Nva3Nva3NvZ29rY2tnZ29rb3dzZ2dne3t7d3d3d3d3k5OTm5ubp6eny8vLt7e3u7u7v8PLT1NatrrCoqauxsrSys7W3uLq5ury/wMLHyMrO0M/U1tXb3dzh4+Lp6enu7u709PT4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v7+/v4+Pj19fXw8PDr6+vj4+Pe3t7Z29rR09LIysnDxcS7vL60tbe1t7a8vr3U1tXb3dzo6unz9fT3+fj09vXz9fT19/bz9fTy9PPy9PPy9PPy8vLx8fHy8vLy8vLx8fHx8fHx8fHx8fHw8PDv7+/t7e3s7Ozr7ezs7u3s7u3s7u3r7ezq7Ovp6+rp6+ro6uno6unn6ejm6Ofk6Ofj5+bi5uXh5eTi5OPi5OPh4+Lg4uHf4eDe4N/d397d397d397c3t3b3dza3Nva3Nva3NvZ29rZ29rY2tnY2tnX2djW2NfV19bV19bV19bW2NfV19bU1tXT1dTT1dTU1tXT1dTT1dTT1dTS1NPS1NPR09LS1NPS1NPQ0tHQ0tHQ0tHR09LR09LR09LR09LR09LS1NPT1dTT1dTT1dTT1dTT1dTT1dTT1dTU1tXU1tXV19bW2NfW2NfW2NfX2djY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29ra3NvZ29rY2tnZ29rb3dze3t7Z2dne3t7k5OTj4+Pr6+vy8vLs7Ozu7u7z8/PX2NqwsbOqq62ur7GtrrC3uLq6u72+v8HExcfMzc/S1NPY2tng4uHm6Ofs7Ozx8fH39/f5+fn7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8/Pz8/Pz6+vr4+Pj09PTv7+/o6Ojj4+Pc3t3W2NfNz87GyMfAwcO7vL61trixsrS/wMLOz9He4N/o6unx8/L3+fj3+fbx8/D09vXz9fTz9fTy9PPy8vLx8fHx8fHx8fHx8fHx8fHx8fHx8fHw8PDv7+/t7e3s7Ozr7ezs7u3s7u3s7u3r7ezq7Ovp6+rp6+rp6+ro6unn6ejn6ejm6Ofl5+bk5uXk5uXj5eTj5eTi5OPh4+Lg4uHf4eDe4N/e4N/d397d397c3t3b3dzb3dza3Nva3NvZ29rY2tnX2djW2NfW2NfW2NfW2NfW2NfW2NfW2NfV19bU1tXU1tXV19bU1tXU1tXU1tXU1tXT1dTT1dTT1dTT1dTR09LR09LS1NPS1NPS1NPS1NPT1dTT1dTT1dTU1tXV19bT1dTU1tXV19bV19bV19bV19bW2NfW2NfX2djY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29ra3Nva3NvY2tnY2tnZ29rZ29rZ29rZ29ra3Nvb3dzb29vg4ODl5eXm5ubp6enw8PDy8vLr6+vw8PLU1Na0tbelpqisra+0tbeztLa5ury+v8HCw8XJyszQ0dPW2Nfd397m5ubs7Ozx8fH19fX6+vr8/Pz8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/f38/Pz6+vr39/fz8/Pt7e3o6Ojf4eDa3NvR09LKzMvGx8nCw8W7vL61triwsbPAwcPQ0tHc3t3n6ejz9fT19/Tx8/Dz9fTz9fTy9PPy9PPz8/Py8vLx8fHw8PDx8fHx8fHx8fHx8fHw8PDv7+/u7u7s7Ozs7u3s7u3t7+7s7u3r7ezq7Ovq7Ovp6+rp6+ro6uno6unn6ejn6ejm6Ofl5+bk5uXk5uXj5eTj5eTi5OPh4+Lg4uHg4uHf4eDe4N/d397c3t3c3t3c3t3b3dza3Nva3NvZ29rY2tnX2djX2djX2djX2djX2djX2djX2djV19bV19bV19bW2NfV19bV19bW2NfV19bU1tXU1tXU1tXU1tXT1dTS1NPT1dTT1dTT1dTT1dTT1dTT1dTU1tXV19bV19bU1tXV19bW2NfX2djX2djX2djX2djX2djY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29ra3Nva3NvZ29rZ29rZ29ra3NvZ29rZ29ra3Nvc3t3h4eHf39/l5eXu7u7x8fHs7Ozs7Ozx8fHX19murrCkpaewsbOys7W0tbe5ury8vb/Cw8XHyMrOz9HU1dfa3Nvh4+Lq6urw8PD19fX4+Pj8/Pz9/f39/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v79/f37+/v5+fn29vbw8PDs7Ozk5uXf4eDX2djQ0tHKy83DxMa9vsC6u72ztLays7W6vLvO0M/e4N/n6ejv8e72+PXy9PPy9PPx8/Lw8vHy8vLz8/Pz8/Px8fHx8fHx8fHx8fHx8fHw8PDv7+/u7u7t7e3s7u3s7u3t7+7t7+7s7u3r7ezq7Ovq7Ovp6+ro6uno6unn6ejn6ejm6Ofl5+bk5uXk5uXk5uXk5uXj5eTj5eTi5OPh4+Lg4uHe4N/e4N/d397d397c3t3c3t3b3dza3Nvb3dza3NvY2tnY2tnY2tnY2tnY2tnX2djX2djW2NfV19bW2NfW2NfW2NfW2NfW2NfW2NfV19bV19bW2NfV19bU1tXU1tXU1tXU1tXU1tXU1tXU1tXU1tXU1tXV19bW2NfV19bW2NfX2djY2tnY2tnY2tnY2tnY2tnZ29rZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnZ29rZ29ra3Nvb3dza3Nva3Nva3Nva3Nva3Nvc3t3e4N/k5OTi4uLs7Ozw8PDs7Ozy8vLu7u7V1dWtra+pqausra+ys7W1tri1tri4ub3Cw8fGx8nMzc/V1dfb293g4ODm5ubu7u7z8/P39/f6+vr9/f39/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v79/f38/Pz6+vr4+Pjz8/Pv7+/o6unj5eTd397X2djP0NLGx8m/wMK8vb+5urywsbOusK+6vLvMzs3b3dzo6ufx8/D19/b2+Pf09vXx8/Lx8fHy8vLy8vLx8fHx8fHx8fHx8fHx8fHx8fHw8PDu7u7t7e3s7u3t7+7t7+7t7+7s7u3r7ezq7Ovq7Ovp6+rp6+ro6uno6unn6ejn6ejm6Ofl5+bk5uXk5uXk5uXk5uXk5uXj5eTi5OPh4+Lf4eDf4eDe4N/e4N/e4N/d397c3t3b3dzc3t3b3dza3Nva3NvZ29rZ29rY2tnY2tnY2tnX2djW2NfX2djX2djX2djW2NfX2djX2djW2NfW2NfX2djW2NfV19bV19bV19bV19bV19bV19bV19bU1tXU1tXV19bW2NfX2djX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnZ29rZ29ra3Nvb3dzb3dza3Nvb3dzb3dzc3t3f4eDi5OPl5eXt7e3z8/Pv7+/u7u7v7+/U1NSqqqqmpqivr7Gys7WxsrS3uLq7vL67vMDGx8vLzM7R0tTa2tzf3+Hl5eXr6+vx8fH19fX5+fn7+/v9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz7+/v6+vr29vbz8/Ps7u3n6ejh4+Lb3dzV1tjNztDGx8nBwsS8vb+4ubuxs7KvsbC4urnJy8rZ29jh4+Dv8fD09vX3+fj19/bz8/Py8vLy8vLx8fHx8fHx8fHx8fHx8fHx8fHw8PDu7u7t7e3t7e3u7u7u7u7u7u7t7e3s7Ozq7Ovq7Ovq7Ovp6+rp6+ro6uno6unn6ejm6Ofm6Ofk5uXk5uXl5+bl5+bk5uXj5eTi5OPi5OPh4+Lg4uHg4uHf4eDf4eDe4N/d397d397c3t3c3t3c3t3b3dza3NvZ29rZ29rZ29ra3NvY2tnY2tnY2tnY2tnX2djX2djY2tnY2tnX2djX2djX2djX2djW2NfV19bW2NfW2NfW2NfW2NfW2NfV19bV19bV19bW2NfY2tnY2tnY2tnY2tnX2djX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnX2djX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29ra3NvZ29rZ29rY2tnY2tnZ29ra3Nva3Nvc3t3b3dzb3dzc3t3d397g4uHk5uXo6unu7u7v7e7t7e3x8fHq6urKysqrq6ulpaWysrSurrCys7W2t7m6u73AwcPFxsrKy8/Q0dPW19nf3+Hk5Obp6enw8PD09PT39/f6+vr8/Pz+/v7+/v7+/v7////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz7+/v5+fn19fXx8/Lt7+7l5+bd397Z2tzV1tjNztDFxsi+v8G7vL62uLexs7KusK+1t7bGyMfW2Nff4eDq7Ov19/b2+Pf09PTz8/Py8vLy8vLx8fHx8fHx8fHx8fHx8fHw8PDu7u7t7e3t7e3u7u7u7u7u7u7t7e3s7Ozq7Ovq7Ovq7Ovq7Ovp6+rp6+rp6+ro6unn6ejm6Ofk5uXk5uXl5+bl5+bk5uXk5uXj5eTi5OPh4+Lh4+Lh4+Lh4+Lg4uHf4eDe4N/d397c3t3d397d397c3t3b3dza3Nva3Nvb3dzb3dza3NvZ29rZ29rZ29rY2tnY2tnY2tnY2tnX2djX2djY2tnX2djW2NfV19bW2NfX2djX2djX2djW2NfV19bV19bV19bW2NfY2tnY2tnY2tnY2tnX2djX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29ra3Nva3NvZ29rZ29rZ29rZ29ra3Nvb3dzc3t3c3t3c3t3e4N/g4uHk5uXp6+rt7+7x8fHv7+/w8PDl5eXHx8erq6unp6ewsLCvr7GwsLK3uLq5ury7vL7DxMbKy83Q0dPV1tjb3N7k5Obp6evu7u709PT4+Pj5+fn7+/v9/f3+/v7+/v7+/v7////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v6+vr5+fn09PTx8fHr6+vl5eXg4ODa2trS1NPNz87HyMq/wMK6u724ubuxsrSsra+1trjFx8bU1tXc3tvo6ufz9fL3+fj19/bz8/Py8vLz8/Py8vLx8fHx8fHy8vLy8vLy8PHx7/Dw7u/w7u/t7e3s7Ozs7Ozs7Ozs7Ozt7e3r7ezq7Ovp6+rp6+rp6+ro6unm6unl6ejn6ejm6Ofl5+bk5uXk5uXl5+bl5+bl5+bj5eTj5eTi5OPi5OPh4+Lg4uHf4eDe4N/e4N/e4N/d397d397c3t3c3t3b3dzb3dzb3dza3NvY2tnY2tnY2tnY2tnY2tnZ29rX2djX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnX2djX2djX2djX2djX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29ra3NvY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29ra3Nvb3dzb3dzc3t3b3dzb3dzd397c3t3d39zi5OHp6+ju8O3v8e7t7+7t7+7w8fPg4eO9vsCmp6mnqKqvsLKwsbOxsrS0tbe5ury+v8HDxMbJyszR0tTW2Nfd3d3j4+Pq6uru7u7y8vL29vb6+vr8/Pz+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz6+vr6+vr39/f09PTv7+/q6urk5OTf39/X2djR09LKy83DxMa+v8G8vb+3uLqxsrSur7GwsbO9v77Nz8zd39zl5+Ts7u309vX29vbz8/Pv7+/x8fHz8/Py8vLw8PDv7+/x7/Dy8PHx7/Dw7u/t7e3s7Ozs7Ozs7Ozt7e3t7e3r7ezq7Ovp6+rp6+rp6+rp6+rm6unm6unn6ejm6Ofm6Ofl5+bl5+bl5+bl5+bl5+bk5uXj5eTj5eTj5eTi5OPh4+Lg4uHf4eDf4eDf4eDe4N/e4N/d397c3t3c3t3c3t3c3t3b3dza3Nva3Nva3NvZ29rZ29ra3NvZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rY2tnY2tnZ29rZ29rZ29rZ29rZ29ra3NvZ29ra3Nva3Nvb3dzb3dzc3t3c3t3d397a3Nvi5OPo6ufp6+jr7eru8O3u8O3r7ezs7e/W19m7vL6sra+qq62trrCxsrSys7W0tbe4ubu9vsDCw8XHyMrOz9HV19bb3dzh4eHn5+ft7e3x8fH09PT4+Pj7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz7+/v5+fn4+Pj09PTv7+/q6url5eXc3t3W2NfP0NLKy83DxMa9vsC6u723uLqxsrSsra+vsbC4urnGyMfW2Nfi5OPq7Ovx8fH19fX09PTz8/Px8fHw8PDx8fHy8vLx8fHv7+/w8PDv7+/u7u7s7Ozs7Ozs7Ozt7e3t7e3r7ezr7ezq7Ovp6+rp6+rp6+ro6uno6unn6ejn6ejn6ejm6Ofm6Ofl5+bl5+bm6Ofl5+bk5uXk5uXj5eTj5eTj5eTi5OPh4+Lg4uHg4uHf4eDf4eDe4N/e4N/d397d397d397c3t3b3dzc3t3c3t3b3dza3Nvb3dzc3t3b3dzb3dzb3dzb3dza3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3NvZ29rZ29rZ29rZ29rZ29rZ29rZ29ra3Nva3Nva3Nva3Nva3Nva3Nva3Nva3NvZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29ra3Nva3NvZ29rZ29rZ29rZ29rZ29rZ29ra3Nva3NvZ29rZ29rZ29rZ29rZ29rZ29ra3Nva3Nva3Nva3Nvb3dzb3dzb3dzc3t3e4N/g4uHl5+bo6uns7u3u8O/u8O/s7u3r7ezq7OvOz9G2t7mlpqinqKqur7GvsLKwsbO1tri4ubu8vb/Cw8XHyMrNz87T1dTb3dzg4uHn5+fs7Ozy8vL19fX4+Pj6+vr9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f39/f36+vr5+fn29vbz8/Pv7+/p6enh4+Lb3dzU1dfR0tTKy83Cw8W+v8G8vb+5ury1trixs7KusK+ztbTCxMPR09Lb3dzm5ubv7+/29vb19fXy8vLw8PDx8fHy8vLx8fHt7e3w8PDv7+/u7u7t7e3t7e3t7e3t7e3t7e3s7u3r7ezq7Ovq7Ovq7Ovp6+rp6+ro6unn6ejo6uno6unn6ejm6Ofm6Ofm6Ofm6Ofl5+bl5+bk5uXk5uXk5uXj5eTj5eTi5OPh4+Lh4+Lg4uHg4uHf4eDf4eDe4N/e4N/e4N/d397d397d397d397c3t3b3dzb3dzc3t3c3t3c3t3c3t3c3t3b3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dza3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nvb3dzb3dzb3dza3Nva3Nva3Nva3Nva3Nva3NvZ29rZ29rZ29rZ29ra3Nva3Nva3Nvb3dzc3t3c3t3c3t3c3t3e4N/i5OPl5+bq7Ovu8O/t7+7r7ezu8O/v8fDe4N/Hycisra+pqqypqqytrrCvsLKxsrS0tbe4ubu9vsDBwsTIycvOz9HT1dTZ29rg4uHl5+bs7Ozw8PD19fX4+Pj6+vr8/Pz+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v76+vr6+vr4+Pj19fXy8vLu7u7n5+fh4eHa293W19nR0tTMzc/Gx8m/wMK6u723uLq0tbeys7WvsLKwsbO5urzJyszZ2dvh4ePs7Ozy8vL29vb09PTv7+/u7u7u7u7u7u7v7+/v7+/v7+/u7u7u7u7t7e3t7e3s7Ozs7u3r7ezr7ezq7Ovq7Ovq7Ovp6+rp6+ro6uno6uno6uno6unn6ejn6ejm6Ofm6Ofl5+bl5+bk5uXk5uXk5uXk5uXj5eTj5eTi5OPi5OPh4+Lh4+Lg4uHf4eDf4eDf4eDf4eDe4N/e4N/e4N/e4N/d397c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3b3dzb3dzc3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3b3dzb3dzb3dza3Nva3Nva3Nva3Nva3Nvb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dza3Nva3Nva3Nvb3dzb3dzb3dzb3dzb3dzc3t3c3t3c3t3b3dzb3dza3Nva3Nva3Nvb3dzb3dza3Nva3Nva3Nva3Nvb3dzb3dzc3tvc3tvd39ze4N3f4eDj5eTn6ejr7ezv8fDr7ezs7e/w8fPr7O7W19m5urylpqimp6mrrK6ur7Gur7GxsrS3uLq8vb+8vb/DxMbHyMrO0M/U1tXZ29rf4eDm6Ofr7ezw8PDz8/P4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz7+/v6+vr4+Pj29vbz8/Pt7e3o6Oji4+Xa293T1NbQ0dPMzc/Exce9vsC6u724ubu0tbevsLKsra+trrC0tbfFxcfT09Xf39/p6eny8vL09PTz8/Pz8/Py8vLw8PDv7+/v7+/v7+/v7+/u7u7u7u7t7e3s7Ozs7u3s7u3r7ezr7ezq7Ovq7Ovq7Ovp6+rq7Ovp6+ro6uno6uno6unn6ejn6ejm6Ofl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXj5eTj5eTi5OPi5OPh4+Lg4uHg4uHg4uHg4uHf4eDe4N/f4eDf4eDe4N/d397d397d397d397d397d397d397c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3b3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzc3t3c3t3c3t3c3t3c3t3b3dzb3dza3Nva3Nva3Nvc3t3c3t3b3dzb3dzb3dzc3t3c3t3d397d39ze4N3g4t/i5OHl5+bp6+rt7+7v8fDy9PPu8O/t7vDk5efLzM6trrCio6Wpqqysra+ur7GvsLKxsrS1tri7vL6/wMLBwsTIycvNztDU1tXa3Nvf4eDk5uXq7Ovu8O/z8/P29vb5+fn7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz7+/v5+fn39/fz8/Pu7u7p6eni4uLZ2tzV1tjR0tTLzM7FxsjCw8W+v8O2t7uys7e0tbmwsbWqq6+zs7XBwcPNzc/X19nh4eHp6enx8fH29vb19fXx8fHw8PDw8PDv7+/u7u7u7u7t7e3t7e3t7e3t7+7s7u3r7ezr7ezr7ezq7Ovq7Ovp6+rr7ezp6+rn6ejn6ejo6uno6unn6ejm6Ofm6Ofl5+bk5uXk5uXl5+bl5+bl5+bl5+bk5uXk5uXj5eTj5eTi5OPi5OPh4+Lh4+Lh4+Lg4uHf4eDg4uHg4uHf4eDe4N/e4N/e4N/e4N/e4N/e4N/e4N/d397d397c3t3d397d397d397d397d397d397d397d397c3t3c3t3c3t3c3t3c3t3c3t3c3t3d397c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3b3dzb3dzb3dzb3dzb3dzb3dzc3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3b3dzb3dzb3dzb3dzb3dzb3dzd397c3t3c3t3c3t3c3t3d397e4N/f4eDg4t/i5OHm6OXp6+js7u3u8O/v8fDv8fDo6evq6+3b3N68vb+mp6mmp6mtrrKvsLSur7GvsLKztLa4ubu6u729vsDCw8XIycvO0M/T1dTa3Nvg4uHl5+bp6+rw8PD09PT39/f5+fn7+/v8/Pz9/f3////////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f38/Pz8/Pz6+vr29vby8vLr6+vp6enk5efe3+HX2NrQ0dPKy83HyMrBwsa9vsK5ur63uLy0tbmvsLStra+urrC5ubvGxsjT09Pc3Nzk5OTt7e3z8/P09PTx8fHw8PDv7+/u7u7t7e3t7e3u7u7u7u7t7+7s7u3r7ezr7ezr7ezr7ezq7Ovq7Ovs7u3p6+rn6ejm6Ofo6uno6unn6ejm6Ofm6Ofl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXj5eTi5OPi5OPi5OPi5OPg4uHg4uHg4uHg4uHf4eDf4eDf4eDg4uHg4uHg4uHf4eDe4N/e4N/d397d397d397d397d397d397d397d397d397d397d397d397d397d397d397d397d397e4N/d397d397d397d397d397d397d397d397d397d397d397c3t3c3t3c3t3b3dzb3dzc3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3b3dzb3dzb3dzc3t3c3t3c3t3d397d397c3t3c3t3d397f4eDg4uHh4+Lk5uPn6ebr7eru8O3w8vHw8vHu8O/s7u3l5ujKy82ur7GlpqirrK6wsbOvsLSsrbGys7WztLa2t7m6u72+v8HDxMbJyszP0NLU1tXZ29rg4uHm6Ofq7Ovv8fD19fX4+Pj5+fn7+/v9/f39/f3+/v7////////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f38/Pz5+fn39/f29vbv7+/t7e3p6eni4uLc3NzX19fR0tTNztDJyM3Dwse/vsO7ur+3tru1tLmztLavsLKpqqyur7G7vL7Mzc/Y2tnf4eDm6Oft7+709PTz8/Px8fHw8PDx8fHy8vLv7+/s7Ozt7+7s7u3r7ezr7ezr7ezq7Ovq7Ovr7ezq7Ovq7Ovp6+ro6unn6ejn6ejm6Ofm6Ofo6unn6ejm6Ofn6ejn6ejl5+bk5uXk5uXl5+bl5+bl5+bl5+bk5uXj5eTi5OPi5OPi5OPh4+Lh4+Lg4uHg4uHg4uHg4uHf4eDf4eDf4eDf4eDf4eDe4N/e4N/e4N/e4N/f4eDe4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/d397d397d397d397d397d397d397d397d397d397d397d397c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3d397d397c3t3b3dzc3t3d397e4N/e4N/d397e4N/d397d397f4eDg4uHh4+Lk5uXo6unr7erv8e7v8fDt7+7u8O/w8vHl5+bX2di3uLqsra+lpqioqausrbGtrrKvsLSys7e0tbe3uLq7vL6/wMLExcfKy83R0tTW19nc3t3h4+Lo6Ojt7e3y8vL29vb4+Pj4+Pj7+/v8/Pz9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v5+fn4+Pj09PTy8vLu7u7p6enj4+Pe3t7X2NrT1NbOzdLIx8zEw8jAv8S7ur+5uL22t7mys7W0tberrK6oqauwsbPAwsHNz87Y2tnf4eDn5+fw8PD39/f09PTt7e3r6+vv7+/09PTt7+7s7u3s7u3s7u3s7u3q7Ovp6+rp6+rq7Ovq7Ovp6+rp6+rp6+ro6uno6uno6uno6unn6ejn6ejn6ejn6ejm6Ofl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXj5eTi5OPi5OPi5OPh4+Lh4+Lh4+Lh4+Lh4+Lh4+Lg4uHg4uHg4uHf4eDf4eDf4eDf4eDf4eDe4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/c3t3c3t3d397d397d397d397d397e4N/d397e4N/e4N/d397c3t3c3t3c3t3c3t3d397d397c3t3d397d397e4N/d397d397d397f4eDh4+Li5OPj5eTm6Ofr7ezv8fDu8O3s7uvt7+7x8/Ls7u3Z29rAwsGvsbCrrK6oqaupqqytrrCvsLSvsLSztLi4ub25ury8vb/BwsTFxsjJyszP0NLV1tja293h4+Ll5+bs7Ozw8PD09PT4+Pj5+fn6+vr8/Pz8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz7+/v5+fn39/fz8/Pu7u7q6url5eXf39/a2trU1NbOztDKyszFxcfAwMK9vb+5ury1triztLaxsrSwsbOur7GtrrCys7XCw8XS09XZ29rf4eDn6ejv8fD09vX19/by9PPt7+7v7+/u7u7u7u7u7u7u7u7t7e3s7Ozs7Ozq7Ovp6+rp6+rp6+rp6+ro6uno6uno6uno6unn6ejn6ejn6ejn6ejm6Ofl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXj5eTj5eTi5OPi5OPi5OPi5OPi5OPi5OPh4+Lh4+Lh4+Lg4uHg4uHg4uHg4uHg4uHf4eDf4eDf4eDf4eDf4eDf4eDe4N/e4N/f4eDf4eDf4eDe4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/c3t3d397d397d397e4N/e4N/e4N/e4N/d397e4N/e4N/d397c3t3c3t3b3dzc3t3e4N/f4eDf4eDe4N/e4N/e4N/e4N/e4N/g4uHi5OPj5eTm6Ofr7ezx8/Lx8/Lv8fDw8vHy9PPt7+7c3t3Fxsiys7WoqaulpqinqKqqq62ur7GxsrSxsrays7e2t7u6u7++v8HCw8XGx8nLzM7Q0tHV19bc3t3g4uHo6Ojs7Ozy8vL19fX39/f6+vr8/Pz8/Pz9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f36+vr5+fn19fXy8vLv7+/r6+vl5eXf39/b293V1dfR0dPMzM7GxsjCwsS+v8G5ury0tbeztLaztLaxsrStrrCrrK6vsLK1trjGyMfNz87Y2tnh4+Lo6unu8O/y9PP09vXy8vLx8fHw8PDu7u7t7e3t7e3s7Ozs7Ozq7Ovq7Ovq7Ovp6+rp6+rp6+ro6uno6uno6unn6ejn6ejn6ejn6ejm6Ofl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXk5uXj5eTj5eTj5eTj5eTj5eTj5eTh4+Lh4+Lh4+Lh4+Lh4+Lg4uHg4uHg4uHf4eDg4uHg4uHg4uHg4uHg4uHf4eDf4eDf4eDf4eDf4eDf4eDe4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/d397d397d397d397d397e4N/e4N/d397d397d397d397e4N/f4eDf4eDf4eDf4eDf4eDh4+Li5OPk5uXr7ezw8vHv8fDt7+7u8O/v8fDt7+7r7ezf4eDJy8qztbSnqKqmp6mqq62sra+trrCur7GvsLKxsrS0tbm4ub27vMC7vMDDxMbHyMrMzc/R0tTX2djd397j5eTn6ejt7e3x8fH29vb4+Pj5+fn7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v78/Pz7+/v5+fn29vb09PTx8fHr6+vm5ubi4uLd3d3Y2NjU1NTNzc3JycnExsW/wcC8vb+3uLqztLaxsrSxsrSur7Gqq6+oqauvsbC4urnGyMfQ0tHX2djd397m6Oft7+7y8vLz8/Pz8/Pw8PDv7+/t7e3s7Ozq6urr7ezr7ezr7ezq7Ovq7Ovq7Ovq7Ovq7Ovo6unn6ejn6ejn6ejn6ejm6Ofl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXk5uXj5eTj5eTj5eTi5OPi5OPi5OPi5OPh4+Lh4+Lh4+Lh4+Lh4+Lg4uHg4uHg4uHg4uHg4uHh4+Lh4+Lg4uHg4uHf4eDf4eDf4eDf4eDf4eDe4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/d397d397d397d397d397e4N/e4N/e4N/e4N/e4N/f4eDf4eDd397e4N/g4uHh4+Li5OPk5uXn6ejp6+rs7u3u8O/v8fDv8fDw8vHw8vHn6eje4N/Jysy1trimp6mlpqiqq62rrK6sra+vsLKvsLKwsbOxsrSys7W3uLq9vsDBwsTCw8XJyszNztDT1NbY2dvd397j5eTp6+rt7+7w8PD19fX5+fn6+vr6+vr8/Pz9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v79/f38/Pz6+vr5+fn29vby8vLt7e3o6Ojj4+Pf39/b29vU1NTQ0NDKzMvFx8a/wMK+v8G8vb+4ubuztLavsLKvsLSwsbOpqqyqrKuvsbC5u7rGyMfR09LY2tnc3t3n5+fs7Ozx8fHz8/Pz8/Pz8/Py8vLw8PDs7u3s7u3r7ezr7ezr7ezq7Ovq7Ovq7Ovp6+ro6unn6ejo6uno6unm6Ofl5+bl5+bm6Ofm6Ofl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXj5eTj5eTi5OPi5OPi5OPh4+Li5OPi5OPh4+Lh4+Lh4+Lh4+Lg4uHg4uHg4uHg4uHg4uHg4uHg4uHg4uHf4eDf4eDf4eDf4eDf4eDf4eDf4eDe4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/f4eDg4uHh4+Lj5eTl5+bn6ejp6+rr7ezu8O/x8/L09vXx8/Lu8O/r7ezo6und397Iysm3ubinqKqmp6moqausra+trrCrrK6trrCwsbOxsrS0tbe4ubu6u728vb/BwsTHyMrKy83Q0dPU1dfa293f4OLj5eTn6ejs7u3v8fD09PT39/f6+vr7+/v7+/v8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v79/f37+/v6+vr29vbz8/Pu7uzp6efm5uTi4uDc3NrX19XS1NPMzs3HyMrCw8W+v8G7vL65ur62t7uxtbiusrOwsbOtr66qrKupq6qtr662uLfFx8bQ0tHT09Pc3Nzl5eXq6urt7e3y8vL09PT19fXv8fDv8fDu8O/t7+7s7u3r7ezq7Ovq7Ovq7Ovp6+ro6unp6+rp6+rn6ejm6Ofm6Ofn6ejn6ejn6ejm6Ofm6Ofl5+bk5uXk5uXk5uXk5uXk5uXj5eTj5eTj5eTj5eTj5eTi5OPi5OPi5OPi5OPh4+Lh4+Lh4+Lh4+Lg4uHg4uHg4uHg4uHg4uHg4uHf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDe4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/f4eDf4eDf4eDf4eDg4uHh4+Lj5eTk5uXo6unq7Ovs7u3u8O/v8fDv8fDw8vHw8vHv8fDt7+7m6OfY2tnExsWxs7Klp6agoqGoqausrbGur7OsrbGtrrKxsraztLawsbO2t7m5ury+v8HBwsTDxMbHyMrNztDS09XY2dvc3d/h4+Ll5+bp6+rs7u3x8fH09PT4+Pj6+vr8/Pz9/f39/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz6+vr39/f09PLv7+3s7Orp6efj4+He3tzY2tnT1dTQ0dPLzM7FxsjAwcO9vsK6u7+0uLuytrmztLaxs7KwsbOtr66qrKuoqqmsrq2ytLPDw8PMzMzW1tbb29vg4ODn5+ft7e3v7+/19/b09vXy9PPw8vHu8O/t7+7r7ezr7ezq7Ovp6+rp6+rp6+rp6+ro6unn6ejn6ejn6ejn6ejo6unn6ejn6ejm6Ofl5+bk5uXl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXj5eTi5OPi5OPi5OPi5OPh4+Lh4+Lh4+Lh4+Lh4+Lg4uHg4uHg4uHg4uHg4uHg4uHf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDe4N/e4N/e4N/h4+Li5OPi5OPj5eTk5uXm6Ofo6unq7Ovt7+7u8O/w8vHx8/Lw8vHu8O/s7u3r7ezh4+LR09K8vr2tr66nqaimqKepq6qrrK6srbGsrbGur7OwsbWwsbWwsbWztLa3uLq7vL67vL6/wMLFxsjKy83P0NLU1dfZ2tzd3uDh4uTn6ejs7u3v8fDy9PP39/f6+vr7+/v9/f3+/v7+/v7+/v7////////////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v7+/v39/X19fPx8fHt7e3p6enl5eXh4eHe3t7Y2dvT1NbNztDIycvExcfAwcO6vsG3u760uLuzt7iztLiwsbOur7GrrK6qq62pqqytrrCxsrS6u73HyMrR0tTW19nb3N7f4OLm5ubs7Ozx8fHz8/Py8vLy8vLw8PDu7u7r6+ns7Ort7evt7evs7Orr6+nr6+nr6+nq6urp6eno6Ojo6Ojo6Ojn5+fn5+fn5+fo6Ojm5ubm5ubn5+fn5+fk5OTk5OTk5OTk5uXj5eTj5eTk5uXk5uXi5OPh4+Lj5eTh4+Lh4+Lh4+Lh4+Lg4uHg4uHg4uHg4uHg4uHf4eDf4eDg4uHg4uHg4uHg4uHf4eDf4eDf4eDf4eDg4uHg4uHh4+Lg4uHg4uHg4uHg4uHg4uHg4uHg4uHh4+Li5OPk5uXn6ejl5+bm6Ofq7Ovs7u3s7u3t7+7w8vHx8vTw8fPx8vTw8fPt7vDj5ObW19nMzc+0tbesra+mp6mmp6mpqqyqq62qq62sra+ur7Our7OwsbWys7e0tbm3uLy6u728vb/AwcPExcfJycnNzc3S0tLY2Njd3d3g4ODk5OTp6ent7e3w8PDz8/P29vb5+fn7+/v8/Pz9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz6+vj5+ff19fXx8fHt7e3q6urm5ubj4+Pd3uDZ2tzT1NbOz9HLzM7HyMrAxMe9wcS6vsG4vL+4ub21trqys7WwsbOvsLKur7GoqaunqKqpqqyvsLK2t7m/wMLKy83U1dfX19fd3d3k5OTp6ens7Ozv7+/x8fHx8fH19fPz8/Hw8O7t7evr6+nq6ujq6ujr6+np6enp6enp6enp6enq6urq6urr6+vr6+vo6Ojn5+fn5+fo6Ojo6Ojm5ubm5ubn5+fk5uXj5eTj5eTk5uXk5uXj5eTi5OPj5eTj5eTj5eTi5OPi5OPi5OPi5OPh4+Lh4+Li5OPh4+Lh4+Lh4+Lh4+Lh4+Lg4uHg4uHi5OPh4+Lg4uHg4uHh4+Li5OPh4+Lg4uHj5eTk5uXl5+bm6Ofl5+bm6Ofn6ejp6+rr7ezs7u3t7+7u8O/v8fDw8vHu8O/t7+7v8PLq6+3j5Obb3N7P0NLAwcOwsbOlpqipqqynqKqoqautrrCvsLKur7GtrrCur7GwsbWys7e0tbm2t7u5ur68vcHAwcPCw8XGx8nKy83Pz8/U1NTY2Nje3t7j4+Pm5ubp6ent7e3y8vL09PT29vb5+fn7+/v8/Pz9/f39/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f38/Pz6+vr29vbz8/Pw8PDs7Ozp6enj5Obg4ePb3N7W19nT1NbOz9HIzM/EyMvBwsS/wMK8vb+4ubu2t7m0tbeztLays7WwsbOur7GrrK6qq62qq62sra+ys7W4ubvHx8nLy83Q0NDU1NTa2trh4eHn5+fr6+vr6+vt7e3x8fH09PT09PLz8/Hw8O7u7uzs7Ozs7Ozr6+vq6urp6eno6Ojn5+fm5ubp6eno6Ojn5+fo6Ojn5+fm5ubm5ubn5+fl5+bk5uXk5uXl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXj5eTj5eTj5eTj5eTi5OPi5OPi5OPi5OPi5OPi5OPi5OPh4+Lh4+Lg4uHi5OPk5uXn6ejn6ejn6ejm6Ofo6unq7Ovr7ezs7u3t7+7v8fDw8vHu8O/w8vHv8fDt7+7t7vDu7/Hs7e/o6evb3N7Q0dPBwsS0tbesra+oqaump6mlpqipqqypqqyrrK6ur7GvsLKvsLKwsbOys7W0tbm2t7u4ubu7vL6/wMLDxMbHyMrJyszPz9HT09XX19fb29vg4ODl5eXq6urs7Ozw8PDz8/P39/f4+Pj6+vr7+/v9/f3+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz6+vr4+Pj19fXy8vLv7+/q6+3n6Ori4+Xe3+Ha293W19nP09bLz9DIycvFxsjBwsS9vsC6u724ubu2t7m2t7mxsrSwsbOvsLKvsLKsra+pqqypqqyqq62pqauwsLK5ubnDw8PLy8vS0tLW1tbY2Nje3t7h4eHl5eXp6ens7Oru7uzw8O7y8vD09PTz8/Pz8/Px8fHw8PDu7u7t7e3t7e3s7Ozr6+vq6urp6eno6Ojn5+fn5+fn5+fm6Ofl5+bl5+bm6Ofl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXl5+bk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bm6Ofo6unq7Ovr7ezs7u3t7+7s7u3s7u3s7u3t7+7t7+7t7+7t7+7u8O/u8O/r7ezl5+be3+HU1dfIycu+v8GxsrSsra+nqKqkpaelpqipqqysra+ur7Gur7Gur7Gur7GvsLKvsLKwsbO0tbe3uLq4ub27vMC+v8HCw8XFxsjKy83Oz9HR0tTX19nb293f39/j4+Pm5ubr6+vv7+/x8fH09PT39/f6+vr7+/v8/Pz9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f38/Pz7+/v5+fn29vbz8/Pw8fPt7vDp6uzm5+nh4uTd3uDY2dvU1dfR0tTO0M/Jy8rFx8bBw8K/wcC8vb+7vL62t7m0tbeys7WxsrSwsbWvsLStrrKsrbGrrK6pqqyoqauoqautrrC2t7nAwcPIycvO0M/T1dTY2tnc3t3e4N/g4uHk5uXn6ejo6unp6+rr7ezt7+7u8O/v8fDw8vHx8/Lv8fDv8fDu8O/t7+7s7u3s7u3s7u3s7u3q7Ovq7Ovq7Ovq7Ovp6+rp6+rp6+rp6+rp6+rp6+rp6+rp6+rp6+rp6+ro6uno6unq7Ovq7Ovp6+rq7Ovq7Ovr7ezr7ezr7ezu8O/v8fDv8fDu8O/t7+7t7+7t7+7u8O/w8vHu8O/s7u3s7u3t7vDs7e/o6evl5uje3+HW19nMzc/Exce6u72wsbOoqaukpaemp6mnqKqpqqyrrK6trrCur7GtrrCrrK6ur7GvsLKys7W1tri3uLq4ubu6u727vL6/wMLCw8XGx8nJyszNztDR0tTV19bZ29re3t7i4uLm5ubp6ent7e3x8fH09PL19fP39/f6+vr8/Pz9/f39/f3+/v7////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////////////////////+/v79/f39/f38/Pz6+vr4+Pj09ffy8/Xv8PLr7O7o6evj5Obf4OLc3d/Y2tnU1tXQ0tHLzczIysnFx8bBwsS/wMK/wMK8vb+4ubu2t7m1trqztLixsravsLSur7GtrrCsra+sra+qq62pqqypqqyqq620trW6vLvDxcTJy8rNz87R09LU1tXX2dja3Nvd397g4uHi5OPk5uXm6Ofo6unq7Ovr7ezs7u3t7+7s7u3t7+7u8O/v8fDu8O/v8fDw8vHw8vHv8fDv8fDw8vHw8vHv8fDw8vHw8vHw8vHw8vHw8vHv8fDv8fDv8fDu8O/u8O/u8O/t7+7t7+7t7+7s7u3s7u3p6+rr7ezs7u3r7ezq7Ovp6+rp6+rq7Ovr7ezn6ejj5eTg4uHc3d/W19nNztDGx8m6u72ys7Wqq62nqKqmp6mmp6mpqqytrrCvsLKur7Gur7GtrrCur7GvsLKwsbOwsbOxsrSys7W1tri4ubu7vL6+v8G/wMLAwcPGx8nJyszNztDQ0dPT1NbX2Nrc3t3f4eDj4+Pn5+fs7Ozv7+/y8vL19fX4+Pb5+ff6+vr8/Pz9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////9/f37+/v5+fn39/f09ffx8vTt7vDq6+3m5+nj5Obe4N/b3drW2NfT1dTP0dDMzs3IysnExsW/wMK+v8G8vb+6u725ur63uLy1trqztLiys7WwsbOvsLKur7GtrrCrrK6qq62sra+oqaupqqyqq62trrCxsrS3uLq+v8HDxMbLzczO0M/S1NPV19bX2dja3Nvc3t3e4N/e4N/g4uHh4+Lh4+Lj5eTl5+bm6Ofm6Ofp6+rr7ezr7ezq7Ovr7ezs7u3s7u3r7ezs7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3p6uzp6uzp6uzp6uzo6evo6evm5+nl5ujo6evo6evn6Orm5+nl5uji4+Xf4OLd3uDR0tTMzc/Fxsi/wMK4ubuxsrSpqqyjpKakpaelpqinqKqqq62sra+sra+srbGsrbGpqqyrrK6trrCvsLKwsbOys7WztLaztLa4ubu5ury7vL68vb++v8HCw8XGx8nJyszNz87R09LV19bY2tnb3dzf4eDk5OTo6Ojq6uru7u7y8vL09PT29vT4+Pb6+vj7+/n8/Pz9/f3+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////////+/v7////////////9/f39/f37+/v4+fv29/nz9Pbv8PLs7e/q7Ovl5+Ti5OHe4N/b3dzY2tnU1tXP0dDMzs3Ky83IycvFxsjAwcO8vcG6u7+5ur63uLy2t7m0tbe0tbe0tbeys7WvsLKur7GvsLKvsLKtrrCrrK6pqqypqqypqqypqqypqqyrrayvsbC1t7a6vLu/wcDDxcTIysnLzczS1NPU1tXW2NfW2NfY2tnb3dzc3t3c3t3c3t3e4N/e4N/e4N/e4N/g4uHh4+Lf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4OLg4ePg4ePg4ePh4uTg4ePe3+Hd3uDY2dvV1tjQ0dPMzc/HyMrAwcO3uLqys7Wsra+pqqymp6mkpaelpqinqKqpqqyrrK6rrK6trrCtrrCrrK6rrK6ur7Gur7OtrrKvsLKwsbOxsrSztLa0tbe2t7m4ubu5ury6u729vsDBwsTDxMbGx8nKy83Oz9HR0tTU1tXY2tnc3t3g4uHi5OPm6Ofr6+vv7+/x8fH09PT4+Pj5+fn6+vj7+/n8/Pr9/fv9/f3+/v7+/v79/f3+/v7////////+/v7////////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz6+vr4+Pj29vbz8/Px8fHt7evq6ujm5uTi4uDf39/b29vX2djU1tXR0tTOz9HJyszHyMrFxsjDxMa/wMS8vcG8vb+6u724ubu2t7m1tri0tbeys7WxsrSwsbOvsLKtrrCtrrCtrrCrrK6rrK6rrK6pqqyqq62pqqyoqauoqauoqauqq62sra+ztLa1tri4ubu8vb+/wMLDxMbGx8nIycvKzMvLzczNz87P0dDR09LS1NPT1dTT1dTT1dTS1NPR09LR09LR09LR09LP0dDNz87NztDLzM7HyMrExcfBwsS+v8G6u724ubuxsrSvsLKsra+pqqynqKqmp6mmp6mmp6mpqqypqqyqq62rrK6rrK6rrK6rrK6rrK6rrK6rrK6srbGtrrKur7OvsLSxsrays7e0tbe1tri3uLq4ubu5ury6u727vL69vsDBwsTExcfIysnLzczO0M/R09LV19bY2tnb3dze4N/j4+Pn5+fp6ens7Ozv7+/y8vL29vb39/f5+fn6+vr8/Pz9/f39/f39/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f39/f38/Pz7+/v5+fn39/f29vby8vDw8O7t7evp6efm5ubi4uLe4N/c3t3Y2dvV1tjR0tTOz9HMzc/Ky83Gx8vDxMjBwsS/wMK9vsC7vL65ury4ubu2t7m1tri0tbeztLaxsrSxsrSwsbOur7GtrrCtrrCur7Gur7GtrrCrrK6qq62pqqyqq62rrK6nqKqnqKqoqauoqauoqauoqaupqqypqqysrq2srq2tr66usK+vsbCwsrGwsrGwsrGxs7KwsrGvsbCwsrGwsrGvsbCusK+tr66oqauoqaunqKqmp6mmp6mlpqikpaejpKaoqauoqauoqaupqqypqqyrrK6sra+ur7Gqq62rrK6rrK6sra+trrCtrrCtrrCtrrCvsLKvsLKwsbWxsrays7eztLi1trq2t7u4ubu5ury8vb+9vsC/wMLAwcPCw8XExcfJyszMzc/P0dDT1dTV19bZ29rc3t3f4eDj5eTl5+bq6urt7e3w8PDy8vL19fX39/f4+Pj5+fn6+vr8/Pz9/f3+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v79/f38/Pz7+/v6+vr4+Pb29vTz8/Hw8O7t7e3q6urn5+fk5OTg4uHd397Z2tzW19nU1dfR0tTOz9HLzM7IycvGx8nDxMbBwsS/wMK9vsC7vL65ury4ubu2t7m1tri0tbeztLays7WxsrSxsrSvsLKvsLKvsLKur7Gsra+sra+sra+trrCtrrCtrrCtrrCsra+rrK6qq62pqqypqqynqKqoqauoqauoqauoqauoqaunqKqnqKqoqauoqauoqauoqauoqauoqauoqaunqKqpqqyqq62qq62qq62rrK6rrK6rrK6rrK6rrK6rrK6sra+sra+rrK6rrK6rrK6rrK6trrCtrrCtrrCur7GvsLKvsLKwsbOxsrSztLa0tbe0tbe1tri2t7m4ubu6u7+7vMC8vb++v8HBwsTExcfGx8nIycvKy83Mzc/R09LU1tXX2dja3Nvd397g4uHj5eTm6Ofr6+vt7e3x8fHz8/P19fX39/f5+fn6+vr7+/v7+/v8/Pz+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v79/f38/Pz7+/v6+vj5+ff39/X19fPz8/Pw8PDt7e3r6+vn6ejk5uXg4ePd3uDb3N7Y2dvV1tjS09XP0NLNztDKy83IycvGx8nExcfBwsS/wMK9vsC7vL66u725ury4ubu3uLq2t7m2t7mys7Wys7WxsrSxsrSwsbOwsbOwsbOwsbOsra+sra+trrCsra+sra+sra+sra+sra+trrCtrrCsra+sra+sra+sra+sra+sra+sra+sra+sra+sra+sra+sra+sra+sra+rrK6sra+sra+sra+rrK6rrK6rrK6rrK6sra+trrCur7Gur7GvsLKvsLKvsLKwsbOxsrSxsrSxsrSxsrSys7WztLa0tbe1tri3uLq4ubu5ury6u727vL6+v8HAwcXCw8fDxMbFxsjIycvLzM7NztDQ0dPS09XU1dfY2tna3Nve4N/h4+Lk5uXm6Ofq7Ovs7u3w8PDy8vL19fX39/f5+fn6+vr7+/v8/Pz9/f39/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v79/f38/Pz9+/z8+vv6+vr4+Pj39/f19fXz8/Px8fHt7+7r7ezo6unl5+bj5eTg4uHd397a3NvW2NfV19bS1NPQ0tHO0M/Mzs3Jy8rHycjExcfCw8XAwcO/wMK+v8G8vb+6u726u725ury4ubu3uLq2t7m0tbeztLays7WxsrSys7Wys7WxsrSxsrSxsrSxsrSwsbOwsbOur7Gur7GtrrCtrrCtrrCtrrCtrrCtrrCsra+trrCtrrCtrrCsra+sra+trrCtrrCur7Gur7GvsLKvsLKvsLKvsLKvsLKwsbOur7GvsLKwsbOxsrSxsrSys7W0tbe1tri2uLe2uLe2t7m2t7m3uLq4ubu6u727vL68vb+9vsC+v8HAwcPCw8XFxsjHyMrJyszMzM7Pz9HR0dPU1NbW1tjZ2dvc3N7d3d/h4eHj4+Pn5+fq6urs7Ozv7+/x8e/09PL19fX29vb4+Pj6+vr7+/v8/Pz8/Pz9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7////////////+/v7+/P39+/z7+/v6+vr6+vr4+Pj39/f19fXy9PPx8/Lu8O/s7u3q7Ovn6ejl5+bj5eTe4N/c3t3a3NvY2tnW2NfT1dTR09LP0dDMzc/Ky83IycvGx8nExcfBwsS/wMK/wMK9vsC8vb+7vL66u725ury4ubu3uLq2t7m2t7m1tri0tbe0tbeztLaztLays7WxsrSztLaztLays7Wys7WxsrSxsrSxsrSwsbOxsrSxsrSxsrSxsrSxsrSxsrSxsrSxsrSxsrSxsrSys7Wys7WztLaztLaztLaztLa2t7m2t7m1tri1tri1tri1tri2t7m2t7m6vLu6vLu7vL67vL69vsC+v8HAwcPBwsTCw8XDxMbFxsjHyMrKy83Mzc/P0NLQ0dPV1dfX19na2tzc3N7e3uDh4ePj4+Xl5efp6enr6+vu7u7x8fHz8/P19fX39/X5+ff5+fn5+fn6+vr7+/v8/Pz9/f39/f39/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7//////////////////////f7+/P39+/z9+/z7+/v7+/v6+vr5+fn3+fj2+Pf09vPy9PHw8u/u8O3s7uvq7Onm6Ofl5+bi5OPg4uHe4N/c3t3Z29rX2djV19bT1dTQ0dPP0NLMzc/JyszHyMrHyMrExcfDxMbBwsTAwcPAwcO/wMK+v8G+v8G7vL66u725ury5ury5ury5ury4ubu3uLq2t7u2t7u1trq1trq0tbm0tbm0tbm0tbm1trq0tbmztLiztLi0tbm1trq0tbm0tbm2t7m2t7m1tri2t7m3uLq3uLq3uLq2t7m4ubu5ury6u727vL68vb+9vsC/wMLAwcPAwsHAwsHBw8LCxMPExsXGyMfIycvJyszKy83Mzc/Oz9HR0tTT1NbV1tjX2NrY2dvd3d/f3+Hi4uTk5Obm5ujo6Orq6uzs7O7v7+/y8vL09PT29vb39/f4+Pj6+vj8/Pr7+/v7+/v7+/v8/Pz9/f3+/v7+/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///v///f7//f7+/v7+/v79/f38/Pz7/fz6/Pv4+vf3+fb19/Tz9fLx8/Dw8u/u8O/t7+7q7Ovo6unm6Ofj5eTg4uHe4N/c3t3a3NvY2dvX2NrV1tjT1NbR0tTR0tTP0NLNztDKy83IycvHyMrFxsjExcfCw8XCw8XBwsS/wMK/wMK/wMK/wMK+v8G9vsC8vcG8vcG7vMC7vMC7vMC7vMC7vMC8vcG7vMC6u7+5ur66u7+7vMC8vcG8vcG7vMC8vb+7vL67vL68vb+9vsC+v8G+v8G9vsC9vsC+v8HAwcPBwsTCw8XDxMbDxMbExcfGyMfHycjIysnKzMvMzs3O0M/Q0dPR0tTT1NbU1dfX2NrZ2tzb3N7d3uDf4OLg4ePk5Obl5efo6Orq6uzs7O7u7vDw8PLy8vT09PT29vb5+fn6+vr6+vr7+/v8/Pr9/fv+/v7+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v79/f38/Pz7+/v6+vr5+fn4+Pj39/f19fXz8/Px8fHv7+/t7e3r6+vp6enm5ubj4+Pj4+Pi4uLg4ODe3t7b29vZ2dnY2NjW19nV1tjT1NbR0tTQ0dPOz9HMzc/LzM7Ky83JyszIycvIycvHyMrFxsjExcfExcfExcfCw8XBwsTBwsTBwsTBwsTBwsTBwsTBwsTBwsTBwsTBwsTBwsTBwsTBwsTBwsTBwsTBwsTCw8XDxMbExcfFxsjGx8nGx8nGx8nGx8nIycvJyszKy83LzM7Mzc/NztDO0M/P0dDR09LT1dTU1tXV19bX2djZ29rb3dzc3t3e4N/g4uHi5OPk5uXm6Ofm6Ofs7Ozt7e3v7+/x8fHz8/P19fX29vb29vb5+fn5+fn6+vr7+/v8/Pz8/Pz9/f39/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f39/f38/Pz8/Pz7+/v6+vr5+fn6+vr4+Pj29vb19fX09PTy8vLw8PDu7u7r6+vr6+vp6enn5+fl5eXj4+Ph4eHg4ODe3+Hd3uDb3N7Z2tzY2dvW19nU1dfT1NbS09XR0tTQ0dPQ0dPOz9HMzc/LzM7LzM7LzM7Ky83JyszJyszJyszIycvIycvIycvIycvIycvHyMrHyMrHyMrHyMrIycvIycvIycvIycvJyszKy83LzM7Mzc/Mzc/NztDOz9HOz9HQ0dPR0tTS09XT1NbU1dfV1tjW2NfX2djZ29rb3dzc3t3d397f4eDh4+Lk5uXk5uXm6Ofo6unq7Ovs7u3t7+7u8O/x8fHy8vL09PT29vb39/f5+fn5+fn6+vr7+/v7+/v8/Pz8/Pz9/f39/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v79/f39/f38/Pz8/Pz9/f38/Pz6+vr5+fn4+Pj39/f29vb09PTz8/Py8vLw8PDu7u7s7Ozq6urp6eno6Ojm5+nl5ujk5efi4+Xg4ePf4OLd3uDc3d/b3N7a293Z2tzZ2tzY2dvW19nV1tjV1tjV1tjT1NbS09XT1NbS09XR0tTR0tTR0tTR0tTR0tTR0tTQ0dPQ0dPR0tTR0tTR0tTR0tTR0tTS09XT1NbU1dfV1tjV1tjW19nW19nX2NrY2dvZ2tza293b3N7d3uDe3+Hf4eDg4uHi5OPj5eTk5uXm6Ofn6ejo6uns7u3t7+7u8O/v8fDx8/Ly9PPz9fT09vX39/f4+Pj5+fn7+/v8/Pz8/Pz9/f39/f39/f39/f39/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f39/f39/f38/Pz7+/v6+vr6+vr4+Pj39/f39/f39/f19fXz8/Px8fHw8PDv7+/u7u7t7vDs7e/q6+3p6uzn6Orm5+nk5efj5Obi4+Xh4uTh4uTh4uTg4ePe3+Hd3uDd3uDd3uDb3N7b3N7b3N7b3N7a293Z2tzZ2tzZ2tzZ2tzZ2tzZ2tzZ2tzZ2tzZ2tzZ2tza293a293a293b3N7c3d/d3uDe3+He3+He3+Hf4OLg4ePh4uTi4+Xj5Obk5efl5ujn6ejo6unp6+rq7Ovr7ezt7+7u8O/u8O/x8/Ly9PPz9fT09vX19/b2+Pf3+fj3+fj6+vr7+/v8/Pz9/f39/f3+/v7+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v79/f39/f38/Pz7+/v6+vr6+vr7+/v6+vr5+fn39/f29vb19fX19fX09PT09PTz8/Py8vLx8fHw8PDu7u7t7e3s7Ozq6urp6enp6enp6eno6Ojm5ubl5eXm5ubk5uXi5OPi5OPi5OPi5OPh4+Lg4uHg4uHg4uHg4uHg4uHg4uHg4uHg4uHg4uHg4uHh4+Lh4+Li5OPi5OPj5eTk5uXl5+bl5+bn6ejo6uno6unp6+rq7Ovr7ezs7u3t7+7w8PDw8PDx8fHy8vLz8/P09PT19fX19fX39/f39/f4+Pj5+fn5+fn6+vr6+vr6+vr7+/v8/Pz8/Pz9/f3+/v7+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v7+/v79/f38/Pz8/Pz8/Pz9/f38/Pz7+/v6+vr5+fn5+fn5+fn5+fn5+fn4+Pj39/f29vb19fX19fXz8/Pz8/Px8fHw8PDw8PDw8PDv7+/u7u7t7e3u7u7r7ezq7Ovp6+rq7Ovp6+rp6+ro6unp6+ro6uno6uno6uno6uno6uno6uno6uno6unp6+rp6+rq7Ovq7Ovr7ezs7u3s7u3t7+7v8fDv8fDw8vHw8vHx8/Lx8/Ly9PPz9fT29vb29vb29vb39/f4+Pj5+fn5+fn5+fn6+vr6+vr7+/v7+/v8/Pz8/Pz8/Pz8/Pz9/f39/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////////+/v7+/v7+/v79/f39/f3+/v79/f39/f38/Pz8/Pz8/Pz8/Pz8/Pz8/Pz7+/v6+vr6+vr5+fn5+fn4+Pj39/f39/f29vb29vb29vb29vb09PT09PT09PTy9PPx8/Lw8vHw8vHx8/Lw8vHw8vHx8/Lw8vHw8vHw8vHw8vHw8vHw8vHw8vHw8vHx8fHx8fHy8vLy8vLz8/Pz8/P09PT09PT19fX29vb29vb29vb29vb29vb39/f4+Pj5+fn5+fn5+fn6+vr7+/v8/Pz8/Pz7+/v8/Pz8/Pz9/f39/f39/f3+/v7+/v7+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v79/f38/Pz8/Pz8/Pz8/Pz7+/v6+vr6+vr5+fn5+fn5+fn5+fn4+Pj39/f39/f3+fj19/b09vX19/b19/b19/b19/b2+Pf2+Pf19/b19/b19/b19/b19/b19/b2+Pf19fX19fX29vb29vb39/f4+Pj4+Pj5+fn5+fn5+fn6+vr6+vr5+fn6+vr6+vr7+/v8/Pz8/Pz7+/v8/Pz9/f3+/v7+/v79/f3+/v7+/v7////////////////////////////////////////////////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/f39/f39/f39/f39/f38/Pz8/Pz8/Pz8/Pz7+/v7+/v7+/v7+/v6+vr6+vr5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v9/f39/f39/f3+/v7+/v7+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v79/f39/f39/f39/f38/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz9/f39/f39/f39/f39/f39/f39/f39/f3+/v7+/v7+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8ADQEAAAMAAAABAPoAAAEBAAMAAAABANsAAAECAAMAAAADAAKCRAEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAACAAKCSgESAAMAAAABAAEAAAEVAAMAAAABAAMAAAEWAAMAAAABAK4AAAEXAAQAAAACAAKCUgEcAAMAAAABAAEAAAFTAAMAAAADAAKCWodzAAcAAAeoAAKCYAAAAAAACAAIAAgAAAAIAAH9zAAB/cQAAIPWAAEAAQABAAAHqGFwcGwCIAAAbW50clJHQiBYWVogB9kAAgAZAAsAGgALYWNzcEFQUEwAAAAAYXBwbAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZGVzYwAAAQgAAABvZHNjbQAAAXgAAAVsY3BydAAABuQAAAA4d3RwdAAABxwAAAAUclhZWgAABzAAAAAUZ1hZWgAAB0QAAAAUYlhZWgAAB1gAAAAUclRSQwAAB2wAAAAOY2hhZAAAB3wAAAAsYlRSQwAAB2wAAAAOZ1RSQwAAB2wAAAAOZGVzYwAAAAAAAAAUR2VuZXJpYyBSR0IgUHJvZmlsZQAAAAAAAAAAAAAAFEdlbmVyaWMgUkdCIFByb2ZpbGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1sdWMAAAAAAAAAHgAAAAxza1NLAAAAKAAAAXhockhSAAAAKAAAAaBjYUVTAAAAJAAAAchwdEJSAAAAJgAAAex1a1VBAAAAKgAAAhJmckZVAAAAKAAAAjx6aFRXAAAAFgAAAmRpdElUAAAAKAAAAnpuYk5PAAAAJgAAAqJrb0tSAAAAFgAAAshjc0NaAAAAIgAAAt5oZUlMAAAAHgAAAwBkZURFAAAALAAAAx5odUhVAAAAKAAAA0pzdlNFAAAAJgAAAqJ6aENOAAAAFgAAA3JqYUpQAAAAGgAAA4hyb1JPAAAAJAAAA6JlbEdSAAAAIgAAA8ZwdFBPAAAAJgAAA+hubE5MAAAAKAAABA5lc0VTAAAAJgAAA+h0aFRIAAAAJAAABDZ0clRSAAAAIgAABFpmaUZJAAAAKAAABHxwbFBMAAAALAAABKRydVJVAAAAIgAABNBhckVHAAAAJgAABPJlblVTAAAAJgAABRhkYURLAAAALgAABT4AVgFhAGUAbwBiAGUAYwBuAP0AIABSAEcAQgAgAHAAcgBvAGYAaQBsAEcAZQBuAGUAcgBpAQ0AawBpACAAUgBHAEIAIABwAHIAbwBmAGkAbABQAGUAcgBmAGkAbAAgAFIARwBCACAAZwBlAG4A6AByAGkAYwBQAGUAcgBmAGkAbAAgAFIARwBCACAARwBlAG4A6QByAGkAYwBvBBcEMAQzBDAEOwRMBD0EOAQ5ACAEPwRABD4ERAQwBDkEOwAgAFIARwBCAFAAcgBvAGYAaQBsACAAZwDpAG4A6QByAGkAcQB1AGUAIABSAFYAQpAadSgAIABSAEcAQgAggnJfaWPPj/AAUAByAG8AZgBpAGwAbwAgAFIARwBCACAAZwBlAG4AZQByAGkAYwBvAEcAZQBuAGUAcgBpAHMAawAgAFIARwBCAC0AcAByAG8AZgBpAGzHfLwYACAAUgBHAEIAINUEuFzTDMd8AE8AYgBlAGMAbgD9ACAAUgBHAEIAIABwAHIAbwBmAGkAbAXkBegF1QXkBdkF3AAgAFIARwBCACAF2wXcBdwF2QBBAGwAbABnAGUAbQBlAGkAbgBlAHMAIABSAEcAQgAtAFAAcgBvAGYAaQBsAMEAbAB0AGEAbADhAG4AbwBzACAAUgBHAEIAIABwAHIAbwBmAGkAbGZukBoAIABSAEcAQgAgY8+P8GWHTvZOAIIsACAAUgBHAEIAIDDXMO0w1TChMKQw6wBQAHIAbwBmAGkAbAAgAFIARwBCACAAZwBlAG4AZQByAGkAYwOTA7UDvQO5A7oDzAAgA8ADwQO/A8YDrwO7ACAAUgBHAEIAUABlAHIAZgBpAGwAIABSAEcAQgAgAGcAZQBuAOkAcgBpAGMAbwBBAGwAZwBlAG0AZQBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBlAGwOQg4bDiMORA4fDiUOTAAgAFIARwBCACAOFw4xDkgOJw5EDhsARwBlAG4AZQBsACAAUgBHAEIAIABQAHIAbwBmAGkAbABpAFkAbABlAGkAbgBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBpAGwAaQBVAG4AaQB3AGUAcgBzAGEAbABuAHkAIABwAHIAbwBmAGkAbAAgAFIARwBCBB4EMQRJBDgEOQAgBD8EQAQ+BEQEOAQ7BEwAIABSAEcAQgZFBkQGQQAgBioGOQYxBkoGQQAgAFIARwBCACAGJwZEBjkGJwZFAEcAZQBuAGUAcgBpAGMAIABSAEcAQgAgAFAAcgBvAGYAaQBsAGUARwBlAG4AZQByAGUAbAAgAFIARwBCAC0AYgBlAHMAawByAGkAdgBlAGwAcwBldGV4dAAAAABDb3B5cmlnaHQgMjAwNyBBcHBsZSBJbmMuLCBhbGwgcmlnaHRzIHJlc2VydmVkLgBYWVogAAAAAAAA81IAAQAAAAEWz1hZWiAAAAAAAAB0TQAAPe4AAAPQWFlaIAAAAAAAAFp1AACscwAAFzRYWVogAAAAAAAAKBoAABWfAAC4NmN1cnYAAAAAAAAAAQHNAABzZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbA== + From 19804720af58d9a4617729b626563a21b8e0eaf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Wallstro=CC=88m?= Date: Thu, 10 May 2012 13:42:37 +0200 Subject: [PATCH 008/112] CPTableView: Don't update selection etc unless becoming first responder succeeds. Fix for issue #1435 --- AppKit/CPTableView.j | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 38b86ff85..7e9e5a815 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -3991,6 +3991,9 @@ Your delegate can implement this method to avoid subclassing the tableview to ad */ - (BOOL)startTrackingAt:(CGPoint)aPoint { + if (![[self window] makeFirstResponder:self]) + return NO; + var row = [self rowAtPoint:aPoint]; // If the user clicks outside a row then deselect everything. @@ -4018,7 +4021,6 @@ Your delegate can implement this method to avoid subclassing the tableview to ad if (row >= 0 && !(_implementedDataSourceMethods & CPTableViewDataSource_tableView_writeRowsWithIndexes_toPasteboard_)) [self _updateSelectionWithMouseAtRow:row]; - [[self window] makeFirstResponder:self]; return YES; } @@ -4141,6 +4143,9 @@ Your delegate can implement this method to avoid subclassing the tableview to ad */ - (void)stopTracking:(CGPoint)lastPoint at:(CGPoint)aPoint mouseIsUp:(BOOL)mouseIsUp { + if ([[self window] firstResponder] !== self) + return; + _isSelectingSession = NO; var CLICK_TIME_DELTA = 1000, From 183260d9e3d23b1cffaa12bc4de5b869f796b12d Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Fri, 11 May 2012 16:14:14 +0200 Subject: [PATCH 009/112] Added a themed attribute for round rect selection of rows. Selections in the tableview can now have round corners. The default is a regular rect, but if the selecction radius is changed. Nice good looking round rect selections will appear. --- AppKit/CPTableView.j | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 38b86ff85..d33f62dc1 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -257,8 +257,8 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; */ + (id)themeAttributes { - return [CPDictionary dictionaryWithObjects:[[CPNull null], [CPNull null], [CPNull null], [CPNull null], [CPNull null], [CPNull null], [CPNull null]] - forKeys:["alternating-row-colors", "grid-color", "highlighted-grid-color", "selection-color", "sourcelist-selection-color", "sort-image", "sort-image-reversed"]]; + return [CPDictionary dictionaryWithObjects:[[CPNull null], [CPNull null], [CPNull null], [CPNull null], [CPNull null], [CPNull null], [CPNull null], [CPNull null]] + forKeys:["alternating-row-colors", "grid-color", "highlighted-grid-color", "selection-color", "sourcelist-selection-color", "sort-image", "sort-image-reversed", "selection-radius"]]; } - (id)initWithFrame:(CGRect)aFrame @@ -794,6 +794,26 @@ NOT YET IMPLEMENTED return [self currentValueForThemeAttribute:@"selection-color"]; } +/*! + Sets the highlight radius for a row or column selection. + + @param aRadius a int +*/ +- (void)setSelectionHighlightRadius:(int)aRadius +{ + [self setValue:aRadius forThemeAttribute:"selection-radius"]; + + [self setNeedsDisplay:YES]; +} + +/*! + Returns the highlight radius for a row or column selection. +*/ +- (int)selectionHighlightRadius +{ + return [self currentValueForThemeAttribute:@"selection-radius"]; +} + /*! Sets the highlight gradient for a row or column selection @@ -3773,7 +3793,24 @@ Your delegate can implement this method to avoid subclassing the tableview to ad CGContextStrokePath(context); } else - CGContextAddRect(context, rowRect); + { + var radius = [self selectionHighlightRadius]; + if (radius > 0) + { + var minX = CGRectGetMinX(rowRect), + maxX = CGRectGetMaxX(rowRect), + minY = CGRectGetMinY(rowRect), + maxY = CGRectGetMaxY(rowRect); + + CGContextMoveToPoint(context, minX + radius, minY); + CGContextAddArcToPoint(context, maxX, minY, maxX, minY + radius, radius); + CGContextAddArcToPoint(context, maxX, maxY, maxX - radius, maxY, radius); + CGContextAddArcToPoint(context, minX, maxY, minX, maxY - radius, radius); + CGContextAddArcToPoint(context, minX, minY, minX + radius, minY, radius); + } + else + CGContextAddRect(context, rowRect); + } } CGContextClosePath(context); From 0314005e0ee9441be70c88525df94e9809592420 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Thu, 17 May 2012 23:02:49 +0200 Subject: [PATCH 010/112] Added CPImage -data. If needed, generates data for canvas compatible browsers. Added a test in CPImageViewTest where an image is created from the data of another image --- AppKit/CPImage.j | 35 ++++++++++++++++++- Tests/Manual/CPImageViewTest/AppController.j | 11 ++++-- .../Resources/images.plist | 4 ++- 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/AppKit/CPImage.j b/AppKit/CPImage.j index 70601d128..d87c0b5d4 100644 --- a/AppKit/CPImage.j +++ b/AppKit/CPImage.j @@ -165,7 +165,9 @@ function CPAppKitImage(aFilename, aSize) */ - (id)initWithData:(CPData)someData { - var dataURL = "data:image;base64," + [someData base64]; + var base64 = [someData base64], + type = [base64 hasPrefix:@"/9j/4AAQSkZJRgABAQEASABIAAD/"] ? @"jpg" : @"png", + dataURL = "data:image/" + type + ";base64," + base64; return [self initWithContentsOfFile:dataURL]; } @@ -178,6 +180,37 @@ function CPAppKitImage(aFilename, aSize) return _filename; } +/*! + Returns the data associated with this image. + @discussion Returns nil if the reciever was not initialized with -initWithData: and the browser does not support the canvas feature; +*/ +- (CPData)data +{ +#if PLATFORM(DOM) + var dataURL; + + if ([_filename hasPrefix:@"data:image"]) + dataURL = _filename; + else if (CPFeatureIsCompatible(CPHTMLCanvasFeature)) + { + var canvas = document.createElement("canvas"), + ctx = canvas.getContext("2d"); + + canvas.width = _image.width, + canvas.height = _image.height; + + ctx.drawImage(_image, 0, 0); + + dataURL = canvas.toDataURL("image/png"); + } + else + return nil; + + var base64 = dataURL.replace(/^data:image\/png;base64,/, ""); + return [CPData dataWithBase64:base64]; +#endif +} + /*! Sets the size of the image. @param the size of the image diff --git a/Tests/Manual/CPImageViewTest/AppController.j b/Tests/Manual/CPImageViewTest/AppController.j index 5e62e5fdf..d6a34ef60 100644 --- a/Tests/Manual/CPImageViewTest/AppController.j +++ b/Tests/Manual/CPImageViewTest/AppController.j @@ -31,12 +31,19 @@ var imageView = [[CPImageView alloc] initWithFrame:CGRectMake(20.0, 50.0, 290.0, 250.0)], image = CPImageInBundle("280px-1730_Homann_Map_of_Scandinavia,_Norway,_Sweden,_Denmark,_Finland_and_the_Baltics_-_Geographicus_-_Scandinavia-homann-1730.jpg", CGSizeMake(280, 240)), imageViewShadow = [[CPImageView alloc] initWithFrame:CGRectMake(320.0, 50.0, 290.0, 250.0)]; + + // Test CPImage -data method + // Create an image from a filename based image + var im = [[CPImage alloc] initWithData:[image data]], + // Create an image from a data based image + otherImage = [[CPImage alloc] initWithData:[im data]]; + [imageView setImageScaling:CPImageScaleNone]; [imageViewShadow setImageScaling:CPImageScaleNone]; - [imageView setImage:image]; - [imageViewShadow setImage:image]; + [imageView setImage:image]; + [imageViewShadow setImage:otherImage]; [imageViewShadow setHasShadow:YES]; [contentView addSubview:imageView]; diff --git a/Tests/Manual/CPImageViewbindingsTest/Resources/images.plist b/Tests/Manual/CPImageViewbindingsTest/Resources/images.plist index e9a78fe12..6b6c0bb2e 100644 --- a/Tests/Manual/CPImageViewbindingsTest/Resources/images.plist +++ b/Tests/Manual/CPImageViewbindingsTest/Resources/images.plist @@ -8,7 +8,9 @@ data - TU0AKgACgaL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///v///v/////////////////////////////////////////////+///+///+/v7+/v7+/v7+/v7+/v7+/vz+/v7+/v7////////////+///+///+///+///+///+///////////////////////////////////////////+///////+///////////////////////////////////////////////+///////+///////+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///+///+///+//////////////3///3///3///3///3///3//////////////v///v3//v3//v3///3//v///v///vz//vz///3///3//vz9/f3+/v79/v/8///8///9/v/9//7+/vz///3///3+//r//vz///3+/vz////+///8///7///7///5///4///8///+//3////+/v7//f///f///f/8/P78/P78/f/9/v/7///9//77//79//z9//z///3///3+/vz+/vz+/v7////+///+///+///8///9/v/7///+///8///+///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///+///+///+//////////////3///3///3///3//vz//vz+/v7//////////////v////3//v///f7///////////////3//vz///3///3///3////+///8///8///8///9//78/v38/v37/fr7+/n6+vj7+/n6+vj6+vj5+/r6/Pv4/P35/f74/v76/v/7+/v+/fv//f7//f7//f7//v/////////9/v/8///8///8///+///+//3///3///39/fv+/vz///3///3////////+/v78/v3+///+///+///+///9//79//79//7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///+//////////////3///3///3///3//vz///3////////////////+///9/v/+///+///9/v/7///8///8///9/v/9/v////////3///3+/vz6+vj2+Pf09vXy9vft8fLq7u/p7e7p7e7q7u/s7e/s7u3t7e3v7+3u7uzv7urv7urx7uny7+rz8Ov18Oz07+z28PD38fH28vH28vH19fP09vXy9/P5//35//v7//7+//3///3//vv//vv//f3///3///////////////3///3///3///3///3///3///3///3///3///3//vv///v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///+//////////////3///3///3///3//vz///3////////////////8/f/8/f/8/f/7///8///7///7///7///6/v/3+/7x9fbw9PPw8vHt7+7p6+rm6Ofl5+bi5ufh5ebe4+bc4eTd4uXf5Ofi5uni5uni5ufk5efk5uXl5ePl5ODn5N/p5N7r5N7s5d/r5eXs5ujt5+ns6Onq6Onq6urq7Ovo7Ovp7+3r8e/u9PL09vX5+Pb/+/r//P3//f3////+///+///9//79//7+/vz+/vz///3///3///3//v3///3//v3//v3//vv///3//v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3///3///3///3////////+/v79/f38/f/9/v/+///+///////+/vz7/fz2+vnz9/jv8/bq7/Ln7O/k6ezj6eni5ufi5ufi5ufi5ufg5OXe4uPd4eLa3t/Y3N/X3N/Z3uLY4OPX3+LW3uHT297W297X29zZ29ra2tja2dXc2NXa2dfb29vb3N7c3d/e3+Hf4OLg4ePg5OXh5ebh5+fi6Ojk6urn6+zr7O7v7/Hy8PPz8/X19vj2+vv6/v/8///8///+///9//79/f3//////////f7+/v7//v/////////+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3///3///3///3+/v7////////+///+///+///9/v/9//75+ff19fPv8e7p7ezn6+zm6uvk6ezj6Ovm7vDk7O7j6Ovh5unh5ebe4uPa3t3Y2tnT1dLR09LP0dDN0dLN0tXP1NfL09bJ0dTI0NPJ0dTL0NPM0NHP0dDO0M/Pz83O0M/N0dLM0tLN0tXP09TR1dbT1NbV1tjV2dra3t/b3+Dc4OHd4eLe4uPi4+Xk5enm5+nq7u/s8vLw9vb1+fr4/P36/v3+///+///////////////////////+///9/v/9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3///3///3///3////////////////8/v39//7+///+///9/v/2+vvx9fbu8vPq7Ovo6unk6Ofl6ejn6+zo7u7p7vHp7vHe5ujb4+XY3t7U2NnS1NPQ0M7MzcjKycXNzMjMzcjMzcjLzMfMzsvNz8zKzs3Hy8rIzs7Izs7Jzc7JzczLzczLzczKzMnIzcnIzszFzsvHzc3JzczMzs3MzMzNzc3Q0NDOzs7O0M/Q0tHT1dTX2djb3dzf4OLh4+Lh5eTj5+bl6ejq7Ovt7+7y9PP4+Pj7+/v7/P79/v/+///+///+///8///8///8///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/vz+/vz+/vz+/vz+/v7+/v7+/v79//7+///+///6+/319vju8vPp7e7m6uvk6Onn6+rm6unn6ejl6ejj5+bf4+TY3eDU2dzL09XI0NLFys3Bx8fDxMbExsPIx8XJyMTMzcjMzsnMzsnLzcjNzsnNz8rLzcjIysXKzMnJy8jIysfHycbGyMXGyMXGyMXEycXDycfAycbCyMbFysbHycbIycTJysXMzcjMzcjLzcjLzcjLzcjNzcvPz83R0c/T09HZ29jb3dre4N3h4+Dk5uPn6ebr6+nu7u719fX5+fn+/v/////9/v/8/f/9/v/+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/vz///3////+/v78/v39//7+///+///6+/3v8/Tq7u/n6+zk6Onk6Onn6+zp7e7l5+bh4+Dd3dvX2dbQ0s/Nz87IzM3Cx8q/x8rBys/Bys/AyszEyc3Fy8vJyszM0M/M0tLHz8/K09DL0c/Kz8vNz8rMz8jMzcfMzcXKy8PJysTKy8XJysXIycTGyMPHycTEycXDycXDyMTAxb/Axb/Dxr/Aw7zEx8DEx77FyL/Ex8DKy8XMy8bLyMPPysfQzMnQz8vR0s3T1M/W19Lb3Nfh4t3n6OPq6ujo6Obs6+nw7+339vT+/fv//vz+/fv//v/////////////////////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7///////////////////////////////39/fv8/Pz8/v3+///+///4+vny9PPp7e7l6erk6Onm6uvm6uvm6uvh5ebZ3d7Y2dvT1dTMzs3HycbGxsTGyMXGyMfDx8jDyMvCys3Cys3CyszEysrJy8rMzMrPzsrR0cnQ0MbV0snRz8PQyr7Syr3Ox7fMw7LIv67Hvq3Hvq/HwLDHv7LFv7PFv7PGwLTCvK7Evq7Kw7PJw7PNxrbNx7fJw7PKx7jGxLXExbfAwLTCwrjCwrrDwLvJxcLMyMXJyMTMzcjP0MvO0MvP0c7T1dLa3Nnf4d7l5ePr6+nr6ujp6OTz7+z9+fb//fr//fr///3+/v7+/v7////////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8/v3+///+///9//75+vzx9fbq7u/k6Onl6erm6uvl6erh5eba3t3X29rT19bLz9DGy8/HzNDGy87FycjHycbHyMPHyMPJycfIysfHycbKzMnNzsnOzsbSzsXVzcLXyrrYxKvSu5zLspS+o4W1mny5nHy3mnq0l3exlHSvlHaxlnmymXuwm36vm4Cvm4KxnH+1m3q2mnW6nHi5nXi8nX7BpIbBp4zDrZXHtZ/HuqfDvKzDv7PAwLi9v7rBw8C/xMDDxcLHycTKzMnHzMjHy8rJzczK0NDK0NDU2Nnd4eLl5+bn5+Xo5+Ps6OX18Oz++vf//vz////////9/f39/f3////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////////9//7+///8/v3z9/bq7u/k6Onj5+jj5+jh5ebf4+Td4eLV2djM0M/Kzs3Lz87Izs7EzdLDzNHAyMvBxcTIx8PKx8DMyL3RysDTzcHSyr/Tyb3SxrbLvKfCsJi6pIy2mXmpglmgdEeXaz6PZDmRZjubcEWhd02jfFOuiGGtimSvi2evjmutj2urjmyqjW2sjGawi16tg1GofEugckGbaz2fbkWkdEyofFeqg2Kwj3CymH24pIu6q5a5sJ6/uKi/uavEwLTIxLnIxbzExLzExcDGyMXIzMvIzs7L0NPM0tLS1tfd397n5+Xo6eTp6OTt7Oj09PL5+fn+/v7////+/v7+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7////////////////+///3+Prr7/Dk6Onj5+jk6urj6Ovh5una4ODS2NjO0tHM0M/JzczIzcnKzMnFy8vCzdO9ytC+xsjHx8XOysHQx7jOvq7MuqTGsJnAqI63nH6ukGyohV2mfFKkeEmlc0CeZS6WWSKXXiehajSrd0Wzg1O3i168kmjEnXTCn3nDn3vCoH3An3y8nnq5m3m5l3G4k1+xhk+ufUWiazWYWyWZVyOeWCehWyqcWCmgYjOiaTupdkesgVSwil24lWu3mXO+porBr5nJuqfLv6/JwbTGwrnDxL7BxsLDycnGzs7Jz8/K0NDW2tvi5uXn6ebn6ebq6urq6urx8fH+/v7////9/f37+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pzy8/Xt7vDk6Oni5ufj6enj6enc4eTV2t3U2trM0tLJzczKzs3IzcnHzMjKzMnKzMnHy8rIysfNysHPxbnGtaG8pIyzmHuukG6riWSqhF2feE2Zbz+dbjqjbzaqcje0eDysai6lYyevcTi/hk/JlWPLnG7Kn3XNp4DMqoXLqofMq4rMq4rNrIvMq4rHpoPEoXnGnmu+kVi6h1CwdT2kYSqjWiOmViGlVB2kUxyiVR2gVyClYymoazKncDeqdz6oeUWofVKpg16zkW7BpIbKtJzNvqvKwbLGw7rCw73Gy8fIzMvFy8nHzcvO0tHY3dnj5eLp6enq6urs7Ozw8PD4+Pj+/v7////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f329vbx8fHm5+nl6erl6ezi5unc4eTW297P1NfL0NPK0NDHzc3JzczKzs3HzMjGy8fIysXKx8DOwrLHtZ/FrZO6m3yjf1ubcUmfc0agcUOtf06zhVOxgk6vfka0gUizfUGxdzi3ez2tbzSrbje6gE7NmWrTpnzVrYnTspHXuZ3Rt5zRt57QtpvSt5rXuJvYt5jUsZHRq4TQp3nGmGTDj127gk2ycDyxaTavYiypWSSrXCSlWCCgVyCrZi2vcTiscTmpcDinbDSiZCmdXyacYy6mc0SziWG+nXzJsZfQwa7KwrXGwrfCwbzExsHIysXIysfLzcjS1NHh4eHo6Ojq6urm5ubq6ur39/f+/v79/f3///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3//v/////+///+///+//////3///3+///9//79/f/+/v/9/f339/fs7u3k5uXn6ejm5+ng5OXY3N3P1NfL0dHK0NDL0dHLz9DLzczMzMrPzMfOysHNxbjEuKi6qJK5mn2qhGCjeVOecUeXZDWeajiveEKxeEGyeUK5gkq0e0Ovdj63f0S2fkG4fj/EikvDiEzDilXRnnHdsIneuJTZupvXvJ/awqjdxa3bw6vawKnbwKPewJ7gvZfetI7brILQnm3Gk17Kkl/MkFzIiVTIhVHBe0e2bzm2cTqsZzCjYiyubzq4e0WyeUStc0GrbjepYiSnXRykXiKjYiyfYzGeaz6sglq5m3nLtpvNvqnKwrXEwLfEw77HyMPKzMfOz8rR0M7X1tTj4uDr6+nq6urm6Ofw8PD9/f3//v///v///v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3//Pn//v3+///7///7///7//7+//r+//r8///7///+///+/f/29Pfp6eni5ufl6+nm6Ofb29vT1dTP09LJz8/HzcvKzs3M0M/LzczMyMfQxsTVxLrUu6fBooWlf1iZbUCSXzSia0Kwd0qnbkCmbDqwdECxcjywbzmxcDivbjavbDW4dz/DhUy9gki7g0bIkFPMlVXLmGHarYbgvJzfwqTcxabcxabjyqzjxavnx67pybDlxKPgvpHlu4nhqXbLjFe/fkbFhErJiFDKjFPNjljMj1nFiVXAhlTBiVa4g1G9h1jAjFy9iFy/jF+6h1yncUKmZS2jXSKiWSKrXyutZC+qZS6iZS6dajWjfU64nHfKuKDOwrTKw73Dwr7Exb/KycXLx8TQy8jX1M/e3dnl5+To7Ovq6+3p6ev/+P3/+////v/+/v79/v/+/////v///f////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3//f3//v/8///5/v/8///+//3///r7/Pb5/fz8///8///x8vbo6Orn5+fk6Onf5eXZ2tzV1dXLz87Fy8nEysjIzsrL0MzJysXLxsDRw7rPt6q9nYapfl6XZj2UXCugYi+eXi6vbT28ekiwcTypaDKtbDSxbDO2cDW1bTO5cTe4cDa7dTrEgkjHhkzGik7KklXJklLNmmPds43kwqbgyKzey63fzK7p0bXszLPoxKrnwqXmwJnetoPVpGrKiU+7dDa6cDG/dTa/eDq/ez7DgUfEhU/Dh1HCiVTIk1/CjVnEkF7Ll2fOmmvUn3PPmnC+iFq6fU6yc0CrZzapYS6sYSqrYCepYSalZSicYyyZazqhfli6n4TOu6rPw7fHwLbEwbrMyMfJxcTIx8LQ0cnZ3tfh5uLo6evs6/Dw6+/69vf//v////39//79/v///v///v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7///7///+//3///v///r/+/j+///5/v/v9Pfj6Ovj5+jo6uni4+XW19vNztPHys/IzM3K0M7IzsrDysPFyMHKxrvNvKzBo4uwhGGfaD+aWy+aWiybWy+jYzWuaDeyaje0bDmrZi+pYiquaC2zazC6cDO1aS2/cTPBczW/czXAeTvDfT/Jh0rTllfJj1DPm2Lgs4zryKro0Lbk1Lrj07np1bzszrTrxqnnvJnfsITRoGjCik28eDu4bi3AcS7DdC/Acy+7cC+7cTK7dTm7dju8ej67ekC5e0C9f0bChEvIiVPRklzYlmLSlGXWnHTNmHDEjmC5f02wczyqaTGpYiyoXyipYCmsZy6kZzCgbjuvimDGq43Swa/Qx8DCwMG+wsPEy8PI0MPJz8XY29To6evo6e3m5+nu8O/4+fT///r///v//vz9/v/+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///+///7///+//3///v///r/+/j/+/v//v/+///r8PPe5ubh6enm7Org5OXW1drPztTJzNHKz9PIzs7Cx8PGx8HPy8DLv6+/qZKriGqebkiVWCmcViOwZzS5cD2sZjWjXSyyaTSzaDG0aTC3bDO6bzW8cjW7bzG7bS3CcjPEczTFdDXGdjfDdTW9czTEfT3VkVLIi0zOl1/gr4TsyKbs17zq28Tl2cPl07vnyKzswZ/gr4TMl2PAiE28f0C8dji8cjG2ayi8cS6+czK+dDXAeTvCfEDDfkPEgkjBgEbEg0nEg0nBgEbCgUnFhEzIhVDHiFXMkmrNmHDTn3DWonDQm2fDiVe3d0ezbTy0azazazGwaiynaiufbDWid0y5mHnRuqrPxsHCwsC9w7nCyr3Jz8PP0svZ2dfj5Obp7+/m7Orr7ej19vD//vn///v+///7///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///6///7//////v///j//vr//fr//P/+/f/w8fPj6ene5+Ti6+bd5uPQ1tbLzNHMz9THz8/G0c3HzcvJyMTPwrnPtqK8lXalcUmSVSaXVCCfVySnWymxZTO2aTWyZS2zZy26bjS8cDbAdDjEeDzCdji/cTHAcDHDcjHLdzfCbi6+airDby/EczK8bi66by7AeTnCgEPKj1XdqXrrxaDt17/p3Mvl2cni0LrmxaberobMkmC+gEW7eTy5dTS4cTG3cTO2dDi9f0bGh1HNkFrUmGTbn2vconDepnPepnPfqHLbpG7YoWvZn23UmmjMkF7GiljBgVHAglHEiljRmGrWoXXToHXPmnLOmGzDiVmtcTugZCaqbi+vczelaTWnbECygWDIrZjTx7nJx7u8v7TEx77GycDKy8Xb3drl6erl6+vn6+rq7+v19vD///r///38/v3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///4///7//////r/+/X//fr//v/8+//v8vfj5+jm6unk6ePc49zS2NbM0dTKz9PJztHGz8rFzcLPzcHSxbXDpI+pe1qbXjKZUR+cTxmkVR2oWyWoWyWqXSewYyu6ai/GdjnBcjfCczjAcjTAcjS5ayuwYiK1ZSa7aim6Zia4ZCS5ZCS7Zye7aim6aSi3Zyi0aCq7dDbHhkzXom7pv5fo0rvm2cnk18fizLXiupfKlme4ekG6dDa4cjSzbi25dDPEhEfTmmXXo3Peqnvhrn/ms4bnt4nntovpuI3mt4nouYvouIjouIjqt4rms4bgq3/dp3jXm2fQk13KjlzIj2HGj2bFkWnNnHTZqH/XpnvIlWa0f0uqcz2ucTutbjiraDOkZziqflvBo4nUwq7PxrfDwbXCxLnKy8PO0MvV2drk6Ovs8PPo7Ovr7ej4+fT////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///7///8//3//vr/+/j//P79/P/v8/zh6O7j6enn6eTg4dvV1tHN0dDL09XK0tTEzcrGy8TKx7bJtZqzj2ueaDyaVCOhUSCjUB6oVSGnVyKoWyOpXiSzaSy8cDS/bzTCcje9bjO7bzG3ay26bjC2aCqrXR2rWxyrWhuxYCG2ZSa8aCq5aCm3Zie6aSq8bC+6bC66bjDDf0LPll7htovmzbfl1cbj0sDfwafQoXfAg022cjO7dDS9dTrBfEHQkFPco2vhsYHjuI3mu5HmupPovJfnvZflu5XkvZbmv5bnwJfrwZfpv5XnvJLmu5HnupPou5Hlt4Xls4Dirn7fpnnVmm7MkWXLkmTOmmvQn3bXp4HXpoXKmna6hV2rc0KpbjKvdTarbzujbkS3jGzTtZ3VxbXKxrvHyMLEyMfMzdHb3OHp6u/q7vHp7ezv8fD6+Pv//v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///8///8/v3//fr//fv//f/v8vfg6fDa5enn7evh497Y19PQ0czLz87Jz83Gz8rLzcLPxrTBqY2pg1yYYjSaUh+mVR6uVyKpUh2zYiuxZCyxaS+xaS64bjG+cjTAcTbFdjvBdTe/czW5bS+6bjC3aSuvYSOzYyS0ZCW3Zie4Zyi5aCm2ZSa1ZCW5aCm8bC+7ayy+bi/BejrJjVHbr4Dly7To1cbmzbfatpTAiFe8ej67dDS/eDjIg0zam2bor3jksn3luo/mwJnnwZznwZ3pw5/nw6HlwZ/lw6DmxJ/kwp3mw53nxJ7owp3owp3owJ3lvpflv5Lku43kt43ptY3ps4flrH/apHXSnm/Il27Pn3nXqYjesI/gronQnXC3g0qqbzOraDGtajaiZTivf1nStJrYyLjHxL3Hy8rMzdHNztLb2t/s7O7u7/Ho6evv7/H+/P/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///+/v///Pz//f38+//d4ubc5erk7vDj5+bX2dbS0tLQ0tHJzczJzsfLzb/OxKnJp4Gmc0aZXC+dWSiiVCOqWSSwXyexYie5bzK6dDjAej67dTqzazDAdDrKe0DCdDbAdDa/dTTBdjXAdTS9by+5ayu7ay7AcDPAcDO9bTC8bC26aiu4Zyi4Zyi8ayy9bC2+bSy8cTDLjk/TpXPfxKnr0r7lw6fUpXvCgUmzbCy9eDfSkFPfoXDnsYPnt4flu4vqw5rqx6HtyaXty6jsyanpyKfpyKnryqvuzaztzKvsy6rryqnryqnqyajoxaflw6DjwZvjwJjivJfju5fnu5jnupPktYvgsILWpnbTo3LToHHYpXblsoXruI3Xo3u9hFmlYzGwaTOxazCmZzGrfFLGqI7SyL7KzMvFycrIzM3X1tTi3t3u7O/x8PXp6u7y8/X////+/v7+/v7////////////////+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v/9+////v///P3k5efi5+ri6uzj6OvZ3dzQ0tHN0dLM0M/LzcjQ0cPKw6m7oXypdEKkXyahWCOhVSOjViKtYCq2aTG8cTe9dji9eTrBfUC+ej29dTrHfUDMgELEeTjDeDe9czK7cC+8cTDAcjK/cTG9bzG7bS+/cTO6bC67bS2/bzC9bS68ayy8ayy9bCu+aym+cC7JiUnToWzfwKPoyrLhuZXMl2W7dTnAdjXSkVHgpW3kr4XqupTqw5rqx5/ty6buzarx0K/w0bLx0rXv0bXw0rjw0rbz1bnx1rnz1bnv1Lfv0bXu0LTszrTrzK/oyqjox6Tkw6Dhv5zhvZvkvJnluZTkt47ltYfksH7frHfYpXDXo3Pdqn/hr4rirofUl2u2dECzbTG1cTShZzWmfFbAq5bMxbvHysPIzcnS0c3a1tPn4+Tx7/Ls8PHp7e73+fj+/v7////+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////f///f///v/u7u7Z29rn7Ojo6uff4eDV1tjP09bK0tXL0c/OzsTNwqy7oX6neEqjXiWoWB2lWR+lXCWwZzK5cDu7bzu9cju9cjm9dzu9eTq9eTq9eTjBejrFejnDeDfAdTS7ci64bSy7cC/EdjbIejrFdzm+cjS5bS+2aiy3bCu5bi27bSu9biy/bi29bCu/bizCdDLFgj7NmWDgvJzqyKzer4O9gUu5cjTPiEjjqGzotoPnu5jrxKfryqnt0K7w07Xv1Lfx1rvy2L/02sPz28Pz2sTz2sTz2sTz3cX13cXy3MTy2sLy2sLx2MLy2L/w07Xv0a/rzankxqDiwpzivprkvJnnuZfmtI/nsojor4Hjq3rXo3HVo3LYqX3droTmtYzhrX7IjFa1eD+2eUKmdEGlg13BsJTOyLjIycHLysXW1dHh3dro5+Ps8e3p7+3v8fD8/Pz////9/f3////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v/8+f///f/4+f3a3t3i5+Pq7Ofh4t3a2tjT1NbS1tnN09POz8nOwrK6oYOkeU6hZS+nXCKnVxqnWyGwZSy2bTa2bTi0aza3bDW/dD3AeD2+eDq5dTS3dDC2cS65cjDAeTfAeTfCezvEfT3Jf0DOhEXUik3TiUzOh0nLhUnIgkTDfT+9eDe7cTK8cTC7bS2zZSW3aCa8cS29eTLGjlHdso/pwqHZp3aydz3EfkLamFzlsnvlvI7ow6bszLPs0bbt1bny2L3x2b/y2sL028Xz3cjz3cjz3Mrz3Mrx3Mfz3snz3snz3snz3cjz3snz3cj028X02bz12Ljz1rTt0azpy6nnxKTlvp/luprpu5not4/qtYvotIXgrn3YqHjUpXnQo3ncsYfuwZfntIfMl2XBiFG1fkanfEmmhl3EtJrMxrbPzMXT0s3b2NPg39rr8Oru8+/s7u319fX9/f3////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v/++////v/n6+7Y3N3s8e3o6uXb29nV1dXQ1NXP09LS0czQx7i+pImleVKhYzKpZCucVx6fWR6vZCu7bzW1aS+xZSu7cDfBeT/GfkTGfkTAeD27dDa6dTS5djK8fTjJikfNjU/Tk1bZl1vdmF3gm2Dhn2Xhn2XenWPeoGfanGHYml3VmFnRj1LKhknBez23cDKzaSq3biq3cSnFiEfcrITovJfXpG+8hEnRkFjhpXHiuIblxJvvzbLw1L7w2MDw2sLx2b/y2sDz28Py3MXx28bx2sjy28nz3Mr03sn138r03sf03sf33sj138j13Mbz28P22772273427322bv01bnxz7PryKjmwp7lv5jlvpXovZLou5HltozhsojerYXXp3/TqH3ds4npvpvitY7NmWm9iVC1g0ame0Stj2nPvafY0MXPzsnR0szd3tjr7ufu8Ovw8O7t7e34+Pj////+/v79/f3////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7////19ffa3uHj5+jo7Ovi5+PX29rR1dTT2dnNz8rTy77KspqpfVicXzCoXyqtYCiiXSamYSqyaTK8cTe5bS+9cTPIfj/FfkDEfT/BeT68dDm8dDnEfkDIh0XOk0/aoGDbo2jepW3ip2/lqHHnqnTnqnTlqXXhqHPfqHLcpW3krXXvuH/rs3jeo2fTlVrPjVHEgEG7dTC1bSHDgj7cp3vluI/Sn2jEjVTZn23ns4Tnwpbszqrz1bvx1cDt2MPt28Xu2sLw2sPx3Mfx3Mfx3Mnw28rx3Mvz3Mrz3Mrz3cj028f13Mb33sj54Mr438n23sb03ML03ML128T128T22sL02b7x1Lbtz63jw53jwpnjwJjjvJPkuJHluJHkso3bqoLXqHzYrYPZrozgtZLktYvSnmy+ik66iU6nflDFqIjVxbbTzsjT1M/Z29jk5uHu7+r09PLr6+v09PT////////+/v7////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/vz///vm6OXc3d/q7vHk6Ovb4OPS3N3O2tjP2tbMzsPItqC1jWqgYzagVCCqWSKqWSKuYjCxaTaxajS2cDS8dzbBfDnEfjm9dzK8djG+dzXBez3IhEfRj1PWmFveomTkrHHir3jgrnvhrXvjr33lr4DmsILlsYLlsoPjs4PitILqvIryxJDxv4rms3zgqXPdomraml3Qi0jEey7BfTbTm2rjtIjNnGTEk1vir4LtwJntzabx17b1173x1cDw28bu3cnw38vx4Mzz4M/04dD04dL04dL04dL14M/z3svy3cjy3Mfy3Mf23cf438n64cv44s3x4Mzv4M3v3szw3sry3cjy3sbw28Dw17nw1rXqzKrlw57ivJfiuJLmupPouJLjsonirYHbpnzVpHzcrIbkt5DfsIbOnGm+jFe3h1a3kGfJr5jZy8LW1NXT19rc4d3q7Ofz8/Hv7+/w8PD5+fn////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v79/fv5+vXd39rk5uXo7O/m6e7U3N/O2trS3dnL0MnSybi9nH2ibECkWyimUx2hThimVSCrXSy7bzu6cTq8djq/ezq6dzG9eDPAfDW9eDPFgUDRj1LbmmDeoWjhpG3kqHLmr3nls4LhsYHisoLktIbltInmtYrqu4/uwpXrv5LtwpXvxZXrwY/nu4rpu4npuYjlsn3mq3PpqWvemlPFhEDMlGHntIXVo27Rom7nu5Tuyqrt1LXx3L/028Xz3Mr35tb059b26dj16Nj16Nj26dn46t346t346Nv25tf15NT15NLz4M/y3crx3Mf03sn34cz34s315tPy5dTw49Lw4NDw383w38vv3cfv28Lw2Lzt0rXrzK3oxqPivJjiuJLkt5DmtY3lsIbnsobbqn/Wpn7gs4zhtI3TpHjLmGnJlmGzhVTDoIDXwrHTzc3T1tvb4Nzh5uDv8e7z8/Pu7u7y8vL////////7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3////////7+/v////////s7Ozc3Nzp6+rq7u/g5evS2t3O1tbX2NLYzMDNrpmsd0+kXi2oWCWjTRykUiKoWCetXSi6bjS8cDS6cDG+dze8dTO5dDHEgD/Pj0/Vl1rdoGfepW7gpnTjq3jnr37os4HmtIPnt4fquorrvI7uv5Pvwpjww5nww5nxxZjzx5rzx5rxxZjuwpXuwpXtwZTuv5HtuovtuITmsnjYpGrPnGfapnTqsn/ir4Lqw6Tv07vw3MTv4Mvx5NPy5tj46+L57+X68Ob58eb58eb58eb68ej68ej58Of48OX68Ob369/059f15dXz4tDw3czv3cnx38n05M305dD05dDz4tDy4c/y4c/x4Mzw3sjy3sby3MTv1brpyq3kwp/kvJnkuJPjto/ltozis4fftInar4TUqX/dsInfsovRonbGk17Bj1qyiV3DqIvX0MjT19jV3NXg5d7r7er19fP09PLy8vD5+fn////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////9/f3////9/f3j4eTh4ePt7+7k6Onb4OTX3N/U2tbV0cbVu6q7jnGnZzujViKjUB6kTh2mVCWvXy64aTC/cDW/cTO7bzG9czS5cjK/ezrQkFLcnmPdomrep3HfqnbjrnzmsIHnsYPmsoPtu4ruvo7wwZPxwpTvw5bxxJrxxpvyx5zww5nww5nvxJntwpfswZfrwZntw5vuxJzxxZ7twpjpvpHjt4jXqXjVo3LlrXzrt4/oxqvv2cTy49D06Nj07N/z7OL37uf38Or68+v49On59er59ez49Ov28+r38uz38+r49Ov58uj68OT77+H57Nz25tby4c/x4Mz05M325s/25dH15ND049H049Hz4tDy4c/04s7z38fx2b/s0bTox6jivpzkuZbkuJPkt47htoviuY3etYnXqoHXqoHZrYjYqX/QnWjDkFeugE6xkWvFvK3V19Lb4Nnd4tvp6+b09PL19fPy8vD39/f////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////+/v7////////////////39/fc2tvn5+fx8vTh5ebZ39/Z393Y2tfSyr/KqpGjcU6fXC+fUSCcSRWkThulUiCxYCu+bzbBczW+cjS6bjC2by+7dTfJh0ranF/hpGvgp3Dgq3firnzmsoLptYXsuInsuInxvo/ywpLzxJbyw5XuwpXtwZTuw5jwxZrvxJnuw5nswprrxJvsxZ7tx6Luyqbxz6z20rDy0K3wzqntyqLhupHVqH7dqn3pvJXqzLLy4Mz56dn58OH58+f28un68+368+369u369+77+O/69/D59u/19e349fD59u/59O789e3+9ez+9Or+8ub77eD16Njy49D05dD259D36NP259T15dX15dX05NTz49P15NDz4cvz3cX02b7uz7LnxKTlvZrnvJnpvZbkt47ftInhtYjgsYfaqoLVqH/YqX3Sn2rEkFezhFCriGC6q5bT0cXe39fd4Nno6eT09PL29vTy8vD19fX9/f3////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////////+/v7////////w8PDe3N3r6+vw8fPh5eTb4d3Y3dfV1tDPwrK9lnWeZTqdWSqfUyGcSxajThilTxyyXym8bTK/czW/czW5bzC5czXGhEfXllzdoGfdpG3gqHXirnzlsX/ns4PqtobwvIz0wZLzw5P1xpj3yJr2x5nxxZjvw5bvxJnvxJrvxZvuxJzsxqHvy6fxzq7007T217r33L/43cL43sP128Dw1bjtzKvivJjdsIfiupbv1bz25dX67N/68uf68+v48+379vD89/H69/D7+PH8+fL5+PP49/L39vH39vL49/L49fD79vD99u788+r88uj88ub67uD16Njz5tP259L259T25tb15dX15db05NX05NX05dLz4s724Mn23MP01rruza7oxKLmvpvtwZ7muZLesYfis4fltIvdrIPSpXvVpnjToGnGklnAjVi2jGK3ooXQx7bd2tHf3trm5uTz8/H4+Pbz8/Hz8/P7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////////+/v7////9/f3o6Ojg4N7s7u3q7u/f5ePd4tvZ3NPV0cjJtKGuf1WhYi2dVCeeUiGhUBmmURqsVyC4Ziy9by+9cjG/dTa/eDrGgkXVlFrfomvdpG/hqXbhrXvlsYHntYTotoXruYjwvo31w5LxwpTyxpn1yZz0yJvyxpnxxZjwxZruxJrtxp/uyKPwzqv01bj42sD538b848396NP66df669j66dn14tH33sjuz7Phu5fgvJry3MX36tr57+X58ur48+339O/7+PH9+vP8+fL5+PP5+PP5+PT5+PT4+fT4+Pb4+fT49/P6+fT69/L59O779Oz+9ez98+n47uL26dj16NX059T059b059fz5djz5djz5tby5dT05dL24cz23sb12r/01bjtyqzlvp3qv53pvZjktYnlsoXnsojfrIHRpXjTpXPWo2zNll7Lk2C8jV+2mHTNvaTf18zi3tvm5ePx8e/5+ff19fPy8vL4+Pj////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3////7+/vi4uLj4+Hv8fDq7u/e5OLe49zd3dHYzsS/o4ulazunXyWbUSKcTyGlVB2rWR+2YSjBbTHBczO8cjG/eDjJhUjTkljbnmfgp3LhqXjksIDjsIHksYLotoXsuonvvYzxv4zwwI/rv5LvwpjxxZjxxZjwxJfvw5buw5nswprtx6Lwzqv11rn53cX75dD86dj+7d397+L78eX58eb78un67eT76d3z2sbkw6Tkxaby4Mr57d/58Of68+359fL39vL8+fL8+fL7+vX6+fT6+fX6+fX6+vj6+vj5+ff5+ff4+Pb6+/b6+fX69/L79vD/+PD89e358eb47Nz16tj16Nf16dn36dz16dv159z159rz5tb25tb25ND04Mj33cT2277uz7LkwaPqw6LswJvmtYrkr4PpsonlsofVqXjPpG/Sn2jTnGTWmmbCjl6yjWDGr4/e0sbj3tvl5OLu7uz4+Pb4+Pbz8/P29vb+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////9/f3////4+Pje3t7m6Ofv8/Lp7+/h5+Xf5N3e3M/ayrq5lHemYy6oWB2cUB6eUiGpWSS0Yii+ai7AbzDBdjPAeTfIhEXVk1fdoGnepXDgqHfhrX7jsIPhsYPjs4XouIjtvYzvv47wwY3vwZDwxZrzyJ71yp/zyJ3xxZjwxJfvxJrvxZ3yzKj31rf84Mj85tH869v/8eb+9Ov89e359u339O379/T58e777uj249TqzLDnzK7048/47+D58On59PD49/X4+Pb7+/P5+fH7+vX7+vb7+vb7+vb5+ff5+ff5+fn5+fn4+Pj5+ff6+ff79/T69vP89/P69fH68+v37t/069r16dv169/67uL47uL46+L26t7z59n16Nj35tT148354cn33cTx07fqyKzvyq3twp/mtYrjr4Dqs4rqt4zbr37QpXDOnWXSm2PTlmDEi1auhU+5nXXZybrk39zl5OLr6+n39/X6+vjz8/P09PT8/Pz////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////9/f3+/v729vbb29vp6+ru8vPn7e3k6ujf5N3a18jYxKy2imeqXyimUBOgUB2hVSStXSi8ajLDbzO/bzDAdjXIhEPUklXcnmPjp3Hjq3rgrH3hroHhsIXjsofouIrsvIztvY3tvYzvwIzxw5L1yqD3zaX5zqT1yp/wxJfuwZfuw5nsxZ710a/73cH/59H97Nz97+T/9u//+vb8+PX5+PP29/L6+Pn08PH47uz97eDw1r3q0bP15tH48OP48en48/D49vf4+Pj7+vX6+vL7+vX8+/f8+/f7+vb4+Pb4+Pb4+Pj6+vr4+Pj4+Pb5+Pb49/X69vP69vP79vL69u327uH069zz6d347uT78ef78ef47uX27OL06Nzz59n25tb35tL65M3338fy17zu0LTty6/uxqPqu4/ns4TnsojntInds4HWrXfTpG7KlV/ChU+8gUmsfkKykmPTwrLl3dvk4+Hp6ef29vT7+/nz8/Pz8/P7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////////////+/v7+/v7////+/v7+/v7////+/v78/Pz////w8PDa2trs7e/t8fLp7+/j6efd4tzf18rSt5qwfVKoWSGrUBejUh2mWCeyYSy6aDC8ai67bS3EfTvRkFDenmHfpGzfp3Tfq3vgrYDgr4TisYbks4jouIrtvY3wwJDwwI/xw5HxxZb2zKT606z5z6Xxxpvvw5byxZvyx53wyaL21bT84cb/69j97+L98uz89/T59/j4+Pj6+fX49/P39/n59fb89PL77eL13cXx2b3y5dLy6t327+f48/D49vf5+fn6+/X6+vL6+fT9+vX7+vb7+vb7+vb6+fX5+ff5+ff5+Pb5+Pb5+Pb5+PT69vP69vP59vH69e/07uL17eL17eL47+b78un88+r58On27eTx593z59v059f15tP34s3138jz2cDv1Lnx0rXqxqTnu47ptofrt4/rvJDiuIbWr3jQom7MmWTGiVPChUyzgUKtiVXGtKDk3Nnm5eHp6ef29vT7+/nz8/Pz8/P8/Pz////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7////////////////+/v7////////////8/Pz+/v7s7Ozd3d/t7vLw8fXr7+7k6eXe4N3d08fOrYysckSoVR+oTRahUBuoWCWvXimxYCm1Ziu6cDHMiEnWmVrgo2rgp3Dgq3ngrX7fr4HhsIXhsIXjs4XouIruvo7xwZHzw5L1x5X2zJz2z6j50673zaXwxZvvwpjwxZrzyZ/0zqn827r+5Mv/7Nv/8+f/+PL8+Pf4+Pr6+vz8+/f6+fX59/j49vf99fP87uX33sjz28H059b07OH58uz69fL59/j5+ff6+/X5+vL9+vX9+vX7+vb7+vb6+fX6+fX5+ff5+ff6+ff6+ff5+PT49/P69vP59fL69/L69/D18eb27+X38Ob58On88+z88+z58On37ufz6eDz6d306Nj15tP25ND34cr13cXz2L3x07fryabpvpHouYvpupDrvpTkvIvbs3/VqnfToW7Pk13KjVS6h0avilXEspzh2tTl5ODo6Ob29vT8/Pr09PT09PT9/f3////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////9/f3////////////m5ubW1tju7/Px8vbr7+7l6ube4N3c0MLKon6naDWoVyKmTxqjUh2rWyawXyqxYCm4bTPCfkHRk1bboGbgp3DeqXXerHvfr4HfroPgr4ThsYPlsoXruInxvo/zw5P1xZX5y5r70KP706/71bH3zafwxZvuwZfuw5jyyJ7z0Kr/4MH+5sz+7dv/9uz/+/f8+vv5+fv8/Pz++/b9+PT6+ff69vX79vL77uX24Mvy3MX26tz38Ob89e/9+PT7+vj6+vj6+/X6+/X9+vX9+vX9+vX9+vX6+fX6+fX6+fX6+fX7+vb6+fX79/T69vP69/L69/L69/L7+PH49Ov38+r49Ov68+379O768+358uz38Oj06+L06t706Nr15dX35dH548z338f22sLx1Lbty6brwpbpvY7pvJXrv5jnwZTguonbsYHZqXjWn2nTmF7DjU20jFjBr5fe18/n5uLp6ef19fP6+vjz8/Px8fH5+fn////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz9/f3////////7+/v19fXu7u7c3NzZ2dvu7/Py8/ft7+zn6eTf4d7cz7/HmnGnZC+lVSKkTh2hUBupWCGyYCi4aTDBez/MjlPXnGLcpW3eqXXdqXncrHzer4Her4Pfr4HksYTotIXtuYnyvo70wZL1xZX6y5390qf81rH61LD1zqfwxpzvwpjtwpfwxpzz0Kr93r//58/+7t7/9ev/+/f8+/n6+vz+/P3/+vb9+PL9+fb5+PT89/P68Ob148/y4Mz57+P59ez/+PL++fP7+vb6+/b6+/b7+vX6+fT9+vX9+vX9+vX6+fX6+fX6+fX6+fX6+fX6+fX79/T79/T7+PP7+PP7+PP8+fT49e759O759O759O779O768+358uz48en37uX27OD16dv25tb35dH548z33sj22sLw07XszKbtxJjqv5LpvZjswZ7pwpnjvZDdtIbbrXzYo2/VnGTJk1W4jlvArJPc1cvq6eTr6+n19fP5+ffy8vLv7+/39/f////////////////////////////////////////////////////////////////////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////////+/v7////////+/v7////////29vbv7+/o6Ojk5OTX19fZ2dvv7vP19ffv7+3o6uXg4t3ezr7FlGmpYiyjVyWiUiGjUR+qVyG5ZSnHeTvQjlLXnGLao2veqXXfq3nbq3vcrX/er4PdroDfr4HmsoLqtYPvuojzvozzwZD0xJb5yp790qj61LD50rH2zqr0yqL0x57wxZrxx53z0Kr53L7+6ND/8OD+9Or++fP8+/f8+/n9/Pr/+/f++fP8+/f6+fX6+fT79Or359j25tf79Oz69/L++fP9+PL6+fT6+fX7+vb7+vb8+/f8+/f7+vb6+fX5+PT5+PT5+PT5+PT5+PT5+PT6+fX6+fX8+fT8+fT8+fT8+fT49fD59vH59vH49fD48+/48+/58uz48en37uX27OD26tz359f45tL548z33sj02MDv0LPty6bsxZrrwpbpwZ3rwqLrw5/lvpXgtozarn/Xo3HVnmjMlVy6kGC+qo/b1cfp6OPr6+n19fP6+vj09PTv7+/09PT9/f38/Pz8/Pz8/Pz8/Pz8/Pz7+/v8/Pz8/Pz8/Pz8/Pz8/Pz+/v7////////////////////////////+/v7+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////////////6+vrx8fHo6Ojo6Ojp6enq6ura2trU1NTu7vD29vjx8e/r7Ofh5N3dzrnBjV6pYCmlXCmnWyqqWCayXSbDbi7UhkTanF/cpW3dqHTgrHrern7brH7br4Lbr4LdrX/frH3msX/rs4DwuIXyvYnzv4/ywpT4yZ390ar81bT81bT60q74zqb5zKP0yZ/yyKDxzqj4273+6ND/8eH+9Oj/+PD++/b++vf++vf/+vb9+vX7/Pf4+vX5+vX69e/56+D56+D89/P6+fX8+fL7+O/5+fH6+fT9+fb9+fb9/Pj9/Pj8+/f6+fX5+PT49/P49/P49/P49/P5+PT6+fX7+vb9+vX9+vX8+fT8+fT39vH39vH59vH59vH59PD48+/58uz58ur37uX27OD26tz46Nj559P65M3338f02b7v0LHuyqbtxpvrxJnqxKDtxqfsw6PovZrjuZHbr4LXpXTTnmrOlmO9kWS9qIvd1sbq5+Ds7Or29vT8/Pr09PTp6eno6Ojx8fHy8vLz8/P09PT09PTz8/Pz8/P09PT19fX19fX19fX39/f5+fn7+/v8/Pz9/f39/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////7+/v19fXn5+fo6Ojr6+vt7e3n5+fm5ubb29vW1tbr6+v39/f19PLv8Orj5t3czba+hVeoXSakXiunXy2wXiy4YyrIczDYi0fanmDXpG3dqXfgrX7eroDcrYHcsIPbr4LdrX/frXzjrnrqsXzvtoHyuofxu4zyv5L2x537z6j91rX+17j81LD60Kj8z6b5zqT0zaTwzqn12rz65s3+79z+9Oj/+e//+vT9+PL9+vX9+PT5+PT5+/b1+vb2+/f49/L57+b78ej8+Pf5+ff8+fL7+O/6+vD7+/P9+vX8+PX8+/n7+/n6+vj5+ff4+Pb39/X3+PP4+fT4+fT4+fT6+fX6+fX6+fX6+fX6+fX6+fX49/P49/P69vP69vP69fH69fH68+358ur47+b37eH369v46db559P65M323sby17zy0bLuyqbtxp3sxZzsxaTvyKvxxajrvp/mupPdsYTYqHfUoG7Nl2i+kWi9qIvf2Mbt6uPu7uz29vT6+vjx8fHg4ODc3Nzk5OTt7e3u7u7w8PDw8PDw8PDw8PDy8vLz8/P09PT09PT19fX29vb4+Pj4+Pj4+Pj4+Pj6+vr7+/v9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////+/v7+/v7////7+/vx8fHm5ubp6eno6Ojq6urr6+vj4+Pj4+Pa2trS0tLo6Oj39/f19/Ty8+3m6N3ezLS5g1SjXCSmYC2sZDK3ZzK/bTHNfDrZkEzYoGPYp2/cqnnfr3/fsITer4PesYffsITeroDhrn/irXvosH3ttoDxuYbvuojvvI31xJn5zqT707D81bT60q760Kj90qj906n606r21K/22bn44MT66tP/8+L/+e//+fH89/H9+vX8+PX5+vX5+/j2+/f3/Pj5+vT68+v+9e76+ff5+ff6+vL6+vD7+/H8/PT9+vX79/T6+ff5+ff5+ff4+Pb4+Pb4+Pb5+vX6+/b5+vX5+vX6+fX6+fX5+PT5+PT6+fX6+fX5+PT5+PT49/P79/T7+PP79vL59O768+v68ej67uL469v46db45tL44sv03MTw1bry0LTuyqjrxaDqxJ/rx6fvy6vwx6nrwJ7mupPesoPaqnnVoW/Ommu9kWq/p4vj2snw7ebw8O729vb4+Pju7u7d3d3Y2Nji4uLx8fHy8vL09PT19fX19fX29vb4+Pj5+fn6+vr6+vr5+fn4+Pj4+Pj29vb19fX09PTy8vL09PT4+Pj7+/v+/v7////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////+/v7////////+/v739/ft7e3o6Ojp6ens7Ozq6url5+bj5eTg4uHf4eDc3t3Mzs3k5Ob29/n0+vju8+3x6uLp0bm7i1qiYSesZjOyaTa7cTTEejnOh0nUlFfUoGTVp2zcrXnbq3vbrIDdroLgsYfgsYfgr4Tfr4HeqnvmsoLrtoTst4PuuojxvYv0wpH4yZv1zqX40q371a781a791q3+16761K3z0Kr11LH02rn54cX86tT+8uL99+v89/H5+PT5+vX6+/b5+/b5+/b5+/b6+/X8+fL69/D7+vX6+/X7+/P5+vL5+vL4+fH5+vT6+/X7+vb6+fX5+PT5+PT6+fX6+fX5+PT49/P6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX3+PL3+PL29/H39vH39vH49fD48+348en47+b57OP56dz35tb35dH44sv13cXy1r7uzrXuy6/rx6fsyKbvzKzwzqvsyKTow5nluo3fsX/frXjVoW/NnW+5kmvCqI3p2crz7urw8PD5+fv39/fr7ezd397X2djl5+bx8/Lz9fT19/b2+Pf39/f4+Pj39/f39/f3+fj2+Pf2+Pf2+Pf3+fj2+Pf19/bz9fTz9fTx8/Lv8fDw8vH19/b6/Pv9//7+///+/vz///3////+/v7+/v7////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f3////////9/f3z8/Pq6uro6Ojp6enq6urn5+fl5eXh4+Lh4+Le4N/f4eDc3t3Nz87d3d/y8/X1/f3z+PT17OXr0ry8kF+fZCquaDW1bDe/eDbLiETUlFfYnWXWpGnXqW7drXzeroDer4Per4PfsIbfsIbfroXdrIHfrH/jsIHns4Prt4Xuu4buu4bxv4r2yJb70qb71a771a761K361K381q/917L617H31bD22LT33L755Mn97Nj/8+X/9+7++fP7+vX6+/X6+fT5+PP49/L6+fT7+/P6+vL9+vX7+vX7+vX5+vT6+fT5+vT5+vX6+/b7+vb6+fX6+fX6+fX6+fX6+fX5+PT5+PT6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX4+fP4+fP4+fP3+PL49/L59vH48+358uz78uv87+b87N/56Nj35dH24cz03sf02sPz1b3w0Lfuza7uzazx0LHwz67ryaTlwpjiuYvitILeqnjSnmzNn268lm/HrZTq3M/18O3z8/X5+fv09Pbn6ejc3t3a3Nvn6ejz9fT09vX09vXy9PPy8vLy8vLx8fHw8PDx8/Ly9PPz9fT09vX2+Pf2+Pf09vXz9fTw8vHw8vHv8fDu8O/t7+7v8fD3+fj+//////3///3////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3+/v7////////9/f3////6+vrw8PDo6Ojm5ubp6enp6enm5ubh4+Lg4uHe4N/g4uHe4N/f4eDe4N/S0tLV09Tt7e31/f32+vn07+vt2MXEnnGiazOybzq6cTrCfTzMi0nUl17YoWnap27brHbcrHvfr4HgsYXfsITesYfgs4rhsojfroPir4LjsIHmsoLsuIbvvIfuu4bwvon2xpX6z6T606r61K340qv31K772LL/27f/3rn/37n63Lj32rj23b7548v969X/8eH/9Of/+O7++fP++fP89/H69/D7+PH9+vX9+vX++fb9+fb9+fb7+vb8+Pf6+ff6+ff7+vj7+vb7+vb8+/f7+vb7+vb6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX5+PP5+fH5+PP5+PP69/L49fD59PD68+388+z98Oj77eL559n249L24c714Mv03sf33Mfz17/x1LTx07H00rfyz7PqyKXiv5fdt4rfsILZo3TTnmzOn2u7mWzMuKDu5dz38/L39/n4+fvu7/Hi5OPa3Nvc3t3o6uno6unp6+ro6unm6Ofl5+bl5+bm5ubm5ubp6+rq7Ovt7+7w8vHz9fT19/b19/b19/by9PPx8/Lw8vHu8O/o6unk5uXr7ez19/b+/v7+/v7+/v7////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3////////9/f39/f3////////////29vbt7e3n5+fo6Ojr6+vp6enl5eXi4uLg4uHf4eDe4N/h4+Lg4uHh4+Lh4+LW1tbPzszm5uT1+/v1+fr08O3x4dLQroinc0Gzcjy8djvEgD/MjEzTmGDYo23cqnXdrnrdrX3gsYPhsobgsYffsonjto3ktIzfsIbgr4TksYTns4Trt4fwvIrxvonywIv1xZT0yJv3zaP50qn506z31K761rL+3Lf/37n/5MH/4r763bv23Lv33cL748v+6NH/7Nv/8+f/9u3/+e//+vL++vH++fP9+PL9+PT++fb9+fb9+fj9+fj9+fj8+Pf9+fj9+fj7+vb8+/f9/Pj9/Pj8+/f7+vb6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fT49/L5+fH5+PP5+PP59vH49fD48+/68u/78u368Of67OP46Nv35df35NP25ND34s/34M713cXy2Lf01rT107jyzrToxqPgvZXdtovYqX3XnnHaonHKm2W6mWzUxbD18uv29fP5+fv29/no6evb3dzX2dja3Nvj5eTf4eDg4uHf4eDe4N/d397e4N/f39/f39/d397f4eDi5OPm6Ofq7Ovt7+7v8fDw8vHx8/Lv8fDu8O/t7+7q7Ovm6Ofk5uXm6Of29vb7+/v////////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////////////////8/Pz29vbq6urp6enq6urr6+vo6Ojj4+Ph4eHj4+Ph4+Lg4uHg4uHj5eTh4+Li5OPj5eTa2tjLysbf3tzz9/j2+vv19fP27ODcv6Gmek2qbTa8eDnJhUTOkVDVnGTbqHPerHnaqnrfsILhsobhsojesYffsonjto3js4vdroTerYLksYTmsoPns4PsuIbxvYvzwY7ywpH0xJT2yp370Kb606r61K/41rH62bb73bn/5ML/5ML/5ML94sT74sT64sj95c3859T77t788ub/9+z/+u7++u/++vH9+vP8+fT9+vX7+vX7+vb7+vX9+vX9+vX9+vX9+vX7+vb8+/f9/Pj9/Pj8+/f7+vb7+vb7+vb6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fT7+PP7+PH7+PP69/L59fL49PH48+/78/D88+767+n57OT46t/36dz56dr459f25dP04dDz38fz2rv017X307nzzrToxKThu5bgto7VpnrXnnHZoXDAkl69oHbf2MX4+vX09vX4+fvx8vTi4+XX2djT1dTU2NfZ3dzX29rX29rZ29rX2djV19bV19bU1tXT1dTR09LS1NPU1tXX2djb3dze4N/i5OPk5uXm6Ofo6unp6+rq7Ovs7u3s7u3o6uni5OPo6Oj09PT////////////////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////8/Pzy8vLo6Ojp6enr6+vr6+vm5ubi4uLi4uLi4uLg4ODh4+Lg4uHg4uHj5eTh4+Li5OPk5uXc3tvLysbU1NLt7vD3+/z5+/r79Orlz7ith2Kmbze5eDjFhEDMj07UnGHcqXTfrXzbq33er4PgsYXesYfdsIffsovitY7js4vfr4fdrIPisYbksYTksIHqtobwvIrywI/ywI/zwZD1xZX5yp76z6X606z61rL72rf83rz/4sD/5sb/7Mv/7c//68/+6ND959D66NT57Nz57+P88ub89ur79+z8+fD9+vP7+vX6+/X6+/X7/Pb7/Pb8/PT7+/H7+/H8/PT7+vX8+/f8+/f8+/f8+/f7+vb7+vb6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX7+PP7+PH7+PP69/L59fL49PH59PD59PD68u/58Ov37Ob36uL369/46t3359jz49Tz49Py4Mr13L7217j207fxzK/nw6PhuZXes4nWpnjYnm7OmWe2jFzKso7s6dj0+vbz9/b3+Prr7O7d3uDV19bS1NPS1tXT19bP09LQ1NPS1NPQ0tHO0M/Nz87Mzs3LzczMzs3Nz87Nz87O0M/Q0tHT1dTW2NfY2tnZ29rf4eDj5eTk5uXn6ejr7ezq7Ovl5+be3t7p6en39/f+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////+/v79/f34+Pjy8vLq7Ovl5+br6+vp6enl5eXh4eHg4uHj5eTi5OPe4N/i5OPh4+Lh4+Lk5uXi5OPj5eTm6Off4eDQ0s/Jy8jg4OL29vj6/Pv9+vPz49TCpYeoeUOzeDa7ejbFhkHQllfXo2rbqXjcrH7crYHer4PdsIbesYjesovgtI3itY7ktIzfroXisYbjsIPjsIHntIXsuonuu4zxv47yvozzwY71xZX3y575z6f61K/62LX827r63Lr84sH/6cv/7ND/7tb/7df+7dv97d387uP68Ob88uj68+n69u38+fL6+/X5+/b3/Pb3/Pb6/fb6/fT7/fL7/fD7/fD8/PL8+/b8+/f7+vb7+vb7+vb7+vb6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX8+fT7+PP69vP69vP59fL49PH49PH48+/38u748ev27eb16+L26eD26N305tvx49bw49Py4Mz128L01bjz0LDtyaflv5vgtpDbqn/Xo3PUm2bGlGO7mHDgzLH09Ojx+vX0+Pf09ffj5ObX2NrQ1NPP09LR1dTP09LM0M/N0dDN0dDM0M/Mzs3Mzs3LzczKzMvKzMvLzczLzczLzczLzczNz87P0dDR09LS1NPX2djb3dzc3t3f4eDi5OPl5+bl5+be4N/g4uHr6+v5+fn////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v+/v7////6+vrv7+/n5+fn6ejt7+7n5+fk5OTj4+Pk5OTi5OPg4uHh4+Lk5uXj5eTi5OPi5OPl5+bj5eTk5uXo6unf4+LV2djBxcTU1NTw7u/5+ff9/Pf99O3Xw6upgVCtdze0dTDDgj7Ok1HUnmLXo3HbqHvfroPgsYXgs4rgs4resovdsYrgs4zjto/fr4fhsIfgr4Tir4Lms4botYbruInvvYzzwIv0wYz2xJP4yZv5zKP5z6f30az20q7007D117X43b/748f96dH/7tr/8uL/9ub/8uf/8+r+9Or+9ez8+O/8+fT5+vX3+fT2+/f3/Pb4/ff4/fb6/fT6/fL7/fL7/fL8+/b7+vb6+fX6+fX7+vb7+vb6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX6+fX7+PP69/L59fL59fL49PH49PH38/D28+728e348ev37uf27OP26eD16d3159zz5djx4dHx38v32cH007TwzKjqxJ3iu5TfsonapnbXn2zOmWPClmfHqozv4tH5+vL1+/fz9/jw8fPc3d/Q0dPN0dDM0M/P09LM0M/Kzs3Kzs3JzczHy8rHycjGyMfFx8bExsXGyMfHycjHycjIysnIysnJy8rKzMvMzs3P0dDP0dDS1NPW2Nfa3Nvd397g4uHj5eTk5uXd397j4+P19fX////////9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////////+/v7+/v79/f3////5+/rr7ezl5+br7ezr7ezl5+bl5eXj4+Pi5OPi5OPi5OPh4+Li5OPj5eTk5uXk5uXk5uXk5uXk5uXl5+bm6Ofl6ejR2dvK0NDHxcbk4N329/L6+/b/+/ju4dG2l2uqfEC1eDfAfzvIi0jUmlvTnmrZpnnbqn/gsYXgs4rcr4barofetIzhtY7gs4zhtIvis4nisYbhsYPisoTltYfpuYvuu4zuuojxvon0wpH0xJT1xpr3yqD4zaP4zqb40aj41a/62bb73r7748f96dH+7dn/79//8OP/8+n/9Ov/9ez/+PD9+PT6+fX7+/n5+/r6/Pv7/fz7/fr7/Pf8/ff8+/b8+/b8+/f8+/f7+vb7+vb7+vb6+fX6+fX6+fX7+vb7+vb6+fX5+PT5+PT6+fX6+fX7+vb5+PT49/P29fH29fH49PH59fL49fD39O/38u748ev47+j47uX46+L16d3y5Nny4tPx4M7v2cTxz7bzz6/qx5/ivZHiuI7Zqnzao23Um2PIlmG+mW/fzbn+9+/y8+76//vz9Pbh4uTa3t/U2NnKzs3O0tHQ1NPGysnIzMvGysnEyMfCxsW/w8K7v767vby8vr2+wL+8vr29v76/wcDBw8LExsXGyMfHycjLzczNz87Q0tHS1NPU1tXX2dja3Nvd397i4+Xf4OLd3uDo6ev5+vz+///9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v739/ft7+7p6+rp6+ro6unm6Ofk5uXk5OTj4+Pi5OPi5OPi5OPi5OPj5eTk5uXk5uXl5+bl5+bk5uXk5uXl5+bm6Ofl6erY4uPHz9HIx8XRzcrq6eT9/vn39/n/+O7cxaOpgU24gka1eDfIi0jWnFzTnmjZpnfaqnzcrYHdsIbcsYfcsInds4vgtI3jt5Dgs4rfsongsYfhsIXhsIXktIbntovpuYvvvYzxv4zywI/0wZL1xZX5yZv6yZ75yp75zaD6z6T51Kr41rD32Ln33sD748v859L+7Nj/8d//8uT/9ej/+e//+fD9+PL9+vX7+vj7+/n8/Pr7+/n8+/n8+/n++vf++vf8+/f8+/f8+/f7+vb7+vb6+fX6+fX6+fX7+vb7+vb6+fX5+PT5+PT5+PT6+fX6+fX5+PT49/P49/P59fL49PH49fD59PD59O758ur58Of57+X57eH36dz15dbx4dLx3s/v2Mbx1b/wy67uxqPnwpbfuYrds4PXqHTQmWDTn2a7kWHKrYv26t7+/fv29vT09PTr7O7Y2dvY3N3Y3N3M0M/JzczIzMvIzMvFycjBxcS+wsG7v767v766vr26vLu5u7q1t7a4urm1t7a0trW5u7q5u7q7vbzExsXGyMfIysnLzczO0M/R09LU1tXX2dja3Nvf4OLf4OLd3uDj5Obz9Pb9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3////////////+/v7+/v7+/v79/f33+fjs7u3m6Ofo6unq7Ovm6Ofi5OPj5eTj5eTi5OPi5OPj5eTk5uXj5eTk5uXl5+bl5+bl5+bl5+bk5uXk5uXl5+bn6ejm6uvb5ebJ0dPKycfGwr/X1tHz9O/09fn//vn+7tXEp32xgVDAh0/Hi0zNk1TWomnXpXTZqXnYqX3arYPes4nesovbsYnds4vjuZHhtozhtIvjtIrjtIrjtIrktYnltozmt4vru4vtvY3wwJDywpL2w5T5xpf8yJn8yJn/zZz/z57/0aP80ab40aj21K/52Lf53sD75MX96sz/7NP/8Nf/9eD/9+b/9+j/+O3/+PD++fP/+vb++fb++fb/+vf/+Pn/+vf++vf8+/b8+/b7+vX7+vX7+vX6+fT6+fT7+vX6+fT5+PP5+PP49/L5+PP5+PP5+PP7+PP8+fT8+fT79vL48+/38uz58ur78un78ef88OT77eD66tv459f04dDy3cry2cXy1sD107jvx6TswJnov5PgtobYrXrSo2vUomfDlGC/nXfs2MD++vH29/n7+fzt6+7g4OLV1tjd3uDW19nHy8rHy8rDx8bDx8a9wcDCxsXKzs3Q1NPZ29re4N/e4N/c3t3a3NvO0M/ExsW5u7qwsrG1t7a7vby3ubi/wcDCxMPFx8bJy8rMzs3Q0tHU1tXX2dja293g4ePf4OLf4OLr7O76+/3+///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/f3+/v78/Pz4+Pjq7Ovp6+rp6+rp6+rn6ejl5+bj5eTi5OPi5OPi5OPi5OPk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bn6ejm6und5efQ1tbKysjHw8DFxL/c3dj0+Pv29vT/+Ofy3cC6lG26ilrFkVfJk1XWomnToWzcqnnaqnzdroLfsojes4nasIjcsoriuJDjuI7kuY/luI/nuI7mt43ltozltozltozmt4nsvY/xwpT0xZf2xpj4yJr7yJv9yZr/zJz/zp3+zp38zZ/4zaL1zqX30ar317H13bn24r/45cT458n87NL+79j/8t//9eX/9en/9+7/+PH/+fP/+PX/+fb/+ff/+ff++/b8+/b8+/b7+vX7+vX6+fT6+fT6+fT6+fT5+PP5+PP49/L49/L49/L5+PP7+PP7+PP89/H89/H89e/58ur38Ob47uT77+P77eD769z55tX449D24Mv03MTw1r/x07nvzbHux6bswJnnu47is4XbrXvXqnPSpW7Mnmq7lmndxqf/+Oj5+PTv8/b08/jn5eja2tzX2Nrf4OLQ0dPBxcTHy8rEyMfGysnS1tXf4+Lr7+7x9fT19/b4+vn4+vn3+fj4+vnx8/Lt7+7f4eDDxcS0trW2uLe2uLe5u7q8vr3AwsHExsXIysnMzs3R09LU1tXY2dvf4OLg4ePd3uDm5+n3+Pr+///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f3+/v79/f329vbv7+/o6unq7Ovq7Ovn6ejk5uXj5eTj5eTi5OPi5OPh4+Li5OPk5uXk5uXk5uXk5uXl5+bm6Ofm6Ofl5+bl5+bl5+bl5+bm6Ofn6ejl6ejY3NvIysnFxcO8vbfGx8Lp6uz09PL8+O//+ungxq2phWG7j17PnmTOnWPSoWnbqXbcrHzfsILfs4bdsojcsojbtIvet47iuJDkuY/lupDmuZDmuZDkt47kt47jto3luYzpvY7uwpX0x535zKL8z6X9zqT6y5//z6H+zqD7zJ76y534zaL4zqT71Kv82rT13bn25MD45cT15cT36Mv46tD57dX98t799OP+9un/+O3/+O//+vL/+vT/+fb++fX++/b++/b9+vX9+vX9+vX8+fT8+fT8+fT7+PP7+PP7+PP7+PP7+PP7+PP7+PP7+PP89/H99u789e378un78ef57+P67N/66tv56Nb55NH33sj02sH01rzx0rXvzbHuy6vrxaHovpbrvJLjs4PZp3TaqHPYqXPMonC2k2nVvZv67tj/+/D5+ffz9Pjl5urh4OXV1tjX2Nre3+HQ0dPDx8bHy8rO0tHe4uHw9PP3+/r6/v33+/r09vX09vX19/b09vX19/b6/Pv4+vn5+/rx8/LMzs2vsbCwsrGztbS2uLe7vby/wcDExsXJy8rO0M/R09LV1tjb3ODe3+He3+Hk5efz9Pb+///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////+/v74+Pjw8PDo6Oju8O/q7Ovm6Ofk5uXj5eTi5OPh4+Li5OPi5OPi5OPi5OPk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bm6Ofn6ebr6+ng4N7Nz87ExsXAwr27vLfKysjn5+X8+/n/+/P/7+DQtp20j2XFmmfMnmPUo2nZp3Ldq3rfr3/dsYLdsofetIret47et47ht4/iuJDkuY/lupDmuZDmuZDmuZLmuZDmuo3luYrnvJHuxJr5z6n/17H/2LL+1K7+1Kz60Kb3zKL2zKL4zqT606r/27T/48D95sf97ND97dP87NL67NL669b469j679399OX+9un/+e3/+e//+/L++/T++/T9+vX9+vX9+vX9+vX9+vX8+fT8+fT7+PP7+PP8+fT7+PP7+PP7+PP7+PP7+PP7+PP89/H99u788+r68ej78ef88OT879/769v66NT34s323sbz2L3x0rXxzq7vy6ntx6PrxJ3rwJXluYzltInerHvYpGvZpWvOnGm5j2XKr5H36NP//O329/H39/fr7PDg4ebc4OPNztLc3d/g4ePOz9HEyMfS1tXk6Of0+Pf0+Pf1+fjz9/bx9fTz9fT19/b19/b09vX19/b19/bx8/L19/b+///v8fDGyMelp6ausK+xs7K2uLe7vby/wcDFx8bKzMvO0M/S09fW19vc3d/e3+Hj5Obx8vT9/v/+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f3+/v7+/v75+fnx8fHq7Ovo6unu8O/o6unj5eTj5eTj5eTi5OPi5OPj5eTk5uXj5eTj5eTk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bn5+Xs6eTk497T19bEysrCx8O6vLe4t7PNzcvq6+3z8/P/+fP/8eHQs5HFn3DInmTUo2jWpG/aqHfbq3varn/bsIXetIret47et47gto7ht4/kuJHluZLluZLmupPmupXou5Lmuo3luYriuY3lvpftyaX31LT/3Lz/377827r31rP106700q300q341rP/3rv/5sr/797/9Of/9Of/8uX/9Oj+8ub68Ob68uf99uz9+e79+vH8+fL6+vL6+/X6+/X6+/X7+vX9+vP8+fL8+fL8+fL7+PH7+PH7+PH7+PH7+PH69/D69/D59u/59u/59u/69e/68ej57+X37eP47OD469v359f14tH038rw2L7v1Lfwz7Dty6juyKPsxZ7qwJjpvJLnuYffr37ZqH3WonLVnl7NllbGkmDKpID15NL/+/L1+O/y9O/s6u3f3uPg4+jW297IzM/i4+Xc3d/IycvLzczi5OP0+Pf2+vny9vXx9fTz9fT19/b4+vn5+/r3+fj19/b3+fj19/b4+vnz9fTv8fD4+vng4uGpq6qrrayusK+ytLO3ubi7vbzBw8LHycjLzczOz9PT1Nja293c3d/h4uTx8vT+///+///+///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3+/v78/Pz09PTq6uro6unt7+7n6ejn6ejm6Ofj5eTi5OPj5eTk5uXk5uXl5+bk5uXk5uXl5+bk5uXk5uXk5uXl5+bk5uXl5+bl5+bl5+bl5+bl5+bl5+bm5uTq5+Ln5uLW2tnGzMy/xMC+wLu9vrm7u7nMzc/r7O779/b/+vD/7dTVuZS5l2nLo2/Vo3DXpG/Zp3barHvar4Lcs4fbtInctYrgtozht43juI7juI7jt5DkuJHluZTluZLpvZDpvY7mvZHiu5Tivprsyan517v/4sX/58n/5Mb84cP74ML438H438H+5Mn/7db/9Or/9/H/9vD/9e//+PL/+fT/9/L/+PL9+PL9+vP9+vP6+fT5+PP5+vT6+/X6+/X6+fT8+fT8+fL8+fL7+PH7+O/7+PH69/D69/D79vD69e/69e/59ez49Ov49On68uf569756dr359f25dP04s7y3sbu2MDu1Lnqza/qyajrxaHrxJ3twZrqv5Tnu47muIflsn3hrHjap3jVo3DNm166jFHLoXn/48v/+/X9/f3w9fHq7+vi4OHe3uDe4+bN1dfR1djg5OXT1NbGysvU1tXm6un0+Pfw9PPy9vXy9vX09vX2+Pf19/b09vX09vX19/b19/bz9fT3+fj3+fj2+Pf7/fzg4uGtr6yqrKutr66xs7K1t7a6vLu/wcDGyMfKy83Mzc/S09XZ2tza293f4OLy8/X+///+///+///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f3+/v7+/v7+/v77/fz+///8/v3y9PPs7u3s7u3r7ezp6+rl5+bk5uXj5eTi5OPi5OPj5eTk5uXl5+bk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bk5uXl5+bl5+bl5+bl5+bl5+bm6Ofn6ejo6Obn5+Xf4eDN0dDAxMO9wr67vbqysrC2uLXQ0M7q5+L+9+///u/469jOvqW1m3rOnm7Yn2jVom3To3LWqnvbsoTZs4TYsoXdtIjhtovluI7kt43it43itpHjuJXmupXovZLnvY3ovZLovpTlvpflv5vsyKj007T+38P/5Mn/6M796dH66NL669T+79r/8+L/9+7/+PL/+PT/+PP/+fP/+vb/+vb++fX9+vX9+vX8+fT9+PT++fX++fX9+PT79vL8+PX79/T69/L69/D69u369uv59ez49Ov38+r58ur68+v79Oz68+n38eP279/67dz65M/84sv64Mf33cLx2Lrqz7HnyqrpyKXsxqHswprrvpXrvJLqu4/ouYvhtYThr37mqXrjp3XfrHXFmmOtilTNsof+6tL/+PH/+P/z8vrp6evg4uHf393f4d7X3N/O09bU2dzS2NjQ1NXK0NDP09Tj5+jy9vXw9PPw9PPx9fT09vX2+Pf29vbz8/Pz8/P19fX29/nz9Pb3+fjz9fT09vP7/frc3tupq6aoqqeqrKmusK2ztbK3ubi9v77ExcfKy83Oz9HQ0tHW2Nfa3Nvh4+Ly9PP+///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v76/Pv8/v32+Pfs7u3p6+ru8O/s7u3l5+bl5+bk5uXj5eTi5OPi5OPj5eTj5eTk5uXk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bk5uXl5+bl5+bl5+bl5+bl5+bm6Ofn6ejn6ejn6ejh4+LT1dTDx8a+wsG8vr21t7avr625urXNzMfm49z8+O///vTz6+DfzbfEmnDQnWjVo3DYqHfWqHbTp3bYrH3ht4fes4bes4bgs4nhtovit43ito/itpHjt5DjuY/juo7mu5HovZPovJXnvZfnv5vqw6Lxzq7217r74cb/6dH/7dn/8N3/8uH/8+P/9uz/9u3/9u3/9/D/+PD++fP++fP9+vP++/b9+vP9+PT79vD99vD+9+//9u/99u769fH69fH69u369uv79en69Oj48ub48OX47+b37eT67eX87+b97+L57Nv36NX25Mz74MX52r321bbx0K/ty6jqx6HqxJ3rxJvpvpPrv5LtvY/ruInntYTjsX7eq3bZpG7doW3jqXfJmmazj1/Rt5T+7tX//fT49PPy8PXs6/Hj4+Xe4N/f4d7d4eDV2t3O09fR1tnN09PP1dXR19fQ1tbZ39/q7u31+fjx9fTw9PPx8/Lx8/L09PT29vb39/f39/f4+fv09ff19/b4+vn7/frv8e7Fx8Kho56mqKOpq6ausK2ztbK3ubi8vr3DxMbJyszLzczS1NPW2NfY2tni5OP09vX+///9//7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////////////+/v7+/v77/fz2+Pfu8O/p6+rq7Ovs7u3p6+rk5uXk5uXk5uXj5eTj5eTj5eTj5eTj5eTj5eTk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bm6Ofm6Ofn6ejn6ejk5uXZ29rIzMvAxMO+wL+6vLu2uLWys665uLPKx8Dh3dT79+z//vT/8d7t0K7Io3bBl2XTpXHUom/VoW/eqnrcqXris4Xfs4bftIrgtYvfs4zes4njtIbkuIvgtpDdtZHgtpDjt5Dmu5HovZPpvJLnvJLqwJjvyaT31bL73sD/5cz/7NX/8N//8+P/8+P88+T99OX/9+r/+Ov99+v89ur79+v9+e78+Oz89ev58+f58eb78+b89Of89On58+f48ub68uX58uL48eH37t317Nv16dn569756dz559v+6Nv/6dn959L438n02r/z1rjv0a/tyaXsxKDswJnsv5XtvpLuv5HtvpDlt4bfr37erHfeqXPco2vbnWLYnF7Kl1a2iVC6k2zlxa7/9O7/+/v48vL09fDl6OHj5t3c3tnb3drg4ePa3eLR1tzO09nQ1djN09PS2NjX3d3S2NjQ1tbb4eHp7+/x9fTz9/b19/bz9fTy9PPz9fTz8/Px8fH09ff4+fv5+/r2+Pfx8/DW2NWytK+nqaSmqKOqrKewsq+1t7S4urm8vr3Cw8XIycvKzMvS1NPV19bX2djl5+b4+vn+///9//7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////////9/f38/Pz9/f37/fzw8vHp6+rs7u3t7+7o6unk5uXl5+bk5uXk5uXk5uXk5uXj5eTj5eTj5eTj5eTk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bm6Ofm6Ofn6ejn6ejn6ejg4uHO0tHCxsW/wcC8vr26vLmztbKwsay1tK/DwLnd2dD28un//Oz//eb04L/StY2/mWzHl2bYoWvepXDdpnDbp3Xaqnrbr4Les4jgtYrhtYjjtYTjtIbhtZDdso/br4rcr4jhtIvpuo7svZHpvZDqv5Tswpjtx6Lvy6n00rb63MT/5M//6tb86tb669b77tv/9OH/9uT88d/479758N/79OL79OL68eD37t347Nz57tz67936793469v66tv66tr669j669j46dT35tL35dH75tP54tD53sv63sj83MP62Lz007LwzqvnxaDnxJzpwpnrwJbuvZLtuo3suIjqtoTir3rlsnvir3bapmzWnmPWml7TkVXFik6uhEjDo3Ly17z/+PD/9vv17vbt7e/j6OTd49nd49nY3dfa293d4OXW2eDM0dXO09bP1dXR19fU2trW3NzT2dnQ1tbS2NjU2tri5uXr7+709vX19/b19/b2+Pf4+Pj39/f09ff5+vz19/bk5uXR09C5u7imqKOpq6aoqqWsrqmxs7C2uLW5u7q8vr3DxMbIycvLzczS1NPT1dTZ29rr7ez7/fz+///+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////+/v79/f38/Pz8/Pz09vXs7u3q7Ovu8O/t7+7l5+bi5OPm6Ofl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bm6Ofm6Ofn5+Xn5+Xp6+rl5+bW2NfHyci+wsG7v763uba2uLWxsq2vrqmzsq2/vLXU0crq6uD5/PP+/O/+79rhxqjFmm3FkVjXm13cn2DjqG7gqXHcqHbZqXjbr37itofjt4ris4nmtY3jsorfroXdrIPgr4bltorouY3muY/rwJXqwJjowZrnwZ3rxKXwy67307n42L/02sHy3cL348r/69L/7dX76dH359D359D869f97Nj869f66tP56dL66tP66NL859L94s/+4c/94cz84Mr74cr64Mn538b63sb228D217v00bPxzavxyqPwxpztwpXpv4/lu4vmvIzovI3qu43ruInotITnr3zlrHXlqnDgpGbcoGLYnF7OklTAhEi+f0m6hlTXt4786cv//O3/9PDx7PDt7vPj6enX4N3X4Nvc4uDZ3OHZ3OXa3ebR1NnK0M7Q1tLO1NLS2NjT2dnT2dnU2trU2trR19fP1dXS1tfb3+Dj5+jm6uvq6+3u7/Hv8PLu7/Hp6uzi4+XZ29rKzMu7vbqxs7Cpq6iqrKmsrquvsa6ztbK3uba5u7q9v77ExcfJyszO0M/R09LT1dTf4eDy9PP8/v39//7+///+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v5+fnq7Ovs7u3u8O/s7u3p6+rm6Ofl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bm6Ofm5uTm5uTp6+rn6ejb3dzNz87BxcS8wL+5u7i5u7i0tLKxsq2xsq2trKe0s67Gx8LU3drs8u7//PH/9uH73rzYsoXDlFzLl1vUnGHZoGjbpGzbpnDbqXbdrX3er4Per4XisYjhsIfhsIfhsIXjsofks4jltInltorouY/ou5LpvZbqvpnrwJ3twqDtxKTtxqXsyanrzK3x0rX32rz63b/33L/2277228D638T64MX84Mj64MX74MX74MX74MX73cP/3sX/28P82L751rr207X00bP00LDzz63vyaXvx6Ptw5vqv5XpvZDrvYzqu4fouYPpuoTruYTpt4TntH/lsHzkq3Tjpm3jo2bnpmbfnl7TllfIjVG5gky6iFfaroH62LP/+eP//fD18ejq6eXp7e7c5ObS3NvZ4+TW3uDY4OPa3ebZ3OXX2uHP09bL0c3Q19DP1dPS2NjT2dnT2dnV29vT2dnS2NjW3NzT19jV2drW2tvX29zb3N7e3+He3+Hb3N7Y2dvJyszFx8bBw8K4ureztbKwsq+wsq+xs7CytLG1t7S4ure6vLu+wL/ExcfKy83Q0tHR09LY2tnm6Of19/b6/Pv7/fz9//79/f39/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////9/f3+/v7+/v75+fnx8fHo6unt7+7v8fDq7Ovm6Ofn6ejm6Ofk5uXl5+bl5+bl5+bk5uXk5uXk5uXk5uXl5+bk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bm6Ofl5+bl5+bl5+bl5+bl5+bm6Ofm5uTm5uTo6unn6eje4N/T1dTHy8rAxMO4vLu1uraztbKytK+wsq2trqmtrqmxsq3CxMPNz8zl5uD5+e3//e3+8tzo0bLKqoHBl2TJl1zSml/coWnepHLbpXfZpnnXqHzYrYPXrYPcr4bhsojjsofksYbmsYXosobnsYXqtYntuo/su5LsvZPqvZTpvZbpvZbqvpnrv5ruwp/wxaLzyKX0yaf1yqjzyqr1zKz0zaz1zK70zaz3zq74z6/4z6/2za320rLz0LDyy6rwyKTuxJ7swZfrvpTsvY/svI7uu4zsuYrqt4jouIjpuYnouIjmtoXptoHpsnrlrnXhqW7hpWfeoWDdmVjXkk/QiUfMiEu+gUq3g1TIonvs0bP/89r//O348+/08/Hr7ejf5N7V3tnT3trT3uDV3uPV3ObW3eXZ3OPX2t/T19jO0tHM0s7N08/Q1tbU2trT2dnT2dnU2trS2NjR19fX3d3W3NzX3d3a3t/b3+Dc3d/b3N7a293Z2tzU1tXJy8rHycjCxMO4ureytLGwsq+0trO1t7S1t7S3uba6vLm9v77AwsHGyMfKzMvP0dDU1tXg4uHt7+709vX3+fj5+/r5+/r7+/v8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8/Pz+/v7+/v719fXp6ens7u3u8O/t7+7q7Ovm6Ofl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXl5+bk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bm6Ofm6Ofl5+bl5+bl5+bl5+bm6Ofm5uTl5ePn6ejn6ejg4uHY2tnM0M/Dx8a/w8K3u7q2uLWztbKtr6yusKuwsaypqaerq6mytLHDyMTU2dPl6uT9/fP//u787NPpzajVsITFl2bGlGPPm2zVoXLapnfcrHzYrH3Vqn3YrH/droLhroPgq3/irIDmsITnroPosobqtIjqtYnptonpuYvrvI7svY/su5DuupLrupHquZDquZHtvJTvvpbuvpjuvpjrvpfsvJbqvZbuvpjxwZvxwZvuwZrqwJjnwJfnvZPou5HouY3ouIjquIfqtoTst4Pst4PqtYPns4Hns4PntYTksoHgrnviq3Xip2/eombcn17cm1fXl1DPjEjCgUGydDu8hFPRpH3tzK3/7Nf//e36/PHv9fHp7fDh5Onb4d/Y4dzW4dvU4N7U3uDU3eTV3ObW2uPX297V2djR1tLO08/M0tDK0NDM0tLT2dnT2dnQ1tbU2trU2trS2NjT2dnV29va4ODi5ufj5+je3+HW19nT1NbU1dfO0M/KzMvFx8a8vr23uba2uLW1t7S7vbq4ure4ure5u7i8vru/wcDDxcTHycjKzMvO0M/W2Nfm6Ofx8/Ly9PP19/b4+vn2+Pf7+/v7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/f3+/v739/fu7u7t7e3w8vHt7+7q7Ovn6ejl5+bl5+bl5+bl5+bl5+bm6Ofl5+bk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bm5ubo6Ojl5+bl5+bl5+bc3t3P0dDKzMvAxMO4vLu0uLezuLSytLGvsa6usK2srquprqqqr6utsbC3ubjExcDX18/u7OD/++///fP/7+Dt18DXupzJpHrGmmvQnGraom/ZpG7cp3Heq3beqnjeqnvfqn7frIHfrIHgrIThroPjsIXlsYLlsYLmsoDotILptYPntYTqt4jsuYrtuovsuYzpuYvpuYvquY7ot4zouY3quY7qu4/quY7puI3puI3ouIrnt4bnt4botoXntYTpt4bquIfntYLksn/msoDlsX/lsn3lsn3irXncp3PbpnLdqHLbomvipWzcnFzWk0/QjEW8eTOvcTS2g07RqYXny7P/7+D//vb6/Pfu9PLk7ere6eXb4+Pb4OPW3t7U3NzV3d/V3+DV3OLU2+HS19vV2dzW29fZ3tjT2NLJzsrJzc7Lz9DR1dbR1dbR1dbR1dbQ1tbQ1tbR19fS2NjT2dnX3d3e4uPi5uff4OLV1tjOz9HMzc/IysnFx8bAwsG7vby3ubi1t7a3ubi5u7q9v765u7q6vLu/wcDDxcTExsXHycjMzs3Q0tHh4+Lw8vHy9PPv8fDw8vH09vX2+Pf6+vr8/Pz+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f38/Pz8/Pz5+fnw8PDr6+vs7Ozt7+7r7ezo6unm6Ofl5+bl5+bm6Ofm6Ofl5+bl5+bl5+bk5uXk5uXl5+bl5+bk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXl5+bl5+bl5+bl5+bl5+bl5eXm5ubk5uXl5+bm6Ofg4uHT1dTKzMvBxcS6vr22urm1ubiztbKxs7Cvsa6qr6uqsKyqr6urraysrKyxsKy7urXMy8bY19Pq6On49PP/+vP/9OT748fszKbZr4fImWvRnWvSn2rVom3bp3Xdqnvdqn3bq33cq4DgrYLeq37dqnveqnvgrHzkr33lsHzlsHzlsX/ls4LotITotoXqtofotYblsoPjsIHlsoPms4TotYbptofotYbntIXms4Tns4Pnsn7nsnznsn7msX/jr33ksH7ksn/mtIHir3rjsHnhrXTfqG/gpWvfpGjdoWXXnGDVnGTSmWHDiE61ej65gEjGk17ftIf52LX/8Nv/+e39/Pjx9/fk7vDc5+nX4+PU3t3X39/V3d3U3NzU3N7X3N/X3N/W29/V2t3W2tvW2tnR1tLR1tDO083IzcnJzc7IzM3Lz9DN0dLQ1NXR1dbQ1tbQ1tbP1dXO1NTP1dXQ1tbT19jV2drV1tjP0NLKy83JyszFx8bBw8K9v766vLu4urm4urm6vLu9v766vLvAwsHDxcTBw8LAwsHGyMfMzs3P0dDe4N/q7Ov09vX19/bx8/Lw8vHz9fT19/b4+Pj7+/v9/f39/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v8/Pz8/Pz09PTr6+vq6uru7u7r7ezp6+rn6ejl5+bk5uXl5+bm6Ofn6ejl5+bm6Ofl5+bk5uXk5uXl5+bl5+bk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXl5+bl5+bl5+bk5uXl5+bk5uXk5uXl5+bl5+bj5eTZ29rLzczExsW/wcC7vby4urmytrWxtbSvs7Krr66rraysrqutrqmtrKeqqaWsq6mysrC5ubfIyMbX2NPp6OP49Ov/+O7/9eX76dP02bzfu5fXrYPLoHbHmnDKm23Nn27WpnXhr3zhrXvir3rjr33grHrdqXncqXrfrH3ir4Dirn/irn/kroDjr4Dlr4PksIHksIHksIHlsYLmsoPotIXotIXotIXns4TnsYPnsYLpsX7osH3lsH7lr4Dirn7fq3vgrHrir3rcqG/hqW7jqWrgo2Lcm1fWk03MiEG/fjq0fD+7iVTFmm3Vsozt0rX/7Nf/+en//vP//fL59u3s7OTg49zb3drX3dvV3d/T293U3NzV29vV29vV29vX29zW2tvU2NnS1tfQ1NPR1dTR1dTV2tbQ1dHGy8fFycjFycrJzc7N0dLQ1NXQ1NXP09TO0tPM0NHJzc7N0dDKzs3JzczLz87Mzs3Jy8rHycjGyMfDxcTAwsG8vr27vby7vby8vr29v76+wL++wL+9v76+wL/CxMPGyMfKzMvQ0tHV19bt7+7y9PP3+fj2+Pfy9PPw8vHx8/Ly9PP29vb5+fn7+/v9/f39/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v77+/v8/Pz5+fnu7u7q6urt7e3v7+/r7ezp6+rn6ejl5+bk5uXl5+bl5+bm6Ofm6Ofm6Ofm6Ofl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXl5+bl5+bk5uXk5uXl5+bj5eTk5uXk5uXj5eTk5uXc3t3O0M/GyMfCxMO+wL+6vLuzt7aytrWwtLOtr66srKyurauvrqmvr6euramtrKiurqyxs7CvtLCyt7G7wLzMzsvf3tzv7Of+9+///e//+OH/69D32rzqzKrevJfRrobKo3jHnnDGmmnOoG7Xp3fcqXrcqXrbqHvbqHvcqXzeqnvirH3jrX7jrX7hq3zhq3zjrnzmsX/jrnzkr33kr33lsH7lsH7kr33mrn3mrnvnr3zhrHjgq3fkr33lr4DhrHrdqHbdqHTZpG7UnWTKlFjCjFC+hku/h0zIkFXOm2ThuIrtzaf+5cf/9+P//vP//fry8vLl5+bi5OHg4dvc3dXb3NTa29XY2tfW2tvW297W3NzV29nW2tnW2tnW2tnU2NfT1dTR09LQ1NPP09LO08/R1tLIzcm6v7u+wsHGysvAxMXFycrJzc7Jzc7Kzs/M0NHLz9DIzM3IzMvGysnFycjGysnIysnGyMfDxcTDxcTCxMO/wcC9v76+wL/AwsHAwsG/wcC+wL++wL+9v77AwsHCxMPDxcTIysnZ29rq7Ovz9fT09vX19/b19/by9PPw8vHv8fDv8fD09PT39/f6+vr8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v77+/v8/Pz8/Pz09PTp6enr6+vv7+/t7e3q7Ovp6+rn6ejl5+bl5+bl5+bm6Ofm6Ofn6ejn6ejn6ejm6Ofm6Ofm6Ofl5+bk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXl5+bk5uXl5+bk5uXh4+Lj5eTg4t/V19TJy8jDxcK/wb67vbq3uba1t7S0trOxsa+xsKyxraquqqetqqWqqaSrrKSsr6iss6yosa6nsbCqtLWxubm7v77Fx8TT0tDg29jx6OH57+X/9+v/+en/9uP769Lv28Dmz6/ewZ/YtpDPqYLLoHbNnnTSn3TUn3PTn2/UoWzXpG3ap27cqXDeq3Leq3LgrHLhrXPkrnLkrnLjrXHjrXHjrXHkrnLmrnPmr3birnTbqG/YpGvYpGvZomzTnGbPmGLMl2PHlWLHmWjNpHjVsorewJ7pzrP23cf869n/+ur//fD//vX39vHq6efj4eLi4uLh4eHa2tjZ2tXZ2tTZ2tTY2dTW19LW1tbY2tnX29rV29nV2djU2dXT19bS1tXP09TN0dLO0tHM0c3Iz8jM08zJzsi+w7+9vsC8vb/AwcPExsXHycjIysnIzMvKzs3Kzs3IzMvFycjFycjGyMfGyMfExsXCxMPBw8LBw8LBw8LAwsG/wcDBw8LCxMPBw8K/wcC9v769v77Bw8LBw8LAwsHHycjZ29rr7ez09vXy9PPy9PPy9PP09vX09vXx8/Lu8O/s7u3y8vL29vb5+fn7+/v8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v78/Pz+/v77+/vw8PDq6uru7u7w8PDs7Ozp6+ro6unn6ejn6ejn6ejn6ejn6ejn6ejn6ejo6uno6unn6ejn6ejn6ejm6Ofl5+bl5+bl5+bm6Ofm6Ofn6ejm6Ofm6Ofm6Ofm6Ofm6Ofl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXl5+bj5eTi5OPk5uXj5eLd39zNz8zFx8S/wb69v7y6vLm4ure2uLW0trOzsq6vrqqsq6mrqqasq6arrKSrrqWor6emrKqosLCpsbGmrq6orqywtLO5ury/v8HExsXP0c7b3Nfl5N/w7eT69uv/+ez/9ub/8t3+7NT748n4273z0LLsxaTiupfas4zTrIHOqHnMo3XLo3LNpXTOpnXNo3PLoW/Po3LOo3DNom/MoW7MoW7Oo3DSpHLSpnXNpXTLpXbPpnjUq3/ar4XftYvmvJTqxJ3517L83rz+5sr/7tj/9+f//fT//vv6+vrx9/fl7+7f5+fd4+Pd3uDa293W19nS09XW19nS1tXR1dTT19bW2NfX2dbZ2dfY2tnU2tjT2dfS2NbS1tXR1dTQ1NPO0tPN0dLJzczIzszGzMjO1NDZ3trW2tnLzcy4urm9v769v76/wcDDxcTFycjHy8rHy8rHy8rGysnGysnIysnGyMfDxcTCxMPDxcTExsXExsXDxcTCxMPCxMPBw8K+wL+9v768vr29v76+wL/DxcTP0dDi5OPx8/L19/by9PPx8/Ly9PPz9fT09vX19/b09vXv8fDr7ezw8PD09PT39/f6+vr7+/v9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v78/Pz+/v739/fu7u7t7e3x8fHw8PDs7Ozp6+ro6uno6uno6uno6uno6uno6uno6unn6ejo6unp6+ro6uno6uno6unn6ejm6Ofm6Ofn6ejn6ejo6uno6uno6unn6ejn6ejm6Ofm6Ofm6Ofl5+bl5+bl5+bl5+bk5uXj5Obl5ujk5uXj5eTl5+bl5+bj4+Hj4+HV1dPJycfCwsDBwb+8vru5u7i3uba0ubWvtLCssq6ssa2usK2usKuur6msraerrKaoqaSsraitr6qsrqurraqssa2vs7KwtLOzuLS3vLi7wLy/xMDIysfT1dLe3tzl5ODy7+r59O7/+fH/+/D/9+v/9Ob/8+P/8+L+7dv459Px38vr2cPr1sHq1r7p07zn0bnnz7fnz7fmzrTlzbPmzLPozrXq0Lfr07nw3MPw3sbz48z25dP66tv+8OP/+Oz//PD/++3//PD++u769+719O/v8Ovj5eTa3Nvb3dzZ29rV2djT19bT19bS2NjT2NvR2N7R2ODR2ODS2eHT2uLU3N/V3d/W3NrU2tjQ2NjQ2NjP19fQ1tbP1dPO1NLN08/M0s7L0c/Izs7EyczP1Nje4uXh5ebe4N3V1tHCwsC9vb25u7q7vby/wcDBw8LDxcTGyMfFx8bGyMfGyMXFx8TDxcLDxcLExMLFxcPExsXDxcTBw8K/wcC+wL+9v77AwcPDxMbFxsjOz9Hd397t7+7z9fTy9PPy9PP19/bx8/Lz9fTz9fTz9fT19/b2+Pfy9PPs7u3t7e3x8fH19fX4+Pj6+vr9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v79/f37+/v7+/vy8vLr6+vv7+/y8vLu7u7t7e3p6+rp6+rp6+rp6+rp6+rp6+ro6unn6ejn6ejo6unp6+ro6uno6unp6+ro6unn6ejm6Ofn6ejo6uno6uno6uno6uno6unn6ejn6ejm6Ofm6Ofm6Ofm6Ofm6Ofl5+bl5+bk5efl5ujj5eTj5eTn6ejl5+bh4d/j4+Hc3NrNzcvExMLDw8G+wL25u7i3uba1uraxt7WstbKrsa2rsKysrqmrraisraiuramwr6qtrKesq6aur6qusK2srquqr6uus6+us62vtLCxtrKzube1u7u3vb29wcTBxcjFycrKzs/U1tXb29ng4t/m6OPt7ujx8uz18u359PD89/H++fP/9/L/9/L/+PH/+fL/9+7/9+7/9u3/9uz/9uz/9+3/+e///PH/+PD9+PL8+fT5+PT4+Pj2+Pfu8vPp7e7n6+zj5+bf4+Lb4d/Y3tzT2dfS2NbV2djV1dXZ2dnY2tnT19bT19bS2NjP19rQ2d7N1d/R2ePT2+bS2uTS2d/T297S2trR2dnQ2NjQ2NrQ2NrP19fP1dXO1NLM0s7M0s7HzcvFy8vIzdHa3eLh5One3+Hh497n6OPk5OLX19fIysnBw8K9v765u7q5u7q8vr2+wL+/wcDBw8DBw8DBw8DBw8DAwL6/v72/wcC+wL+9v768vr29v77Bw8LIycvQ0dPf4OLr7O719/b2+Pfz9fTz9fTy9PPv8fDw8vHz9fTz9fTx8/Lz9fT2+Pfz9fTt7+7r6+vv7+/09PT39/f6+vr8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/v33+fjq7Ovt7+7y9PPv8fDu8O/q7Ovp6+rq7Ovq7Ovp6+ro6unp6+rp6+ro6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6unn6ejn6ejn6ejm6Ofm6Ofl5+bl5+bl5+bl5+bk5uXl5+bl5+bl5+bk5uXk5uXk5uXj5eTh4+Li5OPU1tXGyMfBw8K/wb68vru5u7i4ure0ubWxtrKtsq6usK2tr6ysrqusrqutrautrqmsraisrairraqrraqrraqsrqutr6qusaqws6yxs66wtbGvtbGvuLWzube2vLq2urm7vbrAwL7Bwb/Bw8DCx8PIysfMzsvS087V1tHX2dba2tjf29rh3dzg4N7i4uDk5OLl5OLn4+Ll5ODj5N7h5N3h5N3i497k4uPh3+Lb3ODa293b3N7a293V2drS1tfW1drX1drV1NnS1tfO19TN1tHM1dDO1NLR1dbT1NbR1dbS1tfS1tfQ1djR1tnQ2NvQ2NvR2dzS2d/R2dzS19vR1tnR1tnS2NjS2NjU2trT2dnP1dXM0tLL0dHM0M/Kzs3GysnIzMvS1tfe3+Hg4ePc3t3c3tvh4+Dj5eTk5uXj5eTe4N/X2djP0dDGyMe/wcC7vby6vLu4urm3ubi3ubi4urm6vLu8vr29v76/wcDExsXLzczV19bg4uHq7Ovv8fD19/b09vXy9PPy9PPy9PPy9PPx8/Lx8/Lx8/Lx8/Lx8/Ly9PP09vX09vXz9fTy9PPr6+vn5+fy8vL39/f39/f8/Pz8/Pz////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz7/fz09vXp6+rt7+7x8/Lu8O/t7+7q7Ovp6+rq7Ovq7Ovp6+ro6unp6+rp6+ro6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6unn6ejn6ejn6ejm6Ofl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXj5eTi5OPj5eTi5OPh4+Lj5eTa3NvNz87DxcTAwr+/wb68vru4ure3uba0trOxs7Cwsq+vsa6usK2tr6ytr6ysrqusrqurraqrraqrraqrraqsrqutr6qsr6iusaqvsaywsq2tsq6us6+wtbGyt7O0ubW4ure7u7m8vLq5vrq6v7u/wcDBw8LAwsG/w8LAxsTDx8bIxsnKyMvHy8zHzc3IzM3Jzc7Jzc7Jzc7IzszHzcnHzcvHzcvOz9POz9PKz9LL0NPN0dLN0dDK0M7Kzs/R0NXS0NXR0NXR0tTM1dLL1tLM1dLO1NLP1dXQ1NfR1djR1djR1djQ1NfQ1djR1tnQ1djR1tnR1tnR1tnQ1djQ1djQ1djR1tnR19fR19fQ1tbO1NTM0tLK0NDKzs/IzM3GysnN0dDX2djd397d397c3t3e4N/g4uHh4+Lk5uXm6Ofn6ejn6ejm6Ofj5eTg4uHY2tnY2tnW2NfV19bT1dTT1dTU1tXV19be4N/h4+Lm6Ofs7u3w8vHy9PPz9fTz9fTz9fTz9fTy9PPy9PPx8/Lx8/Lw8vHw8vHx8/Lx8/Lx8/Ly9PPz9fT09vX09vXz9fTs7Ozm5ubu7u709PT29vb7+/v7+/v+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz6+vr5+/rw8vHp6+ru8O/x8/Lu8O/s7u3q7Ovp6+rq7Ovq7Ovp6+rp6+rp6+rp6+ro6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6unn6ejn6ejm6Ofm6Ofl5+bl5+bl5+bl5+bl5+bk5uXj5eTj5eTj5eTh4+Lh4+Li5OPh4+Lg4uHg4uHe4N/T1dTGyMfAwr/Awr+9v7y3uba4ure1t7SztbKxs7Cxs7Cvsa6usK2usK2tr6ysrqurraqsrqusrqurraqsrqutr6yqr6mssauvsaywsK6wsLCwsLCxsbGytLOytLOytrW1t7a2uLe1ubi4urm7u728vL69wcK8wsK8wsK/w8THwsjGxMnCxsm/x8nCx8rDyMvCyszDy8vFy8vGysnGysvGysnHzMjIzcnH0MvI0czJ0MnJzsjGz8rFzsnKzs/MzdHNztLM0NPK0tLL09PN09PO1NTP1NfO09bP1NfP1NfP1NfO09bO09bP1NfO09bO09bP1NfP1NfP1NfP1NfP1NfQ1djQ1tbO1NTN09PN09PL0dHJz8/Hy8zGysvJzczS1tXb3dzb3dza3Nvd397f4eDf4eDe4N/h4+Lj5eTl5+bn6ejp6+rq7Ovq7Ovt7+7u8O/u8O/u8O/t7+7u8O/v8fDv8fDw8vHx8/Lz9fT09vX09vX09vXz9fTy9PPx8/Lx8/Ly9PPy9PPx8/Lw8vHv8fDv8fDw8vHw8vHw8vHx8/Ly9PPz9fT09vX09vXu7u7l5eXo6Ojw8PD19fX4+Pj6+vr9/f39/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v6+vr2+Pft7+7q7Ovw8vHx8/Lu8O/s7u3r7ezq7Ovq7Ovq7Ovp6+rp6+rp6+rp6+ro6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6unn6ejn6ejm6Ofl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXi5OPh4+Lh4+Lh4+Lh4+Lg4uHe4N/e4N/Y2tnMzs3DxcLAwr+9v7y5u7i4ure2uLWztbKytLGytLGwsq+vsa6vsa6usK2srqusrqusrqusrqusrqusrqusrqursKyssa2vsa6xsa+xr7Czr7CysLGysrKytLOwtLOytrWzt7a0uLe4urm7uby7uby6u724vLu4vr67v8DAvsHCwMO+wsO8xMS/xcXBxcbBx8fCyMjDycnEyMnHyMrHycjJy8bHzsbH0cnH0cnKz8nIzcfHzsfHzcnJz83Kzs/NztLLz9LJ0dPJ09TM0dTO0tXO09bO09bO09bO09bO09bN0tXN0tXO09bO09bO09bP1NfP1NfP1NfP1NfP1NfQ1djP1dXN09PL0dHM0tLK0NDHzc3Hy8zJzc7P09LW2tnc3t3b3dza3Nvd397f4eDe4N/i5OPi5OPi5OPj5eTk5uXl5+bl5+bm6Ofp6+rq7Ovs7u3t7+7u8O/v8fDw8vHx8/Lw8vHw8vHv8fDu8O/v8fDw8vHx8/Ly9PPw8vHx8/Lx8/Lx8/Lw8vHv8fDv8fDv8fDv8fDv8fDv8fDv8fDw8vHy9PP09vX19/bx8fHm5ubk5OTr6+vz8/P39/f5+fn9/f39/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v6+vrz9fTq7Ovr7ezx8/Lw8vHu8O/s7u3s7u3q7Ovr7ezq7Ovp6+rp6+rq7Ovp6+rp6+rp6+rp6+rp6+ro6uno6uno6uno6uno6uno6uno6uno6uno6uno6uno6unn6ejn6ejl5+bl5+bl5+bl5+bl5+bl5+bk5uXj5eTj5eTj5eTi5OPh4+Lg4uHh4+Lg4uHf4eDd397f4eDc3t3U1tXIysfAwr+8vru8vru5u7i2uLW0trOztbKytLGxs7Cvsa6vsa6vsa6tr6ysrqutr6ytr6ysrqusrqusrquqr6urr66usK+vr6+wrq+yrq+xr7Cxr7Czs7OytLOxtbaytre1tri3t7m3tru3t7m7ubq7u7m8vr27v76+vr6/v7++wsG/xcPAxMPDxcTFxcXGxsbEyMfEyMfHx8fIyMjGyMPFysTFzMXHzMbMy8fNzMrMzMrJzczKzs3Kzs3OztDNztLJ0dPI0tPM0dTM0dTN09PN09PN09PO1NTN09PM0tLN09PO1NTP1dXP1dXP1dXP1dXQ1tbQ1tbP1dXP1dXP1dXM0tLL0dHK0NDIzs7Fy8vJzc7N0dLV2djX29ra3Nvb3dzc3t3d397e4N/f4eDh4+Lh4+Li5OPk5uXl5+bm6Ofn6ejo6unn6ejo6unp6+rq7Ovr7ezr7ezr7ezs7u3t7+7u8O/v8fDx8/Lx8/Lx8/Lw8vHv8fDw8vHw8vHw8vHv8fDu8O/u8O/u8O/v8fDu8O/u8O/u8O/u8O/v8fDx8/Lz9fT09vXz8/Pp6enh4eHn5+fx8fH19fX4+Pj8/Pz8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f36+vr5+fnv8fDo6unu8O/x8/Lu8O/t7+7s7u3r7ezr7ezr7ezr7ezq7Ovq7Ovq7Ovq7Ovp6+rp6+rp6+rp6+rp6+rp6+ro6uno6uno6uno6uno6uno6uno6uno6uno6unn6ejn6ejl5+bl5+bl5+bl5+bl5+bk5uXj5eTj5eTi5OPi5OPh4+Lg4uHf4eDg4uHf4eDe4N/d397d397d397Z29rO0M3Bw8C7vbq8vru6vLm3uba1t7S0trO0trOytLGxs7Cwsq+wsq+usK2tr6yusK2usK2tr6ysrqusrqurraysrq2tr66tr66vr6+wrq+wsLCwsLCxsbGxsbGvs7SwtLW0tLa2tri2t7m2t7m6tre8uLe6vLm6vLm6vLm7vbq9v7y/wb6/wb7Bwb/FwcDEw8HAxMPAxMPCxMPExMTIysnHycbHycbIysfMysvNy8zMzc/Jz8/Fzc3Gz8zLzM7Mzc/I0NPJ0dTM0NPN0dLN09PM0tLM0tLN09PN09PM0tLM0tLN09PP1dXP1dXP1dXP1dXP1dXP1dXP1dXO1NTN09PL0dHK0NDHzc3Fy8vGzMzM0NHS1tfY3NvW2tnZ29rc3t3d397d397d397f4eDe4N/e4N/g4uHi5OPk5uXl5+bm6Ofn6ejp6+rq7Ovr7ezs7u3t7+7t7+7t7+7t7+7s7u3s7u3u8O/v8fDw8vHv8fDv8fDu8O/w8vHv8fDv8fDu8O/u8O/t7+7u8O/v8fDt7+7t7+7t7+7t7+7t7+7v8fDx8/Lz9fT19fXt7e3h4eHk5OTu7u7y8vL39/f6+vr7+/v8/Pz+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz5+fn39/fs7u3o6unx8/Ly9PPs7u3u8O/t7+7r7ezr7ezs7u3s7u3r7ezq7Ovr7ezr7ezq7Ovq7Ovq7Ovq7Ovp6+rp6+rp6+rp6+ro6uno6uno6uno6uno6uno6uno6unn6ejn6ejm6Ofl5+bl5+bl5+bl5+bk5uXj5eTi5OPh4+Lh4+Lh4+Lf4eDf4eDf4eDe4N/c3t3c3t3b3dzb3dza3NvT1dLHyca+wL27vbq7vbq4ure2uLW1t7S0trOztbKxs7Cxs7Cxs7Cvsa6usK2usK2vsa6usK2tr6ysrquvra6urq6rsKyrsKyssa2tsq6wsq+wsq+wrq+xr7CwsrGysrK2srO2tLW0uLe1ubi6uLm9ubq7u7m7vbq8vru9v7zAwL7Cwb/Cwb/DwsDEwsPExMTBxcTAxsTCxsfExcfGx8vGx8vGx8nGx8nHyMzGyc7DytDBzM6/z87Az8zIzM3LzM7JztLLz9LOztDPz9HM0NHL0dHM0tLM0tLM0tLL0dHM0tLN09PP1dXO1NTN09PO1NTM1NTM1NTM1NTL09PK0NDK0NDIzs7Fy8vFy8vJz8/R1dbV2drY3NvX29rZ29rc3t3d397d397e4N/f4eDh4+Lg4uHh4+Lj5eTk5uXk5uXk5uXm6Ofm6Ofn6ejo6unp6+rq7Ovr7ezs7u3t7+7t7+7t7+7t7+7t7+7u8O/v8fDw8vHw8vHv8fDu8O/u8O/t7+7t7+7t7+7t7+7t7+7t7+7t7+7t7+7s7u3s7u3t7+7v8fDx8/L09PTv7+/h4eHg4ODq6urv7+/29vb4+Pj7+/v8/Pz9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v4+Pj29vbq7Ovo6un09vXz9fTr7ezu8O/u8O/r7ezr7ezs7u3s7u3r7ezr7ezr7ezr7ezq7Ovq7Ovq7Ovq7Ovq7Ovp6+rp6+rp6+rp6+ro6uno6uno6uno6uno6uno6unn6ejn6ejm6Ofl5+bl5+bl5+bk5uXk5uXi5OPh4+Lh4+Lh4+Lh4+Lf4eDf4eDf4eDe4N/c3t3c3t3a3Nvb3dzc3t3Y2tfO0M3DxcK8vru7vbq4ure2uLW1t7S0trOztbKytLGytLGxs7Cvsa6usK2vsa6vsa6usK2tr6ytrauvra6urqyrsKyqsKyrsa2ssq6us6+wsq+ysLGzsbKxs7KysrC2sa62sa6xtq+xuLG3t7e2tra0uLe0ura4vLu8vru/vb6/vry/vb6/v7/AwMC+wsG6xcG6xcG+xMS+xMTBxsnCyMjGx8nHyMrFyczCyc/Cy9DAztG+zsvAz8rJy8rLy83JzdDKztHNzc3Ozs7M0NHK0NDL0dHM0tLM0tLL0dHM0tLN09PO1NTN09PN09PN09PM1NTM1NTL09PK0tLJz8/Jz8/Hzc3EysrFy8vN09PV2drX29zW2tnX29rb3dzb3dzc3t3d397e4N/f4eDg4uHf4eDg4uHj5eTk5uXk5uXl5+bn6ejp6+rp6+rq7Ovq7Ovq7Ovr7ezs7u3t7+7s7u3t7+7u8O/u8O/v8fDu8O/t7+7s7u3t7+7t7+7t7+7t7+7u8O/t7+7s7u3r7ezs7u3t7+7s7u3s7u3r7ezs7u3u8O/w8vH09PTx8fHh4eHe3t7n5+fu7u719fX29vb7+/v8/Pz9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////+/v77+/v7+/v4+Pjy8vLn6ejt7+709vXy9PPt7+7t7+7u8O/r7ezs7u3s7u3r7ezr7ezr7ezr7ezr7ezr7ezq7Ovq7Ovp6+rp6+rp6+rp6+rp6+rp6+ro6uno6uno6uno6uno6uno6unn6ejn6ejm6Ofl5+bl5+bk5uXk5uXj5eTi5OPh4+Lh4+Lg4uHg4uHf4eDe4N/d397c3t3c3t3a3Nva3NvZ29rY2tnY2tfU1tPKzMm/wb66vLm5u7i2uLW1t7S1t7S1t7SztbKytLGxs7Cwsq+vsa6wsq+wsq+vsa6usK2usK2wsK6usK2rsa2ps6ursquss6ytsqywsq2zs7Gxs7Cts6+ssau9s7HCubKztai1u6+3vLiutLSzvbywvLivt7e5vby8ur28vLy0urq6xMO5v7+3wcCxxsGwxcC5w8K7xMG3yMC5yb7DyMHHysPBysfBy8zDzNG+yMrEz8vHzcnMy8nMysvHzM/Gzs7Jz8vK0MzK0M7L0dHL0dHL0dHL0dHL0dHM0tLM0tLN09PN09PM0tLM0tLN09PO1NTN09PN09PK0NDGzMzDycnEysrL0dHU2trX29zV2drY3NvZ3dzb3dzb3dzc3t3d397e4N/f4eDg4uHg4uHi5OPj5eTj5eTk5uXl5+bl5+bn6ejo6unp6+rq7Ovq7Ovr7ezs7u3t7+7u8O/u8O/u8O/u8O/u8O/u8O/u8O/u8O/t7+7t7+7t7+7s7u3s7u3t7+7s7u3r7ezs7u3r7ezs7u3s7u3r7ezr7ezt7+7v8fD09PT09PTk5OTa2tri4uLr6+vx8fH29vb6+vr7+/v9/f39/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////+/v77+/v6+vr29vbv7+/n6eju8O/09vXy9PPt7+7t7+7u8O/r7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovp6+ro6uno6uno6uno6unn6ejn6ejm6Ofl5+bl5+bk5uXk5uXj5eTi5OPh4+Lg4uHh4+Lg4uHf4eDe4N/e4N/d397c3t3b3dza3Nva3NvZ29rX2djX2dbV19TNz8zExsO9v7y6vLm3uba2uLW2uLW1t7S0trOztbKytLGxs7Cwsq+wsq+wsq+vsa6vsa6wsq+wsK6wsK6tsqyss6ytsqyss6yss6yttK2us6+wtbGuta62sauylJKthYW/nJa7nZXBo6HFq6rEsa3HtbPDsa/JtLPVuLrTtrjZwcHLtrXQuLbSv7vNwrzHvLbZxMHTu7fRwLbUwLXburHRtK7IvbvBwcHCw8fJzc7IzcnJzMXNycbOysnIzM3Gzs7H0MvJz8vK0M7K0NDK0NDL0dHK0NDK0NDL0dHL0dHK0NDL0dHN09PN09PN09PM0tLL0dHJz8/Hzc3EysrDycnJz8/R19fV29vX29zX29zZ3dzZ3dzc3t3c3t3d397e4N/f4eDf4eDg4uHh4+Li5OPj5eTj5eTk5uXl5+bm6Ofm6Ofn6ejo6unp6+rq7Ovr7ezs7u3t7+7s7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3r7ezs7u3s7u3r7ezr7ezs7u3r7ezp6+rr7ezq7Ovq7Ovr7ezr7ezr7ezs7u3v8fDy8vL09PTm5uba2trf39/o6Ojv7+/09PT4+Pj6+vr8/Pz9/f3+/v7////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v79/f37+/v5+fn09PTs7Ozo6unv8fD09vXy9PPu8O/t7+7t7+7s7u3r7ezr7ezr7ezr7ezr7ezs7u3s7u3s7u3r7ezq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovp6+rp6+ro6uno6unn6ejn6ejm6Ofl5+bl5+bk5uXk5uXj5eTj5eTi5OPh4+Lg4uHg4uHf4eDe4N/d397d397c3t3b3dza3Nva3Nva3NvY2tnW2NfW2NXV19TQ0s/KzMnBw8C9v7y4ure2uLW1t7S2uLW1t7S0trO0trOytLGwsq+vsa6vsa6vsa6wsq+ysrC0sK+1r6+ysa2xsq2ws6yus6yrta2qta2stbCqr6mys63HrqqvaHB+HimWMTmiOz+nQ0WyUlOsV1SvYFy6b2rGeHTGcnDReXjQdHXWenvZgX/WgX7Qe3bPenXWe3bPcm3NbmrJZWPIXFyuUlO1goHNtbXQxMbJxcTKy8XJzMPNysXMy8nKy83JzdDMzsvMzsvKzs3Kzs/Lz9DLz9DK0NDK0NDL0dHM0tLIzs7K0NDN09PO1NTM0tLK0NDIzs7Hzc3EysrCyMjGzMzQ1tbX3d3X3d3Y3N3Z3d7a3t3a3t3d397d397e4N/f4eDg4uHg4uHh4+Lh4+Li5OPi5OPj5eTk5uXl5+bm6Ofl5+bm6Ofo6unp6+rq7Ovq7Ovr7ezs7u3r7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezs7u3s7u3s7u3s7u3s7u3r7ezp6+rp6+rp6+rp6+rp6+rp6+rq7Ovs7u3u8O/v7+/09PTp6enZ2dna2trk5OTs7Ozy8vL39/f5+fn7+/v9/f3+/v7////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v79/f37+/v4+Pjy8vLp6eno6unx8/L19/bx8/Lu8O/u8O/t7+7s7u3r7ezr7ezr7ezr7ezr7ezs7u3s7u3s7u3q7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovp6+rp6+ro6uno6unn6ejn6ejm6Ofl5+bl5+bl5+bk5uXk5uXj5eTi5OPh4+Lg4uHf4eDf4eDe4N/d397c3t3c3t3b3dza3NvZ29rZ29rY2tnW2NfV19TU1tPR09DNz8zFx8TAwr+6vLm2uLW1t7S1t7S0trOztbK0trOytLGwsq+wsq+wsq+vsa6wsq+ysrCysa+0sK+ysa2ys66zsq6ys66stq6rtrCtuLKuta61tq7CpaG1X2iAChiFBhGPCA+VCg+LCQuEFBB8Ew+BFRN3Dgt+GBR7Dw2PEhaRExaDEA2IFRCNEQ+UFBGUEAybFBCeEhGfDQ6lCg6RDhOya2nWt7TTxcXLx8bKy8PKzMHLysXMy8nKy8/LzNDOzcvNzcvLzczKzs/Lz9DLz9DL0dHL0dHM0tLN09PL0dHL0dHL0dHM0tLL0dHJz8/Hzc3Hzc3CyMjFy8vM0tLV29vY3t7X3d3Y3N3a3t/b397b397d397e4N/e4N/f4eDg4uHh4+Lh4+Lh4+Li5OPi5OPj5eTk5uXl5+bm6Ofm6Ofm6Ofo6uno6unp6+rq7Ovr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezs7u3r7ezr7ezr7ezr7ezq7Ovp6+rp6+ro6uno6uno6uno6unp6+rr7ezu8O/u7u7z8/Ps7Oza2trX19fj4+Pr6+vw8PD29vb5+fn7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/f39/f36+vr4+Pjx8fHo6Ojp6+rz9fT19/bx8/Lv8fDu8O/s7u3t7+7s7u3s7u3s7u3r7ezr7ezr7ezr7ezr7ezr7ezq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovp6+rp6+ro6uno6uno6unn6ejm6Ofl5+bl5+bk5uXk5uXj5eTj5eTi5OPg4uHf4eDf4eDe4N/d397d397c3t3b3dza3Nva3NvZ29rY2tnX2djW2NfU1tPS1NHP0c7Nz8zJy8jDxcK9v7y4ure2uLW1t7S0trOztbKztbKxs7Cwsq+wsq+wsq+wsq+wsq+us6+ts6+ts6+us62xs661sa61sbCzs7GwtLOttrOtt6+wuK29qaCyZmiDGR2WIiOjJSaoHSKfHCGbODKxVE2uPT99DxKNODWtVVOnMDaMDxWIGhmVJSOrLiyjGRmsGhutFxavFhHAIR3IGx2eEA+8d3DVvrbIw8DFysbJzMPJzMHLzMbLy8nLzNHLzNHOzM3OzcvMzs3Lz9DLz9DLz9DM0NHM0NHN0dLN0dLO0tPM0NHLz9DM0NHK0NDHzc3Fy8vEysrEysrL0dHT2dnX3d3X3d3X3d3Z3d7a3t/a3t3a3t3d397d397e4N/f4eDg4uHg4uHi5OPi5OPi5OPi5OPj5eTk5uXl5+bm6Ofm6Ofn6ejo6uno6uno6unp6+rp6+rq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovq7Ovp6+ro6uno6uno6uno6unn6ejo6uno6unn6ejo6unn6ejo6unq7Ovt7+7u7u7x8fHs7Oza2trV1dXi4uLp6enu7u709PT39/f7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f39/f38/Pz5+fn29vbw8PDn5+fq7Ov19/b2+Pfw8vHv8fDu8O/r7ezu8O/t7+7t7+7s7u3s7u3r7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezq7Ovp6+rp6+ro6uno6unn6ejm6Ofm6Ofk5uXk5uXj5eTi5OPi5OPh4+Lf4eDe4N/f4eDe4N/d397c3t3c3t3b3dza3NvZ29rY2tnX2djW2NfV19bT1dLQ0s/O0M3MzsvLzcrHycbAwr+7vbq4ure2uLW0trOztbKytLGxs7Cwsq+xs7Cwsq+wsq+vsa6tsq6qs66ptK6rtK+wsq22sLC2sLK0srOytLOwtLWssq6rs6jFs6mrX191CQmWJR+cJR+JCw6IFBflioXtmJO3UlaTMzfUjYv0qqnSbXN+FRq4Y175npn1fX6fEBS0GyC8Hh+/Ih3BHhnMGBujERK5eHLLvbTGyMe/x8fJy8bKy8XKy8bLy8vKytLLzNHMzMzMzMrNz87Lz9DLz9DLz9DKzs/Kzs/Kzs/Lz9DO0tPM0NHLz9DM0NHJz8/Fy8vDycnCyMjL0dHR19fX3d3X3d3W3NzX3d3Z3d7a3t/a3t3a3t3c3t3d397e4N/f4eDg4uHg4uHi5OPi5OPj5eTj5eTk5uXk5uXl5+bm6Ofm6Ofm6Ofn6ejn6ejn6ejo6uno6unp6+rp6+rp6+rp6+rp6+rp6+rp6+rp6+rp6+rq7Ovp6+ro6unm6Ofm6Ofn6ejn6ejm6Ofn6ejn6ejn6ejn6ejn6ejn6ejp6+rs7u3u7u7u7u7t7e3a2trU1NTf39/m5ubs7Ozy8vL29vb6+vr8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f39/f38/Pz4+Pj09PTu7u7m5ubr7ez2+Pf2+Pfw8vHw8vHu8O/r7ezu8O/t7+7t7+7s7u3s7u3r7ezr7ezr7ezr7ezs7u3r7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezq7Ovp6+rp6+ro6unn6ejm6Ofl5+bk5uXk5uXj5eTi5OPh4+Lg4uHf4eDe4N/e4N/d397c3t3b3dzb3dza3NvZ29rY2tnY2tnW2NfV19bU1tXS1NHP0c7Nz8zMzsvLzcrIysfDxcK9v7y5u7i2uLW0trO0trOytLGxs7Cwsq+wsq+wsq+wsq+vsa6us6+ts7Gqs66ssq6wsq+0sLG1sbKzs7Wys7WztLiztbStsKfIraSyXF2DDA6XHBWLFg2TNC6qUlC+ZGajTlGNRUjUlJXtrLDZl5uRRkuqamjiu6zrtqjSZmaZDBSiBhG8ICSmDgumCAW1AgicCxC/hIDGv7nCx8vDzNHIysnKycXKysjJyszIy9LIy9LIzcnIzcfKzs3Kzs/Kzs/Kzs/Jzc7Jzc7Jzc7Kzs/M0NHLz9DKzs/Lz9DIzM3FycrGysvJzc7T2dnU2trW3NzX3d3X3d3X3d3Z3d7a3t/a3t3a3t3c3t3d397e4N/e4N/f4eDg4uHh4+Li5OPj5eTj5eTj5eTk5uXl5+bl5+bl5+bl5+bm6Ofm6Ofm6Ofn6ejn6ejn6ejo6uno6uno6uno6uno6uno6uno6uno6unp6+rp6+ro6unm6Ofm6Ofn6ejm6Ofl5+bl5+bl5+bl5+bm6Ofm6Ofm6Ofo6unr7ezu7u7t7e3t7e3b29vS0tLc3Nzj4+Ps7Ozw8PD19fX6+vr8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/f39/f37+/v39/fz8/Pt7e3l5eXr7ez3+fj2+Pfw8vHw8vHu8O/r7ezu8O/t7+7t7+7s7u3s7u3s7u3r7ezr7ezr7ezr7ezr7ezr7ezr7ezq7Ovq7Ovq7Ovr7ezs7u3r7ezq7Ovp6+ro6unn6ejm6Ofl5+bl5+bk5uXj5eTi5OPi5OPh4+Lf4eDe4N/d397c3t3c3t3b3dza3NvZ29rZ29rY2tnY2tnW2NfU1tXT1dTR09DP0c7Nz8zMzsvKzMnIysfExsO/wb66vLm2uLW0trOztbKztbKxs7Cwsq+wsq+wsq+wsq+wsq+wsq+wsrGusrGssq6tsq6wsLCxsbGxsrSys7WwsbOwsK6wsKjIq6OxW1x7CAuCEwyYNy7NgnzgmpicSkxiFhjKlJTjsbLSkJRwLjKcZWrftrTavrKhdWp6JCXlcHnlW2iYDBWoLCriXlrhPEOYDBXBi4vMx8S7wMS/yM3HycjIyMbJycnJys7JydHIy9DHzcnHzsfJzczJzc7Kzs/Kzs/Kzs/Kzs/Kzs/Lz9DLz9DJzc7Jzc7Jzc7GysvFycrKzs/Q1tbY3t7U2trT2dnW3NzY3t7X3d3Y3N3a3t/a3t3a3t3c3t3d397e4N/f4eDf4eDg4uHg4uHh4+Li5OPi5OPj5eTj5eTj5eTk5uXj5eTk5uXl5+bl5+bm6Ofm6Ofm6Ofn6ejn6ejn6ejn6ejn6ejn6ejn6ejn6ejn6ejn6ejn6ejm6Ofl5+bl5+bl5+bl5+bj5eTk5uXk5uXl5+bm6Ofm6Ofm6Ofo6unq7Ovv7+/t7e3v7+/d3d3R0dHa2trh4eHs7Ozw8PD19fX6+vr8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v78/Pz6+vr39/fx8fHq6url5eXr7ez19/b09vXx8/Lv8fDt7+7u8O/t7+7s7u3t7+7t7+7s7u3s7u3s7u3s7u3s7u3r7ezr7ezr7ezr7ezr7ezr7ezs7u3s7u3s7u3r7ezq7Ovp6+ro6unn6ejm6Ofl5+bl5+bk5uXj5eTi5OPh4+Lg4uHe4N/d397d397c3t3b3dza3NvZ29rZ29rY2tnY2tnW2NfW2NfV19bT1dTS1NPP0dDNz87LzczJy8jFx8TBw8C+wL28vrm4urW1t7KztbCytK+ytK+ytK+xs66wsq+usK2usK+xsbGxr7Cxr7CusrGts7GrtLGrtLGts7Gvs7Kxsa+xsKyysqjEqaKsXWJxEhZ6MCfCgnjfpKC5fHtmIh++gX7gsrTIlJaFNzeeUlTdsLXatrqocnBzNzbTnKH3tL3LZnSOKDPel5H/trHjV2KTEB7Ik5nLwsPBwcPEysrEysbFysbIycvJyM3Kyc7Ky83HzcnIzsrKzs3Mzs3Mzs3Nz87Nz87Nz87Kzs3JzczJzc7IzM3Fy8vEysrFy8vJz8/Q1tbW3NzV29vT29vU3NzU3NzX3d3Y3t7Y3t7Z39/b397Z3dzb3dzd397e4N/e4N/f4d7f4d7g4t/g4t/h4+Di5OHj5eTj5eTh5eTi5uXi5ufh5ebk5uXl5+bl5+bl5+bl5+bm6Ofm6Ofm6Ofm6Ofm6Ofm6Ofm6Ofm6Ofm6Ofm6Ofm6Ofm6Ofl5+bl5+bl5+bl5+bl5+bl5+bm6Ofk5uXk5uXm6Ofm6Ofn6ejs7u3u8O/r7ezv8fDc3t3Nz87X2djh4+Lm6Ofv7+/09PT6+vr8/Pz8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz5+fn29vbw8PDo6Ojj4+Ps7u32+Pf19/by9PPw8vHu8O/v8fDt7+7u8O/u8O/u8O/t7+7t7+7t7+7t7+7s7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3r7ezq7Ovp6+rn6ejm6Ofm6Ofl5+bk5uXj5eTi5OPh4+Lg4uHe4N/e4N/d397c3t3b3dzb3dza3NvZ29rY2tnX2djW2NfW2NfV19bT1dTR09LP0dDMzs3KzMvHycbFx8TCxMG/wb67vbi3ubS0trG0trGztbCztbCwsq2usKuwsq+ytLGvsbCrq6uyrq+zr7CwsrGts7GrtLGrtLGusrGxs7CxsKy2tbCvsabFrqiqYWhkDxSwcWrZoJfHg4RzLzCma2Xao5zUmJiKRkeHOTfjnJrotLiufYGQTlLgoqXeuLekenyoX2jvnqX9vLbOe3eaEhyqLjnHlprMxMLCwMHBxcTGy8XGy8fIyc3KyM3LyczLy8nIzcnIzsrKzs3Mzs3Mzs3Mzs3Nz87Mzs3JzczIzMvHy8zGysvFy8vGzMzJz8/O1NTT2dnX3d3S2trS2trT29vT29vW3NzX3d3X3d3Y3t7a3t3Z3dzb3dzc3t3d397e4N/e4N3f4d7f4d7f4d7g4t/h4+Di5OPi5OPg5OPh5eTh5ebg5OXj5eTk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bm6Ofl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXl5+bj5eTj5eTl5+bl5+bm6Ofr7ezt7+7s7u3u8O/c3t3Mzs3W2Nfg4uHl5+bt7e3z8/P5+fn8/Pz8/Pz9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v5+fn19fXu7u7n5+fi4uLs7u32+Pf19/by9PPx8/Lv8fDv8fDt7+7u8O/v8fDv8fDu8O/t7+7t7+7t7+7s7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3r7ezq7Ovp6+ro6unn6ejm6Ofl5+bk5uXj5eTi5OPh4+Lg4uHf4eDe4N/c3t3c3t3c3t3b3dzb3dza3NvY2tnX2djW2NfW2NfU1tXT1dTQ0tHO0M/LzczKzMvGyMXFx8TDxcLAwr+7vbi2uLO0t7Cztq+xs66xs66ytK+0trGytLGtr6ytr66wsLCwr62xsK6vsa6us6+vsa6wsK6ysa+0sK+zr6ytrKersae+raWlY2dlEBe4bm3ShIKfPEFwFBnCh4PjqKKyU096GBe9eXjvs7LUiYRpGxnCgYXrt7m7l4uth3rqtbH6rq7MZmKRFBKiCxCyNzrPop/MycK/v73IysnJy8jJy8rKyc7LyM/OyMrOysnLzcjJzsjMzsvMzs3Mzs3Mzs3Mzs3LzczIzMvHy8rFycrFycrFy8vJz8/O1NTS2NjV29vV29vU2trU2trU2trV29vV29vW3NzY3NvY3NvZ3dzY3NvY3Nva3t3d397d397e4N/e4N/f4d7e4N3f4eDh4+Li5OPh4+Lf4+Tg5OXg5OXg5OXi4+Xk5efk5uXj5eTj5eTk5uXk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXl5+bj5eTi5OPk5uXk5uXm6Ofr7ezs7u3s7u3u8O/a3NvKzMvU1tXd397k5uXr6+vx8fH4+Pj7+/v8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v5+fn19fXv7+/n5+fi4uLs7u319/b19/by9PPx8/Lv8fDv8fDt7+7u8O/v8fDu8O/t7+7t7+7t7+7t7+7s7u3r7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezr7ezq7Ovp6+rn6ejm6Ofm6Ofl5+bk5uXj5eTi5OPh4+Lg4uHf4eDe4N/d397d397c3t3b3dzb3dza3NvY2tnX2djW2NfV19bU1tXS1NPQ0tHNz87LzczJy8rGyMXFx8TDxcK/wb67vbi3ubSztq+ws6yztbCxs66wsq2ztbCytLGvsa6tr66vsa6vr62vsa6us6+us6+xsK6zr660sK+0sK+0s6+ur6mutqu8r6ehZmpeDRR4KCuMMjSSISWSJSifVFGoWVSWHxuWHBmzXV7NfHunPjp9FhGpWVzFg4TNkoTjpZbQiYOdPz2LCwq9KyubBwe/TUzTrKTJxr3AwL7MzMzLy8nKzMvKy9DKyc/PycvPycnMzcjLzcjKzMnKzMvKzMvLzczLzczKzMvHy8rHy8rEyMnFycrGzMzK0NDP1dXT2dnU2trT2dnU2trU2trV29vV29vW3NzX3d3Y3NvZ3dzZ3dzY3NvY3Nva3t3d397d397d397e4N/f4eDf4d7f4eDh4+Li5OPh4+Lg5OXg5OXg5OXg5OXi4+Xk5efk5uXk5uXj5eTk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXk5uXl5+bj5eTi5OPk5uXk5uXm6Ofr7ezs7u3t7+7u8O/Y2tnJy8rS1NPb3dzi5OPq6urw8PD39/f7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v5+fn19fXu7u7n5+fi4uLr7ez19/b19/bz9fTy9PPv8fDw8vHt7+7t7+7u8O/u8O/t7+7t7+7t7+7t7+7s7u3s7u3s7u3s7u3s7u3s7u3r7ezr7ezr7ezr7ezr7ezr7ezq7Ovp6+ro6unn6ejm6Ofl5+bl5+bk5uXj5eTi5OPh4+Lg4uHf4eDe4N/d397c3t3b3dza3NvZ29rZ29rY2tnX2djW2NfU1tXS1NPQ0tHNz87LzczJy8rGyMXFx8TCxMG/wb68vrm4urWxtK2qraalqKGsr6iytK+xs66usK2tr6yusK2vsa6vsa6tsqyrta2ttK2wsayxsKywsK6xsa+sraiwta6msKW4r6ihb3JjGB9mFBpmCg12Cgh7CgZ9DQuEDgyTDgmcEQ6TCA2WCxKWDAq0MjCsPDutRUTAU06hLimMEBCTDhGbDA6iExWWEhCzVE7WtKvJxr3OysnGxMXKzMnIzMvFzc/IzM/Oyc3PycnMy8fLzMfJy8jJy8rIysnIysnGysnGysnFycjEyMfEyMnHy8zJzc7M0NHO1NTS2NjT2dnT2dnV2djV2djW2tnW2tnX29rY3NvY3NvZ3dzZ3d7Y3N3Z3d7a3t/b3+Db3+Db3+Dc4N/f4eDe4N/f4eDh4+Lf4+Lf4+Lf4+Tg5OXg5OXg5OXi4+Xj5Obk5uXj5eTj5eTk5uXk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bk5uXk5uXl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXj5eTi5OPk5uXk5uXm6Ofq7Ovr7ezu8O/u8O/W2NfHycjR09LZ29ri5OPq6urw8PD29vb6+vr9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f38/Pz6+vr4+Pj09PTu7u7m5ubh4eHq7Ov09vX2+Pf09vXy9PPw8vHx8/Lv8fDu8O/u8O/u8O/t7+7t7+7u8O/u8O/t7+7t7+7t7+7t7+7t7+7t7+7s7u3s7u3r7ezr7ezs7u3r7ezr7ezq7Ovp6+rn6ejm6Ofm6Ofl5+bk5uXj5eTj5eTi5OPg4uHf4eDf4eDe4N/c3t3b3dza3Nva3NvZ29rZ29rX2djW2NfU1tXS1NPQ0tHO0M/Mzs3KzMvHycbFx8TCxMG/wb69v7q5u7avsqulqKGVmJGXmpOipJ+wsq20trOusK2srquwsq+ssauss6yqtKyqtKywsayxsKywsK6wsK6xsq2ytK+stq24ta66mJehbW+rbXCgWFmgT0ubQjqVMzCWMCyOJSGOHRmZGx+GBQqcICKlMzOgOjiRLy52EA6EGBaRHx+jMDOpODqkPDujSEO9fnfZwrrJyMPJxcTLycrJy8jGzMrDzczEzM7LyczNycrKysjJy8jIysnHycjGyMfGyMfDx8bDx8bDx8bCxsXFycrIzM3Kzs/Lz9DM0tLR19fU2trV29vV2djV2djV2djW2tnW2tnX29rY3NvY3NvZ3d7Y3N3Z3d7a3t/b3+Db3+Db3+Dc4OHe4N/e4N/e4N/g4uHf4+Le4uHf4+Tf4+Tf4+Tf4+Th4uTi4+Xj5eTi5OPj5eTk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXj5eTi5OPj5eTi5OPh4+Lj5eTj5eTk5uXp6+rr7ezv8fDs7u3T1dTGyMfQ0tHY2tnh4+Lr6+vw8PD29vb6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f38/Pz6+vr4+Pjz8/Ps7Ozl5eXg4ODo6un09vX2+Pf09vXy9PPv8fDx8/Lw8vHu8O/v8fDv8fDu8O/u8O/u8O/u8O/t7+7t7+7t7+7u8O/u8O/t7+7t7+7s7u3s7u3r7ezr7ezs7u3r7ezq7Ovp6+rn6ejn6ejm6Ofl5+bl5+bk5uXj5eTi5OPh4+Lg4uHf4eDe4N/d397c3t3b3dza3NvZ29rY2tnX2djW2NfU1tXS1NPQ0tHO0M/Mzs3LzczIysfHycbDxcLAwr+/wby5u7ausaqipZ6Ym5SIi4SDhYCUlpGpq6ivsa6tr6ysrquusKussaursqussauyrquzrquwr62wr620rq6sq6evtq+ssaq7sqvFtK3Hs6zFqqPCo56/npm6nJS3lo+zjoivhH6tene5gYC2eny2foGqeHesgH2zi4m3koy+lZG+l5LCoZrHqqLOsanTwLnIxcDCxMHIyMjKyMnIysfGy8fDzMnDy8vIysnHycjBysfAy8fDycfDx8bCxsXCxsXCxsXCxsXDx8bDx8bGysnJzczKzs/Kzs/M0NHR1dbU2trU2trU2NfU2NfV2djV2djW2tnX29rX29rY3NvX3d3X3d3X3d3Z39/a4ODa4ODa3+La4ODb397b397c4OHd4eLe4uPe4uPe4uPf4+Tf4+Te4uPe4uPf4+Th4+Lh4+Li5OPj5eTk5uXk5uXk5uXj5eTj5eTj5eTj5eTj5eTj5eTj5eTk5uXk5uXk5uXj5eTj5eTj5eTh4+Lj5eTh4+Lh4+Lj5eTj5eTk5uXo6unr7ezv8fDq7OvQ0tHExsXP0dDX2Nrg4ePq6urv7+/09PT4+Pj7+/v+/v7////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v4+Pjz8/Ps7Ozk5OTf39/m6Ofz9fT19/b09vXx8/Lv8fDw8vHw8vHv8fDw8vHv8fDu8O/u8O/u8O/u8O/t7+7t7+7t7+7t7+7u8O/t7+7t7+7s7u3r7ezr7ezr7ezr7ezr7ezq7Ovo6unn6ejm6Ofm6Ofm6Ofl5+bk5uXj5eTj5eTh4+Lh4+Le4N/e4N/d397d397c3t3a3NvZ29rX2djX2djW2NfU1tXT1dTR09LP0dDNz87Mzs3Jy8jIysfFx8TCxMG/wby5u7atsKmhpJ2XmpOQk4yAgn1zdXB+gH2anJmusK2xs7Ctr6qtr6qssaussauvrqqvrqqtr6ytr6ywrKu0s7Gus6+qsaqusaiztaqvr6O2tqy6trO3trK5vLW4u7S9vLe7trLDuLLGt7LKtLfNt7rMvLzGu7nEv7u/vLfHwrzEwbrDxr/ExsHGx8LFxcPEyMfGysvGx8nIycvGyMfFysbEysjEysjIyMjGyMe/yci9ycfBx8XBxcTBxcTBxcTCxsXEyMfFycjFycjIzMvKzs3Kzs/Jzc7M0NHR1dbT2dnS2NjU2NfU2NfV2djV2djW2tnX29rX29rY3NvX3d3W3NzX3d3Z39/a4ODZ39/Z3uHa3+Lb3+Db397c4OHd4eLe4uPe4uPe4uPf4+Tg5OXe4uPe4uPf4+Th4+Lh4+Li5OPk5uXk5uXk5uXk5uXk5uXj5eTj5eTj5eTj5eTj5eTj5eTj5eTk5uXk5uXj5eTi5OPi5OPh4+Lj5eTi5OPi5OPk5uXj5eTk5uXo6unr7ezv8fDp6+rO0M/DxcTP0dDW19ng4ePp6enu7u7z8/P39/f7+/v9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8/Pz6+vr39/fx8fHr6+vl5eXd3d3m6Ofw8vH3+fj19/bx8/Lx8/Lx8/Lv8fDx8/Lx8/Lw8vHv8fDv8fDu8O/t7+7t7+7s7u3t7+7t7+7s7u3s7u3t7+7t7+7s7u3s7u3s7u3s7u3q7Ovq7Ovq7Ovp6+ro6unn6ejm6Ofl5+bk5uXj5eTi5OPh4+Lg4uHg4uHf4eDe4N/d397c3t3b3dza3Nva3NvY2tnX2djV19bT1dTS1NPQ0tHO0M/Mzs3LzczJy8rHycbBw8DBw768vrmrrqeipZ6anZaRlI2Gh4J4eXRpamVpamWDg4GhoZ+trauusK2ssa2rsKytr6yrsa2ks66jsq2rsa+tr66usK+vsa6vsaytsKmvsqmxtq+usrGutLKvtbGwtbGzs7G0s6+5tLG8tLK+tLW9tLW5uLa4uLa5uLa8tra/t7W/trfAurzBvMLEvcTEv8bDwcbCw8fAxcjAyMjBx8fDx8bDyMTFxcPGxcPFxMK+xMK7xMG/xcPAxMPAxMPBxcTCxsXEyMfGysnIzMvIzMvJzczKzs3M0M/N0dDP09LT19jW2tvY2tnX2djV2djV2djW2tnX29rX29zX29zX3d3X3d3X3d3X3d3Y3eDY3eDX3+HZ3uHc4OHb3+Db3+Dc4OHc4uLc4uLc4uLc4uLd4eLd4eLe4uPf4+Ti5OPi5OPi5OPi5OPj5eTi5OPi5OPi5OPi5OPj5eTj5eTj5eTj5eTj5eTj5eTi5OPi5OPi5OPi5OPh4+Lg4uHh4+Lh4+Lh4+Lh4+Li5OPm6Ofp6+rs7u3w8vHk5efIycvCw8XOz9HV1tje3+Hn5+ft7e309PT4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz6+vr39/fw8PDr6+vk5OTc3Nzk5uXv8fD3+fj2+Pfy9PPy9PPy9PPw8vHx8/Lw8vHw8vHv8fDv8fDv8fDu8O/u8O/t7+7u8O/u8O/t7+7t7+7u8O/u8O/t7+7t7+7t7+7s7u3r7ezr7ezr7ezq7Ovp6+rn6ejm6Ofl5+bk5uXj5eTi5OPh4+Lh4+Lg4uHf4eDe4N/d397c3t3b3dza3Nva3NvZ29rX2djW2NfU1tXT1dTS1NPP0dDO0M/Mzs3KzMvIysfDxcLDxcC9v7qsr6ijpp+fopuVmJGLjId/gHtvcGtfYFtbW1lgYF6IiIaampipqaesrKqqrKmqsKykta+jtK6mrq6pra6tra2urq6vsa6wta+vtq+rtK+utLSvtbWvtbOwtbGytLGzs7G1tLC2tbG2tLW2trazubezubW4uLi9ubq/ubnAurrAurzBvMDDvsXEv8bCwMXAwcW7w8W6xMW/xMfBwsTCwsDCwb3EwL/Cwb/Bw8C/xcO+wsG/w8LAxMPBxcTDx8bFycjHy8rIzMvJzczJzczKzs3M0M/M0M/N0dDQ1NXU2NnY2tnX2djV2djV2djW2tnX29rX29zX29zW3NzW3NzW3NzX3d3X3N/Y3eDW3uDZ3uHZ39/Z3d7Z3d7b3+Db4eHb4eHb4eHb4eHc4OHd4eLd4eLe4uPh4+Li5OPh4+Lh4+Li5OPi5OPi5OPi5OPi5OPi5OPj5eTj5eTj5eTj5eTi5OPi5OPh4+Lh4+Lg4uHg4uHg4uHg4uHg4uHh4+Lh4+Li5OPm6Ofp6+rr7ezw8vHh4uTExcfCw8XP0NLU1dfe3+Hn5+ft7e309PT4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v77+/v6+vr39/fw8PDr6+vk5OTc3Nzh4+Lt7+72+Pf2+Pfz9fTy9PPy9PPx8/Lw8vHw8vHw8vHw8vHw8vHw8vHv8fDv8fDu8O/v8fDv8fDu8O/u8O/u8O/u8O/t7+7t7+7u8O/t7+7s7u3r7ezs7u3r7ezp6+ro6unn6ejm6Ofk5uXj5eTj5eTi5OPh4+Lg4uHg4uHf4eDe4N/c3t3b3dza3Nva3NvZ29rY2tnW2NfV19bU1tXT1dTR09LP0dDO0M/Mzs3KzMnGyMXGyMO+wLutsKmlqKGgoZuXmJKNjoiHiIJ9fnlsbWhaW1ZQUE5OTUtvbW6TjY2hm5umoZ6qqaWorqqkr6uqsLCur7GurrCsrKyqrKuorqqnsKuosaywsbOysLGxsa+ys66xs7KytLGyta6xtq+ytrWytrewubSwurKzt7a2uLe4uLa5urW4ubG4u7S5u7q5ury4vLu5vby2vr64vcC8vcG9vb+/vry/vrrAv7vAwbzAwr2+w7+9wcC/w8LBxcTDx8bEyMfGysnIzMvJzczJzczJzczKzs3Lz87Lz87M0M/O0tHQ1NPS1tfS1tfS1tfS1tfT19jU2NnT2dnT2dnU2trV29vV29vW3NzX3d3X3d3Y3t7Y3t7Y3t7X3d3Y3eDZ3uHa3+La3+La3+La3+Lc4OHc4OHd4eLe4uPh4+Lh4+Lg4uHf4eDh4+Lh4+Lh4+Lh4+Lh4+Li5OPi5OPi5OPi5OPi5OPi5OPh4+Lg4uHf4eDf4eDe4N/f4eDf4eDf4eDf4eDg4uHh4+Lm6Ofq7Ovr7O7w8fPc3d+/wMLCw8XP0NLU1dfe3+Hn5+ft7e309PT4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v77+/v6+vr39/fw8PDr6+vk5OTb29ve4N/q7Ov19/b3+fj09vXz9fTz9fTy9PPw8vHw8vHw8vHw8vHw8vHw8vHw8vHw8vHu8O/v8fDv8fDu8O/u8O/u8O/u8O/t7+7t7+7u8O/t7+7s7u3s7u3s7u3r7ezq7Ovp6+ro6unm6Ofl5+bk5uXj5eTi5OPi5OPh4+Lg4uHf4eDe4N/d397c3t3b3dza3NvZ29rY2tnX2djW2NfV19bU1tXS1NPR09LP0dDNz87MzsvKzMnIysXAwr2usaqnqqOio52bnJaSk42LjIaEhYB4eXRqa2ZgYVxQT01HQ0JQSkpyamiTi4mempefoZyhp6Ohp6Wjp6ipqautra2urq6traursKywsq+wrq+xraywr6uvsKuwsq+vtK6utquvt6yxtrKwtrSuuLCwt7CxtrK0trO1t7S1uLG4vK63u622uLW1ubi2u7W3vre5vby6vr+6u7+9vMG+vry+v7q+v7q9vrm8vrm7wLy/w8LAxMPDx8bFycjGysnHy8rIzMvJzczJzczJzczJzczKzs3Lz87Lz87M0M/O0tHP09TO0tPP09TP09TQ1NXR1dbQ1tbQ1tbT2dnT2dnU2trV29vW3NzX3d3X3d3Y3t7Z39/Y3t7Y3eDa3+La3+La3+La3+Lb4OPb3+Db3+Dc4OHd4eLg4uHg4uHf4eDe4N/g4uHg4uHg4uHg4uHg4uHg4uHh4+Lh4+Lh4+Lh4+Lg4uHg4uHf4eDe4N/e4N/d397f4eDe4N/e4N/e4N/f4eDi5OPm6Ofq7Ovr7O7w8fPX2Nq8vb/Cw8XOz9HT1Nbe3+Hn5+ft7e309PT4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v77+/v6+vr39/fw8PDr6+vj4+Pb29vb3dzo6un09vX3+fj19/b09vXz9fTy9PPx8/Lx8/Lx8/Lx8/Lx8/Lx8/Lw8vHw8vHv8fDw8vHw8vHv8fDu8O/u8O/u8O/t7+7t7+7t7+7s7u3r7ezr7ezs7u3r7ezq7Ovp6+ro6unn6ejm6Ofl5+bk5uXj5eTj5eTh4+Lh4+Lg4uHf4eDe4N/d397c3t3c3t3a3NvZ29rY2tnX2djX2djW2NfU1tXT1dTR09LP0dDO0M3Nz8zLzcjBw76vsquprKWkpZ+hopyZmpSRkoyIiYR/gHt0c29ramZcXFpUU1FHQ0JAPDlMS0dqa2WEh4COk42bpJ+fpaOjpaSmpKWrpaewpqewpqeupqSwqqqvq6iuramur6mssaqss6uttKyus6yws6ywsq2vtLCytLG0tbC1trGzuLK2ubC6uKu6tqq4t7O4uLi4u7S5vLO7vLe7u7u8vcG6vsG7vbq5u7a5urW6uri8vLq+wL/BxcTDx8bFycjGysnHy8rIzMvIzMvIzMvJzczJzczJzczLz87Lz87Lz87M0M/N0dDN09PN09PO1NTO1NTP1dXQ1tbQ1tbQ1tbR19fS2NjT2dnU2trV29vW3NzX3d3X3d3Z3uHY3eDZ3uHa3+La3+LZ3uHZ3uHa3+La3+Lb4OPc4OHd4eLg4uHg4uHf4eDe4N/e4N/e4N/f4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDe4N/e4N/d397d397e4N/d397d397e4N/f4eDi5OPm6Ofq7Ovr7O7t7vDS09W6u73Cw8XMzc/T1Nbf4OLn5+ft7e309PT4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz6+vr39/fx8fHr6+vj4+Pb29va3Nvl5+by9PP3+fj3+fj19/b09vXz9fTx8/Ly9PPy9PPy9PPy9PPx8/Lw8vHw8vHw8vHx8/Lx8/Lv8fDv8fDv8fDu8O/t7+7t7+7t7+7s7u3r7ezr7ezs7u3r7ezq7Ovq7Ovp6+ro6unm6Ofl5+bl5+bk5uXj5eTi5OPi5OPh4+Lg4uHg4uHf4eDe4N/e4N/d397c3t3b3dza3Nva3NvZ29rX2djW2NfV19bR09LR09DQ0s/O0MvDxcCxtK2sr6inqKKkpZ+dnpiXmJKRko2Ki4aBgHx5eHRqa2ZgYVxWV1JLTEY6PTY0NzBKSURmZ2F8gXuMko6boJyhoZ+ln5+to6KupKOqoqCsqKWrqqarrKesr6irsaersaersKmrsKqusaqusaqwsK6ysLGxsq2xs66wta+ztq+1s6e4tKu4tre5ubu3vLW5vLO7urW6ubezt7ixt7eztbCztK61tbO6urq+wsPCyMjDx8bFycjGysnHy8rHy8rHy8rIzMvIzMvJzczJzczJzczLz87Lz87Lz87M0M/M0M/N09PO1NTO1NTP1dXQ1tbR19fR19fQ1tbR19fS2NjT2dnU2trV29vW3NzW3NzW3NzX3N/X3N/Y3eDZ3uHZ3uHY3eDY3eDa3+Lb4OPb4OPc4OHd4eLf4eDf4eDe4N/d397d397d397e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/d397e4N/d397d397e4N/g4uHj5eTn6ejr7ezs7e/o6evLzM66u73DxMbMzc/U1dff4OLn5+ft7e309PT4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz7+/v4+Pjx8fHr6+vj4+Pb29vX2dji5OPu8O/19/b2+Pf19/b09vXy9PPy9PPy9PPy9PPy9PPy9PPy9PPx8/Lw8vHx8/Lx8/Lx8/Lv8fDv8fDv8fDu8O/t7+7s7u3t7+7s7u3r7ezr7ezs7u3r7ezq7Ovq7Ovp6+ro6unn6ejm6Ofl5+bk5uXk5uXj5eTj5eTi5OPi5OPh4+Lh4+Lg4uHg4uHg4uHf4eDd397d397c3t3b3dza3NvY2tnY2tnU1tXU1tPU1tPR087Fx8Kztq+vsqusraenqKKgoZubnJaXlpGRkIuJiISEg398fXhub2lfYltYXlRTWU9LTEREPTc8MjBIRUBZW1Zyd3GFioSTlZCcnZiho56ip6Gho56jpaKkqaOmq6SprKOprKOrrKaqrKepsKmqr6myrK6yrK6ssa2qs66us6+xs66ztbC1t7a0t760ub+wurKwuK20tKyzsq6orqyrsa2ztK66t7K9ubi/v8G9yMq/zc7BycnFycjGysnGysnHy8rHy8rIzMvIzMvJzczIzMvJzczLz87M0M/Lz87Lz87M0M/N09PN0tXO09bP1NfQ1djQ1djQ1tbQ1tbR19fR19fT2dnU2trV29nV29nV29nV29vV2t3V2t3W297X3N/X3N/X3N/Y3eDZ3uHb4OPb4OPc4OHc4OHf4eDe4N/e4N/d397d397d397d397e4N/e4N/e4N/e4N/d397e4N/e4N/e4N/e4N/e4N/e4N/e4N/d397d397c3t3d397f4eDh4+Lk5uXo6evr7O7t7vDi4+XExce5urzExcfMzc/W19ne3+Hn5+ft7e309PT4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8/Pz7+/v4+Pjx8fHr6+vj4+Pb29vV19bf4eDs7u3z9fT2+Pf19/bz9fTy9PPx8/Ly9PPy9PPz9fTz9fTy9PPx8/Lx8/Lw8vHx8/Lw8vHv8fDu8O/u8O/t7+7s7u3t7+7t7+7s7u3r7ezr7ezs7u3r7ezq7Ovr7ezq7Ovo6unn6ejm6Ofl5+bl5+bk5uXj5eTj5eTj5eTi5OPi5OPi5OPh4+Lh4+Lh4+Lg4uHf4eDe4N/e4N/c3t3b3dzZ29rb3dzW2NfW2NXW2NXT1dLHycS1t7Kyta6trqmpqqSmp6Gio52en5mXmJKSkY2Oj4qEhX9/gnt1eG9nbWNdY1lbXFRbUk1VTEdDPjo4NzI3PDZKT0leY11uc219hH2LkouYnZeboJyfpJ6ip6GlqKGnqKKpqKSqq6amraaoramwqqyyrK6ssa2rtK+wtbGztbKztbSxtbatsrinr7KhqqWepZ2foJqfoJqoramts6+8u7bGw77JxcbFxsi9yMq6yMnDycnEyMfFycjGysnGysnHy8rIzMvJzczJzczIzMvJzczLz87M0M/Lz87Lz87Lz87O0tPN09PO09bP1dXQ1djQ1tbQ1tbQ1tbR19fR19fT2dnU2trV29nV29nW2tnV29nT2dnT2dnV2t3W3NzX3N/X3d3Z3eDa4ODc4OPc4OHc4OHc4OHe4N/e4N/d397d397d397d397e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/d397d397c3t3d397f4eDi5OPl5+bo6evr7O7u7/Hd3uC/wMK5urzFxsjNztDX2Nrd3uDn5+ft7e309PT4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz7+/v4+Pjx8fHr6+vk5OTc3NzU1tXa3Nvo6un09vX2+Pf19/b19/b09vXz9fTz9fTy9PPy9PPy9PPy9PPx8/Lw8vHw8vHw8vHx8/Lx8/Lx8/Lw8vHv8fDt7+7u8O/t7+7t7+7s7u3s7u3s7u3s7u3s7u3r7ezq7Ovp6+ro6unn6ejm6Ofl5+bl5+bj5+bi5uXj5eTj5eTj5eTj5eTj5eTi5OPi5OPh4+Lg4uHg4uHf4eDe4N/d397c3t3c3t3b3dzZ29rY2tnV19bIyse7vbq3ubSytLGusKuqrKemqKOjpaCfoZybnJaWmZKPkouJjIWBhH16fXZ0d3BvcGpqZ2JjYFtgXFlXVlJMTUhERUBAQD5DQ0FMTEpTVVBpamVxc25+gHuKjIeSk46XmJOcnZihop2jpaCkpqGnpqSop6WmqKWjpaKfoZ6cnpuVl5SSlJONkZKOkpGRlpKZnpinqaSytK+8vru8wb3CwsDExMLExsXDx8bCyMjAyMjFycjHycjIysnIysnJy8rKzMvLzczMzs3Mzs3Nz87Nz87O0M/O0M/P0dDQ0tHP09LP09LQ1NPR1dbS1tXS1tfS1tXR1dTR1dTU2NfT19bT19bU2NfW2tnX29rY2tnW2tnX29rX29rX29zW2tnW2tvV2djY2dvX29rb3N7c3t3d397d397d397d397d397d397d397d397d397e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/d397d397c3t3c3t3c3tve4N3d39zg4t/h4+Lk5uXs7e/p6uzs7e/S09W3uLq8vb/FxcfQ0NLY2Njg4ODo6Ojt7e309PT4+Pj6+vr8/Pz+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz7+/v4+Pjx8fHr6+vl5eXd3d3T1dTW2Nfj5eTx8/L2+Pf19/b09vXz9fTz9fTz9fTy9PPy9PPy9PPy9PPx8/Lx8/Lw8vHw8vHw8vHx8/Lx8/Lw8vHv8fDu8O/v8fDu8O/t7+7t7+7s7u3s7u3s7u3t7+7s7u3r7ezq7Ovp6+ro6unn6ejm6Ofl5+bj5+bj5+bk5uXk5uXk5uXk5uXj5eTi5OPj5eTj5eTi5OPh4+Lg4uHf4eDe4N/d397c3t3c3t3a3Nva3NvX2djLzcy+wL25u7i2uLWztbKusKurraioqqWkpqGfopubnpeZnJWVmJGPkouKjYaHiIKBgnx5enRyc21ubWltbGhramZnZmJhYF5ZWFZVVFJTUlBKS0ZNTklRUk1XWFNdXllkZWBsbWhyc252d3J3eHN4eXR5enV5eXd6enh8fHp+fnyDhYKKjImWmJWjpaKusK21t7S8vrvBw8C9v7y/wb7CxMPExsXDx8bDx8bDx8bDx8bHycjHycjIysnJy8rKzMvKzMvLzczMzs3Mzs3Nz87O0M/P0dDP0dDQ0tHS1NPT1dTU2NfU2NfU2NfU2NfU2NfU2NfU2NfU2NfU2NfU2NfU2NfV2djZ29rZ29rZ29rY2tnX29rX29rX29rW2tnY2tnY2tnY2tnZ29rb3dzb3dzb3dzb3dzc3t3d397e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/d397d397d397d397d397d397c3t3c3t3c3tve4N3e4N3g4t/k5uXo6uns7e/s7e/p6uzMzc+4ubu9vsDGxsjQ0NLY2Njh4eHo6Oju7u719fX5+fn7+/v9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz7+/v4+Pjy8vLs7Ozl5eXe3t7T1dTT1dTd397u8O/2+Pf2+Pf19/bz9fTz9fTz9fTy9PPy9PPy9PPy9PPx8/Lx8/Lw8vHw8vHw8vHw8vHw8vHw8vHw8vHv8fDv8fDv8fDu8O/u8O/t7+7t7+7t7+7t7+7s7u3r7ezr7ezq7Ovq7Ovo6unn6ejm6Ofl5+bl5+bm6Ofm6Ofm6Ofl5+bk5uXj5eTk5uXk5uXj5eTj5eTi5OPg4uHf4eDd397c3t3c3t3b3dzc3t3a3NvP0dDBw8C8vru6vLm2uLWytK+vsaysrqmpq6alp6KipJ+hpJ2eoZqZnJWWmZKUl5CPkouKi4aFhoGBgn1/gHt9fHh6eXV4d3V2dXN1dHJ2dXNxcW9ubmxsbWhrbGdrbGdsbWhub2pwcWx2d3J6e3Z/gHuEhYCKioiSkpCbm5mhoZ+pq6itr6y0trO6vLm7vbq6vLm4ure4ure/wcDBw8LDxcTExsXDx8bDx8bEyMfEyMfHycjHycjIysnJy8rKzMvLzczLzczMzs3LzczMzs3Nz87O0M/P0dDQ0tHS1NPT1dTT19bT19bT19bT19bU2NfV2djX29rY3NvY2tnY2tnY2tnZ29ra3Nvb3dza3NvZ29rX29rX29rX29rW2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29ra3Nvc3t3e4N/f4eDe4N/e4N/e4N/e4N/e4N/e4N/d397d397d397d397d397d397d397d397c3t3c3t3d39zd39zf4eDg4uHm6Ofq7Ovq6+3u7/Hj5ObBwsS5ury/wMLJycvQ0NLZ2dni4uLp6env7+/29vb6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz7+/v5+fnz8/Pt7e3n5+ff39/V19bQ0tHX2djp6+r09vX3+fj2+Pf09vX09vXz9fTy9PPy9PPy9PPy9PPx8/Lx8/Lx8/Lx8/Lw8vHw8vHw8vHw8vHw8vHw8vHw8vHw8vHv8fDu8O/u8O/u8O/t7+7t7+7s7u3r7ezr7ezr7ezq7Ovp6+rn6ejm6Ofm6Ofm6Ofm6Ofn6ejn6ejm6Ofl5+bk5uXk5uXk5uXj5eTj5eTi5OPg4uHe4N/d397c3t3c3t3b3dzc3t3b3dzR09LFx8S/wb68vru5u7i2uLOztbCxs66vsaysrqmqrKemqaKjpp+fopucn5ibnpeYm5SWl5KTlI+Rko2Oj4qMi4eLioaLioiKiYeLioiKioiLi4mLi4mMjYiQkYyTlI+VlpGXmJOZmpWen5qhop2lpqGnqKOoqKarq6mvr62zs7GztbK0trO2uLW4ure6vLm8vru/wb7Bw8DAwsHBw8LDxcTExsXDx8bDx8bDx8bEyMfHycjHycjIysnJy8rKzMvLzczMzs3Mzs3LzczMzs3Mzs3Nz87P0dDQ0tHR09LS1NPQ1NPQ1NPR1dTS1tXT19bV2djX29rZ3dza3Nva3Nvb3dzb3dzb3dzb3dzb3dza3NvX29rX29rX29rW2tnY2tnY2tnY2tnZ29rZ29rY2tnY2tnY2tnZ29ra3Nvc3t3d397e4N/e4N/e4N/e4N/e4N/e4N/e4N/d397d397d397d397d397d397d397c3t3c3t3e4N3e4N3g4uHh4+Ln6ejr7ezp6uzu7/HZ2ty3uLq6u73BwsTLy83R0dPZ2dnj4+Pq6urw8PD29vb7+/v9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz8/Pz5+fnz8/Pu7u7o6Ojg4ODW2NfO0M/S1NPi5OPv8fD2+Pf2+Pf09vX09vXz9fTy9PPy9PPy9PPy9PPy9PPx8/Ly9PPx8/Lw8vHw8vHw8vHw8vHw8vHv8fDw8vHw8vHv8fDv8fDu8O/t7+7t7+7t7+7s7u3s7u3s7u3r7ezr7ezq7Ovo6unn6ejo6unn6ejn6ejn6ejn6ejm6Ofm6Ofl5+bk5uXk5uXj5eTj5eTi5OPh4+Lf4eDd397c3t3c3t3a3Nva3Nva3NvT1dTIysfDxcLAwr++wL26vLe4urW2uLO0trGytK+wsq2tsKmqraanqqOlqKGjpaCipJ+foZyeoJudnpmbnJeZmZeZmZeYmJaWlpSUlJKUlJKZmZeXmZaXmZSYmpWYmpWanJedn5qgop2gop2jpaCnqaarraqtr6yvsa6ytLGztbK0trO2uLW3uba4ure6vLm7vbq+wL2/wb7Bw8LCxMPDxcTExsXCxsXDx8bDx8bEyMfHycjIysnIysnJy8rKzMvLzczMzs3Mzs3Nz87Nz87O0M/O0M/Q0tHR09LS1NPS1NPT1dTT1dTU1tXU1tXV19bW2NfX2djX2dja3Nva3Nvb3dzb3dzb3dza3Nva3Nva3NvY3NvX29rX29rW2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29ra3Nvc3t3d397e4N/e4N/e4N/e4N/e4N/e4N/d397d397d397d397d397d397d397c3t3d39ze4N3h4+Lj5eTo6uns7u3r7O7r7O7NztCxsrS7vL7DxMbMzMzS0tLa2trk5OTr6+vw8PD39/f6+vr9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz8/Pz6+vr09PTv7+/p6enh4eHZ29rP0dDO0M/b3dzp6+r09vX4+vn19/b09vX09vXy9PPy9PPy9PPy9PPy9PPy9PPy9PPx8/Lx8/Lw8vHw8vHw8vHw8vHv8fDw8vHw8vHv8fDv8fDu8O/t7+7t7+7t7+7t7+7t7+7s7u3s7u3s7u3r7ezp6+ro6unp6+ro6uno6uno6uno6unn6ejn6ejm6Ofl5+bk5uXk5uXj5eTj5eTh4+Lg4uHf4eDd397d397a3NvZ29rb3dzV19bLzcrGyMXExsPCxMG+wLu8vrm5u7a3ubS1t7K0trGwsq2vsquusaqsr6iqrKeoqqWlp6KkpqGlpqGio56fn52fn52fn52goJ6ioqCjo6GfoZ6foZ6ho56ipJ+jpaCkpqGnqaSqrKesrqmtr6qusK2wsq+xs7CytLGztbKztbK3uba5u7i8vru9v7y+wL3Awr/Awr/Awr/Bw8LCxMPDxcTExsXDx8bDx8bDx8bEyMfHycjIysnIysnJy8rKzMvLzczMzs3Mzs3O0M/Nz87O0M/P0dDQ0tHS1NPS1NPT1dTS1NPS1NPT1dTU1tXV19bV19bW2NfW2NfZ29rZ29ra3Nva3NvZ29rZ29rZ29ra3NvY3NvX29rW2tnW2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnb3dzc3t3d397e4N/e4N/e4N/e4N/e4N/d397d397d397d397d397c3t3c3t3c3t3c3tvf4d7h4+Lm6Ofo6uns7u3t7vDi4+XAwcOxsrS7vL7FxsjNzc3V1dXd3d3k5OTs7Ozx8fH39/f6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz6+vr19fXw8PDq6uri4uLa3NvQ0tHMzs3U1tXj5eTx8/L4+vn2+Pf19/b09vXy9PPy9PPy9PPy9PPy9PPy9PPy9PPx8/Lx8/Lw8vHx8/Lw8vHw8vHw8vHw8vHw8vHw8vHv8fDv8fDu8O/t7+7t7+7u8O/t7+7s7u3s7u3s7u3r7ezr6+vq6urp6+rp6+rp6+rp6+rp6+rp6+rn6ejm6Ofl5+bk5uXk5uXj5eTj5eTi5OPh4+Lg4uHe4N/e4N/b3dzb3dzc3t3Y2tnP0c7Jy8jGyMXExsPBw8C/wb69v7y7vbq5u7i4urWyt7GxtrCwta+us62usKusrqmqrKepq6apq6ioqqeoqqepq6ipq6inqaalp6Slp6SmqKWnqaapq6irraqrrairrairraisrqmvsaywsq2xs7CztbK0trO1t7S2uLe3ubi6vLm7vbq8vru7vbq8vru+wL2/wcC+wL/AwsHBw8LDxcTExsXDx8bDx8bDx8bDx8bIysnIysnIysnJy8rKzMvLzczMzs3Mzs3Nz87Nz87Nz87P0dDR09LT1dTU1tXU1tXS1NPS1NPS1NPT1dTU1tXV19bW2NfW2NfX2djY2tnY2tnY2tnZ2dna2trb29vb3dzZ3dzY3NvW2tnW2tnY2tnY2tnY2tnX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tna3Nvb3dzc3t3d397e4N/e4N/e4N/e4N/c3t3c3t3c3t3c3t3c3t3b3dzb3dzb3dzc3t3g4uHg4uHo6unp6+rq7Ovs7e/U1de2t7m2t7m8vb/HyMrNzc3X19fg4ODl5eXt7e3y8vL39/f6+vr8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f39/f37+/v19fXw8PDq6urj4+Pa3NvQ0tHKzMvP0dDd397u8O/3+fj19/b19/b09vXz9fTy9PPy9PPy9PPy9PPy9PPx8/Lx8/Lx8/Lx8/Lx8/Lx8/Lw8vHw8vHx8/Lw8vHw8vHw8vHv8fDu8O/t7+7t7+7t7+7t7+7s7u3r7ezr7ezq7Ovr6+vq6urp6+rq7Ovq7Ovr7ezr7ezq7Ovo6unn6ejl5+bk5uXj5eTj5eTj5eTi5OPh4+Lg4uHf4eDg4uHd397c3t3e4N/a3NvR09DLzcrHycbGyMXExsPCxMHBw8C/wb6+wL29v7y4vbe3vLa0ubOyt7GytK+xs66xs66xs66wsq+usK2tr6ysrqusrqurraqsrqutr6ytr6ysrqusrqutr6yusKuusKuvsaywsq2wsq2ytK+1t7S2uLW3uba4ure5u7q6vLu6vLm8vru8vru7vbq8vru+wL3AwsG/wcC/wcDAwsHCxMPDxcTCxsXCxsXCxsXCxsXIysnIysnIysnJy8rKzMvLzczMzs3Mzs3Nz87Nz87O0M/Q0tHT1dTW2NfX2djY2tnW2NfV19bU1tXU1tXU1tXU1tXV19bV19bX2djX2djY2tnY2tnZ2dna2trc3Nzd397b3dzY3NvW2tnW2tnY2tnY2tnY2tnX2djY2tnY2tnX2djX2djX2djY2tnZ29rZ29ra3Nvb3dzc3t3d397e4N/e4N/e4N/d397c3t3c3t3c3t3c3t3b3dzb3dza3Nva3Nvd397h4+Le4N/p6+rp6+ro6unq6+3HyMqwsbO5ury9vsDJyszNzc3Z2dni4uLm5ubv7+/z8/P4+Pj6+vr8/Pz9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/f37+/v29vby8vLt7e3m5ubb3dzT1dTKzMvJy8rY2tnn6ejt7+73+fj2+Pf09vXz9fTy9PPy9PPz9fT09vXz9fTy9PPy9PPy9PPz9fTz9fTy9PPy9PPx8/Lx8/Lw8vHw8vHw8vHv8fDv8fDu8O/t7+7v8fDu8O/u7u7t7e3t7e3t7e3t7e3t7e3r6+vr6+vr6+vt7e3t7e3s7Ozo6unm6Ofl5+bk5uXj5eTk5uXk5uXj5eTi5OPh4+Lg4uHg4uHe4N/c3t3e4N/e4N/X2djO0M/KzMvJy8rIysfHycbFx8TDxcLBw8DBw8C8wb26v7u4vbm2u7e3uba2uLW1t7S1t7SztbKytLGxs7Cxs7Cxs7Cxs7Cwsq+wsq+wsq+xs7Cxs7CytLGytLGztbKztbK0trO1t7S1t7S2uLW3uba4urm5u7q7vby7vby8vru9v7y9v768vr29v769v76/wcDAwsHBw8LBw8LCxMPDxcTBxcTCxsXDx8bEyMfIysnIysnJy8rJy8rLzczMzs3Nz87O0M/O0M/O0M/Q0tHT1dTY2tnb3dzb3dzb3dzZ29rY2tnX2djV19bU1tXV19bV19bW2NfX2djX2djX2djY2tnZ2dnZ2dna2trc3t3c3t3a3t3Y3NvW2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnX2djZ29rc3t3d397e4N/e4N/d397d397d397d397c3t3a3NvZ29ra3Nva3Nva3Nvf4eDh4+Lh4+Lo6unr7O7s7e/d3uC2t7m0tbe6u73CxMPKzMvT09Pb29vj4+Po6Ojx8fH19fX6+vr8/Pz9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/f38/Pz39/fz8/Pu7u7n5+fe4N/W2NfNz87Fx8bO0M/f4eDr7ez19/b3+fj2+Pf09vXz9fTz9fT09vXz9fTy9PPz9fTz9fTz9fT09vX09vXz9fTz9fTz9fTz9fTy9PPy9PPy9PPx8/Lx8/Lw8vHv8fDv8fDv8fDv7+/u7u7u7u7u7u7u7u7u7u7t7e3s7Ozt7e3t7e3u7u7t7e3q7Ovo6unm6Ofk5uXk5uXk5uXl5+bj5eTi5OPi5OPg4uHh4+Lf4eDe4N/f4eDf4eDZ29rR09LMzs3LzczJy8jIysfGyMXExsPDxcLDxcK/xMC+w7+8wb26v7u7vbq7vbq6vLm5u7i3uba2uLW2uLW1t7S1t7S1t7S0trO0trO1t7S1t7S1t7S2uLW2uLW2uLW2uLW3uba2uLW3uba3uba4ure5u7q6vLu7vby8vr29v7y9v7y9v769v769v76+wL/AwsHBw8LBw8LCxMPDxcTDxcTCxsXDx8bEyMfFycjJy8rJy8rKzMvLzczMzs3Nz87O0M/P0dDP0dDP0dDR09LU1tXY2tnb3dzb3dzb3dza3Nva3NvZ29rY2tnX2djX2djX2djX2djX2djX2djX2djY2tnZ2dnZ2dna2trb3dza3t3a3t3Z3dzX29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnX2djZ29rb3dzd397d397d397d397c3t3c3t3c3t3b3dzZ29rY2tnZ29ra3Nvb3dzi5OPf4eDn6ejs7u3s7e/o6evQ0dOur7G3uLq8vb/ExsXMzs3V1dXd3d3l5eXq6ury8vL29vb6+vr8/Pz9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3+/v79/f34+Pj19fXw8PDp6enh4+La3NvS1NPFx8bExsXV19bl5+bx8/L3+fj2+Pf19/b09vXz9fT09vXz9fTy9PPz9fTz9fT09vX09vX09vX09vX09vX09vXz9fTz9fTy9PPy9PPy9PPy9PPx8/Lw8vHx8fHx8fHw8PDw8PDw8PDw8PDv7+/v7+/u7u7u7u7t7e3u7u7u7u7u7u7s7Ozr6+vn6ejl5+bk5uXk5uXk5uXk5uXj5eTj5eTh4+Li5OPh4+Lf4eDh4+Lh4+Lb3dzU1tXP0dDNz87LzczKzMvIysnGyMfGyMfGyMfExsPDxcLBw8DAwr+/wb6+wL29v7y8vru7vbq6vLm5u7i4ure4ure4ure4ure3uba4urm4urm4ure4ure4ure4ure4ure4ure4ure5u7i5u7i6vLm7vby7vby7vby8vr29v76+wL++wL++wL++wL+/wcDBw8LCxMPCxMPCxMPDxcTExsXCxsXDx8bEyMfFycjKzMvKzMvKzMvLzczMzs3Nz87O0M/P0dDR09LR09LS1NPV19bZ29rb3dzb3dzb3dzb3dzb3dzc3t3c3t3b3dza3NvZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29ra3NvZ3dza3t3a3t3X29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnX2djY2tnb3dzc3t3d397c3t3b3dzb3dzb3dzb3dza3NvZ29rY2tnZ29rb3dzd397h4+Li5OPq7Ovs7u3t7vDd3uC7vL6trrC6u72/wMLHycjP0dDX19ff39/n5+Xt7evz8/P39/f7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v76+vr29vby8vLr6+vj5eTb3dzW2NfKzMvBw8LKzMvc3t3q7Ov19/b2+Pf2+Pf09vXz9fT09vX09vXy9PPz9fTz9fTz9fTz9fTz9fTz9fTz9fTz9fTz9fTz9fTy9PPy9PPy9PPy9PPx8/Lw8vHx8fHx8fHx8fHx8fHx8fHx8fHw8PDv7+/u7u7u7u7t7e3t7e3t7e3t7e3t7e3s7Ozo6unm6Ofk5uXk5uXk5uXk5uXj5eTj5eTi5OPj5eTi5OPh4+Lh4+Lh4+Ld397X2djS1NPP0dDNz87Mzs3KzMvJy8rIysnIysnGyMXFx8TExsPDxcLCxMHAwr+/wb6+wL29v7y8vru7vbq7vbq7vbq6vLm6vLm5u7i6vLu6vLu6vLm6vLm6vLm5u7i5u7i5u7i6vLm6vLm7vbq7vbq7vby8vr28vr28vr29v76+wL++wL+/wcC/wcDAwsHBw8LCxMPCxMPDxcTExsXFx8bDx8bEyMfFycjGysnKzMvKzMvKzMvLzczMzs3Nz87O0M/P0dDR09LR09LT1dTW2NfZ29rb3dzb3dzb3dzc3t3c3t3d397e4N/d397c3t3a3NvZ29rZ29rY2tnY2tnZ29rY2tnY2tnY2tnZ29rY3NvZ3dzZ3dzY3NvY2tnY2tnZ29rZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnX2djZ29rb3dzc3t3c3t3b3dzb3dza3Nva3Nva3Nva3Nva3Nva3Nva3Nvc3t3f4eDg4uHq7Ovq7Ovp6+rp6uzKy82rrK62t7m8vb/BwsTJy8rR09LZ2dnh4eHq6ujv7+309PT4+Pj8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////+/v77+/v4+Pj09PTt7e3l5+ba3NvX2djP0dDCxMPDxcTR09Lh4+Ly9PP19/b3+fj19/bz9fT09vX09vXz9fTz9fTz9fTz9fTz9fTy9PPy9PPy9PPy9PPz9fTz9fTy9PPy9PPy9PPy9PPx8/Lx8/Lx8fHx8fHx8fHx8fHx8fHx8fHw8PDv7+/w7u/v7e7t7e3t7e3t7e3t7e3t7e3t7e3p6+rn6ejl5+bl5+bl5+bk5uXj5eTk5uXj5eTj5eTi5OPh4+Lh4+Lh4+Le4N/a3NvT1dTR09LP0dDO0M/Nz87LzczJy8rIysnJy8rIysnHycjGyMfFx8bDxcTCxMPBw8LBw8LAwsG/wb6+wL2+wL29v7y9v7y9v7y8vr28vr28vr28vr28vru8vru8vru8vru8vru8vru8vr28vr28vr28vr28vr28vr2+wL++wL+/wcDAwsHAwsHBw8LCxMPDxcTExsXExsXFx8bGyMfEyMfFycjGysnHy8rIzMvJzczJzczKzs3Lz87M0M/N0dDN0dDP09LQ1NPS1tXU2NfX29rZ3dzZ3dzZ3dza3t3b397b397c4N/b397b397a3t3Z3dza3NvZ29rY2tnY2tnY2tnY2tnY2tnZ29rZ3dza3t3a3t3Y3NvY2tnY2tnY2tnZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tna3Nvb3dzc3t3c3t3b3dza3Nva3NvZ29rZ29ra3Nvc3t3b3dzb3dze4N/h4+Lk5uXt7+7r7O7q6+3a2921trirrK67vL69vsDDxMbLzczT1dTb29vk5OTs7Ory8vD29vb5+fn9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////+/v77+/v5+fn19fXv7+/o6unc3t3X2djR09LGyMfAwsHHycjX2djq7Ovy9PP3+fj3+fj09vX09vX09vXz9fT09vX09vXz9fTz9fTy9PPy9PPy9PPy9PPy9PPy9PPx8/Lx8/Lx8/Lx8/Lw8vHw8vHx8fHx8fHx8fHx8fHx8fHx8fHw8PDv7+/w7u/w7u/u7u7t7e3t7e3t7e3u7u7u7u7r7ezp6+rn6ejm6Ofm6Ofl5+bk5uXk5uXj5eTj5eTi5OPi5OPi5OPh4+Lf4eDc3t3W2NfT1dTR09LQ0tHP0dDNz87KzMvJy8rKzMvKzMvJy8rIysnHycjGyMfExsXDxcTExsXDxcTCxMHBw8DAwr/Awr+/wb6/wb6+wL++wL++wL++wL++wL2+wL2+wL2/wb6+wL2+wL29v769v76+wL++wL++wL+/wcDAwsHAwsHBw8LCxMPCxMPDxcTDxcTExsXFx8bGyMfHycjHycjGysnHy8rIzMvJzczKzs3Kzs3Kzs3Lz87M0M/N0dDO0tHO0tHP09LQ1NPS1tXV2djY3NvZ3dzZ3dzZ3dza3t3a3t3b397b397b397b397b397b397b3dzZ29rY2tnY2tnY2tnY2tnY2tnZ29rb397c4N/b397Y3NvY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tna3Nvb3dzb3dzc3t3b3dza3Nva3Nva3NvY2tnY2tna3Nvc3t3d397d397g4uHk5uXr7ezs7u3t7vDm5+nDxMaqq620tbe5ury/wMLFxsjNz87W2Nfe3t7m5ubu7uzz8/H39/f6+vr9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v77+/v6+vr39/fx8fHr7ezg4uHa3NvU1tXMzs3CxMPAwsHLzcze4N/q7Ov19/b3+fj19/b09vX09vXz9fT09vXz9fTz9fTy9PPy9PPy9PPy9PPy9PPx8/Lx8/Lx8/Lx8/Lx8/Lx8/Lx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHw8PDw8PDw7u/w7u/w7u/v7e7t7e3u7u7v7+/v7+/t7+7r7ezp6+ro6unn6ejm6Ofk5uXk5uXk5uXj5eTj5eTj5eTj5eTi5OPh4+Lg4uHa3NvW2NfT1dTS1NPR09LP0dDMzs3LzczLzczKzMvKzMvJy8rIysnIysnHycjGyMfGyMfFx8bExsXDxcTDxcLCxMHCxMHBw8DAwsHAwsHAwsHAwsHAwr/Awr/Awr/Awr/Awr/Awr+/wcC/wcDAwsHAwsHBwsTCw8XCxMPDxcTExsXExsXExsXFx8bFx8bGyMfHycjIysnJy8rKzMvIzMvJzczKzs3Lz87Lz87Lz87M0M/M0M/N0dDO0tHP09LP09LQ1NPS1tXU2NfW2tnY3NvZ3dzZ3dzZ3dza3t3a3t3b397c4N/c4N/d4eDd4eDd4eDZ3dzX29rV2djW2tnY2tnY2tnZ29ra3Nvb397b397Z3dzX29rY2tnY2tnY2tnX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnb3dzb3dzb3dzb3dza3Nva3NvZ29ra3NvY2tnY2tna3Nvd397d397e4N/j5eTp6+rt7+7s7u3o6evS09WxsrStrrC6u726u73DxMbJyszR09La3Nvi4uDp6efw8O719fP4+Pj7+/v+/v7////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3+/v7+/v77+/v6+vr39/fy8vLs7u3k5uXd397W2NfR09LGyMe9v77DxcTU1tXj5eTy9PP2+Pf19/b19/b19/b09vXz9fTz9fTy9PPy9PPy9PPy9PPy9PPy9PPz9fTy9PPy9PPy9PPy9PPy9PPy8vLy8vLx8fHx8fHx8fHx8fHx8fHx8fHx8fHw8PDw7u/w7u/w7u/v7e7t7e3u7u7u7u7v7+/v8fDs7u3q7Ovp6+ro6unn6ejl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXj5eTi5OPd397Z29rU1tXS1NPR09LQ0tHO0M/Nz87Mzs3Mzs3LzczLzczKzMvKzMvKzMvJy8rIysnHycjGyMfFx8bFx8TFx8TExsPDxcLCxMPCxMPCxMPCxMPCxMHCxMHCxMHCxMHCxMHBw8DBw8LBw8LBw8LCxMPExcfFxsjExsXFx8bGyMfGyMfGyMfHycjHycjIysnJy8rKzMvKzMvLzczKzs3Lz87M0M/M0M/M0M/M0M/M0M/N0dDN0dDO0tHP09LP09LR1dTT19bV2djX29rZ3dzZ3dzZ3dzZ3dza3t3a3t3b397c4N/d4eDe4uHe4uHe4uHa3t3X29rV2djV2djY2tnY2tnZ29ra3NvZ3dzY3NvX29rV2djX2djY2tnZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnb3dzb3dzb3dza3NvZ29rZ29rZ29rZ29rZ29rZ29ra3Nvd397e4N/g4uHm6Oft7+7p6+ru8O/i4+W7vL6qq621tri6u72/wMLGx8nMzc/U1tXc3t3k5OLr6+ny8vD39/X5+fn8/Pz+/v7////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v4+Pj39/fw8PDp6eni4uLb29vS0tLLy8vDw8O7u7vGx8nY2dvo6evx8vT4+vn2+Pfy9PH2+PXz9fLz9fLz9fT09vXz9fTz9fTy8/Xy8/Xy9PPy9PPy9PPy9PPz8/Pz8/Py8vLy8vLx8fHx8fHx8fHx8fHy8vLx8fHw8PDv7+/v7+/v7+/u7u7v7+/v7+/v7+/v7+/u7u7v7+/v7+/u7u7s7Ozp6enn5+fn5+fn5+fm6Ofl5+bk5uXk5uXk5uXk5uXj5eTj5eTg4uHc3t3X2djT1dTS1NPS1NPQ0tHO0M/Q0tHP0dDO0M/Nz87Nz87Mzs3Mzs3LzczKzMvJy8rIysnIysnIysnHycjHycjGyMfFx8bFx8bExsXExsXExsXFx8bFx8bFx8bGyMfGyMfGyMfFx8bFx8bGyMfGyMfGyMfEyMfEyMfFycjGysnGysnGysnGysnGysnIzMvIzMvJzczKzs3Lz87Lz87M0M/M0M/N0dLN0dLO0tPP09TP09TQ1NXR1dbR1dbS1tfV2drX29zY3N3Z3d7a3t/b3+Db3+Dd397d397d397e4N/f4eDf4eDf4eDg4uHd397c3t3b3dzZ29rZ29rZ29rZ29rZ29ra3NvZ29rY2tnY2tnY2tnY2tnY2tnX2djX2djY2tnZ29rZ29rZ29rZ29rb3dzc3t3a3t3Z3dzZ29rZ29ra3NvZ29ra3Nvb3dzZ29rb3dza2trg4ODh4eHi4uLt7e3v7+/s7e/p6uzAwcOur7GztbS1t7a/wcC+wL/IysnQ0tHa3Nvg4uHm6Oft7+709vX5+/r8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v5+fn39/fy8vLr6+vl5eXe3t7V1dXOzs7Gxsa+vr68vb/LzM7f4OLr7O7y9PP3+fj4+vfz9fLz9fLz9fL09vX19/b09vXy9PPx8vTx8vTy9PPy9PPy9PPy9PPz8/Pz8/Pz8/Py8vLy8vLy8vLx8fHx8fHx8fHx8fHx8fHx8fHv7+/v7+/v7+/v7+/v7+/v7+/v7+/u7u7w8PDx8fHx8fHv7+/t7e3r6+vp6enp6enn6ejm6Ofm6Ofl5+bl5+bl5+bk5uXj5eTi5OPf4eDa3NvW2NfU1tXT1dTR09LQ0tHQ0tHP0dDO0M/O0M/Nz87Nz87Nz87Mzs3LzczLzczKzMvJy8rJy8rJy8rJy8rIysnHycjHycjHycjGyMfGyMfGyMfGyMfGyMfHycjHycjHycjHycjHycjHycjIysnIysnGysnGysnHy8rHy8rIzMvIzMvIzMvIzMvJzczKzs3Kzs3Lz87Lz87M0M/M0M/N0dDN0dLN0dLO0tPP09TQ1NXR1dbS1tfS1tfU2NnW2tvZ3d7Z3d7Z3d7Z3d7a3t/b3+Dd397c3t3d397f4eDh4+Li5OPg4uHf4eDb3dza3NvZ29rZ29rY2tnZ29rZ29rZ29rZ29rY2tnY2tnY2tnY2tnY2tnY2tnX2djY2tnY2tnY2tnZ29ra3Nvb3dzb3dzb3dza3t3Y3NvZ29rZ29rZ29rZ29rZ29ra3Nvc3t3Z29rh4eHg4ODj4+Pu7u7s7Ozq6uru7/HQ0dOys7WtrrC0trW4urm+wL/Fx8bMzs3T1dTc3t3j5eTo6unv8fD19/b5+/r8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz6+vr4+Pj09PTu7u7o6Ojh4eHZ2dnS0tLKysrCwsK4ubu9vsDQ0dPh4uTr7ez19/b5+/rx8/Ly9PHz9fL19/b19/bz9fTy9PPx8vTx8vTy9PPy9PPy9PPx8/Ly8vLz8/Pz8/Pz8/Pz8/Py8vLx8fHx8fHx8fHx8fHy8vLy8vLw8PDw8PDw8PDw8PDw8PDw8PDv7+/v7+/v7+/w8PDx8fHx8fHu8O/r7ezp6+ro6unm6Ofm6Ofm6Ofm6Ofl5+bk5uXj5eTi5OPk5uXi5OPd397Z29rX2djU1tXT1dTS1NPR09LQ0tHP0dDP0dDP0dDO0M/O0M/Nz87Nz87Mzs3Mzs3LzczLzczLzczLzczKzMvKzMvKzMvJy8rJy8rIysnIysnIysnIysnJy8rJy8rJy8rJy8rJy8rKzMvKzMvKzMvIzMvIzMvJzczKzs3Kzs3Kzs3Kzs3Kzs3Lz87Lz87Lz87M0M/M0M/N0dDN0dDO0tHO0tPO0tPP09TQ1NXR1dbS1tfT19jT19jV2drY3N3a3t/a3t/a3t/a3t/b3+Db3+De4N/d397e4N/g4uHj5eTi5OPg4uHd397Y2tnY2tnY2tnY2tnZ29rZ29rZ29ra3NvZ29rY2tnX2djX2djY2tnY2tnY2tnY2tnZ29rY2tnY2tna3Nvb3dzc3t3b3dza3Nvb3dza3NvZ29rZ29rZ29rZ29rZ29rb3dze4N/b3dzh4eHj4+Pr6+vv7+/p6enu7u7f4OK0tberrK6xsrS2uLe9v77AwsHLzczR09LY2tng4uHm6Ofs7u3y9PP4+Pj7+/v8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v6+vr29vbw8PDq6url5eXd3d3W1tbOzs7Gxsa+v8G4ubvAwcPV1tjl5+bu8O/z9fT09vXz9fL09vP09vX09vXz9fTz9fTz9Pbz9Pby9PPy9PPx8/Lx8/Ly8vLy8vLz8/Pz8/Pz8/Py8vLx8fHx8fHx8fHx8fHw8PDw8PDw8PDw8PDv7+/v7+/v7+/v7+/u7u7u7u7u7u7v7+/w8PDx8fHv8fDt7+7r7ezq7Ovo6uno6unn6ejm6Ofm6Ofl5+bk5uXj5eTl5+bj5eTg4uHc3t3Z29rW2NfV19bV19bS1NPS1NPR09LQ0tHQ0tHQ0tHP0dDO0M/P0dDO0M/Nz87Nz87Mzs3Mzs3Mzs3LzczLzczLzczLzczLzczKzMvKzMvKzMvKzMvKzMvKzMvKzMvKzMvLzczLzczLzczLzczJzczKzs3Kzs3Lz87Lz87Lz87Lz87Lz87M0M/M0M/N0dDO0tHO0tHP09LP09LQ1NPP09TQ1NXQ1NXR1dbS1tfT19jU2NnU2NnW2tvZ3d7b3+Db3+Db3+Dc4OHc4OHd4eLg4uHg4uHg4uHh4+Lh4+Lg4uHc3t3a3NvY2tnY2tnY2tnZ29rZ29ra3Nva3Nva3NvY2tnY2tnX2djX2djY2tnY2tnZ29rZ29rZ29rZ29ra3Nvb3dzc3t3b3dza3NvZ29rZ29rZ29rZ29ra3Nva3Nva3Nvb3dzd397d397f4eDi4uLq6urq6urp6env7+/m5ubAwcOoqauwsbO3uLq5u7rCxMPFx8bP0dDW2Nfc3t3j5eTp6+rv8fD19/b6+vr7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz7+/v39/fx8fHt7e3o6Ojg4ODZ2dnR0dHJycnExce7vL62t7nExcfa3Nvm6Ofu8O/4+vn2+Pf2+Pf09vXy9PPy9PP09vX09vX09vXy9PPy9PPx8/Lx8/Ly8vLy8vLz8/Pz8/Pz8/Py8vLy8vLx8fHx8fHw8PDu7u7t7e3u7u7t7e3t7e3t7e3s7u3r7ezq7Ovq7Ovr7ezs7u3t7+7u8O/v8fDv8fDv8fDu8O/r7ezq7Ovp6+rn6ejn6ejm6Ofm6Ofm6Ofm6Ofl5+bi5OPf4eDb3dzY2tnW2NfW2NfV19bU1tXT1dTS1NPR09LR09LQ0tHP0dDQ0tHP0dDO0M/Nz87Nz87Mzs3Mzs3LzczMzs3Mzs3Mzs3Mzs3Mzs3Mzs3Mzs3Mzs3Mzs3Mzs3LzczLzczLzczLzczMzs3Mzs3Mzs3Mzs3Nz87Nz87O0M/O0M/O0M/O0M/P0dDQ0tHQ0tHR09LS1NPT1dTU1tXU1tXT1dTU1tXU1tXV19bW2NfW2NfX2djX2dja3Nvc3t3e4N/e4N/d397e4N/e4N/f4eDf4eDf4eDg4uHf4eDd397b3dzZ29rY2tnX2djY2tnY2tnZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnX2djY2tnY2tnZ29ra3Nva3Nvb3dzc3t3c3t3b3dza3NvZ29rZ29rZ29rZ29rZ29ra3Nva3Nva3Nvc3t3e4N/e4N/i5OPr6+vv7+/o6Ojv7+/r6+vExMSrrK6trrC1tri6u729v77DxcTKzMvS1NPa3Nvf4eDm6Ofs7u3z8/P4+Pj7+/v8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v79/f38/Pz7+/v5+fnz8/Pv7+/r6+vk5OTd3d3V1dXNzc3ExcfBwsS2t7m3uLrKzMvb3dzo6un19/b3+fj3+fj19/by9PPx8/Lz9fT09vXz9fTz9fTy9PPx8/Lx8/Lx8fHy8vLy8vLz8/Py8vLy8vLx8fHx8fHw8PDv7+/t7e3s7Ozr6+vr6+vq6urq6urp6+ro6unn6ejn6ejm6Ofn6ejn6ejp6+rq7Ovs7u3s7u3s7u3q7Ovp6+rn6ejl5+bl5+bl5+bl5+bl5+bl5+bk5uXi5OPf4eDc3t3Z29rY2tnX2djW2NfW2NfU1tXT1dTT1dTS1NPR09LQ0tHR09LR09LP0dDO0M/O0M/Nz87Mzs3Mzs3Mzs3Mzs3Nz87Nz87Nz87Nz87Nz87Nz87Nz87Nz87Nz87Mzs3Mzs3Mzs3Nz87Nz87Mzs3Nz87Nz87O0M/O0M/P0dDP0dDO0M/Q0tHR09LS1NPT1dTU1tXV19bW2NfW2NfW2NfW2NfW2NfW2NfX2djX2djX2djX2dja3Nvd397e4N/d397c3t3c3t3c3t3c3t3b3dzc3t3c3t3b3dzZ29rX2djX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29ra3Nvc3t3b3dzb3dzc3t3b3dza3NvZ29rZ29ra3Nva3NvZ29ra3Nva3Nva3Nvb3dzd397f4eDj5eTo6unu7u7s7Ozz8/Pt7e3GxsasrKyrrK61tri1tri7vL7CxMPExsXO0M/X2djd397j5eTq7Ovw8vH29vb6+vr8/Pz8/Pz+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v79/f38/Pz8/Pz29vby8vLu7u7o6Ojh4eHZ2dnR0dHIycvExce8vb+2t7m7vbzKzMvc3t3p6+ry9PP19/b2+Pfz9fTx8/Lz9fT09vXz9fTz9fTy9PPy9PPx8/Lx8fHx8fHy8vLy8vLz8/Py8vLx8fHw8PDv7+/u7u7t7e3s7Ozr7ezq7Ovq7Ovp6+rp6+ro6unn6ejm6Ofk5uXk5uXj5eTk5uXl5+bl5+bj5+bj5+bk5uXj5eTi5OPh4+Lg4uHg4uHg4uHf4eDg4uHg4uHf4eDe4N/c3t3a3NvZ29rY2tnX2djW2NfV19bU1tXU1tXT1dTS1NPS1NPT1dTS1NPQ0tHQ0tHP0dDP0dDO0M/Nz87O0M/O0M/O0M/O0M/O0M/O0M/O0M/Nz87O0M/O0M/O0M/O0M/O0M/O0M/O0M/O0M/O0M/O0M/P0dDQ0tHQ0tHQ0tHQ0tHQ0tHS1NPS1NPT1dTU1tXV19bW2NfX2djX2djX2djX2djX2djX2djY2tnY2tnY2tnY2tnZ29rb3dzc3t3b3dza3NvZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnX2djX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rb3dzd397c3t3b3dza3Nva3NvZ29rZ29ra3Nva3Nva3Nva3Nva3Nvb3dzb3dzd397g4uHj5eTq7Ovu8O/r7ezo6unt7e3Pz8+np6eurq6xsrS4ubu4ubu+v8HFx8bJy8rU1tXb3dzh4+Ln6ejv7+/09PT4+Pj7+/v9/f39/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v7+/v79/f38/Pz+/v74+Pj19fXx8fHq6urk5OTc3NzU1NTOz9HGx8nCw8W8vb+ztbS6vLvP0dDd397t7+7z9fT3+fj19/by9PPz9fT09vX09vXz9fTy9PPy9PPx8/Ly8vLx8fHx8fHx8fHz8/Py8vLw8PDv7+/u7u7u7u7t7e3t7e3t7+7s7u3r7ezr7ezr7ezq7Ovp6+ro6uno6unm6Ofl5+bk5uXk5uXj5eTg5OPf4+Lg4uHf4eDe4N/e4N/d397d397c3t3b3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dza3NvX2djX2djW2NfV19bU1tXU1tXT1dTT1dTT1dTS1NPR09LR09LQ0tHQ0tHP0dDP0dDP0dDP0dDQ0tHQ0tHP0dDP0dDO0M/O0M/P0dDP0dDP0dDP0dDP0dDQ0tHQ0tHQ0tHQ0tHQ0tHQ0tHR09LR09LS1NPS1NPS1NPT1dTT1dTU1tXV19bW2NfX2djX2djX2djX2djX2djY2tnY2tnY2tnY2tnZ29rZ29rW2NfY2tna3NvZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnX2djZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnZ29rY2tnY2tna3Nvc3t3d397c3t3b3dzZ29rY2tnZ29ra3Nvb3dza3Nva3Nva3Nvb3dzc3t3d397f4eDk5uXo6unt7+7u8O/t7+7s7u3Q0NCsrKyqqqqysrKxsrS3uLq/wMLDxMbHycjQ0tHZ29rc3t3k5uXq7Ovy8vL29vb5+fn8/Pz+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v6+vr39/fz8/Pu7u7n5+fg4ODa2trU1tXJy8rCxMPAwsG5uryztLa9v77P0dDd397p6+r09vX3+fj09vXz9fTz9fTz9fTz9fTz9fTy9PPz9fTz8/Py8vLx8fHx8fHx8fHx8fHx8fHx8fHw8PDv7+/t7e3s7Ozr7ezr7ezs7u3s7u3r7ezq7Ovp6+rp6+ro6unn6ejm6Ofl5+bj5+bi5uXh5eTg5OPi5OPi5OPh4+Lf4eDe4N/d397c3t3c3t3c3t3b3dza3NvZ29rZ29rZ29rY2tnY2tnY2tnY2tnX2djW2NfU1tXT1dTU1tXV19bV19bT1dTS1NPT1dTT1dTS1NPR09LS1NPS1NPR09LR09LR09LR09LQ0tHP0dDQ0tHQ0tHQ0tHQ0tHQ0tHQ0tHR09LR09LS1NPS1NPS1NPT1dTT1dTS1NPT1dTU1tXU1tXV19bV19bV19bW2NfX2djX2djY2tnY2tnZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29ra3Nva3Nva3Nva3NvZ29rY2tnZ29rb3dzZ2dne3t7d3d3d3d3k5OTm5ubp6eny8vLt7e3u7u7v8PLT1NatrrCoqauxsrSys7W3uLq5ury/wMLHyMrO0M/U1tXb3dzh4+Lp6enu7u709PT4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v7+/v4+Pj19fXw8PDr6+vj4+Pe3t7Z29rR09LIysnDxcS7vL60tbe1t7a8vr3U1tXb3dzo6unz9fT3+fj09vXz9fT19/bz9fTy9PPy9PPy9PPy8vLx8fHy8vLy8vLx8fHx8fHx8fHx8fHw8PDv7+/t7e3s7Ozr7ezs7u3s7u3s7u3r7ezq7Ovp6+rp6+ro6uno6unn6ejm6Ofk6Ofj5+bi5uXh5eTi5OPi5OPh4+Lg4uHf4eDe4N/d397d397d397c3t3b3dza3Nva3Nva3NvZ29rZ29rY2tnY2tnX2djW2NfV19bV19bV19bW2NfV19bU1tXT1dTT1dTU1tXT1dTT1dTT1dTS1NPS1NPR09LS1NPS1NPQ0tHQ0tHQ0tHR09LR09LR09LR09LR09LS1NPT1dTT1dTT1dTT1dTT1dTT1dTT1dTU1tXU1tXV19bW2NfW2NfW2NfX2djY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29ra3NvZ29rY2tnZ29rb3dze3t7Z2dne3t7k5OTj4+Pr6+vy8vLs7Ozu7u7z8/PX2NqwsbOqq62ur7GtrrC3uLq6u72+v8HExcfMzc/S1NPY2tng4uHm6Ofs7Ozx8fH39/f5+fn7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8/Pz8/Pz6+vr4+Pj09PTv7+/o6Ojj4+Pc3t3W2NfNz87GyMfAwcO7vL61trixsrS/wMLOz9He4N/o6unx8/L3+fj3+fbx8/D09vXz9fTz9fTy9PPy8vLx8fHx8fHx8fHx8fHx8fHx8fHx8fHw8PDv7+/t7e3s7Ozr7ezs7u3s7u3s7u3r7ezq7Ovp6+rp6+rp6+ro6unn6ejn6ejm6Ofl5+bk5uXk5uXj5eTj5eTi5OPh4+Lg4uHf4eDe4N/e4N/d397d397c3t3b3dzb3dza3Nva3NvZ29rY2tnX2djW2NfW2NfW2NfW2NfW2NfW2NfW2NfV19bU1tXU1tXV19bU1tXU1tXU1tXU1tXT1dTT1dTT1dTT1dTR09LR09LS1NPS1NPS1NPS1NPT1dTT1dTT1dTU1tXV19bT1dTU1tXV19bV19bV19bV19bW2NfW2NfX2djY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29ra3Nva3NvY2tnY2tnZ29rZ29rZ29rZ29ra3Nvb3dzb29vg4ODl5eXm5ubp6enw8PDy8vLr6+vw8PLU1Na0tbelpqisra+0tbeztLa5ury+v8HCw8XJyszQ0dPW2Nfd397m5ubs7Ozx8fH19fX6+vr8/Pz8/Pz9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/f38/Pz6+vr39/fz8/Pt7e3o6Ojf4eDa3NvR09LKzMvGx8nCw8W7vL61triwsbPAwcPQ0tHc3t3n6ejz9fT19/Tx8/Dz9fTz9fTy9PPy9PPz8/Py8vLx8fHw8PDx8fHx8fHx8fHx8fHw8PDv7+/u7u7s7Ozs7u3s7u3t7+7s7u3r7ezq7Ovq7Ovp6+rp6+ro6uno6unn6ejn6ejm6Ofl5+bk5uXk5uXj5eTj5eTi5OPh4+Lg4uHg4uHf4eDe4N/d397c3t3c3t3c3t3b3dza3Nva3NvZ29rY2tnX2djX2djX2djX2djX2djX2djX2djV19bV19bV19bW2NfV19bV19bW2NfV19bU1tXU1tXU1tXU1tXT1dTS1NPT1dTT1dTT1dTT1dTT1dTT1dTU1tXV19bV19bU1tXV19bW2NfX2djX2djX2djX2djX2djY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29ra3Nva3NvZ29rZ29rZ29ra3NvZ29rZ29ra3Nvc3t3h4eHf39/l5eXu7u7x8fHs7Ozs7Ozx8fHX19murrCkpaewsbOys7W0tbe5ury8vb/Cw8XHyMrOz9HU1dfa3Nvh4+Lq6urw8PD19fX4+Pj8/Pz9/f39/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v79/f37+/v5+fn29vbw8PDs7Ozk5uXf4eDX2djQ0tHKy83DxMa9vsC6u72ztLays7W6vLvO0M/e4N/n6ejv8e72+PXy9PPy9PPx8/Lw8vHy8vLz8/Pz8/Px8fHx8fHx8fHx8fHx8fHw8PDv7+/u7u7t7e3s7u3s7u3t7+7t7+7s7u3r7ezq7Ovq7Ovp6+ro6uno6unn6ejn6ejm6Ofl5+bk5uXk5uXk5uXk5uXj5eTj5eTi5OPh4+Lg4uHe4N/e4N/d397d397c3t3c3t3b3dza3Nvb3dza3NvY2tnY2tnY2tnY2tnY2tnX2djX2djW2NfV19bW2NfW2NfW2NfW2NfW2NfW2NfV19bV19bW2NfV19bU1tXU1tXU1tXU1tXU1tXU1tXU1tXU1tXU1tXV19bW2NfV19bW2NfX2djY2tnY2tnY2tnY2tnY2tnZ29rZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnZ29rZ29ra3Nvb3dza3Nva3Nva3Nva3Nva3Nvc3t3e4N/k5OTi4uLs7Ozw8PDs7Ozy8vLu7u7V1dWtra+pqausra+ys7W1tri1tri4ub3Cw8fGx8nMzc/V1dfb293g4ODm5ubu7u7z8/P39/f6+vr9/f39/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v79/f38/Pz6+vr4+Pjz8/Pv7+/o6unj5eTd397X2djP0NLGx8m/wMK8vb+5urywsbOusK+6vLvMzs3b3dzo6ufx8/D19/b2+Pf09vXx8/Lx8fHy8vLy8vLx8fHx8fHx8fHx8fHx8fHx8fHw8PDu7u7t7e3s7u3t7+7t7+7t7+7s7u3r7ezq7Ovq7Ovp6+rp6+ro6uno6unn6ejn6ejm6Ofl5+bk5uXk5uXk5uXk5uXk5uXj5eTi5OPh4+Lf4eDf4eDe4N/e4N/e4N/d397c3t3b3dzc3t3b3dza3Nva3NvZ29rZ29rY2tnY2tnY2tnX2djW2NfX2djX2djX2djW2NfX2djX2djW2NfW2NfX2djW2NfV19bV19bV19bV19bV19bV19bV19bU1tXU1tXV19bW2NfX2djX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnZ29rZ29ra3Nvb3dzb3dza3Nvb3dzb3dzc3t3f4eDi5OPl5eXt7e3z8/Pv7+/u7u7v7+/U1NSqqqqmpqivr7Gys7WxsrS3uLq7vL67vMDGx8vLzM7R0tTa2tzf3+Hl5eXr6+vx8fH19fX5+fn7+/v9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz7+/v6+vr29vbz8/Ps7u3n6ejh4+Lb3dzV1tjNztDGx8nBwsS8vb+4ubuxs7KvsbC4urnJy8rZ29jh4+Dv8fD09vX3+fj19/bz8/Py8vLy8vLx8fHx8fHx8fHx8fHx8fHx8fHw8PDu7u7t7e3t7e3u7u7u7u7u7u7t7e3s7Ozq7Ovq7Ovq7Ovp6+rp6+ro6uno6unn6ejm6Ofm6Ofk5uXk5uXl5+bl5+bk5uXj5eTi5OPi5OPh4+Lg4uHg4uHf4eDf4eDe4N/d397d397c3t3c3t3c3t3b3dza3NvZ29rZ29rZ29ra3NvY2tnY2tnY2tnY2tnX2djX2djY2tnY2tnX2djX2djX2djX2djW2NfV19bW2NfW2NfW2NfW2NfW2NfV19bV19bV19bW2NfY2tnY2tnY2tnY2tnX2djX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnX2djX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29ra3NvZ29rZ29rY2tnY2tnZ29ra3Nva3Nvc3t3b3dzb3dzc3t3d397g4uHk5uXo6unu7u7v7e7t7e3x8fHq6urKysqrq6ulpaWysrSurrCys7W2t7m6u73AwcPFxsrKy8/Q0dPW19nf3+Hk5Obp6enw8PD09PT39/f6+vr8/Pz+/v7+/v7+/v7////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz7+/v5+fn19fXx8/Lt7+7l5+bd397Z2tzV1tjNztDFxsi+v8G7vL62uLexs7KusK+1t7bGyMfW2Nff4eDq7Ov19/b2+Pf09PTz8/Py8vLy8vLx8fHx8fHx8fHx8fHx8fHw8PDu7u7t7e3t7e3u7u7u7u7u7u7t7e3s7Ozq7Ovq7Ovq7Ovq7Ovp6+rp6+rp6+ro6unn6ejm6Ofk5uXk5uXl5+bl5+bk5uXk5uXj5eTi5OPh4+Lh4+Lh4+Lh4+Lg4uHf4eDe4N/d397c3t3d397d397c3t3b3dza3Nva3Nvb3dzb3dza3NvZ29rZ29rZ29rY2tnY2tnY2tnY2tnX2djX2djY2tnX2djW2NfV19bW2NfX2djX2djX2djW2NfV19bV19bV19bW2NfY2tnY2tnY2tnY2tnX2djX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29ra3Nva3NvZ29rZ29rZ29rZ29ra3Nvb3dzc3t3c3t3c3t3e4N/g4uHk5uXp6+rt7+7x8fHv7+/w8PDl5eXHx8erq6unp6ewsLCvr7GwsLK3uLq5ury7vL7DxMbKy83Q0dPV1tjb3N7k5Obp6evu7u709PT4+Pj5+fn7+/v9/f3+/v7+/v7+/v7////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v6+vr5+fn09PTx8fHr6+vl5eXg4ODa2trS1NPNz87HyMq/wMK6u724ubuxsrSsra+1trjFx8bU1tXc3tvo6ufz9fL3+fj19/bz8/Py8vLz8/Py8vLx8fHx8fHy8vLy8vLy8PHx7/Dw7u/w7u/t7e3s7Ozs7Ozs7Ozs7Ozt7e3r7ezq7Ovp6+rp6+rp6+ro6unm6unl6ejn6ejm6Ofl5+bk5uXk5uXl5+bl5+bl5+bj5eTj5eTi5OPi5OPh4+Lg4uHf4eDe4N/e4N/e4N/d397d397c3t3c3t3b3dzb3dzb3dza3NvY2tnY2tnY2tnY2tnY2tnZ29rX2djX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnX2djX2djX2djX2djX2djY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29ra3NvY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29ra3Nvb3dzb3dzc3t3b3dzb3dzd397c3t3d39zi5OHp6+ju8O3v8e7t7+7t7+7w8fPg4eO9vsCmp6mnqKqvsLKwsbOxsrS0tbe5ury+v8HDxMbJyszR0tTW2Nfd3d3j4+Pq6uru7u7y8vL29vb6+vr8/Pz+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz6+vr6+vr39/f09PTv7+/q6urk5OTf39/X2djR09LKy83DxMa+v8G8vb+3uLqxsrSur7GwsbO9v77Nz8zd39zl5+Ts7u309vX29vbz8/Pv7+/x8fHz8/Py8vLw8PDv7+/x7/Dy8PHx7/Dw7u/t7e3s7Ozs7Ozs7Ozt7e3t7e3r7ezq7Ovp6+rp6+rp6+rp6+rm6unm6unn6ejm6Ofm6Ofl5+bl5+bl5+bl5+bl5+bk5uXj5eTj5eTj5eTi5OPh4+Lg4uHf4eDf4eDf4eDe4N/e4N/d397c3t3c3t3c3t3c3t3b3dza3Nva3Nva3NvZ29rZ29ra3NvZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rY2tnY2tnZ29rZ29rZ29rZ29rZ29rZ29rY2tnY2tnY2tnY2tnZ29rZ29rZ29rZ29rY2tnY2tnZ29rZ29rZ29rZ29rZ29ra3NvZ29ra3Nva3Nvb3dzb3dzc3t3c3t3d397a3Nvi5OPo6ufp6+jr7eru8O3u8O3r7ezs7e/W19m7vL6sra+qq62trrCxsrSys7W0tbe4ubu9vsDCw8XHyMrOz9HV19bb3dzh4eHn5+ft7e3x8fH09PT4+Pj7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz7+/v5+fn4+Pj09PTv7+/q6url5eXc3t3W2NfP0NLKy83DxMa9vsC6u723uLqxsrSsra+vsbC4urnGyMfW2Nfi5OPq7Ovx8fH19fX09PTz8/Px8fHw8PDx8fHy8vLx8fHv7+/w8PDv7+/u7u7s7Ozs7Ozs7Ozt7e3t7e3r7ezr7ezq7Ovp6+rp6+rp6+ro6uno6unn6ejn6ejn6ejm6Ofm6Ofl5+bl5+bm6Ofl5+bk5uXk5uXj5eTj5eTj5eTi5OPh4+Lg4uHg4uHf4eDf4eDe4N/e4N/d397d397d397c3t3b3dzc3t3c3t3b3dza3Nvb3dzc3t3b3dzb3dzb3dzb3dza3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3NvZ29rZ29rZ29rZ29rZ29rZ29rZ29ra3Nva3Nva3Nva3Nva3Nva3Nva3Nva3NvZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29rZ29ra3Nva3NvZ29rZ29rZ29rZ29rZ29rZ29ra3Nva3NvZ29rZ29rZ29rZ29rZ29rZ29ra3Nva3Nva3Nva3Nvb3dzb3dzb3dzc3t3e4N/g4uHl5+bo6uns7u3u8O/u8O/s7u3r7ezq7OvOz9G2t7mlpqinqKqur7GvsLKwsbO1tri4ubu8vb/Cw8XHyMrNz87T1dTb3dzg4uHn5+fs7Ozy8vL19fX4+Pj6+vr9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f39/f36+vr5+fn29vbz8/Pv7+/p6enh4+Lb3dzU1dfR0tTKy83Cw8W+v8G8vb+5ury1trixs7KusK+ztbTCxMPR09Lb3dzm5ubv7+/29vb19fXy8vLw8PDx8fHy8vLx8fHt7e3w8PDv7+/u7u7t7e3t7e3t7e3t7e3t7e3s7u3r7ezq7Ovq7Ovq7Ovp6+rp6+ro6unn6ejo6uno6unn6ejm6Ofm6Ofm6Ofm6Ofl5+bl5+bk5uXk5uXk5uXj5eTj5eTi5OPh4+Lh4+Lg4uHg4uHf4eDf4eDe4N/e4N/e4N/d397d397d397d397c3t3b3dzb3dzc3t3c3t3c3t3c3t3c3t3b3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dza3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nva3Nvb3dzb3dzb3dza3Nva3Nva3Nva3Nva3Nva3NvZ29rZ29rZ29rZ29ra3Nva3Nva3Nvb3dzc3t3c3t3c3t3c3t3e4N/i5OPl5+bq7Ovu8O/t7+7r7ezu8O/v8fDe4N/Hycisra+pqqypqqytrrCvsLKxsrS0tbe4ubu9vsDBwsTIycvOz9HT1dTZ29rg4uHl5+bs7Ozw8PD19fX4+Pj6+vr8/Pz+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v76+vr6+vr4+Pj19fXy8vLu7u7n5+fh4eHa293W19nR0tTMzc/Gx8m/wMK6u723uLq0tbeys7WvsLKwsbO5urzJyszZ2dvh4ePs7Ozy8vL29vb09PTv7+/u7u7u7u7u7u7v7+/v7+/v7+/u7u7u7u7t7e3t7e3s7Ozs7u3r7ezr7ezq7Ovq7Ovq7Ovp6+rp6+ro6uno6uno6uno6unn6ejn6ejm6Ofm6Ofl5+bl5+bk5uXk5uXk5uXk5uXj5eTj5eTi5OPi5OPh4+Lh4+Lg4uHf4eDf4eDf4eDf4eDe4N/e4N/e4N/e4N/d397c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3b3dzb3dzc3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3b3dzb3dzb3dza3Nva3Nva3Nva3Nva3Nvb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dza3Nva3Nva3Nvb3dzb3dzb3dzb3dzb3dzc3t3c3t3c3t3b3dzb3dza3Nva3Nva3Nvb3dzb3dza3Nva3Nva3Nva3Nvb3dzb3dzc3tvc3tvd39ze4N3f4eDj5eTn6ejr7ezv8fDr7ezs7e/w8fPr7O7W19m5urylpqimp6mrrK6ur7Gur7GxsrS3uLq8vb+8vb/DxMbHyMrO0M/U1tXZ29rf4eDm6Ofr7ezw8PDz8/P4+Pj6+vr8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz7+/v6+vr4+Pj29vbz8/Pt7e3o6Oji4+Xa293T1NbQ0dPMzc/Exce9vsC6u724ubu0tbevsLKsra+trrC0tbfFxcfT09Xf39/p6eny8vL09PTz8/Pz8/Py8vLw8PDv7+/v7+/v7+/v7+/u7u7u7u7t7e3s7Ozs7u3s7u3r7ezr7ezq7Ovq7Ovq7Ovp6+rq7Ovp6+ro6uno6uno6unn6ejn6ejm6Ofl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXj5eTj5eTi5OPi5OPh4+Lg4uHg4uHg4uHg4uHf4eDe4N/f4eDf4eDe4N/d397d397d397d397d397d397d397c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3b3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzb3dzc3t3c3t3c3t3c3t3c3t3b3dzb3dza3Nva3Nva3Nvc3t3c3t3b3dzb3dzb3dzc3t3c3t3d397d39ze4N3g4t/i5OHl5+bp6+rt7+7v8fDy9PPu8O/t7vDk5efLzM6trrCio6Wpqqysra+ur7GvsLKxsrS1tri7vL6/wMLBwsTIycvNztDU1tXa3Nvf4eDk5uXq7Ovu8O/z8/P29vb5+fn7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz7+/v5+fn39/fz8/Pu7u7p6eni4uLZ2tzV1tjR0tTLzM7FxsjCw8W+v8O2t7uys7e0tbmwsbWqq6+zs7XBwcPNzc/X19nh4eHp6enx8fH29vb19fXx8fHw8PDw8PDv7+/u7u7u7u7t7e3t7e3t7e3t7+7s7u3r7ezr7ezr7ezq7Ovq7Ovp6+rr7ezp6+rn6ejn6ejo6uno6unn6ejm6Ofm6Ofl5+bk5uXk5uXl5+bl5+bl5+bl5+bk5uXk5uXj5eTj5eTi5OPi5OPh4+Lh4+Lh4+Lg4uHf4eDg4uHg4uHf4eDe4N/e4N/e4N/e4N/e4N/e4N/e4N/d397d397c3t3d397d397d397d397d397d397d397d397c3t3c3t3c3t3c3t3c3t3c3t3c3t3d397c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3b3dzb3dzb3dzb3dzb3dzb3dzc3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3b3dzb3dzb3dzb3dzb3dzb3dzd397c3t3c3t3c3t3c3t3d397e4N/f4eDg4t/i5OHm6OXp6+js7u3u8O/v8fDv8fDo6evq6+3b3N68vb+mp6mmp6mtrrKvsLSur7GvsLKztLa4ubu6u729vsDCw8XIycvO0M/T1dTa3Nvg4uHl5+bp6+rw8PD09PT39/f5+fn7+/v8/Pz9/f3////////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f38/Pz8/Pz6+vr29vby8vLr6+vp6enk5efe3+HX2NrQ0dPKy83HyMrBwsa9vsK5ur63uLy0tbmvsLStra+urrC5ubvGxsjT09Pc3Nzk5OTt7e3z8/P09PTx8fHw8PDv7+/u7u7t7e3t7e3u7u7u7u7t7+7s7u3r7ezr7ezr7ezr7ezq7Ovq7Ovs7u3p6+rn6ejm6Ofo6uno6unn6ejm6Ofm6Ofl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXj5eTi5OPi5OPi5OPi5OPg4uHg4uHg4uHg4uHf4eDf4eDf4eDg4uHg4uHg4uHf4eDe4N/e4N/d397d397d397d397d397d397d397d397d397d397d397d397d397d397d397d397d397e4N/d397d397d397d397d397d397d397d397d397d397d397c3t3c3t3c3t3b3dzb3dzc3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3b3dzb3dzb3dzc3t3c3t3c3t3d397d397c3t3c3t3d397f4eDg4uHh4+Lk5uPn6ebr7eru8O3w8vHw8vHu8O/s7u3l5ujKy82ur7GlpqirrK6wsbOvsLSsrbGys7WztLa2t7m6u72+v8HDxMbJyszP0NLU1tXZ29rg4uHm6Ofq7Ovv8fD19fX4+Pj5+fn7+/v9/f39/f3+/v7////////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f38/Pz5+fn39/f29vbv7+/t7e3p6eni4uLc3NzX19fR0tTNztDJyM3Dwse/vsO7ur+3tru1tLmztLavsLKpqqyur7G7vL7Mzc/Y2tnf4eDm6Oft7+709PTz8/Px8fHw8PDx8fHy8vLv7+/s7Ozt7+7s7u3r7ezr7ezr7ezq7Ovq7Ovr7ezq7Ovq7Ovp6+ro6unn6ejn6ejm6Ofm6Ofo6unn6ejm6Ofn6ejn6ejl5+bk5uXk5uXl5+bl5+bl5+bl5+bk5uXj5eTi5OPi5OPi5OPh4+Lh4+Lg4uHg4uHg4uHg4uHf4eDf4eDf4eDf4eDf4eDe4N/e4N/e4N/e4N/f4eDe4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/d397d397d397d397d397d397d397d397d397d397d397d397c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3c3t3d397d397c3t3b3dzc3t3d397e4N/e4N/d397e4N/d397d397f4eDg4uHh4+Lk5uXo6unr7erv8e7v8fDt7+7u8O/w8vHl5+bX2di3uLqsra+lpqioqausrbGtrrKvsLSys7e0tbe3uLq7vL6/wMLExcfKy83R0tTW19nc3t3h4+Lo6Ojt7e3y8vL29vb4+Pj4+Pj7+/v8/Pz9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v5+fn4+Pj09PTy8vLu7u7p6enj4+Pe3t7X2NrT1NbOzdLIx8zEw8jAv8S7ur+5uL22t7mys7W0tberrK6oqauwsbPAwsHNz87Y2tnf4eDn5+fw8PD39/f09PTt7e3r6+vv7+/09PTt7+7s7u3s7u3s7u3s7u3q7Ovp6+rp6+rq7Ovq7Ovp6+rp6+rp6+ro6uno6uno6uno6unn6ejn6ejn6ejn6ejm6Ofl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXj5eTi5OPi5OPi5OPh4+Lh4+Lh4+Lh4+Lh4+Lh4+Lg4uHg4uHg4uHf4eDf4eDf4eDf4eDf4eDe4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/c3t3c3t3d397d397d397d397d397e4N/d397e4N/e4N/d397c3t3c3t3c3t3c3t3d397d397c3t3d397d397e4N/d397d397d397f4eDh4+Li5OPj5eTm6Ofr7ezv8fDu8O3s7uvt7+7x8/Ls7u3Z29rAwsGvsbCrrK6oqaupqqytrrCvsLSvsLSztLi4ub25ury8vb/BwsTFxsjJyszP0NLV1tja293h4+Ll5+bs7Ozw8PD09PT4+Pj5+fn6+vr8/Pz8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz7+/v5+fn39/fz8/Pu7u7q6url5eXf39/a2trU1NbOztDKyszFxcfAwMK9vb+5ury1triztLaxsrSwsbOur7GtrrCys7XCw8XS09XZ29rf4eDn6ejv8fD09vX19/by9PPt7+7v7+/u7u7u7u7u7u7u7u7t7e3s7Ozs7Ozq7Ovp6+rp6+rp6+rp6+ro6uno6uno6uno6unn6ejn6ejn6ejn6ejm6Ofl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXj5eTj5eTi5OPi5OPi5OPi5OPi5OPi5OPh4+Lh4+Lh4+Lg4uHg4uHg4uHg4uHg4uHf4eDf4eDf4eDf4eDf4eDf4eDe4N/e4N/f4eDf4eDf4eDe4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/c3t3d397d397d397e4N/e4N/e4N/e4N/d397e4N/e4N/d397c3t3c3t3b3dzc3t3e4N/f4eDf4eDe4N/e4N/e4N/e4N/e4N/g4uHi5OPj5eTm6Ofr7ezx8/Lx8/Lv8fDw8vHy9PPt7+7c3t3Fxsiys7WoqaulpqinqKqqq62ur7GxsrSxsrays7e2t7u6u7++v8HCw8XGx8nLzM7Q0tHV19bc3t3g4uHo6Ojs7Ozy8vL19fX39/f6+vr8/Pz8/Pz9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f36+vr5+fn19fXy8vLv7+/r6+vl5eXf39/b293V1dfR0dPMzM7GxsjCwsS+v8G5ury0tbeztLaztLaxsrStrrCrrK6vsLK1trjGyMfNz87Y2tnh4+Lo6unu8O/y9PP09vXy8vLx8fHw8PDu7u7t7e3t7e3s7Ozs7Ozq7Ovq7Ovq7Ovp6+rp6+rp6+ro6uno6uno6unn6ejn6ejn6ejn6ejm6Ofl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXk5uXj5eTj5eTj5eTj5eTj5eTj5eTh4+Lh4+Lh4+Lh4+Lh4+Lg4uHg4uHg4uHf4eDg4uHg4uHg4uHg4uHg4uHf4eDf4eDf4eDf4eDf4eDf4eDe4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/d397d397d397d397d397e4N/e4N/d397d397d397d397e4N/f4eDf4eDf4eDf4eDf4eDh4+Li5OPk5uXr7ezw8vHv8fDt7+7u8O/v8fDt7+7r7ezf4eDJy8qztbSnqKqmp6mqq62sra+trrCur7GvsLKxsrS0tbm4ub27vMC7vMDDxMbHyMrMzc/R0tTX2djd397j5eTn6ejt7e3x8fH29vb4+Pj5+fn7+/v9/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v78/Pz7+/v5+fn29vb09PTx8fHr6+vm5ubi4uLd3d3Y2NjU1NTNzc3JycnExsW/wcC8vb+3uLqztLaxsrSxsrSur7Gqq6+oqauvsbC4urnGyMfQ0tHX2djd397m6Oft7+7y8vLz8/Pz8/Pw8PDv7+/t7e3s7Ozq6urr7ezr7ezr7ezq7Ovq7Ovq7Ovq7Ovq7Ovo6unn6ejn6ejn6ejn6ejm6Ofl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXk5uXj5eTj5eTj5eTi5OPi5OPi5OPi5OPh4+Lh4+Lh4+Lh4+Lh4+Lg4uHg4uHg4uHg4uHg4uHh4+Lh4+Lg4uHg4uHf4eDf4eDf4eDf4eDf4eDe4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/d397d397d397d397d397e4N/e4N/e4N/e4N/e4N/f4eDf4eDd397e4N/g4uHh4+Li5OPk5uXn6ejp6+rs7u3u8O/v8fDv8fDw8vHw8vHn6eje4N/Jysy1trimp6mlpqiqq62rrK6sra+vsLKvsLKwsbOxsrSys7W3uLq9vsDBwsTCw8XJyszNztDT1NbY2dvd397j5eTp6+rt7+7w8PD19fX5+fn6+vr6+vr8/Pz9/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v79/f38/Pz6+vr5+fn29vby8vLt7e3o6Ojj4+Pf39/b29vU1NTQ0NDKzMvFx8a/wMK+v8G8vb+4ubuztLavsLKvsLSwsbOpqqyqrKuvsbC5u7rGyMfR09LY2tnc3t3n5+fs7Ozx8fHz8/Pz8/Pz8/Py8vLw8PDs7u3s7u3r7ezr7ezr7ezq7Ovq7Ovq7Ovp6+ro6unn6ejo6uno6unm6Ofl5+bl5+bm6Ofm6Ofl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXj5eTj5eTi5OPi5OPi5OPh4+Li5OPi5OPh4+Lh4+Lh4+Lh4+Lg4uHg4uHg4uHg4uHg4uHg4uHg4uHg4uHf4eDf4eDf4eDf4eDf4eDf4eDf4eDe4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/f4eDg4uHh4+Lj5eTl5+bn6ejp6+rr7ezu8O/x8/L09vXx8/Lu8O/r7ezo6und397Iysm3ubinqKqmp6moqausra+trrCrrK6trrCwsbOxsrS0tbe4ubu6u728vb/BwsTHyMrKy83Q0dPU1dfa293f4OLj5eTn6ejs7u3v8fD09PT39/f6+vr7+/v7+/v8/Pz+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v79/f37+/v6+vr29vbz8/Pu7uzp6efm5uTi4uDc3NrX19XS1NPMzs3HyMrCw8W+v8G7vL65ur62t7uxtbiusrOwsbOtr66qrKupq6qtr662uLfFx8bQ0tHT09Pc3Nzl5eXq6urt7e3y8vL09PT19fXv8fDv8fDu8O/t7+7s7u3r7ezq7Ovq7Ovq7Ovp6+ro6unp6+rp6+rn6ejm6Ofm6Ofn6ejn6ejn6ejm6Ofm6Ofl5+bk5uXk5uXk5uXk5uXk5uXj5eTj5eTj5eTj5eTj5eTi5OPi5OPi5OPi5OPh4+Lh4+Lh4+Lh4+Lg4uHg4uHg4uHg4uHg4uHg4uHf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDe4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/e4N/f4eDf4eDf4eDf4eDg4uHh4+Lj5eTk5uXo6unq7Ovs7u3u8O/v8fDv8fDw8vHw8vHv8fDt7+7m6OfY2tnExsWxs7Klp6agoqGoqausrbGur7OsrbGtrrKxsraztLawsbO2t7m5ury+v8HBwsTDxMbHyMrNztDS09XY2dvc3d/h4+Ll5+bp6+rs7u3x8fH09PT4+Pj6+vr8/Pz9/f39/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz6+vr39/f09PLv7+3s7Orp6efj4+He3tzY2tnT1dTQ0dPLzM7FxsjAwcO9vsK6u7+0uLuytrmztLaxs7KwsbOtr66qrKuoqqmsrq2ytLPDw8PMzMzW1tbb29vg4ODn5+ft7e3v7+/19/b09vXy9PPw8vHu8O/t7+7r7ezr7ezq7Ovp6+rp6+rp6+rp6+ro6unn6ejn6ejn6ejn6ejo6unn6ejn6ejm6Ofl5+bk5uXl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXj5eTi5OPi5OPi5OPi5OPh4+Lh4+Lh4+Lh4+Lh4+Lg4uHg4uHg4uHg4uHg4uHg4uHf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDe4N/e4N/e4N/h4+Li5OPi5OPj5eTk5uXm6Ofo6unq7Ovt7+7u8O/w8vHx8/Lw8vHu8O/s7u3r7ezh4+LR09K8vr2tr66nqaimqKepq6qrrK6srbGsrbGur7OwsbWwsbWwsbWztLa3uLq7vL67vL6/wMLFxsjKy83P0NLU1dfZ2tzd3uDh4uTn6ejs7u3v8fDy9PP39/f6+vr7+/v9/f3+/v7+/v7+/v7////////////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f37+/v7+/v39/X19fPx8fHt7e3p6enl5eXh4eHe3t7Y2dvT1NbNztDIycvExcfAwcO6vsG3u760uLuzt7iztLiwsbOur7GrrK6qq62pqqytrrCxsrS6u73HyMrR0tTW19nb3N7f4OLm5ubs7Ozx8fHz8/Py8vLy8vLw8PDu7u7r6+ns7Ort7evt7evs7Orr6+nr6+nr6+nq6urp6eno6Ojo6Ojo6Ojn5+fn5+fn5+fo6Ojm5ubm5ubn5+fn5+fk5OTk5OTk5OTk5uXj5eTj5eTk5uXk5uXi5OPh4+Lj5eTh4+Lh4+Lh4+Lh4+Lg4uHg4uHg4uHg4uHg4uHf4eDf4eDg4uHg4uHg4uHg4uHf4eDf4eDf4eDf4eDg4uHg4uHh4+Lg4uHg4uHg4uHg4uHg4uHg4uHg4uHh4+Li5OPk5uXn6ejl5+bm6Ofq7Ovs7u3s7u3t7+7w8vHx8vTw8fPx8vTw8fPt7vDj5ObW19nMzc+0tbesra+mp6mmp6mpqqyqq62qq62sra+ur7Our7OwsbWys7e0tbm3uLy6u728vb/AwcPExcfJycnNzc3S0tLY2Njd3d3g4ODk5OTp6ent7e3w8PDz8/P29vb5+fn7+/v8/Pz9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz6+vj5+ff19fXx8fHt7e3q6urm5ubj4+Pd3uDZ2tzT1NbOz9HLzM7HyMrAxMe9wcS6vsG4vL+4ub21trqys7WwsbOvsLKur7GoqaunqKqpqqyvsLK2t7m/wMLKy83U1dfX19fd3d3k5OTp6ens7Ozv7+/x8fHx8fH19fPz8/Hw8O7t7evr6+nq6ujq6ujr6+np6enp6enp6enp6enq6urq6urr6+vr6+vo6Ojn5+fn5+fo6Ojo6Ojm5ubm5ubn5+fk5uXj5eTj5eTk5uXk5uXj5eTi5OPj5eTj5eTj5eTi5OPi5OPi5OPi5OPh4+Lh4+Li5OPh4+Lh4+Lh4+Lh4+Lh4+Lg4uHg4uHi5OPh4+Lg4uHg4uHh4+Li5OPh4+Lg4uHj5eTk5uXl5+bm6Ofl5+bm6Ofn6ejp6+rr7ezs7u3t7+7u8O/v8fDw8vHu8O/t7+7v8PLq6+3j5Obb3N7P0NLAwcOwsbOlpqipqqynqKqoqautrrCvsLKur7GtrrCur7GwsbWys7e0tbm2t7u5ur68vcHAwcPCw8XGx8nKy83Pz8/U1NTY2Nje3t7j4+Pm5ubp6ent7e3y8vL09PT29vb5+fn7+/v8/Pz9/f39/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f38/Pz6+vr29vbz8/Pw8PDs7Ozp6enj5Obg4ePb3N7W19nT1NbOz9HIzM/EyMvBwsS/wMK8vb+4ubu2t7m0tbeztLays7WwsbOur7GrrK6qq62qq62sra+ys7W4ubvHx8nLy83Q0NDU1NTa2trh4eHn5+fr6+vr6+vt7e3x8fH09PT09PLz8/Hw8O7u7uzs7Ozs7Ozr6+vq6urp6eno6Ojn5+fm5ubp6eno6Ojn5+fo6Ojn5+fm5ubm5ubn5+fl5+bk5uXk5uXl5+bl5+bk5uXk5uXk5uXk5uXk5uXk5uXk5uXk5uXj5eTj5eTj5eTj5eTi5OPi5OPi5OPi5OPi5OPi5OPi5OPh4+Lh4+Lg4uHi5OPk5uXn6ejn6ejn6ejm6Ofo6unq7Ovr7ezs7u3t7+7v8fDw8vHu8O/w8vHv8fDt7+7t7vDu7/Hs7e/o6evb3N7Q0dPBwsS0tbesra+oqaump6mlpqipqqypqqyrrK6ur7GvsLKvsLKwsbOys7W0tbm2t7u4ubu7vL6/wMLDxMbHyMrJyszPz9HT09XX19fb29vg4ODl5eXq6urs7Ozw8PDz8/P39/f4+Pj6+vr7+/v9/f3+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v78/Pz6+vr4+Pj19fXy8vLv7+/q6+3n6Ori4+Xe3+Ha293W19nP09bLz9DIycvFxsjBwsS9vsC6u724ubu2t7m2t7mxsrSwsbOvsLKvsLKsra+pqqypqqyqq62pqauwsLK5ubnDw8PLy8vS0tLW1tbY2Nje3t7h4eHl5eXp6ens7Oru7uzw8O7y8vD09PTz8/Pz8/Px8fHw8PDu7u7t7e3t7e3s7Ozr6+vq6urp6eno6Ojn5+fn5+fn5+fm6Ofl5+bl5+bm6Ofl5+bl5+bl5+bl5+bl5+bl5+bl5+bk5uXk5uXk5uXk5uXk5uXl5+bk5uXk5uXk5uXl5+bl5+bl5+bl5+bl5+bl5+bl5+bm6Ofo6unq7Ovr7ezs7u3t7+7s7u3s7u3s7u3t7+7t7+7t7+7t7+7u8O/u8O/r7ezl5+be3+HU1dfIycu+v8GxsrSsra+nqKqkpaelpqipqqysra+ur7Gur7Gur7Gur7GvsLKvsLKwsbO0tbe3uLq4ub27vMC+v8HCw8XFxsjKy83Oz9HR0tTX19nb293f39/j4+Pm5ubr6+vv7+/x8fH09PT39/f6+vr7+/v8/Pz9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f38/Pz7+/v5+fn29vbz8/Pw8fPt7vDp6uzm5+nh4uTd3uDY2dvU1dfR0tTO0M/Jy8rFx8bBw8K/wcC8vb+7vL62t7m0tbeys7WxsrSwsbWvsLStrrKsrbGrrK6pqqyoqauoqautrrC2t7nAwcPIycvO0M/T1dTY2tnc3t3e4N/g4uHk5uXn6ejo6unp6+rr7ezt7+7u8O/v8fDw8vHx8/Lv8fDv8fDu8O/t7+7s7u3s7u3s7u3s7u3q7Ovq7Ovq7Ovq7Ovp6+rp6+rp6+rp6+rp6+rp6+rp6+rp6+rp6+rp6+ro6uno6unq7Ovq7Ovp6+rq7Ovq7Ovr7ezr7ezr7ezu8O/v8fDv8fDu8O/t7+7t7+7t7+7u8O/w8vHu8O/s7u3s7u3t7vDs7e/o6evl5uje3+HW19nMzc/Exce6u72wsbOoqaukpaemp6mnqKqpqqyrrK6trrCur7GtrrCrrK6ur7GvsLKys7W1tri3uLq4ubu6u727vL6/wMLCw8XGx8nJyszNztDR0tTV19bZ29re3t7i4uLm5ubp6ent7e3x8fH09PL19fP39/f6+vr8/Pz9/f39/f3+/v7////+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////////////////////+/v79/f39/f38/Pz6+vr4+Pj09ffy8/Xv8PLr7O7o6evj5Obf4OLc3d/Y2tnU1tXQ0tHLzczIysnFx8bBwsS/wMK/wMK8vb+4ubu2t7m1trqztLixsravsLSur7GtrrCsra+sra+qq62pqqypqqyqq620trW6vLvDxcTJy8rNz87R09LU1tXX2dja3Nvd397g4uHi5OPk5uXm6Ofo6unq7Ovr7ezs7u3t7+7s7u3t7+7u8O/v8fDu8O/v8fDw8vHw8vHv8fDv8fDw8vHw8vHv8fDw8vHw8vHw8vHw8vHw8vHv8fDv8fDv8fDu8O/u8O/u8O/t7+7t7+7t7+7s7u3s7u3p6+rr7ezs7u3r7ezq7Ovp6+rp6+rq7Ovr7ezn6ejj5eTg4uHc3d/W19nNztDGx8m6u72ys7Wqq62nqKqmp6mmp6mpqqytrrCvsLKur7Gur7GtrrCur7GvsLKwsbOwsbOxsrSys7W1tri4ubu7vL6+v8G/wMLAwcPGx8nJyszNztDQ0dPT1NbX2Nrc3t3f4eDj4+Pn5+fs7Ozv7+/y8vL19fX4+Pb5+ff6+vr8/Pz9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////9/f37+/v5+fn39/f09ffx8vTt7vDq6+3m5+nj5Obe4N/b3drW2NfT1dTP0dDMzs3IysnExsW/wMK+v8G8vb+6u725ur63uLy1trqztLiys7WwsbOvsLKur7GtrrCrrK6qq62sra+oqaupqqyqq62trrCxsrS3uLq+v8HDxMbLzczO0M/S1NPV19bX2dja3Nvc3t3e4N/e4N/g4uHh4+Lh4+Lj5eTl5+bm6Ofm6Ofp6+rr7ezr7ezq7Ovr7ezs7u3s7u3r7ezs7u3s7u3s7u3s7u3s7u3s7u3s7u3s7u3p6uzp6uzp6uzp6uzo6evo6evm5+nl5ujo6evo6evn6Orm5+nl5uji4+Xf4OLd3uDR0tTMzc/Fxsi/wMK4ubuxsrSpqqyjpKakpaelpqinqKqqq62sra+sra+srbGsrbGpqqyrrK6trrCvsLKwsbOys7WztLaztLa4ubu5ury7vL68vb++v8HCw8XGx8nJyszNz87R09LV19bY2tnb3dzf4eDk5OTo6Ojq6uru7u7y8vL09PT29vT4+Pb6+vj7+/n8/Pz9/f3+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////////+/v7////////////9/f39/f37+/v4+fv29/nz9Pbv8PLs7e/q7Ovl5+Ti5OHe4N/b3dzY2tnU1tXP0dDMzs3Ky83IycvFxsjAwcO8vcG6u7+5ur63uLy2t7m0tbe0tbe0tbeys7WvsLKur7GvsLKvsLKtrrCrrK6pqqypqqypqqypqqypqqyrrayvsbC1t7a6vLu/wcDDxcTIysnLzczS1NPU1tXW2NfW2NfY2tnb3dzc3t3c3t3c3t3e4N/e4N/e4N/e4N/g4uHh4+Lf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4eDf4OLg4ePg4ePg4ePh4uTg4ePe3+Hd3uDY2dvV1tjQ0dPMzc/HyMrAwcO3uLqys7Wsra+pqqymp6mkpaelpqinqKqpqqyrrK6rrK6trrCtrrCrrK6rrK6ur7Gur7OtrrKvsLKwsbOxsrSztLa0tbe2t7m4ubu5ury6u729vsDBwsTDxMbGx8nKy83Oz9HR0tTU1tXY2tnc3t3g4uHi5OPm6Ofr6+vv7+/x8fH09PT4+Pj5+fn6+vj7+/n8/Pr9/fv9/f3+/v7+/v79/f3+/v7////////+/v7////////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz6+vr4+Pj29vbz8/Px8fHt7evq6ujm5uTi4uDf39/b29vX2djU1tXR0tTOz9HJyszHyMrFxsjDxMa/wMS8vcG8vb+6u724ubu2t7m1tri0tbeys7WxsrSwsbOvsLKtrrCtrrCtrrCrrK6rrK6rrK6pqqyqq62pqqyoqauoqauoqauqq62sra+ztLa1tri4ubu8vb+/wMLDxMbGx8nIycvKzMvLzczNz87P0dDR09LS1NPT1dTT1dTT1dTS1NPR09LR09LR09LR09LP0dDNz87NztDLzM7HyMrExcfBwsS+v8G6u724ubuxsrSvsLKsra+pqqynqKqmp6mmp6mmp6mpqqypqqyqq62rrK6rrK6rrK6rrK6rrK6rrK6rrK6srbGtrrKur7OvsLSxsrays7e0tbe1tri3uLq4ubu5ury6u727vL69vsDBwsTExcfIysnLzczO0M/R09LV19bY2tnb3dze4N/j4+Pn5+fp6ens7Ozv7+/y8vL29vb39/f5+fn6+vr8/Pz9/f39/f39/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f39/f38/Pz7+/v5+fn39/f29vby8vDw8O7t7evp6efm5ubi4uLe4N/c3t3Y2dvV1tjR0tTOz9HMzc/Ky83Gx8vDxMjBwsS/wMK9vsC7vL65ury4ubu2t7m1tri0tbeztLaxsrSxsrSwsbOur7GtrrCtrrCur7Gur7GtrrCrrK6qq62pqqyqq62rrK6nqKqnqKqoqauoqauoqauoqaupqqypqqysrq2srq2tr66usK+vsbCwsrGwsrGwsrGxs7KwsrGvsbCwsrGwsrGvsbCusK+tr66oqauoqaunqKqmp6mmp6mlpqikpaejpKaoqauoqauoqaupqqypqqyrrK6sra+ur7Gqq62rrK6rrK6sra+trrCtrrCtrrCtrrCvsLKvsLKwsbWxsrays7eztLi1trq2t7u4ubu5ury8vb+9vsC/wMLAwcPCw8XExcfJyszMzc/P0dDT1dTV19bZ29rc3t3f4eDj5eTl5+bq6urt7e3w8PDy8vL19fX39/f4+Pj5+fn6+vr8/Pz9/f3+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v79/f38/Pz7+/v6+vr4+Pb29vTz8/Hw8O7t7e3q6urn5+fk5OTg4uHd397Z2tzW19nU1dfR0tTOz9HLzM7IycvGx8nDxMbBwsS/wMK9vsC7vL65ury4ubu2t7m1tri0tbeztLays7WxsrSxsrSvsLKvsLKvsLKur7Gsra+sra+sra+trrCtrrCtrrCtrrCsra+rrK6qq62pqqypqqynqKqoqauoqauoqauoqauoqaunqKqnqKqoqauoqauoqauoqauoqauoqauoqaunqKqpqqyqq62qq62qq62rrK6rrK6rrK6rrK6rrK6rrK6sra+sra+rrK6rrK6rrK6rrK6trrCtrrCtrrCur7GvsLKvsLKwsbOxsrSztLa0tbe0tbe1tri2t7m4ubu6u7+7vMC8vb++v8HBwsTExcfGx8nIycvKy83Mzc/R09LU1tXX2dja3Nvd397g4uHj5eTm6Ofr6+vt7e3x8fHz8/P19fX39/f5+fn6+vr7+/v7+/v8/Pz+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v79/f38/Pz7+/v6+vj5+ff39/X19fPz8/Pw8PDt7e3r6+vn6ejk5uXg4ePd3uDb3N7Y2dvV1tjS09XP0NLNztDKy83IycvGx8nExcfBwsS/wMK9vsC7vL66u725ury4ubu3uLq2t7m2t7mys7Wys7WxsrSxsrSwsbOwsbOwsbOwsbOsra+sra+trrCsra+sra+sra+sra+sra+trrCtrrCsra+sra+sra+sra+sra+sra+sra+sra+sra+sra+sra+sra+sra+sra+rrK6sra+sra+sra+rrK6rrK6rrK6rrK6sra+trrCur7Gur7GvsLKvsLKvsLKwsbOxsrSxsrSxsrSxsrSys7WztLa0tbe1tri3uLq4ubu5ury6u727vL6+v8HAwcXCw8fDxMbFxsjIycvLzM7NztDQ0dPS09XU1dfY2tna3Nve4N/h4+Lk5uXm6Ofq7Ovs7u3w8PDy8vL19fX39/f5+fn6+vr7+/v8/Pz9/f39/f3+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v79/f38/Pz9+/z8+vv6+vr4+Pj39/f19fXz8/Px8fHt7+7r7ezo6unl5+bj5eTg4uHd397a3NvW2NfV19bS1NPQ0tHO0M/Mzs3Jy8rHycjExcfCw8XAwcO/wMK+v8G8vb+6u726u725ury4ubu3uLq2t7m0tbeztLays7WxsrSys7Wys7WxsrSxsrSxsrSxsrSwsbOwsbOur7Gur7GtrrCtrrCtrrCtrrCtrrCtrrCsra+trrCtrrCtrrCsra+sra+trrCtrrCur7Gur7GvsLKvsLKvsLKvsLKvsLKwsbOur7GvsLKwsbOxsrSxsrSys7W0tbe1tri2uLe2uLe2t7m2t7m3uLq4ubu6u727vL68vb+9vsC+v8HAwcPCw8XFxsjHyMrJyszMzM7Pz9HR0dPU1NbW1tjZ2dvc3N7d3d/h4eHj4+Pn5+fq6urs7Ozv7+/x8e/09PL19fX29vb4+Pj6+vr7+/v8/Pz8/Pz9/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7////////////+/v7+/P39+/z7+/v6+vr6+vr4+Pj39/f19fXy9PPx8/Lu8O/s7u3q7Ovn6ejl5+bj5eTe4N/c3t3a3NvY2tnW2NfT1dTR09LP0dDMzc/Ky83IycvGx8nExcfBwsS/wMK/wMK9vsC8vb+7vL66u725ury4ubu3uLq2t7m2t7m1tri0tbe0tbeztLaztLays7WxsrSztLaztLays7Wys7WxsrSxsrSxsrSwsbOxsrSxsrSxsrSxsrSxsrSxsrSxsrSxsrSxsrSxsrSys7Wys7WztLaztLaztLaztLa2t7m2t7m1tri1tri1tri1tri2t7m2t7m6vLu6vLu7vL67vL69vsC+v8HAwcPBwsTCw8XDxMbFxsjHyMrKy83Mzc/P0NLQ0dPV1dfX19na2tzc3N7e3uDh4ePj4+Xl5efp6enr6+vu7u7x8fHz8/P19fX39/X5+ff5+fn5+fn6+vr7+/v8/Pz9/f39/f39/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7//////////////////////f7+/P39+/z9+/z7+/v7+/v6+vr5+fn3+fj2+Pf09vPy9PHw8u/u8O3s7uvq7Onm6Ofl5+bi5OPg4uHe4N/c3t3Z29rX2djV19bT1dTQ0dPP0NLMzc/JyszHyMrHyMrExcfDxMbBwsTAwcPAwcO/wMK+v8G+v8G7vL66u725ury5ury5ury5ury4ubu3uLq2t7u2t7u1trq1trq0tbm0tbm0tbm0tbm1trq0tbmztLiztLi0tbm1trq0tbm0tbm2t7m2t7m1tri2t7m3uLq3uLq3uLq2t7m4ubu5ury6u727vL68vb+9vsC/wMLAwcPAwsHAwsHBw8LCxMPExsXGyMfIycvJyszKy83Mzc/Oz9HR0tTT1NbV1tjX2NrY2dvd3d/f3+Hi4uTk5Obm5ujo6Orq6uzs7O7v7+/y8vL09PT29vb39/f4+Pj6+vj8/Pr7+/v7+/v7+/v8/Pz9/f3+/v7+/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///v///f7//f7+/v7+/v79/f38/Pz7/fz6/Pv4+vf3+fb19/Tz9fLx8/Dw8u/u8O/t7+7q7Ovo6unm6Ofj5eTg4uHe4N/c3t3a3NvY2dvX2NrV1tjT1NbR0tTR0tTP0NLNztDKy83IycvHyMrFxsjExcfCw8XCw8XBwsS/wMK/wMK/wMK/wMK+v8G9vsC8vcG8vcG7vMC7vMC7vMC7vMC7vMC8vcG7vMC6u7+5ur66u7+7vMC8vcG8vcG7vMC8vb+7vL67vL68vb+9vsC+v8G+v8G9vsC9vsC+v8HAwcPBwsTCw8XDxMbDxMbExcfGyMfHycjIysnKzMvMzs3O0M/Q0dPR0tTT1NbU1dfX2NrZ2tzb3N7d3uDf4OLg4ePk5Obl5efo6Orq6uzs7O7u7vDw8PLy8vT09PT29vb5+fn6+vr6+vr7+/v8/Pr9/fv+/v7+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v79/f38/Pz7+/v6+vr5+fn4+Pj39/f19fXz8/Px8fHv7+/t7e3r6+vp6enm5ubj4+Pj4+Pi4uLg4ODe3t7b29vZ2dnY2NjW19nV1tjT1NbR0tTQ0dPOz9HMzc/LzM7Ky83JyszIycvIycvHyMrFxsjExcfExcfExcfCw8XBwsTBwsTBwsTBwsTBwsTBwsTBwsTBwsTBwsTBwsTBwsTBwsTBwsTBwsTBwsTBwsTCw8XDxMbExcfFxsjGx8nGx8nGx8nGx8nIycvJyszKy83LzM7Mzc/NztDO0M/P0dDR09LT1dTU1tXV19bX2djZ29rb3dzc3t3e4N/g4uHi5OPk5uXm6Ofm6Ofs7Ozt7e3v7+/x8fHz8/P19fX29vb29vb5+fn5+fn6+vr7+/v8/Pz8/Pz9/f39/f3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f39/f38/Pz8/Pz7+/v6+vr5+fn6+vr4+Pj29vb19fX09PTy8vLw8PDu7u7r6+vr6+vp6enn5+fl5eXj4+Ph4eHg4ODe3+Hd3uDb3N7Z2tzY2dvW19nU1dfT1NbS09XR0tTQ0dPQ0dPOz9HMzc/LzM7LzM7LzM7Ky83JyszJyszJyszIycvIycvIycvIycvIycvHyMrHyMrHyMrHyMrIycvIycvIycvIycvJyszKy83LzM7Mzc/Mzc/NztDOz9HOz9HQ0dPR0tTS09XT1NbU1dfV1tjW2NfX2djZ29rb3dzc3t3d397f4eDh4+Lk5uXk5uXm6Ofo6unq7Ovs7u3t7+7u8O/x8fHy8vL09PT29vb39/f5+fn5+fn6+vr7+/v7+/v8/Pz8/Pz9/f39/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v79/f39/f38/Pz8/Pz9/f38/Pz6+vr5+fn4+Pj39/f29vb09PTz8/Py8vLw8PDu7u7s7Ozq6urp6eno6Ojm5+nl5ujk5efi4+Xg4ePf4OLd3uDc3d/b3N7a293Z2tzZ2tzY2dvW19nV1tjV1tjV1tjT1NbS09XT1NbS09XR0tTR0tTR0tTR0tTR0tTR0tTQ0dPQ0dPR0tTR0tTR0tTR0tTR0tTS09XT1NbU1dfV1tjV1tjW19nW19nX2NrY2dvZ2tza293b3N7d3uDe3+Hf4eDg4uHi5OPj5eTk5uXm6Ofn6ejo6uns7u3t7+7u8O/v8fDx8/Ly9PPz9fT09vX39/f4+Pj5+fn7+/v8/Pz8/Pz9/f39/f39/f39/f39/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f39/f39/f38/Pz7+/v6+vr6+vr4+Pj39/f39/f39/f19fXz8/Px8fHw8PDv7+/u7u7t7vDs7e/q6+3p6uzn6Orm5+nk5efj5Obi4+Xh4uTh4uTh4uTg4ePe3+Hd3uDd3uDd3uDb3N7b3N7b3N7b3N7a293Z2tzZ2tzZ2tzZ2tzZ2tzZ2tzZ2tzZ2tzZ2tzZ2tza293a293a293b3N7c3d/d3uDe3+He3+He3+Hf4OLg4ePh4uTi4+Xj5Obk5efl5ujn6ejo6unp6+rq7Ovr7ezt7+7u8O/u8O/x8/Ly9PPz9fT09vX19/b2+Pf3+fj3+fj6+vr7+/v8/Pz9/f39/f3+/v7+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v79/f39/f38/Pz7+/v6+vr6+vr7+/v6+vr5+fn39/f29vb19fX19fX09PT09PTz8/Py8vLx8fHw8PDu7u7t7e3s7Ozq6urp6enp6enp6eno6Ojm5ubl5eXm5ubk5uXi5OPi5OPi5OPi5OPh4+Lg4uHg4uHg4uHg4uHg4uHg4uHg4uHg4uHg4uHg4uHh4+Lh4+Li5OPi5OPj5eTk5uXl5+bl5+bn6ejo6uno6unp6+rq7Ovr7ezs7u3t7+7w8PDw8PDx8fHy8vLz8/P09PT19fX19fX39/f39/f4+Pj5+fn5+fn6+vr6+vr6+vr7+/v8/Pz8/Pz9/f3+/v7+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v7+/v79/f38/Pz8/Pz8/Pz9/f38/Pz7+/v6+vr5+fn5+fn5+fn5+fn5+fn4+Pj39/f29vb19fX19fXz8/Pz8/Px8fHw8PDw8PDw8PDv7+/u7u7t7e3u7u7r7ezq7Ovp6+rq7Ovp6+rp6+ro6unp6+ro6uno6uno6uno6uno6uno6uno6uno6unp6+rp6+rq7Ovq7Ovr7ezs7u3s7u3t7+7v8fDv8fDw8vHw8vHx8/Lx8/Ly9PPz9fT29vb29vb29vb39/f4+Pj5+fn5+fn5+fn6+vr6+vr7+/v7+/v8/Pz8/Pz8/Pz8/Pz9/f39/f3+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////////+/v7+/v7+/v79/f39/f3+/v79/f39/f38/Pz8/Pz8/Pz8/Pz8/Pz8/Pz7+/v6+vr6+vr5+fn5+fn4+Pj39/f39/f29vb29vb29vb29vb09PT09PT09PTy9PPx8/Lw8vHw8vHx8/Lw8vHw8vHx8/Lw8vHw8vHw8vHw8vHw8vHw8vHw8vHw8vHx8fHx8fHy8vLy8vLz8/Pz8/P09PT09PT19fX29vb29vb29vb29vb29vb39/f4+Pj5+fn5+fn5+fn6+vr7+/v8/Pz8/Pz7+/v8/Pz8/Pz9/f39/f39/f3+/v7+/v7+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v79/f38/Pz8/Pz8/Pz8/Pz7+/v6+vr6+vr5+fn5+fn5+fn5+fn4+Pj39/f39/f3+fj19/b09vX19/b19/b19/b19/b2+Pf2+Pf19/b19/b19/b19/b19/b19/b2+Pf19fX19fX29vb29vb39/f4+Pj4+Pj5+fn5+fn5+fn6+vr6+vr5+fn6+vr6+vr7+/v8/Pz8/Pz7+/v8/Pz9/f3+/v7+/v79/f3+/v7+/v7////////////////////////////////////////////////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/f39/f39/f39/f39/f38/Pz8/Pz8/Pz8/Pz7+/v7+/v7+/v7+/v6+vr6+vr5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v9/f39/f39/f3+/v7+/v7+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v79/f39/f39/f39/f38/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz9/f39/f39/f39/f39/f39/f39/f39/f3+/v7+/v7+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8ADQEAAAMAAAABAPoAAAEBAAMAAAABANsAAAECAAMAAAADAAKCRAEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAACAAKCSgESAAMAAAABAAEAAAEVAAMAAAABAAMAAAEWAAMAAAABAK4AAAEXAAQAAAACAAKCUgEcAAMAAAABAAEAAAFTAAMAAAADAAKCWodzAAcAAAeoAAKCYAAAAAAACAAIAAgAAAAIAAH9zAAB/cQAAIPWAAEAAQABAAAHqGFwcGwCIAAAbW50clJHQiBYWVogB9kAAgAZAAsAGgALYWNzcEFQUEwAAAAAYXBwbAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZGVzYwAAAQgAAABvZHNjbQAAAXgAAAVsY3BydAAABuQAAAA4d3RwdAAABxwAAAAUclhZWgAABzAAAAAUZ1hZWgAAB0QAAAAUYlhZWgAAB1gAAAAUclRSQwAAB2wAAAAOY2hhZAAAB3wAAAAsYlRSQwAAB2wAAAAOZ1RSQwAAB2wAAAAOZGVzYwAAAAAAAAAUR2VuZXJpYyBSR0IgUHJvZmlsZQAAAAAAAAAAAAAAFEdlbmVyaWMgUkdCIFByb2ZpbGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1sdWMAAAAAAAAAHgAAAAxza1NLAAAAKAAAAXhockhSAAAAKAAAAaBjYUVTAAAAJAAAAchwdEJSAAAAJgAAAex1a1VBAAAAKgAAAhJmckZVAAAAKAAAAjx6aFRXAAAAFgAAAmRpdElUAAAAKAAAAnpuYk5PAAAAJgAAAqJrb0tSAAAAFgAAAshjc0NaAAAAIgAAAt5oZUlMAAAAHgAAAwBkZURFAAAALAAAAx5odUhVAAAAKAAAA0pzdlNFAAAAJgAAAqJ6aENOAAAAFgAAA3JqYUpQAAAAGgAAA4hyb1JPAAAAJAAAA6JlbEdSAAAAIgAAA8ZwdFBPAAAAJgAAA+hubE5MAAAAKAAABA5lc0VTAAAAJgAAA+h0aFRIAAAAJAAABDZ0clRSAAAAIgAABFpmaUZJAAAAKAAABHxwbFBMAAAALAAABKRydVJVAAAAIgAABNBhckVHAAAAJgAABPJlblVTAAAAJgAABRhkYURLAAAALgAABT4AVgFhAGUAbwBiAGUAYwBuAP0AIABSAEcAQgAgAHAAcgBvAGYAaQBsAEcAZQBuAGUAcgBpAQ0AawBpACAAUgBHAEIAIABwAHIAbwBmAGkAbABQAGUAcgBmAGkAbAAgAFIARwBCACAAZwBlAG4A6AByAGkAYwBQAGUAcgBmAGkAbAAgAFIARwBCACAARwBlAG4A6QByAGkAYwBvBBcEMAQzBDAEOwRMBD0EOAQ5ACAEPwRABD4ERAQwBDkEOwAgAFIARwBCAFAAcgBvAGYAaQBsACAAZwDpAG4A6QByAGkAcQB1AGUAIABSAFYAQpAadSgAIABSAEcAQgAggnJfaWPPj/AAUAByAG8AZgBpAGwAbwAgAFIARwBCACAAZwBlAG4AZQByAGkAYwBvAEcAZQBuAGUAcgBpAHMAawAgAFIARwBCAC0AcAByAG8AZgBpAGzHfLwYACAAUgBHAEIAINUEuFzTDMd8AE8AYgBlAGMAbgD9ACAAUgBHAEIAIABwAHIAbwBmAGkAbAXkBegF1QXkBdkF3AAgAFIARwBCACAF2wXcBdwF2QBBAGwAbABnAGUAbQBlAGkAbgBlAHMAIABSAEcAQgAtAFAAcgBvAGYAaQBsAMEAbAB0AGEAbADhAG4AbwBzACAAUgBHAEIAIABwAHIAbwBmAGkAbGZukBoAIABSAEcAQgAgY8+P8GWHTvZOAIIsACAAUgBHAEIAIDDXMO0w1TChMKQw6wBQAHIAbwBmAGkAbAAgAFIARwBCACAAZwBlAG4AZQByAGkAYwOTA7UDvQO5A7oDzAAgA8ADwQO/A8YDrwO7ACAAUgBHAEIAUABlAHIAZgBpAGwAIABSAEcAQgAgAGcAZQBuAOkAcgBpAGMAbwBBAGwAZwBlAG0AZQBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBlAGwOQg4bDiMORA4fDiUOTAAgAFIARwBCACAOFw4xDkgOJw5EDhsARwBlAG4AZQBsACAAUgBHAEIAIABQAHIAbwBmAGkAbABpAFkAbABlAGkAbgBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBpAGwAaQBVAG4AaQB3AGUAcgBzAGEAbABuAHkAIABwAHIAbwBmAGkAbAAgAFIARwBCBB4EMQRJBDgEOQAgBD8EQAQ+BEQEOAQ7BEwAIABSAEcAQgZFBkQGQQAgBioGOQYxBkoGQQAgAFIARwBCACAGJwZEBjkGJwZFAEcAZQBuAGUAcgBpAGMAIABSAEcAQgAgAFAAcgBvAGYAaQBsAGUARwBlAG4AZQByAGUAbAAgAFIARwBCAC0AYgBlAHMAawByAGkAdgBlAGwAcwBldGV4dAAAAABDb3B5cmlnaHQgMjAwNyBBcHBsZSBJbmMuLCBhbGwgcmlnaHRzIHJlc2VydmVkLgBYWVogAAAAAAAA81IAAQAAAAEWz1hZWiAAAAAAAAB0TQAAPe4AAAPQWFlaIAAAAAAAAFp1AACscwAAFzRYWVogAAAAAAAAKBoAABWfAAC4NmN1cnYAAAAAAAAAAQHNAABzZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbA== + + iVBORw0KGgoAAAANSUhEUgAAAMgAAACvCAYAAAC4qZF8AAAgAElEQVR4nOy9a5Mk13Gm+fi5RETeqqpvABokQFDiUKREaUZaSTvLD2vatf2wNr92/8Dumo2NSVqtaUzSSBRFUqQIEETfu6sqMyPi3Hw+nJNZ1Y0GqBEJgGi2t5V1VVZWZsaJ48fdX3/dXVRVeS2v5bW8VMwX/QFey2v5dZbXCvJaXsunyGsFeS2v5VPktYK8ltfyKfJaQV7La/kUea0gr+W1fIq8VpDX8lo+RdwX/QG+7HJII4nIZ/r6L5PP6j1fy5XI60ThZyuftQK9ls9WXluQX1I+6Xw5KMS/VTFefN3rr3P9d68V77OV1wryS8q/doOq6ks3+b/m7198zmul+PzktYv1S8rLFk+vP3pYXhGEj2/sX7TVP82SvJbPXl5bkF9SrivDQQGeU4RP2NCKNuV5idJ8ihK8aIley2crry3ILymfZEG0aP1fFS2FXApayvPP05dbEBE5fhljnnv88PPh/09y1V6DA78aeW1Bfgk5KEdBKQVKSeScyTmTUka1oCrkksgpH09/YywiihGpG7k8H3Qfvq7EVBdNBGvAWosxBhGh7/tP+HSfoBgKSAE1v/Cpx+c+J+a5Q+FVV79X14K8eFWfuF/K8786bJzDxtB2GosgcrU5ci6kUsiaiDETQ6ZoQjW109siIuRUUAo5B0opqBoEgxiAQooJK4IcXS5ABCMWAGMdBYMxgrUOi7YNDsaAEYdzDucN1hisc1jrQaS+nIIYkON6lHZR7arFPP/jYTEU0FL/UNoTBBRBMWRqltl88tK+EvIbb0GkbXktIJjj3VY1qBZMPbxRlFwSMWXinMglU4BcEuIszjqyKqUUUCXEyDxHSinknFCNFC1ocVhjEIGiVQlFqcpRXjytBTGu7k0xiBisPVgRwYrF2kTMBhOqEhljcV2Hsx3OOqx7wVKUgyZc04qry246qjWOesnOF6ru/KZQMH7jLQgl1KO4nYc5t9jA0jYxpDwT0kxKCc0FKQJqqqWwQkGJc2Ga9sQ0Ua4pkncW1Yx1BmMMWiyCUKQQY0SMBxWMKmhGBEw77kspIBaxgoq9Cv7loFgZYw3OWqwf8K7DWouVaqGsAe89XdfR+UV9fw7Agr6wJNdinetr2KzVx573KpuNa/JaQagboIYB5uBxkBLEnAjzTCKixPoyCpqVNBVSSkfFSVEpJaMam4tlMNZgpb5H72uAnWMNsMVkYsqoXAu2S0IVlAylBfhafaTczm3BgKkxiBrByNVnd8ZhrcM7S+cN3jv63pMzCA7fDXTDgHOG0q7dUq1oBdSkvn5brucQsxfXs5pcnjM/r6C8ugryCfKxi9XnfygaySkxTok5JkQsRaBoJpVInAMhJHKMlJwhJUrKFK3+v5jquRgMzliEjJVCZzPkQpgDmhJoIJWJMWxrPCKW3Px7EXOMGXrftY1qUGNR6ShqyBiKCKhFBZxxOO/wxhxjGWcF5z1Dv6AfFohxFMAYS7dY0HmDpSDPWRPhEIi30Ks+en2dtMUxQnvCq+tw/cYriJZ2jxViCkzzjhBDPWHFUooSYyZMkTnMFaHS3NyUgssJq4IxviJTtm2vnNAUyWEizZfsLx9z+fQJ024kxYAhIaYgHYixFNehxoG4emormJLQOCE5IQaGxZpuscH6FWZYYP0SsQMYB7YG8cY6jDgwDjEV+XLW4bynH3q6fsD6AZEafi6GqlTGXFmK0hQSkefWS9rXUUHgtYK8avIxz0shhMI0zcQcyaT6VSI5R+bdRI6Kxup+iBWSKYQ8kUpkaQVTChoTOU2U+YK0P2e6eELanRMunzDvHvPkwU/Yby9Yrm5ycnqbxckJq/Up/fImxXQU05EwFIQSEyVsIWyZn33EeP5z5u1jLAXbb3CLDcPmDovNbez6FmbY0K1WmMUa060Rv0TsEjEeI1LjESsYKzjf4/slw7DG+R4nBuccnbNY+wK0bITywppdqUP+2COvovxGoVgvOwnGMRBjZM6ZXDIqSsyZOUyEeUZjwqitG00LmjKWyCAzlMju4gnT5QW78wvS/pI0PSTtnlLGC3wZWTpHV0bOhsitzU1u3/0Gq7M3wHqMX2D9CYUeNY7STvUSJ/IedErMs6MfYZKZkmfY7ZnP77F78hH75SlmeRPpl0g/YLolfnnK6sZdNjfu4lenIB1qLalYpFhSUXKuycvOD2S/JMVM8Y6+czjf0AnkGIPoC2tYqNHQy1f01ZJXXkFKKc+hN1pAjJCLst3uSHPEOEciMeeRHCMhBDRlvPFkHJCZ88iys8TtE0zcMz76iP32Efc++mf2l0/pu4GbZ2cszUTxe4wRnAw1gjZr1BtWZ3dZ3/0GdjhF+iW2W2DtQJhzSwJaNCc0G9QkkgS6fBuXE8tuzfb8MTmBF8d+Skg2DL0n64gZt0wPL9nNI/vVCdsbb3Py5nus7nyd5c2vksyK/ZQxzjS4+gLnJoalsFis0ZiY48x6GOgWPVAQKlJnmpJcV4fcMDXzClsP+A1ysXIp7WA0hJjY7XYApKzEnJjmHVMYQQtGQbKgJaMp4qWgacf5ww949LN/Jl08gnGkjM8Qs2XRdxjjyClibKbrHL0fjghQv9qQRNjcfof17a+TzILseowfKKkwdD2aZjQFPJHx4jFP7/+UMm7pTYGU8M4w7UfG/UhOhZAKfrHELR3TtCNsL5gvn6BxRIwlG0dyS8zJXU7f/jY3vvJt+tPbqF2QUaw1OD+AGzC2Y7Nesxw6coo4K6xWK6xzaFHE2LaGijFXFuUYk7zC8sopyIscpIPlOOQQphDY78ea0xCYQ2A/jaR5vvYiGQM4Ddhpy9MPf8j5Bz/g0QffI49bvLOc3fkKTjLx2U84WS0peMYQMU5qTsIP9KsNgmF5cpOoyo2332V58hWC6RA/INaDM+g8QdwiYcv09EMevv8DtucP8M7Q9QOKwS/W5GLQrBhbN2zfLzBuQFTZX15w8ewRu/PH5LCvCVAB6ZZcTgW/eZs3v/4fuPHOb9Od3CbanjEp4geGRVXmoRs4O9kgxmBQNut1fa+D+ThA0lSEy7zaxgN4BRXkRSnXlWOe2O72QL3B+2lknEdSqtCrxoI1yuCEuLtg++QDHv34+zz74PvI9gEubdmcnCHeY4YF0/YpK93hRVCzwHQLjPdkASMd/XJDt1jRLdfsU+bOV7/B6uY7aLeGrieronGPpJF8+YjLR//C5Uc/Yry4B3lGVcmmJxWHdCvUerwfcM6iJWONY7W6QTes0FJQVVKcGLfnxP2O3flD9rsLxHZk0xPMQH/2Dnfe+11uv/MNupObbEMmiWBdz3KxYrFa03UD3lpECyebDUak0QmuAvJr+vJKyyuvIIeL2+537HY7rHWowm7cM08jOUdinHFi6C0w7xgffcCTn/w3Hr3/94wPPuBktWCzuUXOgWl/iXHK+mSJk4JTQUvBmCXiLEWvMvM5ZbrVBr88IdmeN977Nid3v40uTkluIE5b3P4xun/M05//iPP7P0bmc/L4jBhGXLchGw9ujVueIqZHxGIoaEkIQlKtSqmlolPLFc55LJZpe8mzxx+R455p2pFyIqkjS8fZG1/jrd/+Dqs332OvhlwcYgfcYs1iuWGxWNE5h5BZLxZY76kZRwvN5Sq/AVbkN0JBxnHPdhxBK+t2mib200hJCSEiJDpVyu4pT376fe7/01+z/fk/oNv73Di7iXMd6lcMyzVioe8MRvcV1SqGFDNiOkSElLYgijMdKSaygF+eYtZn3Hz397j17h9gTt8g2gVpf44//ymPf/oPPPzZP1Omc0QDJc0slhs2N9+i39zG9mtcv6mJSGwlLDbVDyEQSmK3v2S335FiwvmeYVjjrWHoOzTNPLz/Ux7f/1klTIpBVdDulHe+8x85u/vb4Ndsk4Lf0C1OWCw3nJycQIkM3tF7h3X2yMFRrRn01zHIl1COFA1gCnMNbNuGutzumKapPq9ESp4YiIz3f8qHf/+XPPvRf8XtnzC4QuccxRik75F+YLlaYY2BPKFxpPM9l+cXxJAalaNDbAKNeONxvqtERefpzt5kcfvrvPHv/oTh5leIbkHYPuHyh3/B+QffZ787R4wB6zi7c5fbd9/BuAW2X6DGUykdBkOrE0FQzYgx5Fwz+ynMpBRIITBNW2KMqArLzRm975jnPdvzJ5w/vs+0fULCEmTJG+99i7e/8Qe49R220ZHdksX6FNd5zjZrjCidFYbFgLWOUiqKZY155QP1Lz3Mq9rQqWtw40E5CpnLi0u8dxCV7bgn5YQR0DTjCJRwyaP3/4kPv/f/MX34TyzTJQtX6LzDLZZEY/GbNWIrpcP6RopNhpITxnb0iwU5RtBM7xxFocRIQvGdZ86BHCPz7oISRiTPaM6k7VN2j39OHM8BWN14k83tt1me3sYt14jtwBis7SpnS6EUxQDFCFpqIF5IdH6J6xOiGS2ZabpEVZmmwDhOxFhYrU+4e3KDm7fu8Oj++zy6/xE5jHz0w7/j8slDvvqt/4mb7/wuu5LZbS9ZbjZM88QweHKBcb+nXyxwrsNiyEVx5lVWjy+9ghSQQlHFYCil+cQtpnx4/wG+H5jmSAkFzUrIGcg43cP+Mc9++Ne8/3d/Tr58wtIUur7DOqE/vYHvBlZDz3Z/CaIslgtMjqhUjhMI3Wqg5EzfC94ZRDM5FZLaygbOBe+X7PcjqzXM+y2LsMc7x+OnH7K7fAAENrff4dZXv4Hf3EHcgPQDzndYZ9EWHKsKIrYl7yqtXlXJOVNKprhEyQmNEbeomXE/BBarmWm3ZxzPkbJgc3aDfrGkX53ykx/+E4ME9OmP+PnfPkFy5uSd36O4nnGaQCLGLHH9AlUlhoA17liw9Wqrx5deQaroi7WrIjx58hCxpiUKhf00UVCsJjTvkPmCez/4G57841/itvfoRPHWcnJ2C9d1ABRTg+F+OeCcx6AtE10wJSPiUGNrniAXYgqUnACwXd3g87THGqGzHZoDMUxoGCmhcPnkPmHec+vmHW5+5T36szuUboPxS3w/YKytLhXSuFGmvlfbmKVkRAypVBp+KVVBsptJYaTkiDEG53s2J54h9Yz7PU/Pn+F9x607b3NycpuHH/6Y3eMP2M/n/PPf/We+Zj3DW7+D60/RVJWi2A5xnpSUlDOdcc+RGV9VeSUURIxruGP9mueZ7TiyXm9qEDtnsghopNeJefuQez/+e+7/8O/g8hybC/1qxbBeYjrHHHcY61guluSYIClhqnkSYyziFvXtnGcxrHHWYEohzSMxzDUmyIkQRpy1jLtnuLUlhS3T9hGab5OLsD1/wrA8Y3PrbZZndzD9ChnW2H6NdR5VxRmDSrUcB86tMZXta1q2W9ShpTS6faE4h7WWHCYsC+bpElB8v0KMY54mcqksq83pbTbrGzx58Ab3H3zANu15/0d/wdeGgcWNd7FyQthnAoXFyoCh1rFYVzP/vI5Bfs2lnqY5V/dKFS7OLxj6JYIhhEQIsTJbc4b9Y87/5R+49w9/RRe2qEa6bmC5XiFWGMcL+sWC9eYUbe5YzIGUC4vlCcvTGzg/UIzg/YCxHu8sUjIpRYpU1yOOE9PuMWl/TiyZMO9AhTg+Q0ogzQFrhNPbd1mc3EG6NeJX2GGDcQO51VsUcWCote2tC4oUsEaAWkRljKWYatUoGWstzneUbiDMe2xZoiUiqjgxII4YZmIIbHd7Nqs1t956j2QMPPsXdBr56ff/gm/90RrfLWvdS5jpFj2986ScGePMol8+t4FexUYRX3IFMdRUICAZMZbLyx1hjmzOTpnnmRQTxhhCnLHxkouf/YD73/tL/MV9Fr0jG4PvPWJMdaOsslgtsUYYxxGjln65YTOsWGzOWKxvUaxFjcH76opZY8gpQE44v6ZfLNCSSOMFu0c/Y312g2fPHrOfAnHek8Keeb9jGAaWJ7fpN3foljeh24BfksWSc6qI0cEsttoLVQHRqiyqrS69WhgwFKnsKDEesR3eOJwfSHEizSO5KNYbjPWIGSkh8PTZUxbrDSc33wCXkacPeHJ5zpMPv8/dr9+kWwwUDYSwo+9PMBhiAn2hX8SrpBgH+ZIrSJWaqKvJq93llmEYKKUwx4AVR8mBzmQuHv2Mez/4G/Lj9/FpJgel22xYrJYUUZwzWLskh0DY73G+Y1idsVydMqw2mG6J6ZdY61ExZBU6VwulvCzJWcEO4DtMyVgMN95yxOmSxekbnF8843w3M24vcM4zDAsWJ3foTu5ghlOy6cAMWOuxDoxpQXDraFKo5EsFSkoUTdhWDenEobZUDhmA1HyHW1hKdCgGLZWJS861kMt6bG8o7NmPWzYnG964/Q5hP9H3C548/BkXp/c4e3uFtTCHHYsw4Ic1uRTCFHB9xyEn81pBfk3FmBrKjuNMUVj1C3bzllISoOQwUaZHPPzJ99j9/McMaUL3O2zv0TThhpuQMzmMZLH0/YLF6YJusWS1uYntB0w/oNaD6fB+AdZRsoJRrPd45xFryXgKhpwSIo5usaS4nps3PN3pJfrgEWNInC5WrE/OWJzcxvZn0C1R6TB+ie36muu4Vp+umFbEp5AzxURsTqAJ1UIqilh7jF2KZlQzJUewPd2qx/kOtjClyxrDWIvvBBHPHCPTvEOCcOvGOzx8/D6bpefh/X/GrlacDG8iZmCOAdcVOmNJMUHXVa7bK6gc8AooyCFILKWw3W7pDxukKFoypRR6q/z8gx9y8dPvYeYLdBxxIqw2G8xmRQ5bSoG+X5JiQWzH5vQOw+a01mlYg7iqGLkYVAyd65DOI47W/6rWWWSBIlKTe50j5IBb93UzyoK3Fnd4+vg+ISinN98Ct6C4Ba7bMHQL1PYogjFgrbmqF1c5lsYaB9AjOVPiREyxxktiEWtrpUY2UATxrjaD0ILRjOuXdJooMdTCrKxY61h2jnG7x5oBK5b16oywfcbl4w9Y37zB+uYpvV/WisocGVpeqNmkV1a+9Apy/dwKc2Sz2NT0CLm17CnsLx9x8f4/Up5+gBlHwBEkY2Ni4yzGGVIujPPIcn2L9c238Ksb4AbEWXzXV6ugFtf3dK2DSC6ZlGqisrpDUuksqqjpsa7DdIW+H9BS6IdInCc2pmO+eEzIwrJb4RanuMUGtZ5CRauMs0BVcjVQ1Fy15qF1QLGClb5ywGIi5kTOBXG2Bu5U65pzBE0Y1+P7BCSiguaM8wPTuEVSYDH0hGkkRMU5h0VYd5nLB+9z+81v0PcWtbWXGKYSO8M0MywXR/aCiBxrcF4F+VIriF77iiHVxJU1rYFbwZIIac/u8c9JTz9gSNu2gQXcgF2ssAa0ZEDoFycsTm/TrU5QP1Bch3EdGIe3Fu87rOtr/bZIdWmMHNuLYgRjLZ1bIH6F8Uucs1jvUQWPYkPAdmukGNRZTL9EXI+KRXFgDEYOzbhKrS2HaydBBSYMgpTSSmoNimCFY3vTIqAiFGoXR6yBMiPO48sCcqGkTDaKmB5KQYggkUIEtfTOcjJYZg3Ml+csNncxXU/SAhScM8ytY6SqHpXiVXK3vtQKAlf7JoQZYwzGGWJorggFjXsuHv6M9OznmLBDiwfbY5ZL7LACLYgpdMOa4ew2y7NbmOW6NkOwtvajEofBYqs/RUqK2ArDGuOOrX4Ei/c9tl9jFqdIt8Q0ukjN9QtmiHjfk2JiDBO+Xx2V8JgIRI6NJMSY42tXAKtemWiicmZAMNja9pBEqm6nmEqPQYDKylUcxnZIp2hJtXJSDOoLTBlEMVYgJRSldxYvA8/GwPj0Aad33kVkTcyQCi3LXyilvFQpXoVG219qBal7qLoeMQaMreW0QOt7W5B5S3r2gDLtcCGQ8QybE9zpCuOEwsyw2NCfvsFwchu7WqPSo8bgbIcRR+daPltrx0VrLeJc7cmbC5rBSGv72a1wwwrtVxi3RHx1z1ChUNBkMIsT/GpHwFHMIeF26HPVmlNTY5l6oa1ZF9KUBFQqraW2CSotw17dMqHFL2IqDcXUrLsRh9iMSI9xCdslChmTPYWxMoX9gElz7dlFooRAmWf2zz4khW/iuQNU41bfu7pUthVxwZUF+bIrB3zJFQQOEK8hpVRrzVHUKCIOKVD2z4jbh7WgSDq87+gXHdYL2WSMX9Ktb7A4uYldrsD09VSVWtNhRY9116pam8F1HcZ3hBTIqfEtjMP4Fa5bYfo16leo8RjX11NeDzXxihjwiw2dCqXaueeCKVVFpaq+ckjAPb/ZqlURMiBqrg6L5p6JsbUa0FhKCK2dUO21KxrAOlzfkTVR0p4itcLSuTXRKSWcU1CmaU+eJ/bpHvP2AcOtd3C+VkoeFOS6pXgVrMZ1+dIpyIvs/KsxABnvejIZjNRANkXi9inz5WNKBrUd4i2aJ8I0YRcD/ckp3eoGrl+hpgOxWONaUi4B/lAfhBjTOqtXaktK2gh7DuM6rK2ltLgF4nrE9uRSC/HE1AC+Kp5DXIfthufITEeDQWmulCIqbRO+fD3Kgf6uWguZVLHSXDNolsXUXlcoBksWg1iPdQlJlYYjUlsDiR2wXhEf0ZRwXYdPCSmReTyHElvr6iuVLR/rKfzqyJdOQZ4XgQIhRlKO9G4AW1m7JSsmF8LlU8p0TpGOhOAlU/IeKTAMJ/Sbm5jFmuJ8q9artRaHQ9252kJUjME4j3M9Yh352NiBGgAb25TCg+0qzGsdJUXk0EKH2iEEhCK1MbWxviY5TXVJxLS+bCiHMQVyuNbrVy5C0RprAK21cMHRLJoc0C5ajTkN/s7t9/bYQd5REF+qxZGuIneDokVwp4lshH5WSiyYEhASquHY9eT6ofWqWZAvPRYXY2a33zOOjUwo7QRtI8/CfotJCUFJJdZN1An9cs3mxm38ULPjxvS1I2ERNF+NFyglVwq5KmIPga8BtYh1jSCYa5xgbAu2D/533XRirlqJmuNrWNQ4rPeIM9fmgtCUCLR8fKMdXue4KY1pIIBUGrrzWOebUtbQxViHsdVl1AYsWOcBC0Wu4idbgQJjPb5b0HUdvu+wna/WMFe3zqBI0RaTPa8gr5JywK+DBWktMlSuFveAirw49PI6lBhCYL/f1xLaONfiIgw2a2tooGSt7T/JCWsi0hXUgl+dceOrv41dneKHNdi+bliV40krmjF4nIWiCWlzQ1Rqp/VcwPoOazIphcrg1dqHF82gAcMBvhXUgBwasZWC6xaocfhuQaFRLrVQcnPbzLW8h1a367rCmAOqdUgk0lhp5RCNXFkIJdfQXZrFKaVOWjC1hkaMx7iBalwqfYZU552gmc51dM4RYiakTG8dIA3BC6hUK27sVcVjztUNe3FC1vHzH1zjwzVey53Ue51fyKV8MWf5F68g0LhGVz8eFubg216fuhRjZBxHcs4t7wGSDLlATuB6ByWRrCHmSJgmjILrO8Q4+gHssMYtNpUg6Hy1HEdHpo4rQBUlkQsV/lRLyRnjtDKDnYMMTnw7iG0rYMrtWqqi5tb+Q+DqEFCLcQ4LNfv9kkO3tGILbdOnDi7aixvlaEio2RGkHN0u1YIcGLbtOSJS8yOar702oLW3MM42EqTFO8s8KaK11ZC4alFoMVFpnVTGcWS2M533GLkK3F82Pu5wHw/3tqB452tzv2uHoIj5tUg4fvEK8gss8vVTZZ5npmk6KgfUJJ8VxaiSY8Y6R84WYxMq2jhRgusWiFfsqsMtV2B8fQ1xV9OVsHVwjihFS7USpSCW+p4xYlzCW8VK6ztlDVY7wJJKQmLEd5UDRqn9B2u7ToMRqcGyMUjrPHIYjnO4xuv/y7Xvr6RuLD1q1WEDCSJ6fC1pLOfDQJwK/2rjBmsb5lM/p2q1isZZ1Hk0l9pI2yyxpkNcQVK1RNISNAd3DGCcJqyxFcDwhzxOTdral/QGOiiCNs8hxoBzDhFzdC+vrus3XUF4PrC7fopctyTjODLPtVfUAXNPKRBTwLThMjFGQFBjMJ3Deod1rkGwPW4wDJs1fn0G4kkZrJe2f2p2/BBEc92/1uoe5ZIxOeK1VvJJY4JZY1A1lXoyTxg3YU1NSFqjqJG6IbWe6pWebrC+1ge/GOQCx1P4ZfKi6/l83uEQpBx+n4+2UdvPdQ5JfYI55mA86mpclHOgaC3HEjPgrFIkgEnN2ps6Gq5U5aLB310rERaueQSfgL7lnI+VoCFX2o/37qho9bN98SHyF64gLyoHPL8wIQSmaSKEUMtHnWtDMhM5x5oAszVwDPNEKqUS9kQxvsMOA+Irh6pfdnSrE7rlCbbrMa6rIafUstk6nKbSwttctGMiEhoHqSRKjog1GCnUTEbN4BccmUKad6gYTFcwXkELVlq+g6v5HVD1EpVrMwLl+Hh1x57fYfIJG+7la3vtNdtXuaaA1jqkePAL0ATWUIypHVJKhgyaDEUdKhPd0OH7oSF5ljnMhBhABGctitZqw6bcJZcrRZHae9jYSqURW9c1pVqvU7SwH0cAlsslXSOdftFB/6+dgly3GtM0Ha3G4fEY43GSLAjOegyCs8I0z63ybVEh2n5gsTlDux7jDK7rMba7QnqcQ6yrxUWHyUrG1H5X7TTWUtBDdl6rS3eo9T42bhZpJagOUakViNMeUwquKOK6FusYsBWdKg2CpeU5PuZqCi/dHC+6XYfGCYcM++HELoc8yiG7bpTSmMh1jIOrdHpTIWwpkSxAyZRSyZC0GCrnyl9brTY431UouwXi89z6jalW9zflY84n5Yw1NcY65JCctdWdavHIwaU6zHfMOde+yYsl3n/xSvKFK8iLgdzBrTkox1V3diXGRMo1pjDO1gGsGIwo3lu248xut8cPA8Y4+uWG9Z03kH5BsYKYg28vRwU4vi/VdaiV2oeQtg2TKQK2Pa9kUppwgLEebIVYDYA1lZqShSw1SE9xajlnKudKtb23afbk02/+i9ZV9XpSrirHwdBUNOz4h0A9mWt39ma9xKEWKIdgWhAnSBGkRFQTUgKSI7nUVkYxJ1QGVsKJH/kAACAASURBVCd3cL4HgZwTKSViTLW6MUbmGNEDL6tUl/I4qLQF6dZYrLPHUdbe+eNzbMvIhjlQcmG5WtbG3l+gknzhCgJXaJUx5ljXcTC91lpCCGStC++sq3M8VDHGU1LNNXStE8k87snxBOM9/WLF6uxNtF+RmQHFidK5iiJFFWzzoeV4/FZ35zDoEi2YAmhdKi2ZHA9KZnC2FkgdG6s4i3iP1wrvhpwpOaNkChlx0nImLZmnH3ebDmOnf/HGqOH/9UD2uViuheXlQEsRw2GyFNaQE9VSGUBtTf6lCHlGckRyIuaZlAvi1mxO36QfVsypHlbTHOq0X1VS5DniYslXLN/2gWqMZ67GVR/iTO8riuVspcdYZ4kpcnlxwXD7zr9xV/1q5DNXkBdv8ouF/SklnKsf42A1cp06SW4jlJE6h0Lbv0MFIapY72oW3Tu6zrO9vKit/M/OwHpO7rzNja/+O3Y//0emcY+3MPc9Uhx+daMRBBu2o3WzOefIIpQ0X82ozDVANdYhom0zJELOdVRzKeg0Y7NivICtSFXvKlJWrG0ls1RfrVD9clpu5DmY+4qDdeVOtXoLPm5VrkfCpSgiUOqubzFVdZWU6k6hpp30Boxr2XVDjjMl7vAlMIY9mkZUEmNK3Lz7dc5uv8scE1kMpST247ZaeOdaTJhqHUpJzb2q8VbOGd9GKRSt+ZE4jrUPgLWklOp0XmOwjVlgxJFz4unTc27ePGvX9nwv4M/DsnzmCnIdjbme/Ds8Zq1FtQZ3B+Uwpga0Kcaj+wAHh4JreYPqy1vfk0vE+4F5mrm8uKBbLeg6x/LOO9z+6u/w6P3v4x3EsEfzjFAp8p23FMqxI4pI20ii1dcm1cC2gCkHwBZyau4JNWstbWSZqlb3C6ovbjyYjDHVzcIoBUUplSpy1MAreZGb+OIavri+x79rzqEqNZZoJHulHgJqqitVmnHMWigpYjTXjo9lRlIkjJdoGpnTxBgzbnXKu9/4PWIS1FuMEZ5ePsNbxz7sq6XSQi6FUiqEHGMktHqVQ72MiBAb7N73Pa79rA0xLFITl9a2OSQKKUWmKdD33cfyRZ+H2/XFu1gijFODcEutsYg5tQW9jsQ8/zdy8KsbOiOtVtyaS7bbc4bLJcPNG1i74J1v/hEf/ui/IePPiPmCECb6ZeVrFZuwIhRasvDgXolpAe6hi2EdIKOimKwYMqKCMQHROg0XYxASqURsnBHfY7ol4ltjA+OBrm5ZMSC2XfMVV0oPF3tw2eruad83Jbi2GEfWgZamlPVxLe0Q0sJh5I0xVDaxFjQnpDQKThiJ41Ns3pP3e9I4oZIIMXI5Fd79rW+zuvUWQWueaL/dkVPGiDlC1xW1ysQYawKxBdz1s+gxzjBi8J0HYL/b0w9dtXClQrw5K97XTjEiQoiR/X5fIWBrrlmNQyz22ULBn6uLdb0sE+oJMM4Vwi25YGw1/SlVnN5733ySJi/QT6Bu31wizi0w4jBiyXnm2dPHLPqB1bBkdfYm3/mTP+Nv/8v/xaKjDs3UlhnQjGrN3NYzPlfKyYFbdZiJIS2xVWrHRUOrC2lZ9zpz3GMxlDSTYoAUMTFgfI/1EXE9uFSpLc6CeERNQ5x+8ToeZwY+l1BsdS9cGR1T7RPmENBrqV8loXlGY0BbF8g4j0iacERK2DPvt+SUKAL7XBjOvsrb7/1ejV3EEUNie7GrrlGu036n1oju0F1mvV6zGAassS0hWYgpsd/t2I8j4ziiqiyXy3rvrcU6RW3B2la+LA4rFiOGEAM5F6y93n+Zj1mUz0I+dwUBjlSDGCPjfn8MzFJK5JRb4q0mk47DW3i5Sa3dO1pBkKlQLmFkt9vx8NFDure/hnVL3vyt7/DGhz/hwU/+K5vFDaZpZLNeXAWptJOYBu/KAfI1CFcbLRfFSu1DVblHXJ3QFKTkVsJroBhybKerClIyJmfE1SIlbELNUJ9ranLtgErlAwzMiwfCi98f/MLqN9VLqVlybTUyUjKaAyXV0QolzeQ413mIMaBpJE9PmHfPai8udZxvt0S74Vvf/i7+5C5ZIMwT45goqaCuQbkxgsKi61mtV6xXaxaL4RhXijHHw2+eZ3bbHffv3+P+gwf1b1GKdzg9WLyaJ6n0n3pIlpb38t3n7/B85u/4Yjb0ej5jHMeavCqlmuGcj8+rSKE+H5W9RATwzpNjxHpLPyy43G4RVZ4+Pse5R3zlzTv4xSnf+ZP/jT+/fMSz8Rmnw4JSZjwWWv/e5sE//3mtBT34LbluNq2GreRCv1wfk4uqSiqVolKkxkxdNyCuQ1xHMTU6qRym6ntbr1wfEfeJ1/kJx6VC41tV16lG9xlTat24lFx7aKWJEkY0TmgMlDRBTpiUCfMF0/YpOe3Bdjy92LKn571v/Qm33v0mRTrmODLOEzlUdrPth5ajgvVmzY2zG2w2a5xzFFVyypRrXLA6VdezeuMN1us1qsq9e/fo+9r84ugoqDlm6y21hWpRbV7FFdP580J9PxeVfLHjRW1lGWqppnOEWF0sMYIxUstY0efKOA+vA4e8Be17Kk4q+Ujj9t0AQZjDyEf37uGd4c1bJ7ibd/n9P/0/+P7///8yLJQ87+rkJAyaK3fosPClZTeMVudFoGqjrbFPKpkcBVuqEhjXQVFKStWCqKC2ww4niO/BD/VUVNOqCFtjBlOz/tLinCO8qwdX6uBWcdxsx/Xg+RhEtUDJkDOqlcVcx8vNpFBnmpAmNM2UOKM5kqYRzRNW6315cvmQMXfc/fof85Vv/0cKHbuQ2O5HNCsxjigJ5zwxZvp+wenpKav1ClWY5rlVTQre+yNClVKqicBSGIaBu2+/zeMnT4gptvjk0C2+Qr/J1MMytdxJLnV9Kipf+LymLnxuCnJAsFJKR7TKOXdENeQ476Iubg0AX86r0Bcc0BxiVSYpFAyuGwgh4KxjDjMPHtxDS+TtN25y42u/y++L5R//6v9h1S2RojgNNZugUmOE0r43udHba0Kvdm80NadRTQjnFxeciGPoltB5PGBSJmMwpqO4DusX0C1bkF5zL4ciqiNgpZWJS3ke8uUa1HtcD7k6leXwubVO5C15rvMWU4ASa9O8NJHnqhiUgObYWqVGNM3EOBFC4mI3cTln3v3Wv+dr//67qDr2KbOfJ3IqWGOYw8RyuWSeA0Vhuejp+/6q7FkE62rskRvUq6UCDYthQYiBlBKr5QprLTEGRGr+pJRCyYViayPuWktfcC04PxjZF1G+z1J+eQU5HuXtxxdoENd+IJXMOI11noezxBDJpVHLr+vCAc15QV7aOSODc75CjCnVEcy9Zbertd/GCM+ePSWngEO5c+uMzTvf5htmyQ//7s/x80esXN2b3hu89S1vkOi6HiUAQsZQKeECuFZEWMPhaXtOSolhfYJbbLCLJQ5HQhC/AN8DVTnEuFqwWqSiMrmhTEqtUuQKzr5ayxrHaE6URqc/rIQc6C8xkPMIOVbaSJjI0x7iXB9LVTGgUDQTQyDOE4aM855H51ueTJ7f+Q//ia/8/v+M5IFtTFzu5kYDUVIMWNuRszKHHd5XiH4OCd8piCW36cHGNT5W+5zOu0pLAbpFx+X2nBjnOkrCXEH9xhg8tgEX1aLHNLN2y6sYDYADovUL9ucvKb8CBXn+NH9xEx94VLkUQgjHx3NDQNofcb3w539I5Kpeu1qp6pr5zpE1YRtFZLfb87OPPiKmxN27b3Hz7W/wnWHBj//m/2baP0BiQiRAyfRdh/Oekufard1VWDKEuWbzvYcihDDS9x1KIow7cin4kOkWa/xyg+uWrQ2igBa0kp2QxjtK2eBaHbm2mEHJRzerlFyDHalBj1I7JLaVrdCuQJj3aA5YMppm5v0FadxDDjhAS5viSybFmRAmYpooSZnnxH5Wklvyh9/9M268+y3iCElgnAIpRaAm/lMrtEoJxNT4IDZ3eZ49Xdcdg3Nt6FWNzyoJpus7BGG72/LwwUOmaULEHj2MQ73IdakIZeVuHfbT59k15ZdWEBV+oRarKjFFYojHx+pUpPJCEqz98n/gwg0HqogcT17vPcPQV/q77RgGiCFwub1knmfmGPjK3busbr/Nd777f/KTv/9rHr7/PSTvWA+GOAoperADttuQUpubbgzGQM4zMdVN7g/Qo4FU6qbLqaEuQ8ANS2rNSevA7nx1i0quGW3rK/+rlNpFURqXqU2NOjRkECpSd8iJaC5knSk6Q57J01jZzPOIphmjGWuFkAKlpEqgDBN53hHmCzTsiNlw7ymcvf07/Ol3/3fk5luQLGos58+ekbFXRVUIJdXkoyq1RPfIgKhz55fLBcthUeFvqY31jEitXNS6JmEOfHTvIz56cL823sMeKSeH+1eKIqXGoTllFovFUfE+b/ml3/UT0ZVrgXmMsQ6UbBbjUIn2qwCzjwp2DUq21tJ1PdaNpLm6SDVj7wlz4OcffkScI2++cYubN27y9T/8X7l15w1+8r2/4uGzD1kvPAtr8JII0wUYXwdqNpdIc20U1zlHSjPGWJwxIBnKTBgzMewxuwv6xaqRGh3Od7WBtAhSlCyKsb5monNBr0HNqgnJpYUbVRk111xGbmBAKjMlbdEcifOIhoATwRul5MA47qguVawU9hwI08i43xP2W3bB8e0//k989dt/DIsTiMLFGNiNM9YPzHM4lheQaxBvnK930VhSqYVTKYZjIVsKEe891pkjXA8wh4lxHNnvdjx6/IhxHHHO4ow/JgWlIX9Vp67qgTpfLVNtQqEfu/+fpXymannYvAfEqvaJraWeRgyZK6bnv8W7OsihRxTQupbXpm+d68l9LWJKoVVjNNTs/sMH7MY9u13kjTu3OH3vD/n22V0++pe/5d5P/4HzJw84XQwM/QJnBxJKzh5rHNYKLkfyPGG6ClNqLDVnYirxjmIoeWQMlxjnEWOxrqsU7kb5wIL1FRY91LzXupTaLUVyIaZIrVWPaE5QMpoTKUdKieSUUU2tdWilRMY5oGmCMhOnc0qa0FIIIfP42ZaoS772zT/jvT/4X5BbdxHp2O9Gnl1sEecppmPcjwzD0A6yXMe8HX3+mjyqsHzBOIvDoaqM88Qc58rDom74nBNzCEzjyBgmVOT42pUO38bMmdpBxjTLcyCreu+OCKjo5+NaHeQzVRBt+HVKtU2mNZbULMkhAfhplXP/WjkmIrlCe4wRvO/I7cZqKqQUq3IaQ0yZp08vGCflyfmWt99+k9u33uBrv/dd3nj7XR69/488eP+fGC9n+k7peoO1mawGQ6J3hs55UosVsiZMsVibW8FWrREpGTRXZm8GonXHz1xrIhrL9VCP0uaQG+WYTK0QbqLk3LopPk/lcFIr0nOaSXFPCjOaJ7REwrxnu7tgezki/Rl3f+tPeeebf0R3+z3oVoy7yJh2hFhIODTVo8Y6T8rV7ZMDkmakZszFHCHn2tC0hc3G1DZJxqIlE0Pl0oUQySldQdhSIWBFcW0LWmdrQVWrTc8N1VqvVi3Z2JpAyFWc8nkoymcyJ/3gXpVS2E9j1fy2iCmlmkC6tljXYcx/banp1QW0oLUhIVAXMZVMCIHz8wtiDIQQCXGqeYqWeU9aiI25d7YcuH3zBndv3+Lk7ATNgenxfT56/wfsnn5EvHzM4JX1YoEYKo9La+ZeS1V022IUDqdcOxSkuRpFQVpupyjY1hrUGFPb7ArUpg+VLawNvao5ktqUW8rVYaC5YEpBS6DkAGVEdCTFkXH7jMvdzL0nFyzOvs4bv/1HvPetP2X11tcQBuKcmEthzoX9HAmNVZ0b1OqcI4cAFKwIc5goKjWh1xp5c8zf5PpZjGEYBrquo+TMPE1VOUo+5r7GVh0qIjjnaiWiKs46xNRyBmMrBX61WnHjxg0OhVViao37McZ5CfXoVy2fiYIckoGlFHb7fSWnNWtS9KpgXz7FgrzssU9SkEoXN8/XlWidRrvbbdntdozTVCHIkkgpV36QxkNuDk0Ri3C6OuP09ITbN+5w8/ZNMAG9fMj5g3/h8Uc/Yfv0HinOdN2CYVjgpG5uK1KH3RQaFCvHLu2VQ9QshvWtp2/9/Ib699ISYEVTI0dWS3GgwNR1Tcfu7bV9e4aUifO+UktI7MdzLi6eUKTHrW7zlW/8EXfe/Q7dW7+FyIL9lBlDZU7vxxHnerJq68R4oHpUtyjHiLMWK8puv62sBwXveow1ZFWMtFqacpXErRSdWnI7h9qvbJ7nCpo0a3BIEh94EocCKmctvutYDAtOz05ZLZfEWA9V25KGB9frcK8/S/mlFeR6a5brLSjnea6BmHft9GxJoMb8PGygouWlr/uyfMrLKN8HC1JeljlSZTeOXG63hLli7nOorOGirdpPYyUiFkGKRbB1qOewol92vHHnFuv1gmHhIO4ZLx9x+egel4/uMW4fIdMWZ6ov7b3DO9tYszWzLcfkojkiO9po3aUUvJHnIEwy0Kjx0uDvnAK1kyEYKeQSjtN0p8sa+O6mCXzP6vY73PrKN7nz1d9hefuryOIMzRWy3YeJOQRiqWREEIza2sYLcyyXz7km6qByZY3AOO0JIeC9xzeLaFydclu0QNHnMBc53vNc63ra4XjsAXa4f80trrGGx1pL33WcnJ5ydnp6rBdKBz6Wda0DinwiNPyrlF+pBTnAtrVWeWaeZ1yzHgfTfV0hjojNtRD9Y1ljPh0pMwdk7KVFFTDHyOXlJeM4klKdRFv920iJESkBGpmQUodgCq3ToLOINSxXK26enXJ2tmGz7LCmQNij0yXzs/vst+dcPH3MbntOyaGqg7T2ztJOR2uv/GdpCI0IJcVqfdrPNIrJAQav1jY3vzwSw0QI05FxO/Rrlqe3uHHzLuvbd/Gnb8HyFmIWhGy52O5JWSlpJuRI0UghN8qTwZZKp8mNG6kqLd+hx/VVVcb9jnkeGfqeztmjpTCuq13rczkyeitVRo+3QQ8onOqxacTh9h76CB8aPJyennH7zm0WiwUxxqNlqVT6hGmumbX2pa7Wr7qI6lemINebvMUYGaeJQ/WfltoyR4vyYo782GazPXw90D5+yE9RkJd9f/0FVWG727LbbgkhkDS3MWKpdu2IBU01CVekoIdqwcPJ5noUg5Va1rtZLjjZLDlZL1l2HYtV7QiiOdVJstOeaXvOeHlBGC+Zts/QPNcxAjnUDPyRdZDrAJ+D2/nf2/vSX9u2rK7fbFazT3dfW1AF91pQFtECgYCATZQQAwYC0SDRTyR+Qb9p+GSC/gUmClESEhMiMSFiIjEhmEDUFGWppAooEKJlUc19r+q9d997tz/NbtaajR/GGHPNOffa55z37rmvqzOSk3PO3quZa6455uh/AwQLKv1EYgS8VoCijrXKdCTd9o9wcHSEfv8I7dERgWXrHoCFc8Bm8Fguya1K5cMUgpS/lWB6IUCHye7zEZRoGQAHSiB13uFwj/qonJw8xmq5RPQObWOwWOwRMB7bWZQTFlM9SIzcU12XO73Yp5JBEWLAou/x3HPP4+jokDC3gNTKIq8+Dc6zG79N16yv/Z5jkLw0VClqnzw44n5SZyLXKEtyoUqTUz9LzSjA5BuvR5pLo9nH4BsMGwoSLpdLuODgg4d3nuyFUcN76hgbVUBQHsj97YpqRRrVJChPKIOua9D0Lbq2Q7/ocLi3wN5eT01nKJkLgAf8CGyWCOsl3LCiAGB08G5kiRupsk/mxzCel24QtIZtehjbwXYL6G6f2sIpnSTNAGA1OKzWHm4ERs62VSFgEkoBkb1j05wCmgunoGnBcsoUMUoMJHliwHM3nkHftQTBtDwjabI+g3Me7WJBuGOyUIHEHBGRYyGRbcJJKspa6bsOe/v7lPC4v8+JiRPqozCJNZSwOG4oG0MYRKTI07JFrpxBBOTNR0pvds4l0Ut3zAzzC26d1mjGVPl3cwxS2ysitZbLU5wcn1BXJUQyQn1AiBbeBzg/IILgZyI8dCQ92ioQlE1kCBtrEbUBjIUytGNaQ+7NxljYxqBvOyz6Dl1j0VhN7dtsQ+0FFANAG8Lg8rxJyJxoSa2nGkPEqBgOJ2D0nsbqHAVfvceGS2tjIPBqpTSczJsk+REEHDQUDKhUWNBUIjsFpOQgInJ6uYePEYvFAn3XwfKubjUQvMNqtcRqvcJyuYaLQPSeqyMpKCuIipOaKBLZouta9IsF2qbF4eEh+r7ngCTZKSIRUj0QAGMoUDisKdFVGEQAH54Wg1xZHERe8DhKO7IyRyrOiIo5CVJeM+OJWOZqzaczVpIkxuT9aJsWbdtidC7Vf3jPuU+a+3HEyAuI8qNUBLTm4JjSFEnXQESAcwOCAzpr4KJDCBreeCinsVwPiI+PgRhhLRuezYTiIW7LqBV8lmqhxRkkuycCvAtTGW22CWieU+cJ1VAp8nJBEbBEVOTK9ojcni1S75RIHjWpYlTaIERSqwiTmNUjtp+6xkJBTQs9RDTW4ujoBo6ObmAzUmnuuBkwjiOcG6kunaVFvpDbtkXX9+j6Dn3fp8UtsTLFABoS3xFPVV6ym9RBhp/N05WehrF+JQwiL04QDwGKZvuQF0BVnYgUwdGY7csVtMVXFWNsscmko9H5kQqbjNbo2hbDsIZzgXChtIIJ1Gs85YnKzqcilAr8PBEAZSPHQIFArQ0aY6DYmHVwCCpANdTLkHY0hRgUhuAwDA5aaVhr2CCPkHJew0Z7ZOklKoNWtIARVXJbR5BRC019CRUaEGQPeZ4UAnnmACAENJqcDtS4JyH2Uv4kKVrwQXOOlyKQuOBhuZ5DIcD7MSGQaN0gKk1qYQhYLBZYLBZp+ifJNL0ZQcSUzYGyfEmtG4YhgcvJJijeTeccbGKSkMDnZJ0pllZ1j8SrZJQrYZCci+VvwztDvqHXD0FBtbkYSH4OttSrgvLvcg9JnGItFIyjF97Ylncfag8QkvTIYNcixTQCR92hmd/Y0wM2RiOnzVB8w9DpHvCKvHa0G45kCxhGanEeSpHqoGDIS2QodkKuV3bxBg8RJgEU9ggqomHmCzFiDJ5ywEbOVGBPWQikElqjUtZ0ROSyXkZXBz1uZNWK/6UjI6G5t13HnreYouCyMBtjYHST/qdUEcafF4mop5oeqfdIxG2zhQEAgnlKwV5NpbdeFn8k6aLZ5kjoN1sJr1crRa5EcZMdbxxHguFhnCTx7wslb00kma526FhKTT984vRd5c5VlS2TeIUj0z5yVmgEtLHoFnswtk3dmRQsjGpgm4YxrxSgOG+Lu8QyLiLAerxIDQDQRlFeVIxwUKQSRUZp5DiHHzYAHHxYI4BQUILzULwwPQJOhzWc9ghWY/Se8rq8ghs8ojHYwBPWlooI4wB4D6MDVaqYCK0jYqCotfQwcV4hgpp7Km0Z5JtggBQUqJ98QMSI4AY4RwawaVoYS+0iaIiaUSypmZbRABgXrHrBlLAfAxv5HAMJ5N4XT5q48cTeCZE2lJyo+pDd286nzF4fA8dfIgY3EgKOvO+dK/Tt0xNLkOTf5tygqepNJege7vRScHesxMROL9QOmnPr5h6wnBlFoihF8JaNbQky09NCnq4UMu5kxcqUdQiFrsvua8VeOqMUjNXwfkQMCl3XYNwMaLsWgydwaANgdAGttYSjpYBhdGj7Dj54DG6FTllSa6KCaS0G58j1GSjFxSqLoCiuBOXLOAAoBsGKFBQztwKlkYd6GUUPA8CpwMVLpIo2lnq719uXMAq5ibedI5ehCzMntlSISUsx4HgSayjCSIrTfVS251+FNHkiBskfSphDymenmup5ujBJccd3WzYISxBxK8pnSVLFLPYSyXvUdi0FDLOalJQ/BZZquYMhu27N5BYGfdtiE6jWQbcWqtEYxw3GsyUW3QIb5xHblkCrR4++6yhx0XHafN8BMcCGABNBKe2sovhxzXZIS6ogmU+IxkIqDYu5jKANJw0z8Irm1Aw+zMszyc4tXiYGl57UF5mHuVc0ZVFTmoqaPS47YfcuP6MFyH0jWM8kr0kqyfaO3PXBkpqoTPlu3lUGqRe36JhaIp/sVz+PLmKSXV6uItoetxkmdytO5gmjhyhKiGuaBqNzGMepsjFNKCXHbj3n1oTzdxvn4QHYpoGDB4YRh1phseigxggfPWFsoYF3Hq0KiIqKo5qmRRw2CYu4MaTUNZH0d6sMgtJYclObpjEYR8e2WQSU3rkY0udRkh+zsgClkmdI7IiubRPGcWBPH7ku5hdaunY+NzkTqJlzz9sUs6/TVcL0f4wgxw4zCdW9OwRP0K6KNZWrpLfFIHPpICmSXsFNiA0tKSVbNkS2Qxf34HNRLfR6DPKdqFXVQXQPvjf1SqddztoGbeu5x8i2+hT53iJd8mGn62kJqlHlomlaeLdCFyPU3Ye488Uv41nb45nnn8cAAzQtjg6PEDSgrcbewR6Wj+9DGQoIhjjAKg+NALce0ELBuBH3Nhvgm27C7e0DgTxh4HiKg4eIi2L82TRQgih7F0UdYyeDbGyNtalkdjKWWf1k9VjlxuFbVPgv4Ivy2FwTwDaSpAQlAYrUW25AqhV1B5vu+eRS5MlLbtn+EDTEvNccfc/HyUOjEss7aE66bB2/Q5fN1S45T2yRmPzpoHRrLuUch1Bcv3ac5Tuv/B8RoQxAHWsNXCD4moNugbM3v4j/9Su/jL3lgFYZ3Pjmb8EGGnb/APvf8AJ038INKzx3dADbdliSIwp6OIEeVtDKYvPoEdZvvolHfYfv+cc/i8WNA3jnsGj7hA4i9fLF2MSGyiXIzDsTu7GxljxW7FEyemrKoDLmOM+VGsVgiVV23dtYn7WGELP7xxARdEyMLo6AECUR9mrrRZ5YxZIFWXc1jWwUz9rec3bEjuvPfZ6rVrn0qJkj/xzZeAOnvyilUpMWbzyij1v33xWhpw/JK+O9gw4WVivqFBsdehNxtNfi+UWDA9tj8/AuuuYAz33oG/DF3/99HI8r3PrWm7jzcNYhPAAAIABJREFU6S8h+gGn7QHgRrzgBixCgHMeixuH6Mclbty6iaOWUkU2bsBqXAFBUSPRitLiEKnN46UeIbTxU8CPpITh9PKmaVias5TJzo0zum6S8LtIHAWX3MUnG6peG3KtCMPeKxmPBDCDn5Ik5eeq3L1XIkHyQRU7v1IpnbkEe8rOx/zDyHXONeSxbZjvYo7iMtmYrbHw2idf/nYgMpN4MRbfR1DwzpoWjeKefQR1QO7H1RnaG0cYlks8Pl7ix//hT+P5b/5m3H/8AD/0w38N3/Fd34H/98n/hk/+2r/Hz/yzn4MZAn7j5/4JXnjmORy88CGMmyUevP4Ihy98CHHj4IcRXd8DkdLr6dkUoo5bKk+KS0VpF0EkiYRSl0MeK5tKZCUlXWfXUOqchT5r+5Qu+ktpV/U7qt5BjJSGU2sW3ntuuBpgQkTU7zEGASaEEtmFADBS9+Qnr6VJMowzGVyoOCBm86o0xPOdnNb+boM9p1LKTJ+HyBFabRB0ZFxdpGtSvwtf3McYC6WAzTgQCEMAi3cHrSktXQcPDYOTR2ssnnsOn/jRv40vb1b4zV/7NfzAj/4IPv7934U/+dL/xWcevI6f+Fe/iP3nb+H3/vNv4XF7iA99+CZe+uJLhIKoDYxqsH/4DB45jvcrCmQqaHgliIPS50TmhRa8VgQIIStWmAMgFbPre56HSVImBTi38/iY9LZEnUq2eb1JshTL7Mitd5IxUr6ppfeJSSPRasL4jSFO8EKS1uIDvPGw0VxpsPCJA4VlvKHa8YtoX/lvbazv2mdUdlJxTqVnToxTSY+Z8abfMcKNDogRluH1ASoYAqhOWphDgZAVlVLJRWxtA+e4LhwRlpUYY8lF+/DxIzzSAX/xp/4Ovv2v/FXcvvMKvvE7vx1/5rv/Ar7wpS/hl3/pF/G9f/PH0XzjR/Aff+u38frg8fd/6V8DH72J/jv+PH7y5/8Fvvtv/SRMt4fVakDTtoBCKlkeuVrvovcjv33wKSDXNA0WzBxPRLIxJUk91X5ETIHAkDY0TP9nnqnayZIi/mwrzRXWiScrvfMw/86fhJ6YQeQB5gaWODn3fmCbSS4jhPNzVHWdc2mH6BZJItF+7/M0bH6RgRhD6hO8d5QeYRvOW/Kw3CsxOoIsdT5gtXHwsNj0Pb77p/8eDj9+C5/71CexcB5/+Yd/EK/dv4N/9y//OX7mH/wjfOLWt+EPfuczCM8c4Xt+6sfwuVdfRvuJP4sf+6c/i6G3+P3PfBZ7z76AxdEBzsYVnAV8o7BxG3R7izTPJoUE5aUyEF2k6knJ1tVQsJpiHbZpivlIf+fztKVyTgvcJ+bLfkLJKPn6mAzpaQPL/y/f9+RtQ/V97paXQGHgBMvSQfTkzPJEDCKTMEcXLd4kWi9gjtp7Mmfg55Oi1MREdQp0mjjEZPiJfh25im66J10rRI4HJLQNz2nZBGwQNeDhMQbHLRMMNBc3oenRdgt87ctfxmd+/T/hO7/t41CnJ/jtX/m3+KEf/Bv4xK1vxe3//rv4yqc+hb/+A9+Lh2/eQdsA3/eXvh+vfenL+A8//wvYnK5x9MKHYK0msOlA7elUY+hvzmmi55ufwwIBxVIMyAgEU9yez63z4y5NYbfqdJ66exlK91B5Vnj2HTJpFUh61Kn1V0FXEkmvRePbGeBlVa76fsU9d7nNypNLtcNRg01tFCwUhiHAc4RbaY2msamjK0CFOyEKMylsnINtLBANBQRVAyDCeQN1qvGpX/g36HTAh/Zu4OXPfAav/eH/RvMHX0Bjn8FXfvuT+Nof/iFuxgFf+Y1fx0e+7Vtw0Lb4o1/9Vbz065/Et976Fvzp41OorkEIIxZdl9qU2abDsN6gzdy8orIAKb7GjD/V4nAisLizIG3jtt22l5TQM3Tx5nhRgHhW5PNwMxs0xKR+Beo/MX0380xvhy7NIPOTGIu/c5doTGpQ5R7NFrFiQ+88mvMs5aQVoXFI9H5rbOxJoxdeA9SRgU5YNpLCR7711WoF7x0ODw9hbYOmaeC9m4x0EO4TtCIVyyhEDyB4jDFC3zjEn/vRH8HmtVfQBIf7r76M//k7/xWH/Q10XYf/87nP4U//6E8Q14/xse/7Hnz5T/4I/+O//CbG9QpHqsPziwZfeuWrOHn2GTTf9BGgaaEi0NkGg4twLlCzoB2qhTyndGaSklhReaSm21dFZ2UqDThIuDumcO5+lL2D/NoXMkemuhXf8XMKEqMkM+bOl6u2Qa4s3T0Xb7vctgC2dvr60LnnSwyXM2DFZOIuvnDyRWVTlM+jraZ0E7keM9p6vcZyucTjx8d49plncHR0xO3ARijvYY1BawgRBJsAryOgAhpj4UJEf/NFfOLv/gTiZgN/tkKjAtanp/DjgPXJCcb1GiZoGG3hvMMLXYNnFdB0DfYOj2Ch0R0cAIs9mI98GMdaIygLvwnQMPAAnKJEQ6gJynWXLZjc2JHS+A0lfRVzk7+jwrsYAexwx+eFTIDEXvJ7I4mjrbHNiamKOXI3e46gEyPH3uIU06m9YFchRa4kF2vLDsgmt07uK9Qh+rC4bq0l5f9vMcPM+SIx8thFTcnQVxqeU7aN0QhKAZwRAFDrhAf3H+D+/Xt49tnn8JGPfAR93ydkFKsMDO9aQVE5LDTVMDxGRLvXoz3cR/McoLzHoQVl/jqPvrUIQ0CExV7XY71aou0bBGPhNNV+oGlhmw6nGypYamyD4CMMq0XQGtFzFaDsoJWrXFepP1SnwU2AvGdYonMoRk67IRdy+dW0YSVrr1qPaS3seOcxXNzCII+pTOcFhl2N6burNM6FLs0gZfxhGkiOZiJJbzJgAS+ec+Fd9BAp3ylm5wAUeIx5hm05PoBeo+L7SuqL5jwsOjhjMK2pvtyNMFrxRAfYRsM6g729Hnfv3sUX3ngDb7x+B7dufhQvvPAi2pZ65wW5Hgj9PbKL2ELBjw6D59hAjMDIfQyVxuAAZajkdB1GqLbBWQiIgcDVjDFQcBjGSIZ/BDUbAhA91VxEB0gF4lZgVWsYPRUYTcAXJEGUidwQaJq//B0HJe9JpQ2l9G5lxVcxEpawUkDiA3GSZE6cuc1Kl0xTM3kIhC0WQbEPqxvWVsCAcpMbWcae/35SujJ099ytN8FtTvrkRZJkW23armsHkKRGGeXdPb5ZxmT1KmqqnaB+5gIeTSgmWhGIsjEGzz//PEKI+OpXv4pXvvYaPvrRj+LWrVs4PDhA07GRzD0KA99HUrKpTx971YwBuAjJBcG9JUlFZafTgnUR0IHyoiTXTZ5BFjxApc3J9uJno25bqji28ADFAO+AaGKG1FLiBsQYCy9g8c5AgoIcGRaIQGBkMs3vbIeCMPeCpj/r4KQs9ixbQmJAIQSKYc1e8j3ixapJkt8KtLtUez096JxeWDxUsahRqFX5NVPNAksVZIsgP08uRIuRYWhArZwRAhQ0grG8KKbFbK1F23bYbAYsFgt8+MMfxp07d/CZ3/td3P7Kl/Cxj30MH/6mj2Bvbw8998UAkK5BvnlAkEz8OAEwC/OJOzliclMClIkQoDEMZ7DcOkFBsQdtglgV9y1dV2rZFZcAT4xUvycNjmfojOmy96L4+1QVyjtRejPCMOAkT+qrnXwuIq3iTIBvF+3a/WXT5dsmYIdhGGAbs3X+VdKV5GLJ7xgJjzVaUq8kkCS7fJ1WUhiFsjvNGpnYXuzMFLnqRTtXxjgK0EFP5wlWAlSKACmwCsLABZoBFIwxsMag67r0jCEEvPDCC7DW4uH9B/j0pz+Nb/jwN+LmzZu4efMWDg8PYBgaU/B4ZSenTWN6dqpjII+Z1grWtFRoltSWAHhK34mBWkgoUMGXMLlzlAVAgArU0IZqJXSSBrmRO81n9r/Yj6qKGyk6S0oEEvJj/f53xMFoysLs+5w/fn6DpGcoj1Nc3j06VzDI06ArYxDFXO2cQ9PYpLIId1TvJNkYk34r4hSl2M28GRdRWggK3DAnsuinMUiCngKg5L1qTSBripLetDEMkmyBhhdI7JJ0oYVPz7PYX+De/Xt49bVX8fnPfx4f//jHcevWLRwcHKJtm1R8JCqH5gh2sgUi9QGnRerJI5Z2c5LC1MTGTBCcgVoieE/P0jJ0DrUPmNy59WzJGLZU3TR3QFZKUWxl/FJKA1zVRnuWkp5soYvjUpf1MsnYlVLc62STSrrFPX+VOVhCV4qLFQI1fGlDC5sPtjIU5iTKHF2GOXLbRJaF2C5KKSgzvTCdSaiQpBegjCKYn0BeH20MbJScJVrk3juE0HN7twX6vsejR4+ogaj3OD4+xmc/+1n88R//MW7duoWbN2/i6OgIB4eHaJuWO8FG6lESI9k5WiOMI4+DdH7DCCmyGKzVCR5ns9lgHEZoo7G3d0CtBpomMTXyxako+n/RHJfzXdkZbGzPOWjkM5E6c2szxgmj95wXeOG4Jrc82VI+BKyWqy21sDj+iuhKW7CJ4SR68WW8VfXir923ol5NB8h5k0dLKYVQwRHkafYURyld0ToEgKUMIQJqBB1gTAvL0enk29fUFKZtR2w2awAEsry3v4/VcoWTkxPs7e3hxRdfxMnpCW7fvo3bt2/j4OAAL7zwAo6OjvD88/S761o0TYu2Y2AEkItZ8r2GcYRjoG3vPc0n9yrs+x6Hh4c4ODhghjPsPRIPUkzFRZPzY5Ie+RxP+Wxq52fnvreKmYAJWAEgbx2ycZx3neqD4t+E+asmdVWwn1XGnPVtropJroRBZDBkpLvJ9fsWdq9c1artEcVeLTkuYlrw4J8ysJV5xzJGQaZiBDCTKEWgagrQkcDRKJU6e9mCOYsIrffQtoQMuNkMWPQLHB3dwHq9wnK5xHPPPYdbN29R/43lEqvVCscnx3j55ZdhrMHeYg/7+/upMWXX98mpIT/GWHRdj8Y2ODw6xP7BPg4ODtH3HaTZZco41jYxfr2Qpnc0vSsBtFO8G4tjQd4CT1Y6prgusPWZOBby8SuVbWCXXajnbKQFE4N6l0gTnvr6V61mvWUGKUVwOXHWWozjSCjq40hYUyD0CUH4FowjrTXr3nTdOUkClEbgZey9WuxOzJpFZGcvRAvTMPJh1y4IxzdGKHgoRTu2526tpjFo+56xYgP29hY4PDxMO79kl5K6F7YSAw2jMxpr0TTkLeu6Fl3Xo+u6xCBt20LcxsllyxINUMkRQk+AhBOWmCGKnYe0mUxgDARPKqS14bQUM1UcWsMTX5jKEBbQgpqi+PNIIwn8LwHPITFtHtjjF7b1d/56NKtWJttEzs6WcG7Eol9U0lIVP1eB1/tEEqQWzxI0IoxWxzlLpQ8+UYw7Fmp17HRyuVnkbl2wganO8ZRl991Oo5hupdXUvchYA6U6eDNCM3yp5zwm7y1CCOiaDiH4jDEmIIQYSX2aIvNkRMs9jNGwTZviIIQIQ38b26R4klKopMy0mxZqZf0+MKlZ2zvtdM7kiQzwHtBsDylmsOKkwoGSFVBl76uIZbBLfiujLnuvNdVCwBibbNbROZycHNNpKmt9IJuHyt/tewC0ASgZJMZIzXOGAbZpYI3ZQlhMDTxjOedFmkQmyuk7bBn6OZMIykcxLtnJmLaChtULBwh9sbEtJHUjaA8dNIwO8GaECRHBG3jjE0hzjAHWZvloiMl96oMwh0qAZ7K7GcN46/y3wG2mfhrMHDS3hMTLq332Hcz/xjZzJG+f4g0jTRDA/RDJ5T0xYOEMUWqne7eeT7FLFDgdZWbBJt7KsiOUyuwPrZLbfrNZ4/T0lOaTwa4TKLgumeMq6G0xSKnfTuJM/PPjMGDYbLBYLBC5Ci8Zw3RS/isxiby4OUbZORYSG9vo8fJ9rNQ3JVYMx0tiCTZhtCHPVPCwEaASKU7nCIyqYRy0N5RqohVLirJoLLJakhZYWtzTcxGT2JIplEr/17p3/ohkZwExOTDyQGo5v8V8sAQSBJPgfWGzTKptTHNTqzAAzfdFeVQ0xGkOYvYMuWcsPz4Fk3ktaMXMwf+fnJzAO49+QeqV4LBJ96533Qapqdb7lKIWXsM4Ti202AgOPAHib5ed4tLMXh2c/5sDJeeTJAjzte4rjCWtBZTnF2I09VUcgKgVGmgE47lXhUc0ESFoaBUQTJ7FPF1bpEiexFm/PGEEUhPU9H+i3Jief+lF0uelpo90eWNtkuL5tQr1RAKvoshlEj2pMiq7/46XmDNJVJGx7rKejJjeY5GNm+kDMVK8yDmHhw8fsQ3G2dhqkh45k7wnvFhzRpExJvnsV6sVVa815HkJXDsxnQ/evVAu/CRJZLvJJEm186Q0Ex5PvQOJKlZLIvlcFmVkTE6jCarfjwEwFC9RgeIpQRIflUfQUk4aGQhhkiA5w2ijdzKIgkq5RbnUIE8VpaHUoM4XvYstdSq5QicVL284I+rS3O6dS95aPU0qaj6htYt2x+ZXb1Y5c0xzhSQhjDEw1uDx8WMsl2fUV0RRcFQyC8heU4WtdhV0JRJEBmWMQWMtBm0wjiOWyyX6rpvwXmO2Q7CLtVYLhKZ8qnkGkGMSg6E8No1PS77VdtUhnceSI1XWGRgdoY0j7CkVKKgYFDTIExVS9D0AJqb8qJi9cLFBZLyBbyifiWlg9PQK2MkEac0GgLN61bSZwIA29GnzkLkpVCVMc5bbI0mNy+ZDerenOFEmZdMCTzs73TPt7xeI//zd0LOzwS7aBFQhOdKYebOVTXez3uDu3bsACBVTc+zIaM4yMMwkM+rik9DbZhDZkfNeENIoRWkCaR42A9abDZq2Tb3qgFy0XhBIrEQwgDShcn6uy5IjqzT0NDQl5Pmsj8TsbkfXMcrAGJ9StUPQ0JqQomJUUDpAMcNRND4QI2Xjyp9T6ty1KccqA9TV4ytVp6fnklYVC58npJiLwlExwzBpXEqcCUgpKgA1G/LBl5sID+QtanTZ/crzCnVKzUgnZIY33/v09AT37t3D/t4BNfJh97E2ml3BkwS+SjvkLTPI3IJWSnGPOQ9EoLUNog9Ynp0Rmjoj92mlJ49VpIVVGCR0sfQ/zx99nN1fAYVLjxwAopCpdEyUBjiRd1dqV0MLBOJvF72fRLuPDkpFNI2FcyO0VuyJkuXPiYCKsoEj7/Y5YFmyPQL17dieMKRdeA5LNl/MBXMoOp7sB/pekgi3FoWmZ5YGNGJ/RHYWBEz13fm9tdHJaySdaOVdzL33CzMlIibVZ877hojRDejansYl+GrGQmkDpQ1Wmw1efeUO2qZLamLbtiQ9FEkOawxsVt9yVT0Lr9QGye0QUblWqxXOTk8p6NW14uyb1ZcBzLhyd98/NyzzhbnrmGrwyfis1TgYirLraDg1nO0I0T5U5hTQGiYZ43xPJUw4eV92rLDCJkvzMaMmCOPETE3Kj629XNNOKu8GySEgBwagyJkrdnI+L7Cnajqf+yHGuNvVm6634xVnKpX3Hl3XYxxcCtKGGLDXUXxJKYUHDx5gM2xSYFWqJG1jt2yOd92LtW3sig4vwS/6aZqGcmY2a5ycnqJh5HBrzbQm68WR6fCXfc5zXcCy68aYetkFRCBEkiXMPKmmhMdBcQ+NKGkYMSJmBWApZV6hUKsmyREQQbvxLkP3vDEDKBZ8YafN2BpKlQsjZw6dqR3i5dkxkZVNuB1Xyg+9DCmFIgZWz5X8HYJH01Aw0BiDtmkQgofWBqenp3jz7t0kWSgViGwQKiuYMp2v2kAHniAOkr/sBA9ZMYm1FmbUWK9WOD09Rdd22FuYJGG8YDyJqgTQAjzn+XaJ9UK/zyiXIDRO2tnBLQmTWlRci+IEFpyqUu1QhSEbp5NiZAjSeoyV7XUR5dK13hnjOdKiZJI8yKjS/+l78VTVNk52H2qcmUnAOPWgTBO165l27Og5cyilqHejD2j6LoEyNG2LYaTWFHfu3MFqucT+Yo8yMzTly7VtWzT7yaXqu84gMog67pAb6hIDaZoGq/Uax8fHjN1rsFgsElgyxLiW3V4+S0b5+feuP6/jIakclQHWdCBghRCpr4ako9QqmiCeFG5WHleeGVwwFiKpY5VdsZV/dMG8zv6WBV1JFYVtBim8XkrsDzVFpmsGy9NY2PUc2X2tsvmc5mD7OQoTcoZht+aCySgL3Wh455KWEWOE1Rqvv/46Ht5/gNZORWhNQ9KjsQaGG5fKhnvV6hVwRblYwMQcospI740mtBgGSmA8OT6GNQ2M0ZSubfS5fv65arj83nPSYm5sxWdaQ8fJvYi8rFk2S4gmo7jAaVo4IQRqLV2NIXnRar9DLiEvYJC5MetiJW/vkDpb2NkhadHTMVMOWDo1u5YY0BGTy1owb5MunEuXLG6iVXnfnDlkzoTmYinyd9tO4QClFB4+fIg7r90BAHRdx++iQds2qfd8rl49DeYArrhgKmcSAlqjrqRd38EvPZarFYw5Jn81FDpO367dv1CqCACeR7U+m38OgGyOGAHPOyurDCoBvun0woXyMUmbgWj4GoakkmbGjpXbOR9TnkFMa6zyTl1uYotrT9dQPL7SJplOK433ZKhPE8TjnzKe87YIde/C2jDc2rxmpEYd35gfG/10XUfSKQCnp6d49dVXsdls0C8WZHNoha5rYRuDtrVpA87tj6dBVxIozCPFOZNQmolC27YYNhus1mucnVEk1DaEVmgsLaN8p0k6eIwJRid9ziSLML3ciklyFSiPEKuEIJKNHyUAmmIDvMYdVgpIYBHTQJJEyccpgA3FuW+DthddvvOW6lH+/LlUqW9erNnIaTHgNgJJxVSF/RGJk9L5MpfUJ35yAtAYY7FxbTkQMhWwsQ26rkvlEeMw4pVXX8HxyTEWiz1K6FSERt8w2HbTNEUQMWeOd92LVVO+iLTW6SHE6zA46iHe9T1iBIZhxIMHDwHQw+zv96maLt+lEtPpsqVbTuca6wq8PWbekkjGuYtjsUhSbET8/sU9sutyVD5PXUm4W5nhHmMphebGO7d45P/cHtreGXOJUKozsuhmJoqeL7t37mjIqVDpCpUI5d85kypVNOCZYw55phACrDEpHyypT8Zi3Ax4+aWv4t69+9jf20MMAbbrYLjpqtbUUVjQ6WvpMWfzPCnDXCku1pwUaVnVMtqgbRt4T/UiJyen0NpA6YhFvyCQaCAV6gBsC2T3qh84X0xb45I/MiSTAFGLyKAWPbpmwPxyWzo0q3+1bZR7wkrElVLvrseaS2AAaRdWKgsKTgenH7n/nA0w9yCCTjL7kOWA5j+vz6uYPQdum9sIYggJSgmgDaTve2io5NB56aWX8Pobd3FwcIAQPPp+AcvpS9Za6oSVe0hNCXyX/74qutKa9BSNZeaIMaIJDRxX2AGAGwmA4OzsjPptcAR6D3skqvUEshzD+YHAesHFGLfMFlm4ycOEnPnYzlHT+btoa2FLHCTOjBGZsVwFCiXen3u65rxP0//Vrpjp7sAOxkD2WSbV5O/inEt41i5Du9pgIBLYt9gs1lpYxuwS6roOn//8F/Dmm/ewWBC0a9d1xBgN/TStJbRLZpY8vYke5T1upAsltyJz9+jdZIBFgo/s+w7DMGC1XOHRo0dp8fU9oYbku/Mu1WrOHpEdPj9v18LmwSaVqYiOZ+rH5B0qGVQkT764S6fv1sTIYOnfuUOVwsU74dYOsPue5x22i6Fqqozzt2pMSdFXUqOBJElipA5fL730Eu7fu8c198Q8fUfdr8T2kL4ml1GtrpKunEGAUv9upBtT42G9R9tNDzRgwMnJSTovqWniobEGwU0107U6UuzcKCdK1JtS4kwGpuz+ucqUg0EkGwDZJitrHChKfNNtL9HIPkm9GaM6P0Z+16rcJRx7fGDFgbsW0UWL69IMuH1cjATE50OgFhItYYCJW3kYNvjqy1/Dq6/ewWLRU0s777C32OfeLMQcbdNSD/eMWYwpbbGnRVfKIPkCFu5u2gYREcZR9DMGhRA8jLNoGsD5EaenpwyG5ifdVFOWZi2469iDfCY2xdyYABRRehIQGfMkKRC3FnlSxYDJrlBxQlXJ7zVz/mXmLKdtG6U8vt4ILlKRagGwdd4Fi2s2hrOD+eYdDiDoVFatRHocP36Mr73yCu68+joODvYTSstisUeqedOg69qU6NrYJqlWuXPiMmN/EroSZMXcWM69OwCgQWpVK94tT0ga3pPHqO97rNn9G0KAVprwo/oO0TYpTX6XyrTTwzWn7mQ69+yLV2p+kcuzZe5iycXKC6XAC6JOUK7HNeeSzedSPlNQswu8kIrbt3gqVNh7F9gu4gIm75RJ2AQAlfg+Oj3Fa6+9hjt37mCx2IP3AV3X0QYKoO86LBY9lNJoG5IcwmASNX+nnvxKjfSaSeS7hoHYfAhobATQs8vPIyqbmGS9XuPu3TexGTa4ceMGDg8P0fQLxBgLkOZZqhdS0SJhNxNsLVKUkqCQWOnaJap8fozEcHKGKse57dmq5w+oVDceN30uQ7iEcS3PuuM7eZbi/2pMO++TnV/v5ortOaM1uq4vwBTOzs5w+/Zt3L9/H3t7e9RUlCPjMUY0bYuWi+zyeBmpVXne1ZX6GHbSUzHS88ViFMcJoNA1LTQUlIqIoQFUxGalEaJC11D/i/V6wDg+hB8DgosYFiP2D/bR2BbOOcQYioWjgYQDLGkS3k89M6Qe3tc7PatkhntP1CqXYvsiMmp5/mzJJFGAiVzjouZdxvX2L9dNtENdET/BZN8I46D4fS7V4menvlV+t8tTWAcklVIJMd8FT3ELa2FZHWq7ltvSAVFT2vrLL7+Mk5MT9It9qvdQEcYqmIZsjr5r0XbktWoai7ajHCzLQedJwu6GPL1KeipGej6psjPkJAGjGCN8E2BjSBiuMQQ4N+Lx8TGGccCLL74I5z0WfU9YtC0V70vvvZgF92Su5u45G4MQD1Xu2arGKd/nMY1aqszZKPU15ijGiBoSKfty53lvmy7rucrGILYbgC1ZRPNHG4LRGrbt0DS006sA7QyRAAAPj0lEQVRsUxmdwxuvv4lXXnmF0kf6fkpK5HbUzcxPyxFzsT3EM/o0jfKangqDAPMeJ3nAgkE8TfsAJJQPbIBxHDCOA4ZhwHPPPod4dMTFNR3alqKqzjnCbsp27Tn37xRpngvUycElE6Sx5/EK8XTVNR7pGUEqR8Zt55UUFWoJ5lWvS6lSb5PmVKlZ6TdjhBe2klKwzBjpWDamz1ZLvPLKq7h/714yvqHI1ds2DYwG2qZF0zJjtGSYt6JeZXXnTysYeB5dCYOc56rM/xcmEZuC1BWVJtVpP+UWDQOC9zg7W8J7aqp548YNHB0d0Y7FBTPBjZnqM+/JovtPEiN37+bfJxcwMNkn9XNURvzWIquPj7t15Trhr4j/YHtO3wrtYqyt91I97y6bSDKBY5zGrbSi8uoYkxSQ8zfrDU5PT/C1r72Kk5MTxAj0fYeoJnCPGCPahozzlhmkbQnU2xj2elW1Hu80XRmy4twLyR9KvFoiVsXTJSAFAKAw0DEiXdi4G4aByi43Gzg3MpBzj65DMqS1Nqnr6a5x1apUbnTT8fMLuWACZEyC+ZwreU4AU/ZwpaAUzDhDFwYes+Omsc0b/+edU3w+xzyqPob0fwnWRQBdRyqTDz6BPty9dxe3b9/GuHHYP9gHdcMKlJFrCSxPeqi0mTu3S5Wnk1H+bjEHcMXp7hd9VwQQufHLlFW97UIcFbk5jbVw44Dj42MMw4BnbqxxdOMIi8WCA0w2MWDejnrXuGpvm9C2vbzjmTLpk1y+wGxsJD8nfRfPr5pMp7Cb99xjMmfUrAS6wJyfY8L8HK3KMSjGoLKWgL67rsM4DITqHyMePHiAV18lqaGVxv7BfprHruv4vSs0TYP9/X0ohcQcuUuXsIpLoId3g1Gemg1SUx1EJDWJC2SylAHqlUE9/PQ4wBiNcRgRbcNSwuHNu3dxenaGZ599FoeHB4yI3hRBJLFz5tZHnUeVG6L5MXnMgg6ZAcNGaaRfyr20Q+LOHnqRFFHzEmoCoeB/z7nMduJl9rem1g9KMSqjsalkQBuNcRigjcHZ6Rnu3LmDu/fuYhxHTi5soEAgDKIyKaXQtR26nlJJur5Dx8a9pJMYjrQbNZVyz1GtEj4NeuoMkj9ELkGknVjTNNBB7JHSS0SLPKLrNLRzcG6E8goxEijdZrPGev0s9vf3sL+/h8VikWqV5T5SlRFDLHT+ORWmVrHqHXkr3oGZyPcMY503J7u+LwZ1DtWpK3yBrdPqZ5Nnn6tYrK8vKIZ1Bi0ArDcbPHjwAK/fuYPTszM0vMjlHlopLPo9SNBwsbdI9sz+3j4VQHW5WsUVgnGyW8+bp/c9g+x6gCnZzFHaOyKMpgq5USv+X8EaRX06lIbSFm50UKZJ/RDv37+P09NT7O/v4/DwAHt7+6R2cdWZYsYI0U8xMZ2szTTGCGKi9D0wuTeTZrTDdcyrLzf0Z1WcXYZ9de1dNt158xslcDJ9sXWMAlLVYDE2NaVuyMYkgNDCGMlYBhW3rZZLnC2XePn2VzGMI0LwaG3HfdmR2jkYo6AN0DRc02EU2rZB13awjUHTkiu3YRBvDUJ9nHMa1PS0qghzesdULKF657XWTk1ushdV/6+cTr3CU1Q9RrhAHq5hGLBcLhOjLPZJmnRdR+kOXQfviKmcc+U9MOVXCdFC4b9rt+7M37tcveL1mT2nmpc5JrlohyzSzGeOFcmZvlZlMxqZyxS3yuyLIu+JGWOz2eD45BhvvPEGHjx4AKvJiyXMJD1NpK2ctQQGLnYGpR21SWrk1YE1Msm7aZwLvSMqFrDtAi5ciFUCWo71m1ArxmkCvXNwCaGDAAaco5r39WaD5WqJw4NDLPYW6Bddch+S7tsBAAUbudvV7ALOPFvJWFal+ifP8lZiFW9HOhTjqqlSr+rrC3h2JgZJWmZzb4wpypCl05aku4QYsVwt8fDhQ7z55ps4OTlJwByISAxhGZZHa0ofIXXL7AgCtlu4Vu815gAAFZ9mJApvTd+W+MjU6tinlm6jG/nvEc67JAnGwSVbxbkRbiQpYxuLpmlxdLSPtuuwt1igZS+KGJDWWoxu6jKbqx+JCc7xctWMVTNXpn3NnlM//9z/F30OXMBIPIi8diJvfTAxiE7Haa0RA/VyPz07w6OHj3D/wX0sz84QYuR6dUFV5y5izCRakYNlysKleJV4sPLajl2Ab+8V5gDeRRtk1/d5xDSfOG0N+cUNRdDHcSRjDxrOecToOOnNwnsHNzpsNhucnZ2g7zsccHfYvuspast+9q7vpii7UYD3pVq0ww1USBagkC7ipUrq1g5XrJxH380b/293seRSWkoHZOB5qwCjG3oWUTURsVqu8fjxY5wcn+De/XvwzsMHT2qUlkZDk8QgqU+xKDHSE4M0JCHaLL5RGOO5Gl096zthhF9E77gNUlOdjgKg2O3Sd4YxfzXp0JpfqDENnBsxjhSIiozOR4U6HhEB6/UGZ8slHjx4gP09Meb3CB7VjUUZp+Jr6zj19SDpwsY+537VtoVQ/SxhCvTMO6RieXwdQb8Mo8wF+HKkEW10YdNIPw0A0MrAB4/Nmvq5nJ6d4vj4GMfHx1it1misTT1MRErIdcGeqaRi2VKNIvyzNoF5nAcV+m4zwi566irWhRSibMdb6pbEMpxzcBylHR01CHWjwzAOcKOHd6SKjSxZqBU1u3m9pyzfSF2iBC1w0VHyY7+34CzSnnqXp0DVNmq6qFw1cgd/mf+aTbW/cKq31K3dh6ZhqYkRiu/UBAgn0iK/f/A0r8vlihjj9Aynp6dYLs8wjg7W0q5P15sM9ZxRKBreMk6uqK6sPlnq4tt3U8LhLsZ4rzIH8A4zyKzIzFSUXec45+BjQGDXrvM+uXmdcxg21Dfbe4/gPUYnNsrIdk1AjA4xUkq89x6R+4Uobs/QdR36rqdWzFwbrzUjQKqsF56eoru5RAEqyJsZKXOZqZ5zJe/6v5YUub0jnycpyBvNODqs1yucnp1hebbE8myF1XqFYRhTjlRun9BvUsuE6YQRpDowgSuw2ip5VWTbqJ1So36eJ1Urnwa9+xLkAsqB4aTWQ5hDjHnn3NbPMI5wbgQi1UR7ZqzJGA9JdZJFTnXQFn1PKSxU9tmnxEjpI57/JkEzed7yTlMy7pry2EdeYz63MOqAZtFbMEYglqBpMQp8KJ0zjgPW6w2WZ2dYLpdYrVdYrzcYxwHeBzS27MNeeLfYZau1gjU6AUcbtgeN0Wib0q6o7YwE3ZrN0XtdauT0nmeQOpAmjV2oeCpiHDfMMGHybI0jRu+ImcZADOIdGfPMHCFwjCB6ACRl8mRH8dKIytV1XUq1n7Bhpx7mc0bnZRLtlCnBtnPbY04S1Z8D1MODPqcNY71aY7VeYxxHHD9+TLBLvDmk+yZGm54h2X7slbLWpM5NltN/qITWpg2jbaZ2F7mNMVc//n5jDuB9wCA1yQKRdHkqnvJbv0fn4LzDOHiqgXc+LRRSsyiqPLpBLpx2XwkSxsh90LOouBEvDevZ/aJLDGKNTb3ytMnAonOmyT4DAISqDgQTGksIEdaUFY/Unjmw2hiwWq4IQmm9TtnObnTwLMnkfLl2DlVKfRlVcmqQFKGhiYSQZ6GgXy4hKGeqyRgkR/fPN4n0bO8z5gDexwySG/G56pVsE2EKRwARzo38HTOMFwfAyIZ3yHbiWDBMCKWtEWOcFnEk1EhjGQGQde/GTr0sZLeWOm1k0iWmLmelwS/3HccRMVAKuXdiX42VNJz6duSxCK1VUrVocZZeNmIKkxYy/c82BzOIMMKUi8UIh9YUNkbdp2PWE/k+Yw7gfcggQMkk8r8wiqhfiVl8YO+Xg/cuMYkY9D54BA6KiZu4YJaE4l7aFfmirBlqa8GjXKCpcnK64Nbxqf1AcY0pXjGpSEjSQBYgSZfSfS59xeU8kQ7CrBLHkOOMzaF6Ji+VtSpF2rXWsHrb+N4F6HbNIO8g1bbJLonifGSJMalZ3rsU/BpHxzCnGWNkf4vLWHT4ugrQhxJtpV4E3pdFt1sBwRqyc8eiypkQQFKVavtFGENyoaSfX81YIs3ECE/JhVoXKpWkoUh+lrGsRjHGlYYq7Jd8LDLu9yNjCL1vGUSojkcIk+RerxBCxigh2SSeVSySBtl3noz64CuPFBvzwROjJekiTDqTepICjXGbqYHtwOL0ObYYIKei32BS2eTe0/kpPpKpX3kcwzaGjfDJflJaMHTlM2a2pL5NNoup+h6+H+2M8+h9zSD57jTHKIVECXGLEYIPaaH7wJ+FUHye/xYDX0gpBed82tlzT5OoaNmAZl2+KUqdGefANgPMqSs5EyUJkad+qKn/eW5XpI5TWsE2JmXiJlR+rTlV3aTy2Dmng1aaMwTeu6kiT0rvawapaW6H3mnUR0FVyRhA7BiRIHFKnhQXcORgY/CeGW5KdJy8TdvJjnNS5rKUVCOgsDuS7YFMCvFneQwjLXCtQfXkOtkbYmTnrur8R9oV7HJbvxM1Ge8mfSAZJP8/V1MKJuEouLhNBWwghsiGe0i2iWemmYKLlPUbQoB3ZExPOVqxZJRz1LCLqF74kzqGLYmRS5TEBOwMMFuqkeRUaVijtpgiZ4aLvFHvdwlxEX2gGESo1vHnJEsN7iBxlcQYlS2T/+SM5sMUs4hx+i7FUYIUJM1LuF2kCkkxMQR/mD7XErvI0mAk90oniTKpTSlVndUla+yWdNglLT5o9sVl6APJIHM0J13yv/OFL/8D2GKO+vgg6lSYgowhsMcJMTtn8kQV47hAoiilCyahzzK1yiAZzGnXV5ktIm7dLMU9z+EyKpdA50uIrzfmAL6OGGSOLmOz5AxTq2oxxmTL5AwitkoeAU/3SX+j+J1TsSgz1+wckygVUccgdqV3zFXt1e7ZXeP4eqVrBpn5O6daFcuPzQODc8wBULo9Hcvn1mnwcd7Izddmkhi5aqU0oCMQSgaR42sVqWaW8l7v30j306avCwaZizsISTR87thd16olz3m/zzsewM6OUXWgbZIYKHK7ECKUEnfqjN2yteinY2JEdd65j/51SR9oBrmMH/6iY+pAXS1N8uN2SaTzpjjM2CB5pJ7uXR+QMYLEUWYYQaLo9e2nQ9+6i/aDENt4K/SBZpCroMtOz2UZ4q1e/6LFeK0uPV26ZpArovO8ZE+Trg3rp0vXDHJN13QOfbDzBK7pmp6QrhnkA0zXysGT0zWDPCXa5e16J+naHnlyeteB4z6odL04Pxh0LUGu6ZrOoWsGuaZrOoeuGeSarukcumaQa7qmc+iaQa7pms6hawa5pms6h64Z5Jqu6Ry6ZpBruqZz6P8DOSYnVeHEL/UAAAAASUVORK5CYII= + From 995d529fb7a3660c4cf63074d4c9540131acfd83 Mon Sep 17 00:00:00 2001 From: Jiva DeVoe Date: Thu, 17 May 2012 23:10:04 -0700 Subject: [PATCH 011/112] Added a very hacky workaround for the jittery resize bug in webkit. Ref: https://github.com/cappuccino/cappuccino/issues/1325 --- AppKit/Platform/DOM/CPPlatformWindow+DOM.j | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index 076ec8f12..9dce1f878 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -192,6 +192,9 @@ var ModifierKeyCodes = [ ], supportsNativeDragAndDrop = [CPPlatform supportsDragAndDrop]; +// this probably shouldn't be a global variable. Feel free to put it somewhere appropriate. +var resizeTimer = nil; + @implementation CPPlatformWindow (DOM) - (id)_init @@ -1083,6 +1086,20 @@ var ModifierKeyCodes = [ - (void)resizeEvent:(DOMEvent)aDOMEvent { + // This is a hack for the browser resize bug in safari. + // See bug ID: 1325 + // https://github.com/cappuccino/cappuccino/issues/1325 + + if(resizeTimer); + [resizeTimer invalidate]; + + resizeTimer = [CPTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(actualResizeEvent) userInfo:nil repeats:NO]; +} + +-(void)actualResizeEvent +{ + resizeTimer = nil; + // FIXME: This is not the right way to do this. // We should pay attention to mouse down and mouse up in conjunction with this. //window.liveResize = YES; From d955eceafac1b21ff5a53dda110a2d836477c834 Mon Sep 17 00:00:00 2001 From: Jiva DeVoe Date: Thu, 17 May 2012 23:34:26 -0700 Subject: [PATCH 012/112] fixed an errant semicolon --- AppKit/Platform/DOM/CPPlatformWindow+DOM.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index 9dce1f878..626e6d289 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -1090,7 +1090,7 @@ var resizeTimer = nil; // See bug ID: 1325 // https://github.com/cappuccino/cappuccino/issues/1325 - if(resizeTimer); + if(resizeTimer) [resizeTimer invalidate]; resizeTimer = [CPTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(actualResizeEvent) userInfo:nil repeats:NO]; From 18662deec608b9a30a4712a43e92a20509cc70bd Mon Sep 17 00:00:00 2001 From: Jiva DeVoe Date: Thu, 17 May 2012 23:52:41 -0700 Subject: [PATCH 013/112] removed the if statement before the invalidate --- AppKit/Platform/DOM/CPPlatformWindow+DOM.j | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index 626e6d289..3715e4cc6 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -1090,9 +1090,7 @@ var resizeTimer = nil; // See bug ID: 1325 // https://github.com/cappuccino/cappuccino/issues/1325 - if(resizeTimer) - [resizeTimer invalidate]; - + [resizeTimer invalidate]; resizeTimer = [CPTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(actualResizeEvent) userInfo:nil repeats:NO]; } From d205c4eac7c7cf06f5afd7a4e6b769a96cc5db9c Mon Sep 17 00:00:00 2001 From: Jiva DeVoe Date: Fri, 18 May 2012 10:25:06 -0700 Subject: [PATCH 014/112] updating to remove a comment and to fix a formatting issue --- AppKit/Platform/DOM/CPPlatformWindow+DOM.j | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index 3715e4cc6..11c7a0a64 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -192,7 +192,6 @@ var ModifierKeyCodes = [ ], supportsNativeDragAndDrop = [CPPlatform supportsDragAndDrop]; -// this probably shouldn't be a global variable. Feel free to put it somewhere appropriate. var resizeTimer = nil; @implementation CPPlatformWindow (DOM) @@ -1094,7 +1093,7 @@ var resizeTimer = nil; resizeTimer = [CPTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(actualResizeEvent) userInfo:nil repeats:NO]; } --(void)actualResizeEvent +- (void)actualResizeEvent { resizeTimer = nil; From f50a6ea7a3a7717338308fba8f6330a6a960a209 Mon Sep 17 00:00:00 2001 From: ggsato Date: Thu, 24 May 2012 18:09:17 +0900 Subject: [PATCH 015/112] fixed menu labels by removing numbers at Identity Label --- .../NibApplication/Resources/MainMenu.xib | 394 +++++------------- 1 file changed, 97 insertions(+), 297 deletions(-) diff --git a/Tools/capp/Resources/Templates/NibApplication/Resources/MainMenu.xib b/Tools/capp/Resources/Templates/NibApplication/Resources/MainMenu.xib index 0c98cf0b6..5a9d4667c 100644 --- a/Tools/capp/Resources/Templates/NibApplication/Resources/MainMenu.xib +++ b/Tools/capp/Resources/Templates/NibApplication/Resources/MainMenu.xib @@ -2,13 +2,13 @@ 1050 - 10J869 - 1306 - 1038.35 - 461.00 + 11E53 + 2182 + 1138.47 + 569.00 com.apple.InterfaceBuilder.CocoaPlugin - 1306 + 2182 YES @@ -27,11 +27,8 @@ com.apple.InterfaceBuilder.CocoaPlugin - YES - - YES - - + PluginDependencyRecalculationVersion + YES @@ -1127,8 +1124,9 @@ Window NSWindow + - + 256 YES @@ -1137,7 +1135,6 @@ 301 {{192, 143}, {96, 21}} - YES -2079981824 @@ -1164,7 +1161,6 @@ 301 {{192, 191}, {96, 22}} - YES -1804468671 @@ -1199,11 +1195,10 @@ {{7, 11}, {480, 360}} - - {{0, 0}, {1440, 878}} - {1e+13, 1e+13} + {10000000000000, 10000000000000} + YES AppController @@ -1212,6 +1207,30 @@ YES + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 451 + performMiniaturize: @@ -1252,14 +1271,6 @@ 127 - - - orderFrontStandardAboutPanel: - - - - 142 - performClose: @@ -1692,21 +1703,13 @@ 448 - - - terminate: - - - - 449 - - delegate - - + theWindow + + - 451 + 459 @@ -1716,21 +1719,15 @@ 458 - - - theWindow - - - - 459 - YES 0 - + + YES + @@ -1794,7 +1791,6 @@ - 1 217 @@ -1837,19 +1833,16 @@ 75 - 3 80 - 8 78 - 6 72 @@ -1860,7 +1853,6 @@ 82 - 9 124 @@ -1875,31 +1867,26 @@ 77 - 5 73 - 1 79 - 7 112 - 10 74 - 2 125 @@ -2072,7 +2059,6 @@ - 2 111 @@ -2117,7 +2103,6 @@ 136 - 1111 144 @@ -2128,7 +2113,6 @@ 129 - 121 143 @@ -2661,142 +2645,70 @@ -2.IBPluginDependency -3.IBPluginDependency 103.IBPluginDependency - 103.ImportedFromIB2 106.IBPluginDependency - 106.ImportedFromIB2 - 106.editorWindowContentRectSynchronizationRect 111.IBPluginDependency - 111.ImportedFromIB2 112.IBPluginDependency - 112.ImportedFromIB2 124.IBPluginDependency - 124.ImportedFromIB2 125.IBPluginDependency - 125.ImportedFromIB2 - 125.editorWindowContentRectSynchronizationRect 126.IBPluginDependency - 126.ImportedFromIB2 129.IBPluginDependency - 129.ImportedFromIB2 130.IBPluginDependency - 130.ImportedFromIB2 - 130.editorWindowContentRectSynchronizationRect 131.IBPluginDependency - 131.ImportedFromIB2 134.IBPluginDependency - 134.ImportedFromIB2 136.IBPluginDependency - 136.ImportedFromIB2 143.IBPluginDependency - 143.ImportedFromIB2 144.IBPluginDependency - 144.ImportedFromIB2 145.IBPluginDependency - 145.ImportedFromIB2 149.IBPluginDependency - 149.ImportedFromIB2 150.IBPluginDependency - 150.ImportedFromIB2 19.IBPluginDependency - 19.ImportedFromIB2 195.IBPluginDependency - 195.ImportedFromIB2 196.IBPluginDependency - 196.ImportedFromIB2 197.IBPluginDependency - 197.ImportedFromIB2 198.IBPluginDependency - 198.ImportedFromIB2 199.IBPluginDependency - 199.ImportedFromIB2 200.IBPluginDependency - 200.ImportedFromIB2 - 200.editorWindowContentRectSynchronizationRect 201.IBPluginDependency - 201.ImportedFromIB2 202.IBPluginDependency - 202.ImportedFromIB2 203.IBPluginDependency - 203.ImportedFromIB2 204.IBPluginDependency - 204.ImportedFromIB2 205.IBPluginDependency - 205.ImportedFromIB2 - 205.editorWindowContentRectSynchronizationRect 206.IBPluginDependency - 206.ImportedFromIB2 207.IBPluginDependency - 207.ImportedFromIB2 208.IBPluginDependency - 208.ImportedFromIB2 209.IBPluginDependency - 209.ImportedFromIB2 210.IBPluginDependency - 210.ImportedFromIB2 211.IBPluginDependency - 211.ImportedFromIB2 212.IBPluginDependency - 212.ImportedFromIB2 - 212.editorWindowContentRectSynchronizationRect 213.IBPluginDependency - 213.ImportedFromIB2 214.IBPluginDependency - 214.ImportedFromIB2 215.IBPluginDependency - 215.ImportedFromIB2 216.IBPluginDependency - 216.ImportedFromIB2 217.IBPluginDependency - 217.ImportedFromIB2 218.IBPluginDependency - 218.ImportedFromIB2 219.IBPluginDependency - 219.ImportedFromIB2 220.IBPluginDependency - 220.ImportedFromIB2 - 220.editorWindowContentRectSynchronizationRect 221.IBPluginDependency - 221.ImportedFromIB2 23.IBPluginDependency - 23.ImportedFromIB2 236.IBPluginDependency - 236.ImportedFromIB2 239.IBPluginDependency - 239.ImportedFromIB2 24.IBPluginDependency - 24.ImportedFromIB2 - 24.editorWindowContentRectSynchronizationRect - 29.IBEditorWindowLastContentRect 29.IBPluginDependency - 29.ImportedFromIB2 - 29.WindowOrigin - 29.editorWindowContentRectSynchronizationRect 295.IBPluginDependency 296.IBPluginDependency - 296.editorWindowContentRectSynchronizationRect 297.IBPluginDependency 298.IBPluginDependency 346.IBPluginDependency - 346.ImportedFromIB2 348.IBPluginDependency - 348.ImportedFromIB2 349.IBPluginDependency - 349.ImportedFromIB2 - 349.editorWindowContentRectSynchronizationRect 350.IBPluginDependency - 350.ImportedFromIB2 351.IBPluginDependency - 351.ImportedFromIB2 354.IBPluginDependency - 354.ImportedFromIB2 - 371.IBEditorWindowLastContentRect 371.IBPluginDependency 371.IBWindowTemplateEditedContentRect 371.NSWindowTemplate.visibleAtLaunch - 371.editorWindowContentRectSynchronizationRect 372.IBPluginDependency 375.IBPluginDependency - 376.IBEditorWindowLastContentRect 376.IBPluginDependency 377.IBPluginDependency 378.IBPluginDependency @@ -2809,7 +2721,6 @@ 385.IBPluginDependency 386.IBPluginDependency 387.IBPluginDependency - 388.IBEditorWindowLastContentRect 388.IBPluginDependency 389.IBPluginDependency 390.IBPluginDependency @@ -2848,183 +2759,92 @@ 456.IBPluginDependency 457.IBPluginDependency 5.IBPluginDependency - 5.ImportedFromIB2 56.IBPluginDependency - 56.ImportedFromIB2 - 57.IBEditorWindowLastContentRect 57.IBPluginDependency - 57.ImportedFromIB2 - 57.editorWindowContentRectSynchronizationRect 58.IBPluginDependency - 58.ImportedFromIB2 72.IBPluginDependency - 72.ImportedFromIB2 73.IBPluginDependency - 73.ImportedFromIB2 74.IBPluginDependency - 74.ImportedFromIB2 75.IBPluginDependency - 75.ImportedFromIB2 77.IBPluginDependency - 77.ImportedFromIB2 78.IBPluginDependency - 78.ImportedFromIB2 79.IBPluginDependency - 79.ImportedFromIB2 80.IBPluginDependency - 80.ImportedFromIB2 81.IBPluginDependency - 81.ImportedFromIB2 - 81.editorWindowContentRectSynchronizationRect 82.IBPluginDependency - 82.ImportedFromIB2 83.IBPluginDependency - 83.ImportedFromIB2 92.IBPluginDependency - 92.ImportedFromIB2 - + YES com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{596, 852}, {216, 23}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{522, 812}, {146, 23}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{436, 809}, {64, 6}} - 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 - - {{608, 612}, {275, 83}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{187, 434}, {243, 243}} - 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 - - {{608, 612}, {167, 43}} - 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 - - {{608, 612}, {241, 103}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{525, 802}, {197, 73}} - {{143, 285}, {478, 20}} - com.apple.InterfaceBuilder.CocoaPlugin - - {74, 862} - {{6, 978}, {478, 20}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{475, 832}, {234, 43}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {215, 63}} com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - {{303, 221}, {480, 360}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{303, 221}, {480, 360}} - {{33, 99}, {480, 360}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{437, 242}, {86, 43}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3037,7 +2857,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{523, 2}, {178, 283}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3076,40 +2895,21 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - {{155, 102}, {245, 183}} com.apple.InterfaceBuilder.CocoaPlugin - - {{23, 794}, {245, 183}} 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 - - {{145, 474}, {199, 203}} com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - @@ -3168,10 +2968,10 @@ NSMenuCheckmark NSMenuMixedState - + YES - {9, 8} - {7, 2} + {11, 11} + {10, 3} From 7da9877c5f0ff244c2d6c6adcd60a8136d32faf6 Mon Sep 17 00:00:00 2001 From: ggsato Date: Thu, 24 May 2012 23:12:07 +0900 Subject: [PATCH 016/112] fixed shared CPDocumentController instantiation and added its test --- AppKit/CPApplication.j | 13 +- .../CPDocumentControllerTest/AppController.j | 38 + .../CPDocumentControllerTest/Document.j | 12 + .../DocumentController.j | 15 + .../CPDocumentControllerTest/Info.plist | 23 + .../Manual/CPDocumentControllerTest/Jakefile | 94 + .../Resources/Document.cib | 1 + .../Resources/Document.xib | 213 ++ .../Resources/MainMenu.cib | 1 + .../Resources/MainMenu.xib | 2822 +++++++++++++++++ .../Resources/spinner.gif | Bin 0 -> 1849 bytes .../CPDocumentControllerTest/index-debug.html | 107 + .../CPDocumentControllerTest/index.html | 77 + Tests/Manual/CPDocumentControllerTest/main.j | 18 + 14 files changed, 3427 insertions(+), 7 deletions(-) create mode 100644 Tests/Manual/CPDocumentControllerTest/AppController.j create mode 100644 Tests/Manual/CPDocumentControllerTest/Document.j create mode 100644 Tests/Manual/CPDocumentControllerTest/DocumentController.j create mode 100644 Tests/Manual/CPDocumentControllerTest/Info.plist create mode 100644 Tests/Manual/CPDocumentControllerTest/Jakefile create mode 100644 Tests/Manual/CPDocumentControllerTest/Resources/Document.cib create mode 100644 Tests/Manual/CPDocumentControllerTest/Resources/Document.xib create mode 100644 Tests/Manual/CPDocumentControllerTest/Resources/MainMenu.cib create mode 100644 Tests/Manual/CPDocumentControllerTest/Resources/MainMenu.xib create mode 100644 Tests/Manual/CPDocumentControllerTest/Resources/spinner.gif create mode 100644 Tests/Manual/CPDocumentControllerTest/index-debug.html create mode 100644 Tests/Manual/CPDocumentControllerTest/index.html create mode 100644 Tests/Manual/CPDocumentControllerTest/main.j diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index 4a2d8fec8..3342f2799 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -227,9 +227,6 @@ CPRunContinuesResponse = -1002; var bundle = [CPBundle mainBundle], types = [bundle objectForInfoDictionaryKey:@"CPBundleDocumentTypes"]; - if ([types count] > 0) - _documentController = [CPDocumentController sharedDocumentController]; - var delegateClassName = [bundle objectForInfoDictionaryKey:@"CPApplicationDelegateClass"]; if (delegateClassName) @@ -237,10 +234,9 @@ CPRunContinuesResponse = -1002; var delegateClass = objj_getClass(delegateClassName); if (delegateClass) - if ([_documentController class] == delegateClass) - [self setDelegate:_documentController]; - else - [self setDelegate:[[delegateClass alloc] init]]; + { + [self setDelegate:[[delegateClass alloc] init]]; + } } var defaultCenter = [CPNotificationCenter defaultCenter]; @@ -249,6 +245,9 @@ CPRunContinuesResponse = -1002; postNotificationName:CPApplicationWillFinishLaunchingNotification object:self]; + if ([types count] > 0) + _documentController = [CPDocumentController sharedDocumentController]; + var needsUntitled = !!_documentController, URLStrings = window.cpOpeningURLStrings && window.cpOpeningURLStrings(), index = 0, diff --git a/Tests/Manual/CPDocumentControllerTest/AppController.j b/Tests/Manual/CPDocumentControllerTest/AppController.j new file mode 100644 index 000000000..c66a0b5ba --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/AppController.j @@ -0,0 +1,38 @@ +/* + * AppController.j + * CappDoc + * + * Created by You on May 24, 2012. + * Copyright 2012, Your Company All rights reserved. + */ + +@import +@import "Document.j" +@import "DocumentController.j" + +@implementation AppController : CPObject +{ + CPDocumentController subclassedCPDocumentController; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + // This is called when the application is done loading. + var cpAlert = [CPAlert alertWithMessageText:@"Is this the shared instance? " + ([CPDocumentController sharedDocumentController] == subclassedCPDocumentController) defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:nil]; + [cpAlert beginSheetModalForWindow:[[CPApplication sharedApplication] mainWindow]]; +} + +- (void)applicationWillFinishLaunching:(CPNotification)aNotification +{ + // instantiate a subclass of DocumentController + subclassedCPDocumentController = [[DocumentController alloc] init]; +} + +- (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. +} + +@end diff --git a/Tests/Manual/CPDocumentControllerTest/Document.j b/Tests/Manual/CPDocumentControllerTest/Document.j new file mode 100644 index 000000000..e6a1c7ef4 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/Document.j @@ -0,0 +1,12 @@ +@import + +@implementation Document : CPDocument +{ +} + +- (CPString)windowCibName +{ + return @"Document"; +} + +@end diff --git a/Tests/Manual/CPDocumentControllerTest/DocumentController.j b/Tests/Manual/CPDocumentControllerTest/DocumentController.j new file mode 100644 index 000000000..0066d795b --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/DocumentController.j @@ -0,0 +1,15 @@ +@import +@import + +@implementation DocumentController : CPDocumentController +{ +} + +- (id)init +{ + self = [super init]; + + return self; +} + +@end diff --git a/Tests/Manual/CPDocumentControllerTest/Info.plist b/Tests/Manual/CPDocumentControllerTest/Info.plist new file mode 100644 index 000000000..b41dbc7a3 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/Info.plist @@ -0,0 +1,23 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CappDoc + CPBundleDocumentTypes + + + CPDocumentClass + Document + CPBundleTypeName + CappDoc + CFBundleTypeExtentions + + cappdoc + + + + + diff --git a/Tests/Manual/CPDocumentControllerTest/Jakefile b/Tests/Manual/CPDocumentControllerTest/Jakefile new file mode 100644 index 000000000..c963d80b8 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/Jakefile @@ -0,0 +1,94 @@ +/* + * Jakefile + * CappDoc + * + * Created by You on May 24, 2012. + * Copyright 2012, Your Company All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"); + +app ("CappDoc", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "CappDoc.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CappDoc"); + task.setIdentifier("com.yourcompany.CappDoc"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CappDoc"); + task.setSources((new FileList("**/*.j")).exclude(FILE.join("Build", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + task.setNib2CibFlags("-R Resources/"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", ["CappDoc"], function() +{ + printResults(configuration); +}); + +task ("build", ["default"]); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", "CappDoc", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "CappDoc", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "CappDoc")); + OS.system(["press", "-f", FILE.join("Build", "Release", "CappDoc"), FILE.join("Build", "Deployment", "CappDoc")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "CappDoc")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "CappDoc"), FILE.join("Build", "Desktop", "CappDoc", "CappDoc.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "CappDoc", "CappDoc.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "CappDoc")); + print("----------------------------"); +} diff --git a/Tests/Manual/CPDocumentControllerTest/Resources/Document.cib b/Tests/Manual/CPDocumentControllerTest/Resources/Document.cib new file mode 100644 index 000000000..b677cb212 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/Resources/Document.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;18E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;23E;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;18E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;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;24E;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;25E;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;26E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;18E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;27E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;30;_CPCibWindowTemplateMinSizeKeyD;K;6;CP$UIDd;2;28E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;29E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;2;30E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;31E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;32E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;33E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;34E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;20E;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;19E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;35E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;36E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;36E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;37E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;38E;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;21E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;20E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;35E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;39E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;40E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;20E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;41E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;42E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;38E;K;6;$afontD;K;6;CP$UIDd;2;44E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;45E;K;11;$aalignmentD;K;6;CP$UIDd;2;46E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;47E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;48E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;49E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;50E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;50E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;50E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;45E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;46E;K;31;CPTextFieldPlaceholderStringKeyD;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;51E;E;S;8;DocumentD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;windowS;8;delegateS;9;{94, 108}S;32;{10000000000000, 10000000000000}S;4;ViewS;8;CPWindowS;23;{{29, 106}, {507, 413}}d;2;15S;6;Windowd;1;0S;20;{{0, 0}, {507, 413}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;22E;E;E;S;6;normalS;23;{{201, 198}, {104, 17}}S;19;{{0, 0}, {104, 17}}d;2;45S;9;textfieldD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;13;CPFontNameKeyD;K;6;CP$UIDd;2;52E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;53E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;50E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;50E;E;d;1;2d;1;4T;S;13;Contents Hered;4;3072F;S;13;CPApplicationS;17;Arial, sans-serifd;2;12E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPDocumentControllerTest/Resources/Document.xib b/Tests/Manual/CPDocumentControllerTest/Resources/Document.xib new file mode 100644 index 000000000..25aba9b83 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/Resources/Document.xib @@ -0,0 +1,213 @@ + + + + 1070 + 11E53 + 2182 + 1138.47 + 569.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2182 + + + NSTextField + NSTextFieldCell + NSWindowTemplate + NSView + NSCustomObject + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + Document + + + FirstResponder + + + 15 + 2 + {{29, 539}, {507, 413}} + 1886912512 + Window + NSWindow + View + + {94, 86} + + + 256 + + + + 301 + {{201, 198}, {104, 17}} + + + _NS:1505 + YES + + 68288064 + 272630784 + Contents Here + + LucidaGrande + 13 + 1044 + + _NS:1505 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + {507, 413} + + + + + {{0, 0}, {1920, 1058}} + {94, 108} + {10000000000000, 10000000000000} + YES + + + NSApplication + + + + + + + window + + + + 18 + + + + delegate + + + + 17 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + 5 + + + + + + Window + + + 6 + + + + + + + + -3 + + + Application + + + 100098 + + + + + + + + 100099 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{133, 170}, {507, 413}} + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 100100 + + + + + Document + NSDocument + + IBProjectSource + ./Classes/Document.h + + + + + 0 + IBCocoaFramework + YES + 3 + + diff --git a/Tests/Manual/CPDocumentControllerTest/Resources/MainMenu.cib b/Tests/Manual/CPDocumentControllerTest/Resources/MainMenu.cib new file mode 100644 index 000000000..e3a1f4978 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/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;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;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;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;78E;D;K;6;CP$UIDd;2;80E;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;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;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;80E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;80E;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;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;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;123E;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;124E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;106E;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;2;80E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;2;80E;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;2;80E;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;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;158E;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;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;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;203E;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;204E;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;202E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;205E;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;16E;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;206E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;207E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;90E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;208E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;209E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;211E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;214E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;215E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;216E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;217E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;218E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;219E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;93E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;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;101E;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;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;92E;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;16E;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;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;225E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;226E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;227E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;228E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;229E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;230E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;16E;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;232E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;233E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;234E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;235E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;237E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;238E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;239E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;240E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;241E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;243E;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;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;244E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;246E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;248E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;249E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;250E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;251E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;188E;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;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;190E;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;16E;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;254E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;182E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;255E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;183E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;185E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;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;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;259E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;177E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;260E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;261E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;262E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;263E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;173E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;266E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;203E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;267E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;268E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;269E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;83E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;270E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;273E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;83E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;278E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;83E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;279E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;83E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;280E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;83E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;281E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;282E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;89E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;282E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;283E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;284E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;285E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;286E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;287E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;288E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;289E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;290E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;291E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;292E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;293E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;99E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;293E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;294E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;295E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;296E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;287E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;298E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;103E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;298E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;299E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;300E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;301E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;302E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;106E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;302E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;304E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;305E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;306E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;308E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;310E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;312E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;314E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;316E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;318E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;117E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;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;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;321E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;322E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;324E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;325E;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;326E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;327E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;329E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;330E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;332E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;333E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;124E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;334E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;337E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;338E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;339E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;340E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;341E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;130E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;342E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;343E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;344E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;345E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;134E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;346E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;347E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;332E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;333E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;349E;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;329E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;330E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;321E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;322E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;139E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;351E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;352E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;353E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;354E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;356E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;358E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;360E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;361E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;362E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;146E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;363E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;364E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;365E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;146E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;368E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;370E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;154E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;372E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;373E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;375E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;158E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;377E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;378E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;160E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;379E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;380E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;381E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;375E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;329E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;384E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;332E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;386E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;388E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;321E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;390E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;392E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;393E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;170E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;394E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;395E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;176E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;400E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;401E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;181E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;403E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;404E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;406E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;408E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;410E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;411E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;314E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;312E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;413E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;193E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;413E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;414E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;416E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;418E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;420E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;421E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;314E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;424E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;312E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;424E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;426E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;8;delegateS;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;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;3;102E;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;87E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;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;90E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;93E;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;104E;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;109E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;129E;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;122E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;119E;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;127E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;128E;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;132E;D;K;6;CP$UIDd;3;131E;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;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;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;144E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;142E;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;147E;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;155E;D;K;6;CP$UIDd;3;156E;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;159E;D;K;6;CP$UIDd;3;192E;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;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;175E;D;K;6;CP$UIDd;3;180E;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;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;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;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;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;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;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;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;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;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;13;AppControllerE;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPDocumentControllerTest/Resources/MainMenu.xib b/Tests/Manual/CPDocumentControllerTest/Resources/MainMenu.xib new file mode 100644 index 000000000..af3f6c31e --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/Resources/MainMenu.xib @@ -0,0 +1,2822 @@ + + + + 1050 + 11E53 + 2182 + 1138.47 + 569.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2182 + + + YES + NSMenu + NSMenuItem + NSCustomObject + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + YES + + + NewApplication + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + NewApplication + + YES + + + About NewApplication + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + YES + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide NewApplication + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit NewApplication + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + YES + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + Open Recent + + YES + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save + s + 1048576 + 2147483647 + + + + + + Save As… + S + 1179648 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + YES + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + Find + + YES + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + Spelling and Grammar + + YES + + + Show Spelling… + : + 1048576 + 2147483647 + + + + + + Check Spelling + ; + 1048576 + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + Substitutions + + YES + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + Speech + + YES + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + Format + + YES + + + Font + + 2147483647 + + + submenuAction: + + Font + + YES + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + Kern + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligature + + 2147483647 + + + submenuAction: + + Ligature + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + Baseline + + YES + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + Text + + YES + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + YES + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + YES + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 1048576 + 2147483647 + + + submenuAction: + + Help + + YES + + + NewApplication Help + ? + 1048576 + 2147483647 + + + + + + + + _NSMainMenu + + + AppController + + + + + YES + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 451 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + clearRecentDocuments: + + + + 127 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + showHelp: + + + + 360 + + + + saveDocument: + + + + 362 + + + + saveDocumentAs: + + + + 363 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + alignLeft: + + + + 442 + + + + alignJustified: + + + + 443 + + + + copyRuler: + + + + 444 + + + + alignCenter: + + + + 445 + + + + toggleRuler: + + + + 446 + + + + alignRight: + + + + 447 + + + + pasteRuler: + + + + 448 + + + + + YES + + 0 + + YES + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + YES + + + + + + + + + + MainMenu + + + 19 + + + YES + + + + + + 56 + + + YES + + + + + + 103 + + + YES + + + + 1 + + + 217 + + + YES + + + + + + 83 + + + YES + + + + + + 81 + + + YES + + + + + + + + + + + + + + + + 75 + + + 3 + + + 80 + + + 8 + + + 78 + + + 6 + + + 72 + + + + + 82 + + + 9 + + + 124 + + + YES + + + + + + 77 + + + 5 + + + 73 + + + 1 + + + 79 + + + 7 + + + 112 + + + 10 + + + 74 + + + 2 + + + 125 + + + YES + + + + + + 126 + + + + + 205 + + + YES + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + YES + + + + + + 216 + + + YES + + + + + + 200 + + + YES + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + YES + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 106 + + + YES + + + + 2 + + + 111 + + + + + 57 + + + YES + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + 1111 + + + 144 + + + + + 129 + + + 121 + + + 143 + + + + + 236 + + + + + 131 + + + YES + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + YES + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + YES + + + + + + 296 + + + YES + + + + + + + 297 + + + + + 298 + + + + + 211 + + + YES + + + + + + 212 + + + YES + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + YES + + + + + + 349 + + + YES + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 375 + + + YES + + + + + + 376 + + + YES + + + + + + + 377 + + + YES + + + + + + 378 + + + YES + + + + + + 379 + + + YES + + + + + + + + + + + + + 380 + + + + + 381 + + + + + 382 + + + + + 383 + + + + + 384 + + + + + 385 + + + + + 386 + + + + + 387 + + + + + 388 + + + YES + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + YES + + + + + + 398 + + + YES + + + + + + 399 + + + YES + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + YES + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + YES + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + YES + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 450 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 103.IBPluginDependency + 106.IBPluginDependency + 111.IBPluginDependency + 112.IBPluginDependency + 124.IBPluginDependency + 125.IBPluginDependency + 126.IBPluginDependency + 129.IBPluginDependency + 130.IBPluginDependency + 131.IBPluginDependency + 134.IBPluginDependency + 136.IBPluginDependency + 143.IBPluginDependency + 144.IBPluginDependency + 145.IBPluginDependency + 149.IBPluginDependency + 150.IBPluginDependency + 19.IBPluginDependency + 195.IBPluginDependency + 196.IBPluginDependency + 197.IBPluginDependency + 198.IBPluginDependency + 199.IBPluginDependency + 200.IBPluginDependency + 201.IBPluginDependency + 202.IBPluginDependency + 203.IBPluginDependency + 204.IBPluginDependency + 205.IBPluginDependency + 206.IBPluginDependency + 207.IBPluginDependency + 208.IBPluginDependency + 209.IBPluginDependency + 210.IBPluginDependency + 211.IBPluginDependency + 212.IBPluginDependency + 213.IBPluginDependency + 214.IBPluginDependency + 215.IBPluginDependency + 216.IBPluginDependency + 217.IBPluginDependency + 218.IBPluginDependency + 219.IBPluginDependency + 220.IBPluginDependency + 221.IBPluginDependency + 23.IBPluginDependency + 236.IBPluginDependency + 239.IBPluginDependency + 24.IBPluginDependency + 29.IBPluginDependency + 295.IBPluginDependency + 296.IBPluginDependency + 297.IBPluginDependency + 298.IBPluginDependency + 346.IBPluginDependency + 348.IBPluginDependency + 349.IBPluginDependency + 350.IBPluginDependency + 351.IBPluginDependency + 354.IBPluginDependency + 375.IBPluginDependency + 376.IBPluginDependency + 377.IBPluginDependency + 378.IBPluginDependency + 379.IBPluginDependency + 380.IBPluginDependency + 381.IBPluginDependency + 382.IBPluginDependency + 383.IBPluginDependency + 384.IBPluginDependency + 385.IBPluginDependency + 386.IBPluginDependency + 387.IBPluginDependency + 388.IBPluginDependency + 389.IBPluginDependency + 390.IBPluginDependency + 391.IBPluginDependency + 392.IBPluginDependency + 393.IBPluginDependency + 394.IBPluginDependency + 395.IBPluginDependency + 396.IBPluginDependency + 397.IBPluginDependency + 398.IBPluginDependency + 399.IBPluginDependency + 400.IBPluginDependency + 401.IBPluginDependency + 402.IBPluginDependency + 403.IBPluginDependency + 404.IBPluginDependency + 405.IBPluginDependency + 406.IBPluginDependency + 407.IBPluginDependency + 408.IBPluginDependency + 409.IBPluginDependency + 410.IBPluginDependency + 411.IBPluginDependency + 412.IBPluginDependency + 413.IBPluginDependency + 414.IBPluginDependency + 415.IBPluginDependency + 416.IBPluginDependency + 417.IBPluginDependency + 418.IBPluginDependency + 419.IBPluginDependency + 450.IBPluginDependency + 5.IBPluginDependency + 56.IBPluginDependency + 57.IBPluginDependency + 58.IBPluginDependency + 72.IBPluginDependency + 73.IBPluginDependency + 74.IBPluginDependency + 75.IBPluginDependency + 77.IBPluginDependency + 78.IBPluginDependency + 79.IBPluginDependency + 80.IBPluginDependency + 81.IBPluginDependency + 82.IBPluginDependency + 83.IBPluginDependency + 92.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + 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 + + + + + + YES + + + + + 459 + + + + YES + + AppController + + theWindow + NSWindow + + + theWindow + + theWindow + NSWindow + + + + IBProjectSource + ./Classes/AppController.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + YES + + YES + NSMenuCheckmark + NSMenuMixedState + + + YES + {11, 11} + {10, 3} + + + + diff --git a/Tests/Manual/CPDocumentControllerTest/Resources/spinner.gif b/Tests/Manual/CPDocumentControllerTest/Resources/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..06dbc2bc21dddcf0e09b566d5b211aee89570f52 GIT binary patch literal 1849 zcma*odr(tX9tZHtz31lM+(&Y`A`Ou`NeG&R#DrIfV%?hng21vs6v>ooRQQFbk7E_K!V( z{?5!fpZWgIZ%*d6t%i*j24bL}AZUJm9)h6R*;%L4IWse3G#VWaN1#$zSSXcBhlYlH zJ|D}n{r&w2f+Qp)SS*&n?*G4}{}!h?td_mjU6Kad-rW*QwWYCUk7d^e+sjpZAn6kT z5rM;`{~_}-wm+L@%+E;JphLm}C3WzQAQD0wBoY|rOTQX{(@pp-WAA8Iw0HKl|15j) zhGh(SFWu#5zUCw^T!}C~eC}~?{xG-r7ugQC>taC+|L^xr&a%{#cgUOZXIM&v?)k^2 z1i5%0!U00wq)r4vlAwXBA_m5J5WNeuBm-XJQ5pG4GD%vc|K){+TJ{AkHqN@SJKczX zU}QRd9n*_bf^h94)6Ctv{CUfz_;qs#RDuQ$DR%y1&5G-a6rhf*4Y zl+UOD1*GE{GQ7vv;c-tTIMkz0ovO>9j%b5hpa@a*CBJ#W!0@ndSwF|%hMkdFtXiU) z`BEp+yhkt8ZY>tg&uyH@%^%K4jDrbA;et&vnnzZ3z22@e6<27z2Vk13kb7OtISyxv z(XoO-LNQCZe3lfzc%*pNqU<9T+p~teThOEB+~e&U0mC|zS{Q)dJZ)!^1f7L(zg*L> z*vSW%?dR~@@0(}x6-V^A`~ImD;)NaBUnP8;RH=bS2@pk`wp>>8r&jGjmGPy%1BW}v zoPo}ca$~bze@efc3kapuEVW1!%teOZT3j2Tw5=hjiAf02d}7dL0oFC%@=RXp5Ow#% z@a>+AM|YWt$n&e`>sB-32gBcuTi>R>*|8@lp`y6thc7ydyqDsuUn~YzZf|{-R@-3y zL#wx{Ii}xxL_csiW*LBn0-A$>zp4WOmkf6=ilrjlW?-l9+bCd7|i?*b5NTmy<<6NZ0T8$SN@mwdC2f z6jqK=N@bS@!=YSj%>h0}*4p+%0HbTIrE$w7UMT6+AZZ&DAo*qZAAi(OtNbIfl#Dw^ zJWeiCp~zi#&t6x}m9)O^eR4HiLV3QA<<0>HZ8%$^lrSE94Wb}=+MM^!b>n#5&-JQR zkr-CEu9C;_F*7DqDisulV6Pmg$nFL0TPn%~*m^-`Z3^BgU(sNpnx%nW(!eV9A&FvI zHL3X3lw8Wji^6=8KbQDE-e%b?svdFxxdh$8r97@7$ojeI`6AL8Ob6QC$qh&>ZWVDX1F{0vJnT%%mE;GveKWR%C} zM&4d;Jf3s9|HAA)yVUPo`Aq;0do#)uHSXi5*QF*)x@MVVHr+cN)uMZ__F|&Ta#p8d z53TOKtce!PJUuie8UWol-S(`c2nH?UGqJP{!4RR4u$LCfn)q-hj0^f=h(VYy)T6eN zhRO!ja-aDBTcgeyP(8Ua4IdiOog^*CQa?R(cP#9AgL9`j>EX-6Yf1lzX(!~``M1XC zNmM<4<6d~wWZ$Xrk0K}UteTrq@LBBk#MsjkK;pbuVhe)NI7(7Pf(l?lxC7=1Z7Pzl zMbS;nV4NI5_N{1$P)&XC)huOGQ+h^zpYUZfb*1n6>!`#*b3y52LGmi+<4sY5jyD#- zw&$d}DTguLAfnRtjrM*JfqtHqUu6rQoU=g%1E9xk%;)TDm^2<8n-0IhTsQFaek)MY}>PK4;nBk=ow4pF>vzkO& gna%Org-kgQCf=+BeMi^RbuY;YE~rTjend;_cdi8t>i_@% literal 0 HcmV?d00001 diff --git a/Tests/Manual/CPDocumentControllerTest/index-debug.html b/Tests/Manual/CPDocumentControllerTest/index-debug.html new file mode 100644 index 000000000..8435cee74 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/index-debug.html @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + CappDoc + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPDocumentControllerTest/index.html b/Tests/Manual/CPDocumentControllerTest/index.html new file mode 100644 index 000000000..b03674ecf --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/index.html @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + CappDoc + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPDocumentControllerTest/main.j b/Tests/Manual/CPDocumentControllerTest/main.j new file mode 100644 index 000000000..5cbdc7c55 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CappDoc + * + * Created by You on May 24, 2012. + * Copyright 2012, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From 3a750591bb43dcacb2d93fe4c7c31ec7a059c1da Mon Sep 17 00:00:00 2001 From: ggsato Date: Thu, 24 May 2012 23:55:04 +0900 Subject: [PATCH 017/112] moved types declaration --- AppKit/CPApplication.j | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index 3342f2799..6a43b91dd 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -224,10 +224,10 @@ CPRunContinuesResponse = -1002; // We also want to set the default cursor on the body, so that buttons and things don't have an iBeam [[CPCursor arrowCursor] set]; - var bundle = [CPBundle mainBundle], - types = [bundle objectForInfoDictionaryKey:@"CPBundleDocumentTypes"]; + var bundle = [CPBundle mainBundle]; - var delegateClassName = [bundle objectForInfoDictionaryKey:@"CPApplicationDelegateClass"]; + var delegateClassName = [bundle objectForInfoDictionaryKey:@"CPApplicationDelegateClass"], + types = [bundle objectForInfoDictionaryKey:@"CPBundleDocumentTypes"]; if (delegateClassName) { From ab1dc15393dc7abc79aabec5d90d904cf8d0c34d Mon Sep 17 00:00:00 2001 From: ggsato Date: Thu, 24 May 2012 23:58:59 +0900 Subject: [PATCH 018/112] moved types declaration --- AppKit/CPApplication.j | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index 6a43b91dd..2e39c2c20 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -224,10 +224,8 @@ CPRunContinuesResponse = -1002; // We also want to set the default cursor on the body, so that buttons and things don't have an iBeam [[CPCursor arrowCursor] set]; - var bundle = [CPBundle mainBundle]; - - var delegateClassName = [bundle objectForInfoDictionaryKey:@"CPApplicationDelegateClass"], - types = [bundle objectForInfoDictionaryKey:@"CPBundleDocumentTypes"]; + var bundle = [CPBundle mainBundle], + delegateClassName = [bundle objectForInfoDictionaryKey:@"CPApplicationDelegateClass"]; if (delegateClassName) { @@ -245,6 +243,8 @@ CPRunContinuesResponse = -1002; postNotificationName:CPApplicationWillFinishLaunchingNotification object:self]; + var types = [bundle objectForInfoDictionaryKey:@"CPBundleDocumentTypes"]; + if ([types count] > 0) _documentController = [CPDocumentController sharedDocumentController]; From e25394a3228ee4e921764fe88e1ccfc7c4a0a8ad Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 24 May 2012 17:10:46 +0100 Subject: [PATCH 019/112] Code formatting. --- AppKit/CPAnimation.j | 2 +- AppKit/Cib/CPCibHelpConnector.j | 4 ++-- AppKit/CoreGraphics/CGColorSpace.j | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/AppKit/CPAnimation.j b/AppKit/CPAnimation.j index 148db1f6f..3192ea152 100644 --- a/AppKit/CPAnimation.j +++ b/AppKit/CPAnimation.j @@ -307,7 +307,7 @@ ACTUAL_FRAME_RATE = 0; if ([_delegate respondsToSelector:@selector(animation:valueForProgress:)]) return [_delegate animation:self valueForProgress:t]; - + if (_animationCurve == CPAnimationLinear) return t; diff --git a/AppKit/Cib/CPCibHelpConnector.j b/AppKit/Cib/CPCibHelpConnector.j index 8049abda9..925b3393f 100644 --- a/AppKit/Cib/CPCibHelpConnector.j +++ b/AppKit/Cib/CPCibHelpConnector.j @@ -25,8 +25,8 @@ @implementation CPCibHelpConnector : CPCibConnector { id _destination; - id _file; - id _marker; + id _file; + id _marker; } - (id)initWithCoder:(CPCoder)aCoder diff --git a/AppKit/CoreGraphics/CGColorSpace.j b/AppKit/CoreGraphics/CGColorSpace.j index 711d7725b..f6a529c1a 100644 --- a/AppKit/CoreGraphics/CGColorSpace.j +++ b/AppKit/CoreGraphics/CGColorSpace.j @@ -193,7 +193,7 @@ function CGColorSpaceRetain(aColorSpace) } // FIXME: We should refer to some default values. -#define STANDARDIZE(components, index, minimum, maximum, multiplier) \ +#define STANDARDIZE(components, index, minimum, maximum, multiplier) \ { \ if (index > components.length) \ { \ From 2a0ee1413084bf369ad3b07060ef782b711e38df Mon Sep 17 00:00:00 2001 From: ggsato Date: Fri, 25 May 2012 01:52:09 +0900 Subject: [PATCH 020/112] wrapped window.status clear statement --- AppKit/CPApplication.j | 2 ++ 1 file changed, 2 insertions(+) diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index 2e39c2c20..c33fad3e7 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -219,7 +219,9 @@ CPRunContinuesResponse = -1002; // At this point we clear the window.status to eliminate Safari's "Cancelled" error message // The message shouldn't be displayed, because only an XHR is cancelled, but it is a usability issue. // We do it here so that applications can change it in willFinish or didFinishLaunching +#if PLATFORM(DOM) window.status = " "; +#endif // We also want to set the default cursor on the body, so that buttons and things don't have an iBeam [[CPCursor arrowCursor] set]; From 24cce3ca8a092ba16a20f2ab53cca77a66ba4812 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 24 May 2012 19:24:50 +0100 Subject: [PATCH 021/112] Make LintChecker().lint_text('') possible. Made LintChecker()'s "view" and lint_text's "filename" arguments optional. Filename will default to like Python does when you pipe to it. Also return found errors from lint_text as a convenience. --- Tools/capp_lint/capp_lint | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Tools/capp_lint/capp_lint b/Tools/capp_lint/capp_lint index e08186d8c..9b96ce659 100755 --- a/Tools/capp_lint/capp_lint +++ b/Tools/capp_lint/capp_lint @@ -266,7 +266,7 @@ class LintChecker(object): TEXT_ERROR_SINGLE_FILE_TEMPLATE = Template(u'$lineNum: $message.\n+$line\n') TEXT_ERROR_MULTI_FILE_TEMPLATE = Template(u'$filename:$lineNum: $message.\n+$line\n') - def __init__(self, view, basedir='', var_declarations=VAR_DECLARATIONS_SINGLE, verbose=False): + def __init__(self, view=None, basedir='', var_declarations=VAR_DECLARATIONS_SINGLE, verbose=False): self.view = view self.basedir = unicode(basedir, 'utf-8') self.errors = [] @@ -747,7 +747,7 @@ class LintChecker(object): print u'EOF\n' pass - def lint_text(self, text, filename): + def lint_text(self, text, filename=""): self.filename = filename self.filesToCheck = [] @@ -759,6 +759,8 @@ class LintChecker(object): print u'EOF\n' pass + return self.errors + def count_files_checked(self): return len(self.filesToCheck) From 0d5b4d4958de99d3f4f52d9fcd920d3d223b4ec9 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 24 May 2012 19:26:05 +0100 Subject: [PATCH 022/112] Fixed: if linted text didn't end with a newline the last character would be ignored. --- Tools/capp_lint/capp_lint | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Tools/capp_lint/capp_lint b/Tools/capp_lint/capp_lint index 9b96ce659..a861dd569 100755 --- a/Tools/capp_lint/capp_lint +++ b/Tools/capp_lint/capp_lint @@ -357,7 +357,10 @@ class LintChecker(object): def next_statement(self, expect_line=False, check_line=True): try: while True: - raw_line = self.sourcefile.next()[:-1] # strip EOL + raw_line = self.sourcefile.next() + # strip EOL + if raw_line[-1] == '\n': # ... unless this is the last line which might not have a \n. + raw_line = raw_line[:-1] try: self.line = unicode(raw_line, 'utf-8', 'strict') # convert to Unicode From 1f803f52d10ca620587a0b13c64155fceb4f4620 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 24 May 2012 19:37:30 +0100 Subject: [PATCH 023/112] Add some illustrative capp_lint doctests. --- Tools/capp_lint/capp_lint | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Tools/capp_lint/capp_lint b/Tools/capp_lint/capp_lint index a861dd569..f89181237 100755 --- a/Tools/capp_lint/capp_lint +++ b/Tools/capp_lint/capp_lint @@ -78,6 +78,19 @@ def relative_path(basedir, filename): class LintChecker(object): + """Examine Objective-J code statically and generate warnings for possible errors and deviations from the coding-style standard. + + >>> LintChecker().lint_text('var b = 5+5;') + [{'positions': [9], 'filename': '', 'lineNum': 1, 'message': 'binary operator without surrounding spaces', 'type': 2, 'line': u'var b = 5+5;'}] + + >>> LintChecker().lint_text(''' + ... if( 1 ) { + ... var b=7; + ... c = 8; + ... } + ... ''') + [{'positions': [2], 'filename': '', 'lineNum': 2, 'message': 'missing space between control statement and parentheses', 'type': 2, 'line': u'if( 1 ) {'}, {'positions': [8], 'filename': '', 'lineNum': 2, 'message': 'braces should be on their own line', 'type': 1, 'line': u'if( 1 ) {'}, {'positions': [3, 5], 'filename': '', 'lineNum': 2, 'message': 'space inside parentheses', 'type': 1, 'line': u'if( 1 ) {'}, {'positions': [7], 'filename': '', 'lineNum': 3, 'message': 'assignment operator without surrounding spaces', 'type': 2, 'line': u' var b=7;'}, {'lineNum': 4, 'message': 'accidental global variable', 'type': 1, 'line': u' c = 8;', 'filename': ''}] + """ VAR_BLOCK_START_RE = re.compile(ur'''(?x) (?P\s*) # indent before a var keyword From a7bee74fb0b9ab4ad103bb7ced4ed86f0e72550f Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 24 May 2012 22:34:50 +0100 Subject: [PATCH 024/112] Report the original line contents in capp_lint. capp_lint does some preprocessing of lines to simplify the lint tests, but the user will expect the regular, non processed lines in the output. --- Tools/capp_lint/capp_lint | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Tools/capp_lint/capp_lint b/Tools/capp_lint/capp_lint index f89181237..06f56646e 100755 --- a/Tools/capp_lint/capp_lint +++ b/Tools/capp_lint/capp_lint @@ -309,6 +309,7 @@ class LintChecker(object): continue line = self.line + originalLine = line lineFilter = check.get('filter') if lineFilter: @@ -365,7 +366,7 @@ class LintChecker(object): break if positions: - self.error(check['error'], line=line, positions=positions, type=check['type']) + self.error(check['error'], line=originalLine, positions=positions, type=check['type']) def next_statement(self, expect_line=False, check_line=True): try: From 2b8b570dd42b540417c18ec2ba7f27650d06f72c Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 24 May 2012 23:22:24 +0100 Subject: [PATCH 025/112] Fixed: capp_lint exponential warnings. capp_lint issued warnings over numerical literals like 2.1e+6 even that they were correctly formatted. --- Tools/capp_lint/capp_lint | 45 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/Tools/capp_lint/capp_lint b/Tools/capp_lint/capp_lint index 06f56646e..50e09fba0 100755 --- a/Tools/capp_lint/capp_lint +++ b/Tools/capp_lint/capp_lint @@ -36,7 +36,7 @@ import os import os.path import re import sys - +import unittest EXIT_CODE_SHOW_HTML = 205 EXIT_CODE_SHOW_TOOLTIP = 206 @@ -150,6 +150,24 @@ class LintChecker(object): EMPTY_STRING_LITERAL_FUNCTION = lambda match: match.group(1) + (len(match.group(2)) * ' ') + match.group(1) EMPTY_SELF_STRING_LITERAL_FUNCTION = lambda self, match: match.group(1) + (len(match.group(2)) * ' ') + match.group(1) + def noncapturing(regex): + return ur'(?:%s)' % regex + + def optional(regex): + return ur'(?:%s)?' % regex + + DECIMAL_DIGIT_RE = ur'[0-9]' + NON_ZERO_DIGIT_RE = ur'[1-9]' + DECIMAL_DIGITS_RE = DECIMAL_DIGIT_RE + ur'+' + DECIMAL_DIGITS_OPT_RE = optional(DECIMAL_DIGIT_RE + ur'+') + EXPONENT_INDICATOR_RE = ur'[eE]' + SIGNED_INTEGER_RE = noncapturing(DECIMAL_DIGITS_RE) + ur'|' + noncapturing(ur'\+' + DECIMAL_DIGITS_RE) + ur'|' + noncapturing('-' + DECIMAL_DIGITS_RE) + DECIMAL_INTEGER_LITERAL_RE = ur'0|' + noncapturing(NON_ZERO_DIGIT_RE + DECIMAL_DIGIT_RE + ur'*') + EXPONENT_PART_RE = EXPONENT_INDICATOR_RE + noncapturing(SIGNED_INTEGER_RE) + EXPONENT_PART_OPT_RE = optional(EXPONENT_PART_RE) + + DECIMAL_LITERAL_RE = re.compile(noncapturing(noncapturing(DECIMAL_INTEGER_LITERAL_RE) + ur'\.' + DECIMAL_DIGITS_OPT_RE + EXPONENT_PART_OPT_RE) + ur'|\.' + noncapturing(DECIMAL_DIGITS_RE + EXPONENT_PART_OPT_RE) + ur'|' + noncapturing(noncapturing(DECIMAL_INTEGER_LITERAL_RE) + EXPONENT_PART_OPT_RE)) + ERROR_TYPE_ILLEGAL = 1 ERROR_TYPE_WARNING = 2 @@ -161,6 +179,14 @@ class LintChecker(object): {'regex': RE_RE, 'replace': '/ /'}, ) + # Convert exponential notation like 1.1e-6 to an arbitrary constant number so that the "e" notation doesn't + # need to be understood by the regular matchers. Obviously this is limited by the fact that we're regexing + # so this will probably catch some things which are not properly decimal literals (parts of strings or + # variable names for instance). + EXPONENTIAL_TO_SIMPLE = ( + {'regex': DECIMAL_LITERAL_RE, 'replace': '42'}, + ) + LINE_CHECKLIST = ( { 'id': 'tabs', @@ -210,7 +236,8 @@ class LintChecker(object): # Filter out @import statements, method declarations, method parameters, unary plus/minus/increment/decrement 'filter': {'regex': re.compile(ur'(^@import\b|^\s*' + METHOD_RE + '|^\s*[a-zA-Z_$]\w*:\s*\([a-zA-Z_$][\w<>]*\)\s*\w+|[a-zA-Z_$]\w*(\+\+|--)|([ -+*/%^&|<>!]=?|&&|\|\||<<|>>>|={1,3}|!==?)\s*[-+][\w(\[])'), 'pass': False}, - 'preprocess': STD_IGNORES, + # Also convert literals like 1.5e+7 to 42 so that the - or + in there is ignored for purposes of this warning. + 'preprocess': STD_IGNORES + EXPONENTIAL_TO_SIMPLE, 'regex': re.compile(ur'(?<=[\w)\]"\']|([ ]))([-+*/%^]|&&?|\|\|?|<<|>>>?)(?=[\w({\["\']|(?(1)\b\b|[ ]))'), 'error': 'binary operator without surrounding spaces', 'showPositionForGroup': 2, @@ -978,6 +1005,20 @@ class LintChecker(object): exit_show_html(html) +class LintCheckerTest(unittest.TestCase): + def test_exponential_notation(self): + """Test that exponential notation such as 1.1e-6 doesn't cause a warning about missing whitespace.""" + + # This should not report "binary operator without surrounding spaces". + self.assertEquals(LintChecker().lint_text("a = 2.1e-6;"), []) + self.assertEquals(LintChecker().lint_text("a = 2.1e+6;"), []) + self.assertEquals(LintChecker().lint_text("a = 2e-0;"), []) + self.assertEquals(LintChecker().lint_text("a = 2e+0;"), []) + + # But this should. + self.assertEquals(LintChecker().lint_text("a = 1.1e-6+2e2;"), [{'positions': [6], 'filename': '', 'lineNum': 1, 'message': 'binary operator without surrounding spaces', 'type': 2, 'line': u'a = 1.1e-6+2e2;'}]) + + if __name__ == '__main__': usage = 'usage: %prog [options] [file ... | -]' parser = OptionParser(usage=usage, version='1.02') From 09d5957c826352df5e38562011006ca5b4cf9791 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 24 May 2012 23:40:15 +0100 Subject: [PATCH 026/112] Code formatting. --- AppKit/CPCookie.j | 8 ++++++-- AppKit/CPGraphics.j | 7 +++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/AppKit/CPCookie.j b/AppKit/CPCookie.j index 8b040362b..76ae57560 100644 --- a/AppKit/CPCookie.j +++ b/AppKit/CPCookie.j @@ -111,8 +111,12 @@ for (var i = 0; i < ca.length; i++) { var c = ca[i]; - while (c.charAt(0) == ' ') c = c.substring(1, c.length); - if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); + + while (c.charAt(0) == ' ') + c = c.substring(1, c.length); + + if (c.indexOf(nameEQ) == 0) + return c.substring(nameEQ.length, c.length); } #endif return ""; diff --git a/AppKit/CPGraphics.j b/AppKit/CPGraphics.j index af4da70ec..494b70afe 100644 --- a/AppKit/CPGraphics.j +++ b/AppKit/CPGraphics.j @@ -70,7 +70,10 @@ function CPDrawColorTiledRects( if (_CGRectIsEmpty(slice)) continue; - var minX, maxX, minY, maxY; + var minX, + maxX, + minY, + maxY; if (side == CPMinXEdge || side == CPMaxXEdge) { @@ -105,4 +108,4 @@ function CPDrawColorTiledRects( CGContextRestoreGState(context); return resultRect; -} \ No newline at end of file +} From 2a21ce4a0cd91830f0fc62c54e0085055d80a763 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 24 May 2012 23:52:30 +0100 Subject: [PATCH 027/112] Support function argument types in capp_lint. Syntax such as function(/*CPString*/anArgument) {} should not generate a warning, and in general inline /**/ comments should be ignored for linting purposes. --- Tools/capp_lint/capp_lint | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Tools/capp_lint/capp_lint b/Tools/capp_lint/capp_lint index 50e09fba0..69e307f46 100755 --- a/Tools/capp_lint/capp_lint +++ b/Tools/capp_lint/capp_lint @@ -141,6 +141,7 @@ class LintChecker(object): TRAILING_WHITESPACE_RE = re.compile(ur'^.*(\s+)$') STRIP_LINE_COMMENT_RE = re.compile(ur'(.*)\s*(?://.*|/\*.*\*/\s*)$') LINE_COMMENT_RE = re.compile(ur'\s*(?:/\*.*\*/\s*|//.*)$') + COMMENT_RE = re.compile(ur'/\*.*?\*/') BLOCK_COMMENT_START_RE = re.compile(ur'\s*/\*.*(?!\*/\s*)$') BLOCK_COMMENT_END_RE = re.compile(ur'.*?\*/') METHOD_RE = ur'[-+]\s*\([a-zA-Z_$]\w*\)\s*[a-zA-Z_$]\w*' @@ -176,6 +177,7 @@ class LintChecker(object): STD_IGNORES = ( {'regex': STRIP_LINE_COMMENT_RE, 'replace': ''}, {'regex': STRING_LITERAL_RE, 'replace': EMPTY_STRING_LITERAL_FUNCTION}, + {'regex': COMMENT_RE, 'replace': ''}, {'regex': RE_RE, 'replace': '/ /'}, ) @@ -1018,6 +1020,12 @@ class LintCheckerTest(unittest.TestCase): # But this should. self.assertEquals(LintChecker().lint_text("a = 1.1e-6+2e2;"), [{'positions': [6], 'filename': '', 'lineNum': 1, 'message': 'binary operator without surrounding spaces', 'type': 2, 'line': u'a = 1.1e-6+2e2;'}]) + def test_function_types(self): + """Test that function definitions like function(/*CPString*/key) don't cause warnings about surrounding spaces.""" + + # This should not report "binary operator without surrounding spaces". + self.assertEquals(LintChecker().lint_text("var resolveMultipleValues = function(/*CPString*/key, /*CPDictionary*/bindings, /*GSBindingOperationKind*/operation)"), []) + if __name__ == '__main__': usage = 'usage: %prog [options] [file ... | -]' From 9ffaf538e291f7759933ebe440967a6b3c50676a Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 24 May 2012 23:58:01 +0100 Subject: [PATCH 028/112] Remove unary + warning from capp_lint. A statement like `x = +y;` actually does have an effect in JavaScript. --- Tools/capp_lint/capp_lint | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/Tools/capp_lint/capp_lint b/Tools/capp_lint/capp_lint index 69e307f46..71e4e34ed 100755 --- a/Tools/capp_lint/capp_lint +++ b/Tools/capp_lint/capp_lint @@ -245,16 +245,6 @@ class LintChecker(object): 'showPositionForGroup': 2, 'type': ERROR_TYPE_WARNING }, - { - # Filter out @import statements, method declarations - 'filter': {'regex': re.compile(ur'^(@import\b|\s*' + METHOD_RE + ')'), 'pass': False}, - - 'preprocess': STD_IGNORES, - 'regex': re.compile(ur'(?:[-*/%^&|<>!]=?|&&|\|\||<<|>>>|={1,3}|!==?)\s*(?, like in `x = +y;`, doesn't generate an error.""" + + # + converts number in a string to a number. + self.assertEquals(LintChecker().lint_text("var y = +x;"), []) + if __name__ == '__main__': usage = 'usage: %prog [options] [file ... | -]' From aa4eff9f8d7e64986bc0d921c0a39601aa9c5bed Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 25 May 2012 00:04:46 +0100 Subject: [PATCH 029/112] Format code, fix accidental global. --- AppKit/CPLevelIndicator.j | 2 +- .../CPPredicateEditorRowTemplate.j | 3 +- AppKit/CPWindow/_CPDocModalWindowView.j | 4 +-- AppKit/Themes/Default/AppController.j | 10 +++--- Foundation/CPDate.j | 2 +- Foundation/CPDecimal.j | 5 ++- Foundation/CPNumber.j | 36 ++++++++++++------- Foundation/CPScanner.j | 2 +- 8 files changed, 37 insertions(+), 27 deletions(-) diff --git a/AppKit/CPLevelIndicator.j b/AppKit/CPLevelIndicator.j index 911dea311..e4a5474d1 100644 --- a/AppKit/CPLevelIndicator.j +++ b/AppKit/CPLevelIndicator.j @@ -253,7 +253,7 @@ var _CPLevelIndicatorBezelColor = nil, var location = [self convertPoint:[anEvent locationInWindow] fromView:nil], bounds = [self bounds], - oldValue = [self doubleValue]; + oldValue = [self doubleValue], newValue = oldValue; // Moving the mouse outside of the widget to the left sets it diff --git a/AppKit/CPRuleEditor/CPPredicateEditorRowTemplate.j b/AppKit/CPRuleEditor/CPPredicateEditorRowTemplate.j index 102747a46..0843f8ea1 100644 --- a/AppKit/CPRuleEditor/CPPredicateEditorRowTemplate.j +++ b/AppKit/CPRuleEditor/CPPredicateEditorRowTemplate.j @@ -185,7 +185,8 @@ CPTransformableAttributeType = 1800; if (![[self operators] containsObject:[predicate predicateOperatorType]]) return 0; - if (!_rightIsWildcard && ![[self rightExpressions] containsObject:[predicate rightExpression]]) return 0; + if (!_rightIsWildcard && ![[self rightExpressions] containsObject:[predicate rightExpression]]) + return 0; return 1; } diff --git a/AppKit/CPWindow/_CPDocModalWindowView.j b/AppKit/CPWindow/_CPDocModalWindowView.j index ae691300d..8bd6540d4 100644 --- a/AppKit/CPWindow/_CPDocModalWindowView.j +++ b/AppKit/CPWindow/_CPDocModalWindowView.j @@ -24,7 +24,7 @@ var _CPStandardWindowViewBodyBackgroundColor = nil; if (self) { var theClass = [self class], - bounds = [self bounds]; + bounds = [self bounds]; _bodyView = [[CPView alloc] initWithFrame:_CGRectMake(0.0, 0.0, _CGRectGetWidth(bounds), _CGRectGetHeight(bounds))]; @@ -54,4 +54,4 @@ var _CPStandardWindowViewBodyBackgroundColor = nil; return aContentRect; } -@end \ No newline at end of file +@end diff --git a/AppKit/Themes/Default/AppController.j b/AppKit/Themes/Default/AppController.j index 8a421e4c3..8ccddb630 100644 --- a/AppKit/Themes/Default/AppController.j +++ b/AppKit/Themes/Default/AppController.j @@ -31,9 +31,8 @@ [_CPCibCustomResource imageResourceWithName:"horizontal-track-center.png" size:CPSizeMake(1.0, 4.0)], [_CPCibCustomResource imageResourceWithName:"horizontal-track-right.png" size:CPSizeMake(2.0, 4.0)] ] - isVertical:NO]]; - - var horizontalSlider = [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 50.0, 24.0)]; + isVertical:NO]], + horizontalSlider = [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 50.0, 24.0)]; [horizontalSlider setTrackWidth:4.0]; [horizontalSlider setHorizontalTrackColor:horizontalTrackColor]; @@ -55,9 +54,8 @@ [_CPCibCustomResource imageResourceWithName:"vertical-track-center.png" size:CPSizeMake(4.0, 1.0)], [_CPCibCustomResource imageResourceWithName:"vertical-track-bottom.png" size:CPSizeMake(4.0, 2.0)] ] - isVertical:YES]]; - - var verticalSlider = [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 24.0, 50.0)]; + isVertical:YES]], + verticalSlider = [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 24.0, 50.0)]; [verticalSlider setTrackWidth:4]; [verticalSlider setVerticalTrackColor:verticalTrackColor]; diff --git a/Foundation/CPDate.j b/Foundation/CPDate.j index e666ceb15..d65b4226a 100644 --- a/Foundation/CPDate.j +++ b/Foundation/CPDate.j @@ -245,7 +245,7 @@ Date.parseISO8601 = function (date) if (isNaN(timestamp) && (struct = /^(\d{4}|[+\-]\d{6})(?:-(\d{2})(?:-(\d{2}))?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{3}))?)?(?:(Z)|([+\-])(\d{2})(?::(\d{2}))?)?)?$/.exec(date))) { - // avoid NaN timestamps caused by “undefined” values being passed to Date.UTC + // avoid NaN timestamps caused by "undefined" values being passed to Date.UTC for (var i = 0, k; (k = numericKeys[i]); ++i) struct[k] = +struct[k] || 0; diff --git a/Foundation/CPDecimal.j b/Foundation/CPDecimal.j index c8b52f739..ec06deea7 100644 --- a/Foundation/CPDecimal.j +++ b/Foundation/CPDecimal.j @@ -181,7 +181,7 @@ function CPDecimalMakeWithParts(mantissa, exponent) var m = [], isNegative = NO; - if (mantissa < 0 ) + if (mantissa < 0) { isNegative = YES; mantissa = ABS(mantissa); @@ -1400,10 +1400,9 @@ function CPDecimalRound(result, dcm, scale ,roundingMode) function CPDecimalCompact(dcm) { // if positive or zero exp leading zeros simply delete, trailing ones u need to increment exponent - if (!dcm || dcm._mantissa.length == 0 || CPDecimalIsNotANumber(dcm) ) + if (!dcm || dcm._mantissa.length == 0 || CPDecimalIsNotANumber(dcm)) return; - if (CPDecimalIsZero(dcm)) { // handle zero number compacting diff --git a/Foundation/CPNumber.j b/Foundation/CPNumber.j index 870740614..48a393100 100644 --- a/Foundation/CPNumber.j +++ b/Foundation/CPNumber.j @@ -222,7 +222,8 @@ FIXME: Do we need this? - (CPString)descriptionWithLocale:(CPDictionary)aDictionary { - if (!aDictionary) return toString(); + if (!aDictionary) + return toString(); throw new Error("descriptionWithLocale: NOT YET IMPLEMENTED"); } @@ -234,37 +235,43 @@ FIXME: Do we need this? - (double)doubleValue { - if (typeof self == "boolean") return self ? 1 : 0; + if (typeof self == "boolean") + return self ? 1 : 0; return self; } - (float)floatValue { - if (typeof self == "boolean") return self ? 1 : 0; + if (typeof self == "boolean") + return self ? 1 : 0; return self; } - (int)intValue { - if (typeof self == "boolean") return self ? 1 : 0; + if (typeof self == "boolean") + return self ? 1 : 0; return self; } - (long long)longLongValue { - if (typeof self == "boolean") return self ? 1 : 0; + if (typeof self == "boolean") + return self ? 1 : 0; return self; } - (long)longValue { - if (typeof self == "boolean") return self ? 1 : 0; + if (typeof self == "boolean") + return self ? 1 : 0; return self; } - (short)shortValue { - if (typeof self == "boolean") return self ? 1 : 0; + if (typeof self == "boolean") + return self ? 1 : 0; return self; } @@ -280,7 +287,8 @@ FIXME: Do we need this? - (unsigned int)unsignedIntValue { - if (typeof self == "boolean") return self ? 1 : 0; + if (typeof self == "boolean") + return self ? 1 : 0; return self; } /* @@ -292,20 +300,24 @@ FIXME: Do we need this? */ - (unsigned long)unsignedLongValue { - if (typeof self == "boolean") return self ? 1 : 0; + if (typeof self == "boolean") + return self ? 1 : 0; return self; } - (unsigned short)unsignedShortValue { - if (typeof self == "boolean") return self ? 1 : 0; + if (typeof self == "boolean") + return self ? 1 : 0; return self; } - (CPComparisonResult)compare:(CPNumber)aNumber { - if (self > aNumber) return CPOrderedDescending; - else if (self < aNumber) return CPOrderedAscending; + if (self > aNumber) + return CPOrderedDescending; + else if (self < aNumber) return + CPOrderedAscending; return CPOrderedSame; } diff --git a/Foundation/CPScanner.j b/Foundation/CPScanner.j index cd362ad5a..ea2ffb3dc 100644 --- a/Foundation/CPScanner.j +++ b/Foundation/CPScanner.j @@ -292,7 +292,7 @@ loc += (""+f).length; var i = 0; - while (!isNaN(parseFloat(str.substring(loc+i, str.length)))) + while (!isNaN(parseFloat(str.substring(loc + i, str.length)))) {i++;} [self setScanLocation:loc + i]; From 1a14ef2418187a169465d40c6aadecd32536e49f Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 25 May 2012 01:07:35 +0100 Subject: [PATCH 030/112] Fixed: capp_lint handling of string literals with escapes. This could cause capp_lint to warn about what it perceived as code inside of string literals if the string literal ended with an escaped backslash. --- Tools/capp_lint/capp_lint | 64 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 60 insertions(+), 4 deletions(-) diff --git a/Tools/capp_lint/capp_lint b/Tools/capp_lint/capp_lint index 71e4e34ed..599eb7002 100755 --- a/Tools/capp_lint/capp_lint +++ b/Tools/capp_lint/capp_lint @@ -77,6 +77,40 @@ def relative_path(basedir, filename): return filename +def string_replacer(line): + """Take string literals like 'hello' and replace them with empty string literals, while respecting escaping.""" + + r = [] + in_quote = None + escapes = 0 + for i, c in enumerate(line): + if in_quote: + if not escapes and c == in_quote: + in_quote = None + r.append(c) + continue + + # We're inside of a string literal. Ignore everything. + else: + if not escapes and (c == '"' or c == "'"): + in_quote = c + r.append(c) + continue + + # Outside of a string literal, preserve everything. + r.append(c) + + if c == '\\': + escapes = (escapes + 1) % 2 + else: + escapes = 0 + + if in_quote: + # Unterminated string literal. + pass + return "".join(r) + + class LintChecker(object): """Examine Objective-J code statically and generate warnings for possible errors and deviations from the coding-style standard. @@ -146,7 +180,6 @@ class LintChecker(object): BLOCK_COMMENT_END_RE = re.compile(ur'.*?\*/') METHOD_RE = ur'[-+]\s*\([a-zA-Z_$]\w*\)\s*[a-zA-Z_$]\w*' FUNCTION_RE = re.compile(ur'\s*function\s*(?P[a-zA-Z_$]\w*)?\(.*\)\s*\{?') - STRING_LITERAL_RE = re.compile(ur'(?, like in `x = +y;`, doesn't generate an error.""" + """Test that = +, like in `x = +y;`, doesn't cause a warning.""" # + converts number in a string to a number. self.assertEquals(LintChecker().lint_text("var y = +x;"), []) + def test_string_escaping(self): + """Test that string literals are not parsed as syntax, even when they end with a double backslash.""" + + self.assertEquals(LintChecker().lint_text('var x = "(\\\\";'), []) + if __name__ == '__main__': usage = 'usage: %prog [options] [file ... | -]' From 46aabf0ea23525577dfaed285a8703baa2fe0897 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 25 May 2012 01:12:57 +0100 Subject: [PATCH 031/112] Code formatting. --- Tools/nib2cib/NSPredicateEditor.j | 10 +++++----- Tools/nib2cib/NSRuleEditor.j | 12 ++++++------ Tools/nib2cib/Nib2Cib.j | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Tools/nib2cib/NSPredicateEditor.j b/Tools/nib2cib/NSPredicateEditor.j index 2ef4ea8a1..add06a19b 100644 --- a/Tools/nib2cib/NSPredicateEditor.j +++ b/Tools/nib2cib/NSPredicateEditor.j @@ -27,12 +27,12 @@ - (id)NS_initWithCoder:(CPCoder)aCoder { self = [super NS_initWithCoder:aCoder]; - + if (self) - { + { _allTemplates = [aCoder decodeObjectForKey:@"NSPredicateTemplates"]; } - + return self; } @@ -59,7 +59,7 @@ - (id)NS_initWithCoder:(CPCoder)aCoder { self = [super init]; - + if (self) { _templateType = [aCoder decodeIntForKey:@"NSPredicateTemplateType"]; @@ -71,7 +71,7 @@ _rightIsWildcard = [aCoder decodeBoolForKey:@"NSPredicateTemplateRightIsWildcard"]; _views = [aCoder decodeObjectForKey:@"NSPredicateTemplateViews"]; } - + return self; } diff --git a/Tools/nib2cib/NSRuleEditor.j b/Tools/nib2cib/NSRuleEditor.j index 8955626f4..fb7be960d 100644 --- a/Tools/nib2cib/NSRuleEditor.j +++ b/Tools/nib2cib/NSRuleEditor.j @@ -32,7 +32,7 @@ - (id)NS_initWithCoder:(CPCoder)aCoder { self = [super NS_initWithCoder:aCoder]; - + if (self) { _alignmentGridWidth = [aCoder decodeFloatForKey:@"NSRuleEditorAlignmentGridWidth"]; @@ -40,20 +40,20 @@ _stringsFilename = [aCoder decodeObjectForKey:@"NSRuleEditorStringsFileName"]; _editable = [aCoder decodeBoolForKey:@"NSRuleEditorEditable"]; _allowsEmptyCompoundRows = [aCoder decodeBoolForKey:@"NSRuleEditorAllowsEmptyCompoundRows"]; - _disallowEmpty = [aCoder decodeBoolForKey:@"NSRuleEditorDisallowEmpty"]; + _disallowEmpty = [aCoder decodeBoolForKey:@"NSRuleEditorDisallowEmpty"]; _nestingMode = [aCoder decodeIntForKey:@"NSRuleEditorNestingMode"]; _typeKeyPath = [aCoder decodeObjectForKey:@"NSRuleEditorRowTypeKeyPath"]; _itemsKeyPath = [aCoder decodeObjectForKey:@"NSRuleEditorItemsKeyPath"]; _valuesKeyPath = [aCoder decodeObjectForKey:@"NSRuleEditorValuesKeyPath"]; _subrowsArrayKeyPath = [aCoder decodeObjectForKey:@"NSRuleEditorSubrowsArrayKeyPath"]; _boundArrayKeyPath = [aCoder decodeObjectForKey:@"NSRuleEditorBoundArrayKeyPath"]; - + //_slicesHolder = [aCoder decodeObjectForKey:@"NSRuleEditorViewSliceHolder"]; _boundArrayOwner = [aCoder decodeObjectForKey:@"NSRuleEditorBoundArrayOwner"]; _slices = [aCoder decodeObjectForKey:@"NSRuleEditorSlices"]; - _ruleDelegate = [aCoder decodeObjectForKey:@"NSRuleEditorDelegate"]; + _ruleDelegate = [aCoder decodeObjectForKey:@"NSRuleEditorDelegate"]; } - + return self; } @@ -99,7 +99,7 @@ { if (self = [super init]) boundArray = [aCoder decodeObjectForKey:@"NSBoundArray"]; - + return self; } diff --git a/Tools/nib2cib/Nib2Cib.j b/Tools/nib2cib/Nib2Cib.j index 424570cb5..6c2fac4d1 100644 --- a/Tools/nib2cib/Nib2Cib.j +++ b/Tools/nib2cib/Nib2Cib.j @@ -40,7 +40,7 @@ var FILE = require("file"), DefaultTheme = "Aristo", BuildTypes = ["Debug", "Release"], DefaultFile = "MainMenu", - AllowedStoredOptionsRe = new RegExp("^(defaultTheme|auxThemes|verbosity|quiet|frameworks|format)$"); + AllowedStoredOptionsRe = new RegExp("^(defaultTheme|auxThemes|verbosity|quiet|frameworks|format)$"), ArgsRe = /"[^\"]+"|'[^\']+'|\S+/g; From 0dbebf2f045e072c5a47383bfcc28bbe25757527 Mon Sep 17 00:00:00 2001 From: ggsato Date: Fri, 25 May 2012 16:54:10 +0900 Subject: [PATCH 032/112] Added another way to subclass CPDocumentController --- Tests/Manual/CPDocumentControllerTest/README | 4 + .../withNib/AppController.j | 39 + .../withNib/Document.j | 12 + .../withNib/DocumentController.j | 15 + .../withNib/Info.plist | 23 + .../CPDocumentControllerTest/withNib/Jakefile | 94 + .../withNib/Resources/Document.cib | 1 + .../withNib/Resources/Document.xib | 213 ++ .../withNib/Resources/MainMenu.cib | 1 + .../withNib/Resources/MainMenu.xib | 2822 +++++++++++++++++ .../withNib/Resources/spinner.gif | Bin 0 -> 1849 bytes .../withNib/index-debug.html | 107 + .../withNib/index.html | 77 + .../CPDocumentControllerTest/withNib/main.j | 18 + .../withoutNib/AppController.j | 38 + .../withoutNib/Document.j | 12 + .../withoutNib/DocumentController.j | 15 + .../withoutNib/Info.plist | 23 + .../withoutNib/Jakefile | 94 + .../withoutNib/Resources/Document.cib | 1 + .../withoutNib/Resources/Document.xib | 213 ++ .../withoutNib/Resources/MainMenu.cib | 1 + .../withoutNib/Resources/MainMenu.xib | 2822 +++++++++++++++++ .../withoutNib/Resources/spinner.gif | Bin 0 -> 1849 bytes .../withoutNib/index-debug.html | 107 + .../withoutNib/index.html | 77 + .../withoutNib/main.j | 18 + 27 files changed, 6847 insertions(+) create mode 100644 Tests/Manual/CPDocumentControllerTest/README create mode 100644 Tests/Manual/CPDocumentControllerTest/withNib/AppController.j create mode 100644 Tests/Manual/CPDocumentControllerTest/withNib/Document.j create mode 100644 Tests/Manual/CPDocumentControllerTest/withNib/DocumentController.j create mode 100644 Tests/Manual/CPDocumentControllerTest/withNib/Info.plist create mode 100644 Tests/Manual/CPDocumentControllerTest/withNib/Jakefile create mode 100644 Tests/Manual/CPDocumentControllerTest/withNib/Resources/Document.cib create mode 100644 Tests/Manual/CPDocumentControllerTest/withNib/Resources/Document.xib create mode 100644 Tests/Manual/CPDocumentControllerTest/withNib/Resources/MainMenu.cib create mode 100644 Tests/Manual/CPDocumentControllerTest/withNib/Resources/MainMenu.xib create mode 100644 Tests/Manual/CPDocumentControllerTest/withNib/Resources/spinner.gif create mode 100644 Tests/Manual/CPDocumentControllerTest/withNib/index-debug.html create mode 100644 Tests/Manual/CPDocumentControllerTest/withNib/index.html create mode 100644 Tests/Manual/CPDocumentControllerTest/withNib/main.j create mode 100644 Tests/Manual/CPDocumentControllerTest/withoutNib/AppController.j create mode 100644 Tests/Manual/CPDocumentControllerTest/withoutNib/Document.j create mode 100644 Tests/Manual/CPDocumentControllerTest/withoutNib/DocumentController.j create mode 100644 Tests/Manual/CPDocumentControllerTest/withoutNib/Info.plist create mode 100644 Tests/Manual/CPDocumentControllerTest/withoutNib/Jakefile create mode 100644 Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/Document.cib create mode 100644 Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/Document.xib create mode 100644 Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/MainMenu.cib create mode 100644 Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/MainMenu.xib create mode 100644 Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/spinner.gif create mode 100644 Tests/Manual/CPDocumentControllerTest/withoutNib/index-debug.html create mode 100644 Tests/Manual/CPDocumentControllerTest/withoutNib/index.html create mode 100644 Tests/Manual/CPDocumentControllerTest/withoutNib/main.j diff --git a/Tests/Manual/CPDocumentControllerTest/README b/Tests/Manual/CPDocumentControllerTest/README new file mode 100644 index 000000000..812c618a4 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/README @@ -0,0 +1,4 @@ +This test includes two tests for two ways to subclass CPDocumentController. + +Please refer to the pull request and its discussion here. +https://github.com/cappuccino/cappuccino/pull/1551 diff --git a/Tests/Manual/CPDocumentControllerTest/withNib/AppController.j b/Tests/Manual/CPDocumentControllerTest/withNib/AppController.j new file mode 100644 index 000000000..7b5998837 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withNib/AppController.j @@ -0,0 +1,39 @@ +/* + * AppController.j + * CappDoc + * + * Created by You on May 24, 2012. + * Copyright 2012, Your Company All rights reserved. + */ + +@import +@import "Document.j" +@import "DocumentController.j" + +@implementation AppController : CPObject +{ +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + // This is called when the application is done loading. + var sharedDocController = [CPDocumentController sharedDocumentController]; + var docController = [[DocumentController alloc] init]; + var cpAlert = [CPAlert alertWithMessageText:@"Is this the shared instance? " + (sharedDocController == docController) defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:nil]; + [cpAlert beginSheetModalForWindow:[[CPApplication sharedApplication] mainWindow]]; +} + +- (void)applicationWillFinishLaunching:(CPNotification)aNotification +{ + // instantiate a subclass of DocumentController + //subclassedCPDocumentController = [[DocumentController alloc] init]; +} + +- (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. +} + +@end diff --git a/Tests/Manual/CPDocumentControllerTest/withNib/Document.j b/Tests/Manual/CPDocumentControllerTest/withNib/Document.j new file mode 100644 index 000000000..e6a1c7ef4 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withNib/Document.j @@ -0,0 +1,12 @@ +@import + +@implementation Document : CPDocument +{ +} + +- (CPString)windowCibName +{ + return @"Document"; +} + +@end diff --git a/Tests/Manual/CPDocumentControllerTest/withNib/DocumentController.j b/Tests/Manual/CPDocumentControllerTest/withNib/DocumentController.j new file mode 100644 index 000000000..4f37b6aad --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withNib/DocumentController.j @@ -0,0 +1,15 @@ +@import +@import + +@implementation DocumentController : CPDocumentController +{ +} + +- (id)init +{ + self = [super init]; + + return [CPDocumentController sharedDocumentController]; +} + +@end diff --git a/Tests/Manual/CPDocumentControllerTest/withNib/Info.plist b/Tests/Manual/CPDocumentControllerTest/withNib/Info.plist new file mode 100644 index 000000000..b41dbc7a3 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withNib/Info.plist @@ -0,0 +1,23 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CappDoc + CPBundleDocumentTypes + + + CPDocumentClass + Document + CPBundleTypeName + CappDoc + CFBundleTypeExtentions + + cappdoc + + + + + diff --git a/Tests/Manual/CPDocumentControllerTest/withNib/Jakefile b/Tests/Manual/CPDocumentControllerTest/withNib/Jakefile new file mode 100644 index 000000000..c963d80b8 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withNib/Jakefile @@ -0,0 +1,94 @@ +/* + * Jakefile + * CappDoc + * + * Created by You on May 24, 2012. + * Copyright 2012, Your Company All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"); + +app ("CappDoc", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "CappDoc.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CappDoc"); + task.setIdentifier("com.yourcompany.CappDoc"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CappDoc"); + task.setSources((new FileList("**/*.j")).exclude(FILE.join("Build", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + task.setNib2CibFlags("-R Resources/"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", ["CappDoc"], function() +{ + printResults(configuration); +}); + +task ("build", ["default"]); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", "CappDoc", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "CappDoc", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "CappDoc")); + OS.system(["press", "-f", FILE.join("Build", "Release", "CappDoc"), FILE.join("Build", "Deployment", "CappDoc")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "CappDoc")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "CappDoc"), FILE.join("Build", "Desktop", "CappDoc", "CappDoc.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "CappDoc", "CappDoc.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "CappDoc")); + print("----------------------------"); +} diff --git a/Tests/Manual/CPDocumentControllerTest/withNib/Resources/Document.cib b/Tests/Manual/CPDocumentControllerTest/withNib/Resources/Document.cib new file mode 100644 index 000000000..b677cb212 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withNib/Resources/Document.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;18E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;23E;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;18E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;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;24E;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;25E;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;26E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;18E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;27E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;30;_CPCibWindowTemplateMinSizeKeyD;K;6;CP$UIDd;2;28E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;29E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;2;30E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;31E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;32E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;33E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;34E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;20E;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;19E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;35E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;36E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;36E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;37E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;38E;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;21E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;20E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;35E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;39E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;40E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;20E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;41E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;42E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;38E;K;6;$afontD;K;6;CP$UIDd;2;44E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;45E;K;11;$aalignmentD;K;6;CP$UIDd;2;46E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;47E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;48E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;49E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;50E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;50E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;50E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;45E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;46E;K;31;CPTextFieldPlaceholderStringKeyD;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;51E;E;S;8;DocumentD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;windowS;8;delegateS;9;{94, 108}S;32;{10000000000000, 10000000000000}S;4;ViewS;8;CPWindowS;23;{{29, 106}, {507, 413}}d;2;15S;6;Windowd;1;0S;20;{{0, 0}, {507, 413}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;22E;E;E;S;6;normalS;23;{{201, 198}, {104, 17}}S;19;{{0, 0}, {104, 17}}d;2;45S;9;textfieldD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;13;CPFontNameKeyD;K;6;CP$UIDd;2;52E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;53E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;50E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;50E;E;d;1;2d;1;4T;S;13;Contents Hered;4;3072F;S;13;CPApplicationS;17;Arial, sans-serifd;2;12E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPDocumentControllerTest/withNib/Resources/Document.xib b/Tests/Manual/CPDocumentControllerTest/withNib/Resources/Document.xib new file mode 100644 index 000000000..25aba9b83 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withNib/Resources/Document.xib @@ -0,0 +1,213 @@ + + + + 1070 + 11E53 + 2182 + 1138.47 + 569.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2182 + + + NSTextField + NSTextFieldCell + NSWindowTemplate + NSView + NSCustomObject + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + Document + + + FirstResponder + + + 15 + 2 + {{29, 539}, {507, 413}} + 1886912512 + Window + NSWindow + View + + {94, 86} + + + 256 + + + + 301 + {{201, 198}, {104, 17}} + + + _NS:1505 + YES + + 68288064 + 272630784 + Contents Here + + LucidaGrande + 13 + 1044 + + _NS:1505 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + {507, 413} + + + + + {{0, 0}, {1920, 1058}} + {94, 108} + {10000000000000, 10000000000000} + YES + + + NSApplication + + + + + + + window + + + + 18 + + + + delegate + + + + 17 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + 5 + + + + + + Window + + + 6 + + + + + + + + -3 + + + Application + + + 100098 + + + + + + + + 100099 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{133, 170}, {507, 413}} + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 100100 + + + + + Document + NSDocument + + IBProjectSource + ./Classes/Document.h + + + + + 0 + IBCocoaFramework + YES + 3 + + diff --git a/Tests/Manual/CPDocumentControllerTest/withNib/Resources/MainMenu.cib b/Tests/Manual/CPDocumentControllerTest/withNib/Resources/MainMenu.cib new file mode 100644 index 000000000..46e2f9e51 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withNib/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;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;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;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;78E;D;K;6;CP$UIDd;2;80E;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;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;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;80E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;80E;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;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;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;123E;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;124E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;106E;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;2;80E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;2;80E;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;2;80E;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;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;158E;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;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;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;3;204E;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;205E;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;202E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;206E;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;16E;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;207E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;208E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;90E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;209E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;211E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;214E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;215E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;216E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;217E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;218E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;219E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;93E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;221E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;92E;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;16E;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;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;225E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;226E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;227E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;228E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;229E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;230E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;231E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;232E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;233E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;234E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;235E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;237E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;238E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;239E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;240E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;241E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;243E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;244E;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;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;246E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;248E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;249E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;250E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;251E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;252E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;188E;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;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;190E;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;16E;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;255E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;182E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;183E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;258E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;185E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;259E;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;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;260E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;177E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;261E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;262E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;263E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;173E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;266E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;267E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;204E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;268E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;269E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;270E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;272E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;83E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;271E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;274E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;276E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;277E;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;278E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;83E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;279E;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;83E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;280E;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;83E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;281E;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;83E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;282E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;283E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;272E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;89E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;283E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;284E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;285E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;286E;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;89E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;287E;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;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;288E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;289E;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;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;290E;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;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;291E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;276E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;277E;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;278E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;292E;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;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;293E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;276E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;277E;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;278E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;276E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;277E;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;278E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;294E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;272E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;99E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;294E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;295E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;276E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;277E;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;278E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;297E;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;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;288E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;298E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;299E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;272E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;103E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;299E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;300E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;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;302E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;303E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;272E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;106E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;303E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;304E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;305E;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;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;306E;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;307E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;308E;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;309E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;276E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;277E;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;278E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;311E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;312E;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;313E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;315E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;276E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;277E;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;278E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;317E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;318E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;272E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;117E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;319E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;320E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;322E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;323E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;318E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;324E;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;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;325E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;326E;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;327E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;328E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;329E;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;330E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;331E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;333E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;334E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;335E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;272E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;124E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;335E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;336E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;337E;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;124E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;124E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;339E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;124E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;341E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;124E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;272E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;130E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;343E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;344E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;345E;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;130E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;130E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;272E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;134E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;347E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;348E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;349E;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;333E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;334E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;330E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;331E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;322E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;323E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;318E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;272E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;139E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;352E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;355E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;356E;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;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;357E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;318E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;359E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;361E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;363E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;272E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;146E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;364E;K;13;CPMenuNameKeyD;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;81E;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;146E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;369E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;318E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;371E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;276E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;277E;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;278E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;139E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;276E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;277E;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;278E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;272E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;154E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;81E;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;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;376E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;298E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;272E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;158E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;81E;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;272E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;160E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;2;81E;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;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;376E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;330E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;385E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;333E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;387E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;389E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;276E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;277E;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;278E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;322E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;391E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;393E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;394E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;276E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;277E;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;278E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;395E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;272E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;170E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;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;81E;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;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;272E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;176E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;401E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;402E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;404E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;272E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;181E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;404E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;405E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;406E;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;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;408E;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;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;276E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;277E;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;278E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;411E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;276E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;277E;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;278E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;315E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;298E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;413E;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;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;313E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;298E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;272E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;193E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;414E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;415E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;416E;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;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;417E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;419E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;420E;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;2;81E;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;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;422E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;276E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;277E;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;278E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;193E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;315E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;313E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;427E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;428E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;8;delegateS;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;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;3;102E;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;87E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;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;90E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;93E;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;104E;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;109E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;129E;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;122E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;119E;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;127E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;128E;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;132E;D;K;6;CP$UIDd;3;131E;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;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;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;144E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;142E;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;147E;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;155E;D;K;6;CP$UIDd;3;156E;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;159E;D;K;6;CP$UIDd;3;192E;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;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;175E;D;K;6;CP$UIDd;3;180E;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;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;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;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;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;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;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;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;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;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;13;AppControllerS;18;DocumentControllerE;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPDocumentControllerTest/withNib/Resources/MainMenu.xib b/Tests/Manual/CPDocumentControllerTest/withNib/Resources/MainMenu.xib new file mode 100644 index 000000000..0d13ea713 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withNib/Resources/MainMenu.xib @@ -0,0 +1,2822 @@ + + + + 1050 + 11E53 + 2182 + 1138.47 + 569.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2182 + + + YES + NSMenu + NSMenuItem + NSCustomObject + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + YES + + + NewApplication + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + NewApplication + + YES + + + About NewApplication + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + YES + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide NewApplication + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit NewApplication + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + YES + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + Open Recent + + YES + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save + s + 1048576 + 2147483647 + + + + + + Save As… + S + 1179648 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + YES + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + Find + + YES + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + Spelling and Grammar + + YES + + + Show Spelling… + : + 1048576 + 2147483647 + + + + + + Check Spelling + ; + 1048576 + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + Substitutions + + YES + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + Speech + + YES + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + Format + + YES + + + Font + + 2147483647 + + + submenuAction: + + Font + + YES + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + Kern + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligature + + 2147483647 + + + submenuAction: + + Ligature + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + Baseline + + YES + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + Text + + YES + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + YES + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + YES + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 1048576 + 2147483647 + + + submenuAction: + + Help + + YES + + + NewApplication Help + ? + 1048576 + 2147483647 + + + + + + + + _NSMainMenu + + + AppController + + + DocumentController + + + + + YES + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 451 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + clearRecentDocuments: + + + + 127 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + showHelp: + + + + 360 + + + + saveDocument: + + + + 362 + + + + saveDocumentAs: + + + + 363 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + alignLeft: + + + + 442 + + + + alignJustified: + + + + 443 + + + + copyRuler: + + + + 444 + + + + alignCenter: + + + + 445 + + + + toggleRuler: + + + + 446 + + + + alignRight: + + + + 447 + + + + pasteRuler: + + + + 448 + + + + + YES + + 0 + + YES + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + YES + + + + + + + + + + MainMenu + + + 19 + + + YES + + + + + + 56 + + + YES + + + + + + 103 + + + YES + + + + 1 + + + 217 + + + YES + + + + + + 83 + + + YES + + + + + + 81 + + + YES + + + + + + + + + + + + + + + + 75 + + + 3 + + + 80 + + + 8 + + + 78 + + + 6 + + + 72 + + + + + 82 + + + 9 + + + 124 + + + YES + + + + + + 77 + + + 5 + + + 73 + + + 1 + + + 79 + + + 7 + + + 112 + + + 10 + + + 74 + + + 2 + + + 125 + + + YES + + + + + + 126 + + + + + 205 + + + YES + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + YES + + + + + + 216 + + + YES + + + + + + 200 + + + YES + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + YES + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 106 + + + YES + + + + 2 + + + 111 + + + + + 57 + + + YES + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + 1111 + + + 144 + + + + + 129 + + + 121 + + + 143 + + + + + 236 + + + + + 131 + + + YES + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + YES + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + YES + + + + + + 296 + + + YES + + + + + + + 297 + + + + + 298 + + + + + 211 + + + YES + + + + + + 212 + + + YES + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + YES + + + + + + 349 + + + YES + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 375 + + + YES + + + + + + 376 + + + YES + + + + + + + 377 + + + YES + + + + + + 378 + + + YES + + + + + + 379 + + + YES + + + + + + + + + + + + + 380 + + + + + 381 + + + + + 382 + + + + + 383 + + + + + 384 + + + + + 385 + + + + + 386 + + + + + 387 + + + + + 388 + + + YES + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + YES + + + + + + 398 + + + YES + + + + + + 399 + + + YES + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + YES + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + YES + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + YES + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 450 + + + + + 460 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 103.IBPluginDependency + 106.IBPluginDependency + 111.IBPluginDependency + 112.IBPluginDependency + 124.IBPluginDependency + 125.IBPluginDependency + 126.IBPluginDependency + 129.IBPluginDependency + 130.IBPluginDependency + 131.IBPluginDependency + 134.IBPluginDependency + 136.IBPluginDependency + 143.IBPluginDependency + 144.IBPluginDependency + 145.IBPluginDependency + 149.IBPluginDependency + 150.IBPluginDependency + 19.IBPluginDependency + 195.IBPluginDependency + 196.IBPluginDependency + 197.IBPluginDependency + 198.IBPluginDependency + 199.IBPluginDependency + 200.IBPluginDependency + 201.IBPluginDependency + 202.IBPluginDependency + 203.IBPluginDependency + 204.IBPluginDependency + 205.IBPluginDependency + 206.IBPluginDependency + 207.IBPluginDependency + 208.IBPluginDependency + 209.IBPluginDependency + 210.IBPluginDependency + 211.IBPluginDependency + 212.IBPluginDependency + 213.IBPluginDependency + 214.IBPluginDependency + 215.IBPluginDependency + 216.IBPluginDependency + 217.IBPluginDependency + 218.IBPluginDependency + 219.IBPluginDependency + 220.IBPluginDependency + 221.IBPluginDependency + 23.IBPluginDependency + 236.IBPluginDependency + 239.IBPluginDependency + 24.IBPluginDependency + 29.IBPluginDependency + 295.IBPluginDependency + 296.IBPluginDependency + 297.IBPluginDependency + 298.IBPluginDependency + 346.IBPluginDependency + 348.IBPluginDependency + 349.IBPluginDependency + 350.IBPluginDependency + 351.IBPluginDependency + 354.IBPluginDependency + 375.IBPluginDependency + 376.IBPluginDependency + 377.IBPluginDependency + 378.IBPluginDependency + 379.IBPluginDependency + 380.IBPluginDependency + 381.IBPluginDependency + 382.IBPluginDependency + 383.IBPluginDependency + 384.IBPluginDependency + 385.IBPluginDependency + 386.IBPluginDependency + 387.IBPluginDependency + 388.IBPluginDependency + 389.IBPluginDependency + 390.IBPluginDependency + 391.IBPluginDependency + 392.IBPluginDependency + 393.IBPluginDependency + 394.IBPluginDependency + 395.IBPluginDependency + 396.IBPluginDependency + 397.IBPluginDependency + 398.IBPluginDependency + 399.IBPluginDependency + 400.IBPluginDependency + 401.IBPluginDependency + 402.IBPluginDependency + 403.IBPluginDependency + 404.IBPluginDependency + 405.IBPluginDependency + 406.IBPluginDependency + 407.IBPluginDependency + 408.IBPluginDependency + 409.IBPluginDependency + 410.IBPluginDependency + 411.IBPluginDependency + 412.IBPluginDependency + 413.IBPluginDependency + 414.IBPluginDependency + 415.IBPluginDependency + 416.IBPluginDependency + 417.IBPluginDependency + 418.IBPluginDependency + 419.IBPluginDependency + 450.IBPluginDependency + 460.IBPluginDependency + 5.IBPluginDependency + 56.IBPluginDependency + 57.IBPluginDependency + 58.IBPluginDependency + 72.IBPluginDependency + 73.IBPluginDependency + 74.IBPluginDependency + 75.IBPluginDependency + 77.IBPluginDependency + 78.IBPluginDependency + 79.IBPluginDependency + 80.IBPluginDependency + 81.IBPluginDependency + 82.IBPluginDependency + 83.IBPluginDependency + 92.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + 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 + + + + + + YES + + + + + 460 + + + + YES + + DocumentController + NSDocumentController + + IBProjectSource + ./Classes/DocumentController.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + YES + + YES + NSMenuCheckmark + NSMenuMixedState + + + YES + {11, 11} + {10, 3} + + + + diff --git a/Tests/Manual/CPDocumentControllerTest/withNib/Resources/spinner.gif b/Tests/Manual/CPDocumentControllerTest/withNib/Resources/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..06dbc2bc21dddcf0e09b566d5b211aee89570f52 GIT binary patch literal 1849 zcma*odr(tX9tZHtz31lM+(&Y`A`Ou`NeG&R#DrIfV%?hng21vs6v>ooRQQFbk7E_K!V( z{?5!fpZWgIZ%*d6t%i*j24bL}AZUJm9)h6R*;%L4IWse3G#VWaN1#$zSSXcBhlYlH zJ|D}n{r&w2f+Qp)SS*&n?*G4}{}!h?td_mjU6Kad-rW*QwWYCUk7d^e+sjpZAn6kT z5rM;`{~_}-wm+L@%+E;JphLm}C3WzQAQD0wBoY|rOTQX{(@pp-WAA8Iw0HKl|15j) zhGh(SFWu#5zUCw^T!}C~eC}~?{xG-r7ugQC>taC+|L^xr&a%{#cgUOZXIM&v?)k^2 z1i5%0!U00wq)r4vlAwXBA_m5J5WNeuBm-XJQ5pG4GD%vc|K){+TJ{AkHqN@SJKczX zU}QRd9n*_bf^h94)6Ctv{CUfz_;qs#RDuQ$DR%y1&5G-a6rhf*4Y zl+UOD1*GE{GQ7vv;c-tTIMkz0ovO>9j%b5hpa@a*CBJ#W!0@ndSwF|%hMkdFtXiU) z`BEp+yhkt8ZY>tg&uyH@%^%K4jDrbA;et&vnnzZ3z22@e6<27z2Vk13kb7OtISyxv z(XoO-LNQCZe3lfzc%*pNqU<9T+p~teThOEB+~e&U0mC|zS{Q)dJZ)!^1f7L(zg*L> z*vSW%?dR~@@0(}x6-V^A`~ImD;)NaBUnP8;RH=bS2@pk`wp>>8r&jGjmGPy%1BW}v zoPo}ca$~bze@efc3kapuEVW1!%teOZT3j2Tw5=hjiAf02d}7dL0oFC%@=RXp5Ow#% z@a>+AM|YWt$n&e`>sB-32gBcuTi>R>*|8@lp`y6thc7ydyqDsuUn~YzZf|{-R@-3y zL#wx{Ii}xxL_csiW*LBn0-A$>zp4WOmkf6=ilrjlW?-l9+bCd7|i?*b5NTmy<<6NZ0T8$SN@mwdC2f z6jqK=N@bS@!=YSj%>h0}*4p+%0HbTIrE$w7UMT6+AZZ&DAo*qZAAi(OtNbIfl#Dw^ zJWeiCp~zi#&t6x}m9)O^eR4HiLV3QA<<0>HZ8%$^lrSE94Wb}=+MM^!b>n#5&-JQR zkr-CEu9C;_F*7DqDisulV6Pmg$nFL0TPn%~*m^-`Z3^BgU(sNpnx%nW(!eV9A&FvI zHL3X3lw8Wji^6=8KbQDE-e%b?svdFxxdh$8r97@7$ojeI`6AL8Ob6QC$qh&>ZWVDX1F{0vJnT%%mE;GveKWR%C} zM&4d;Jf3s9|HAA)yVUPo`Aq;0do#)uHSXi5*QF*)x@MVVHr+cN)uMZ__F|&Ta#p8d z53TOKtce!PJUuie8UWol-S(`c2nH?UGqJP{!4RR4u$LCfn)q-hj0^f=h(VYy)T6eN zhRO!ja-aDBTcgeyP(8Ua4IdiOog^*CQa?R(cP#9AgL9`j>EX-6Yf1lzX(!~``M1XC zNmM<4<6d~wWZ$Xrk0K}UteTrq@LBBk#MsjkK;pbuVhe)NI7(7Pf(l?lxC7=1Z7Pzl zMbS;nV4NI5_N{1$P)&XC)huOGQ+h^zpYUZfb*1n6>!`#*b3y52LGmi+<4sY5jyD#- zw&$d}DTguLAfnRtjrM*JfqtHqUu6rQoU=g%1E9xk%;)TDm^2<8n-0IhTsQFaek)MY}>PK4;nBk=ow4pF>vzkO& gna%Org-kgQCf=+BeMi^RbuY;YE~rTjend;_cdi8t>i_@% literal 0 HcmV?d00001 diff --git a/Tests/Manual/CPDocumentControllerTest/withNib/index-debug.html b/Tests/Manual/CPDocumentControllerTest/withNib/index-debug.html new file mode 100644 index 000000000..8435cee74 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withNib/index-debug.html @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + CappDoc + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPDocumentControllerTest/withNib/index.html b/Tests/Manual/CPDocumentControllerTest/withNib/index.html new file mode 100644 index 000000000..b03674ecf --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withNib/index.html @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + CappDoc + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPDocumentControllerTest/withNib/main.j b/Tests/Manual/CPDocumentControllerTest/withNib/main.j new file mode 100644 index 000000000..5cbdc7c55 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withNib/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CappDoc + * + * Created by You on May 24, 2012. + * Copyright 2012, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} diff --git a/Tests/Manual/CPDocumentControllerTest/withoutNib/AppController.j b/Tests/Manual/CPDocumentControllerTest/withoutNib/AppController.j new file mode 100644 index 000000000..c66a0b5ba --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withoutNib/AppController.j @@ -0,0 +1,38 @@ +/* + * AppController.j + * CappDoc + * + * Created by You on May 24, 2012. + * Copyright 2012, Your Company All rights reserved. + */ + +@import +@import "Document.j" +@import "DocumentController.j" + +@implementation AppController : CPObject +{ + CPDocumentController subclassedCPDocumentController; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + // This is called when the application is done loading. + var cpAlert = [CPAlert alertWithMessageText:@"Is this the shared instance? " + ([CPDocumentController sharedDocumentController] == subclassedCPDocumentController) defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:nil]; + [cpAlert beginSheetModalForWindow:[[CPApplication sharedApplication] mainWindow]]; +} + +- (void)applicationWillFinishLaunching:(CPNotification)aNotification +{ + // instantiate a subclass of DocumentController + subclassedCPDocumentController = [[DocumentController alloc] init]; +} + +- (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. +} + +@end diff --git a/Tests/Manual/CPDocumentControllerTest/withoutNib/Document.j b/Tests/Manual/CPDocumentControllerTest/withoutNib/Document.j new file mode 100644 index 000000000..e6a1c7ef4 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withoutNib/Document.j @@ -0,0 +1,12 @@ +@import + +@implementation Document : CPDocument +{ +} + +- (CPString)windowCibName +{ + return @"Document"; +} + +@end diff --git a/Tests/Manual/CPDocumentControllerTest/withoutNib/DocumentController.j b/Tests/Manual/CPDocumentControllerTest/withoutNib/DocumentController.j new file mode 100644 index 000000000..0066d795b --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withoutNib/DocumentController.j @@ -0,0 +1,15 @@ +@import +@import + +@implementation DocumentController : CPDocumentController +{ +} + +- (id)init +{ + self = [super init]; + + return self; +} + +@end diff --git a/Tests/Manual/CPDocumentControllerTest/withoutNib/Info.plist b/Tests/Manual/CPDocumentControllerTest/withoutNib/Info.plist new file mode 100644 index 000000000..b41dbc7a3 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withoutNib/Info.plist @@ -0,0 +1,23 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CappDoc + CPBundleDocumentTypes + + + CPDocumentClass + Document + CPBundleTypeName + CappDoc + CFBundleTypeExtentions + + cappdoc + + + + + diff --git a/Tests/Manual/CPDocumentControllerTest/withoutNib/Jakefile b/Tests/Manual/CPDocumentControllerTest/withoutNib/Jakefile new file mode 100644 index 000000000..c963d80b8 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withoutNib/Jakefile @@ -0,0 +1,94 @@ +/* + * Jakefile + * CappDoc + * + * Created by You on May 24, 2012. + * Copyright 2012, Your Company All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"); + +app ("CappDoc", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "CappDoc.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CappDoc"); + task.setIdentifier("com.yourcompany.CappDoc"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CappDoc"); + task.setSources((new FileList("**/*.j")).exclude(FILE.join("Build", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + task.setNib2CibFlags("-R Resources/"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", ["CappDoc"], function() +{ + printResults(configuration); +}); + +task ("build", ["default"]); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", "CappDoc", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "CappDoc", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "CappDoc")); + OS.system(["press", "-f", FILE.join("Build", "Release", "CappDoc"), FILE.join("Build", "Deployment", "CappDoc")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "CappDoc")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "CappDoc"), FILE.join("Build", "Desktop", "CappDoc", "CappDoc.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "CappDoc", "CappDoc.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "CappDoc")); + print("----------------------------"); +} diff --git a/Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/Document.cib b/Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/Document.cib new file mode 100644 index 000000000..b677cb212 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/Document.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;18E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;23E;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;18E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;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;24E;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;25E;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;26E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;18E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;27E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;30;_CPCibWindowTemplateMinSizeKeyD;K;6;CP$UIDd;2;28E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;29E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;2;30E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;31E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;32E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;33E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;34E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;20E;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;19E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;35E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;36E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;36E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;37E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;38E;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;21E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;20E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;35E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;39E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;40E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;20E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;41E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;42E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;38E;K;6;$afontD;K;6;CP$UIDd;2;44E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;45E;K;11;$aalignmentD;K;6;CP$UIDd;2;46E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;47E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;48E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;49E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;50E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;50E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;50E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;45E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;46E;K;31;CPTextFieldPlaceholderStringKeyD;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;51E;E;S;8;DocumentD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;windowS;8;delegateS;9;{94, 108}S;32;{10000000000000, 10000000000000}S;4;ViewS;8;CPWindowS;23;{{29, 106}, {507, 413}}d;2;15S;6;Windowd;1;0S;20;{{0, 0}, {507, 413}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;22E;E;E;S;6;normalS;23;{{201, 198}, {104, 17}}S;19;{{0, 0}, {104, 17}}d;2;45S;9;textfieldD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;13;CPFontNameKeyD;K;6;CP$UIDd;2;52E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;53E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;50E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;50E;E;d;1;2d;1;4T;S;13;Contents Hered;4;3072F;S;13;CPApplicationS;17;Arial, sans-serifd;2;12E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/Document.xib b/Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/Document.xib new file mode 100644 index 000000000..25aba9b83 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/Document.xib @@ -0,0 +1,213 @@ + + + + 1070 + 11E53 + 2182 + 1138.47 + 569.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2182 + + + NSTextField + NSTextFieldCell + NSWindowTemplate + NSView + NSCustomObject + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + Document + + + FirstResponder + + + 15 + 2 + {{29, 539}, {507, 413}} + 1886912512 + Window + NSWindow + View + + {94, 86} + + + 256 + + + + 301 + {{201, 198}, {104, 17}} + + + _NS:1505 + YES + + 68288064 + 272630784 + Contents Here + + LucidaGrande + 13 + 1044 + + _NS:1505 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + {507, 413} + + + + + {{0, 0}, {1920, 1058}} + {94, 108} + {10000000000000, 10000000000000} + YES + + + NSApplication + + + + + + + window + + + + 18 + + + + delegate + + + + 17 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + 5 + + + + + + Window + + + 6 + + + + + + + + -3 + + + Application + + + 100098 + + + + + + + + 100099 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{133, 170}, {507, 413}} + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 100100 + + + + + Document + NSDocument + + IBProjectSource + ./Classes/Document.h + + + + + 0 + IBCocoaFramework + YES + 3 + + diff --git a/Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/MainMenu.cib b/Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/MainMenu.cib new file mode 100644 index 000000000..e3a1f4978 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withoutNib/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;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;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;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;78E;D;K;6;CP$UIDd;2;80E;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;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;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;80E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;80E;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;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;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;123E;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;124E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;106E;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;2;80E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;2;80E;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;2;80E;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;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;158E;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;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;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;203E;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;204E;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;202E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;205E;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;16E;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;206E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;207E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;90E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;208E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;209E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;211E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;214E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;215E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;216E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;217E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;218E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;219E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;93E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;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;101E;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;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;92E;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;16E;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;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;225E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;226E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;227E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;228E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;229E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;230E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;16E;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;232E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;233E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;234E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;235E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;237E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;238E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;239E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;240E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;241E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;243E;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;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;244E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;246E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;248E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;249E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;250E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;251E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;188E;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;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;190E;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;16E;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;254E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;182E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;255E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;183E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;185E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;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;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;259E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;177E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;260E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;261E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;262E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;263E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;173E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;266E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;203E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;267E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;268E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;269E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;83E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;270E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;273E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;83E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;278E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;83E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;279E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;83E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;280E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;83E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;281E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;282E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;89E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;282E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;283E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;284E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;285E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;286E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;287E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;288E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;289E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;290E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;291E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;292E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;293E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;99E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;293E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;294E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;295E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;296E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;287E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;298E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;103E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;298E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;299E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;300E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;301E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;302E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;106E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;302E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;304E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;305E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;306E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;308E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;310E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;312E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;314E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;316E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;318E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;117E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;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;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;321E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;322E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;324E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;325E;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;326E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;327E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;329E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;330E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;332E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;333E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;124E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;334E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;337E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;338E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;339E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;340E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;341E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;130E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;342E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;343E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;344E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;345E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;134E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;346E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;347E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;332E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;333E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;349E;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;329E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;330E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;321E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;322E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;139E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;351E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;352E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;353E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;354E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;356E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;358E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;360E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;361E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;362E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;146E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;363E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;364E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;365E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;146E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;368E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;370E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;154E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;372E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;373E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;375E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;158E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;377E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;378E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;160E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;379E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;380E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;381E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;375E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;329E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;384E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;332E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;386E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;388E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;321E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;390E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;392E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;393E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;170E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;394E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;395E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;176E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;400E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;401E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;181E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;403E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;404E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;406E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;408E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;410E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;411E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;314E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;312E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;413E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;193E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;413E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;414E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;416E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;418E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;420E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;421E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;314E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;424E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;312E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;424E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;426E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;8;delegateS;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;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;3;102E;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;87E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;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;90E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;93E;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;104E;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;109E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;129E;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;122E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;119E;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;127E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;128E;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;132E;D;K;6;CP$UIDd;3;131E;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;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;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;144E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;142E;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;147E;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;155E;D;K;6;CP$UIDd;3;156E;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;159E;D;K;6;CP$UIDd;3;192E;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;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;175E;D;K;6;CP$UIDd;3;180E;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;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;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;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;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;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;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;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;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;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;13;AppControllerE;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/MainMenu.xib b/Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/MainMenu.xib new file mode 100644 index 000000000..af3f6c31e --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/MainMenu.xib @@ -0,0 +1,2822 @@ + + + + 1050 + 11E53 + 2182 + 1138.47 + 569.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2182 + + + YES + NSMenu + NSMenuItem + NSCustomObject + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + YES + + + NewApplication + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + NewApplication + + YES + + + About NewApplication + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + YES + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide NewApplication + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit NewApplication + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + YES + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + Open Recent + + YES + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save + s + 1048576 + 2147483647 + + + + + + Save As… + S + 1179648 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + YES + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + Find + + YES + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + Spelling and Grammar + + YES + + + Show Spelling… + : + 1048576 + 2147483647 + + + + + + Check Spelling + ; + 1048576 + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + Substitutions + + YES + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + Speech + + YES + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + Format + + YES + + + Font + + 2147483647 + + + submenuAction: + + Font + + YES + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + Kern + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligature + + 2147483647 + + + submenuAction: + + Ligature + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + Baseline + + YES + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + Text + + YES + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + YES + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + YES + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 1048576 + 2147483647 + + + submenuAction: + + Help + + YES + + + NewApplication Help + ? + 1048576 + 2147483647 + + + + + + + + _NSMainMenu + + + AppController + + + + + YES + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 451 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + clearRecentDocuments: + + + + 127 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + showHelp: + + + + 360 + + + + saveDocument: + + + + 362 + + + + saveDocumentAs: + + + + 363 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + alignLeft: + + + + 442 + + + + alignJustified: + + + + 443 + + + + copyRuler: + + + + 444 + + + + alignCenter: + + + + 445 + + + + toggleRuler: + + + + 446 + + + + alignRight: + + + + 447 + + + + pasteRuler: + + + + 448 + + + + + YES + + 0 + + YES + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + YES + + + + + + + + + + MainMenu + + + 19 + + + YES + + + + + + 56 + + + YES + + + + + + 103 + + + YES + + + + 1 + + + 217 + + + YES + + + + + + 83 + + + YES + + + + + + 81 + + + YES + + + + + + + + + + + + + + + + 75 + + + 3 + + + 80 + + + 8 + + + 78 + + + 6 + + + 72 + + + + + 82 + + + 9 + + + 124 + + + YES + + + + + + 77 + + + 5 + + + 73 + + + 1 + + + 79 + + + 7 + + + 112 + + + 10 + + + 74 + + + 2 + + + 125 + + + YES + + + + + + 126 + + + + + 205 + + + YES + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + YES + + + + + + 216 + + + YES + + + + + + 200 + + + YES + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + YES + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 106 + + + YES + + + + 2 + + + 111 + + + + + 57 + + + YES + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + 1111 + + + 144 + + + + + 129 + + + 121 + + + 143 + + + + + 236 + + + + + 131 + + + YES + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + YES + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + YES + + + + + + 296 + + + YES + + + + + + + 297 + + + + + 298 + + + + + 211 + + + YES + + + + + + 212 + + + YES + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + YES + + + + + + 349 + + + YES + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 375 + + + YES + + + + + + 376 + + + YES + + + + + + + 377 + + + YES + + + + + + 378 + + + YES + + + + + + 379 + + + YES + + + + + + + + + + + + + 380 + + + + + 381 + + + + + 382 + + + + + 383 + + + + + 384 + + + + + 385 + + + + + 386 + + + + + 387 + + + + + 388 + + + YES + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + YES + + + + + + 398 + + + YES + + + + + + 399 + + + YES + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + YES + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + YES + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + YES + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 450 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 103.IBPluginDependency + 106.IBPluginDependency + 111.IBPluginDependency + 112.IBPluginDependency + 124.IBPluginDependency + 125.IBPluginDependency + 126.IBPluginDependency + 129.IBPluginDependency + 130.IBPluginDependency + 131.IBPluginDependency + 134.IBPluginDependency + 136.IBPluginDependency + 143.IBPluginDependency + 144.IBPluginDependency + 145.IBPluginDependency + 149.IBPluginDependency + 150.IBPluginDependency + 19.IBPluginDependency + 195.IBPluginDependency + 196.IBPluginDependency + 197.IBPluginDependency + 198.IBPluginDependency + 199.IBPluginDependency + 200.IBPluginDependency + 201.IBPluginDependency + 202.IBPluginDependency + 203.IBPluginDependency + 204.IBPluginDependency + 205.IBPluginDependency + 206.IBPluginDependency + 207.IBPluginDependency + 208.IBPluginDependency + 209.IBPluginDependency + 210.IBPluginDependency + 211.IBPluginDependency + 212.IBPluginDependency + 213.IBPluginDependency + 214.IBPluginDependency + 215.IBPluginDependency + 216.IBPluginDependency + 217.IBPluginDependency + 218.IBPluginDependency + 219.IBPluginDependency + 220.IBPluginDependency + 221.IBPluginDependency + 23.IBPluginDependency + 236.IBPluginDependency + 239.IBPluginDependency + 24.IBPluginDependency + 29.IBPluginDependency + 295.IBPluginDependency + 296.IBPluginDependency + 297.IBPluginDependency + 298.IBPluginDependency + 346.IBPluginDependency + 348.IBPluginDependency + 349.IBPluginDependency + 350.IBPluginDependency + 351.IBPluginDependency + 354.IBPluginDependency + 375.IBPluginDependency + 376.IBPluginDependency + 377.IBPluginDependency + 378.IBPluginDependency + 379.IBPluginDependency + 380.IBPluginDependency + 381.IBPluginDependency + 382.IBPluginDependency + 383.IBPluginDependency + 384.IBPluginDependency + 385.IBPluginDependency + 386.IBPluginDependency + 387.IBPluginDependency + 388.IBPluginDependency + 389.IBPluginDependency + 390.IBPluginDependency + 391.IBPluginDependency + 392.IBPluginDependency + 393.IBPluginDependency + 394.IBPluginDependency + 395.IBPluginDependency + 396.IBPluginDependency + 397.IBPluginDependency + 398.IBPluginDependency + 399.IBPluginDependency + 400.IBPluginDependency + 401.IBPluginDependency + 402.IBPluginDependency + 403.IBPluginDependency + 404.IBPluginDependency + 405.IBPluginDependency + 406.IBPluginDependency + 407.IBPluginDependency + 408.IBPluginDependency + 409.IBPluginDependency + 410.IBPluginDependency + 411.IBPluginDependency + 412.IBPluginDependency + 413.IBPluginDependency + 414.IBPluginDependency + 415.IBPluginDependency + 416.IBPluginDependency + 417.IBPluginDependency + 418.IBPluginDependency + 419.IBPluginDependency + 450.IBPluginDependency + 5.IBPluginDependency + 56.IBPluginDependency + 57.IBPluginDependency + 58.IBPluginDependency + 72.IBPluginDependency + 73.IBPluginDependency + 74.IBPluginDependency + 75.IBPluginDependency + 77.IBPluginDependency + 78.IBPluginDependency + 79.IBPluginDependency + 80.IBPluginDependency + 81.IBPluginDependency + 82.IBPluginDependency + 83.IBPluginDependency + 92.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + 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 + + + + + + YES + + + + + 459 + + + + YES + + AppController + + theWindow + NSWindow + + + theWindow + + theWindow + NSWindow + + + + IBProjectSource + ./Classes/AppController.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + YES + + YES + NSMenuCheckmark + NSMenuMixedState + + + YES + {11, 11} + {10, 3} + + + + diff --git a/Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/spinner.gif b/Tests/Manual/CPDocumentControllerTest/withoutNib/Resources/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..06dbc2bc21dddcf0e09b566d5b211aee89570f52 GIT binary patch literal 1849 zcma*odr(tX9tZHtz31lM+(&Y`A`Ou`NeG&R#DrIfV%?hng21vs6v>ooRQQFbk7E_K!V( z{?5!fpZWgIZ%*d6t%i*j24bL}AZUJm9)h6R*;%L4IWse3G#VWaN1#$zSSXcBhlYlH zJ|D}n{r&w2f+Qp)SS*&n?*G4}{}!h?td_mjU6Kad-rW*QwWYCUk7d^e+sjpZAn6kT z5rM;`{~_}-wm+L@%+E;JphLm}C3WzQAQD0wBoY|rOTQX{(@pp-WAA8Iw0HKl|15j) zhGh(SFWu#5zUCw^T!}C~eC}~?{xG-r7ugQC>taC+|L^xr&a%{#cgUOZXIM&v?)k^2 z1i5%0!U00wq)r4vlAwXBA_m5J5WNeuBm-XJQ5pG4GD%vc|K){+TJ{AkHqN@SJKczX zU}QRd9n*_bf^h94)6Ctv{CUfz_;qs#RDuQ$DR%y1&5G-a6rhf*4Y zl+UOD1*GE{GQ7vv;c-tTIMkz0ovO>9j%b5hpa@a*CBJ#W!0@ndSwF|%hMkdFtXiU) z`BEp+yhkt8ZY>tg&uyH@%^%K4jDrbA;et&vnnzZ3z22@e6<27z2Vk13kb7OtISyxv z(XoO-LNQCZe3lfzc%*pNqU<9T+p~teThOEB+~e&U0mC|zS{Q)dJZ)!^1f7L(zg*L> z*vSW%?dR~@@0(}x6-V^A`~ImD;)NaBUnP8;RH=bS2@pk`wp>>8r&jGjmGPy%1BW}v zoPo}ca$~bze@efc3kapuEVW1!%teOZT3j2Tw5=hjiAf02d}7dL0oFC%@=RXp5Ow#% z@a>+AM|YWt$n&e`>sB-32gBcuTi>R>*|8@lp`y6thc7ydyqDsuUn~YzZf|{-R@-3y zL#wx{Ii}xxL_csiW*LBn0-A$>zp4WOmkf6=ilrjlW?-l9+bCd7|i?*b5NTmy<<6NZ0T8$SN@mwdC2f z6jqK=N@bS@!=YSj%>h0}*4p+%0HbTIrE$w7UMT6+AZZ&DAo*qZAAi(OtNbIfl#Dw^ zJWeiCp~zi#&t6x}m9)O^eR4HiLV3QA<<0>HZ8%$^lrSE94Wb}=+MM^!b>n#5&-JQR zkr-CEu9C;_F*7DqDisulV6Pmg$nFL0TPn%~*m^-`Z3^BgU(sNpnx%nW(!eV9A&FvI zHL3X3lw8Wji^6=8KbQDE-e%b?svdFxxdh$8r97@7$ojeI`6AL8Ob6QC$qh&>ZWVDX1F{0vJnT%%mE;GveKWR%C} zM&4d;Jf3s9|HAA)yVUPo`Aq;0do#)uHSXi5*QF*)x@MVVHr+cN)uMZ__F|&Ta#p8d z53TOKtce!PJUuie8UWol-S(`c2nH?UGqJP{!4RR4u$LCfn)q-hj0^f=h(VYy)T6eN zhRO!ja-aDBTcgeyP(8Ua4IdiOog^*CQa?R(cP#9AgL9`j>EX-6Yf1lzX(!~``M1XC zNmM<4<6d~wWZ$Xrk0K}UteTrq@LBBk#MsjkK;pbuVhe)NI7(7Pf(l?lxC7=1Z7Pzl zMbS;nV4NI5_N{1$P)&XC)huOGQ+h^zpYUZfb*1n6>!`#*b3y52LGmi+<4sY5jyD#- zw&$d}DTguLAfnRtjrM*JfqtHqUu6rQoU=g%1E9xk%;)TDm^2<8n-0IhTsQFaek)MY}>PK4;nBk=ow4pF>vzkO& gna%Org-kgQCf=+BeMi^RbuY;YE~rTjend;_cdi8t>i_@% literal 0 HcmV?d00001 diff --git a/Tests/Manual/CPDocumentControllerTest/withoutNib/index-debug.html b/Tests/Manual/CPDocumentControllerTest/withoutNib/index-debug.html new file mode 100644 index 000000000..8435cee74 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withoutNib/index-debug.html @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + CappDoc + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPDocumentControllerTest/withoutNib/index.html b/Tests/Manual/CPDocumentControllerTest/withoutNib/index.html new file mode 100644 index 000000000..b03674ecf --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withoutNib/index.html @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + CappDoc + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPDocumentControllerTest/withoutNib/main.j b/Tests/Manual/CPDocumentControllerTest/withoutNib/main.j new file mode 100644 index 000000000..5cbdc7c55 --- /dev/null +++ b/Tests/Manual/CPDocumentControllerTest/withoutNib/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CappDoc + * + * Created by You on May 24, 2012. + * Copyright 2012, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From 310422adb19d63913021e9c65cbd9e9642a38903 Mon Sep 17 00:00:00 2001 From: ggsato Date: Fri, 25 May 2012 17:09:31 +0900 Subject: [PATCH 033/112] Added another way to subclass CPDocumentController --- .../CPDocumentControllerTest/AppController.j | 38 - .../CPDocumentControllerTest/Document.j | 12 - .../DocumentController.j | 15 - .../CPDocumentControllerTest/Info.plist | 23 - .../Manual/CPDocumentControllerTest/Jakefile | 94 - .../Resources/Document.cib | 1 - .../Resources/Document.xib | 213 -- .../Resources/MainMenu.cib | 1 - .../Resources/MainMenu.xib | 2822 ----------------- .../Resources/spinner.gif | Bin 1849 -> 0 bytes .../CPDocumentControllerTest/index-debug.html | 107 - .../CPDocumentControllerTest/index.html | 77 - Tests/Manual/CPDocumentControllerTest/main.j | 18 - 13 files changed, 3421 deletions(-) delete mode 100644 Tests/Manual/CPDocumentControllerTest/AppController.j delete mode 100644 Tests/Manual/CPDocumentControllerTest/Document.j delete mode 100644 Tests/Manual/CPDocumentControllerTest/DocumentController.j delete mode 100644 Tests/Manual/CPDocumentControllerTest/Info.plist delete mode 100644 Tests/Manual/CPDocumentControllerTest/Jakefile delete mode 100644 Tests/Manual/CPDocumentControllerTest/Resources/Document.cib delete mode 100644 Tests/Manual/CPDocumentControllerTest/Resources/Document.xib delete mode 100644 Tests/Manual/CPDocumentControllerTest/Resources/MainMenu.cib delete mode 100644 Tests/Manual/CPDocumentControllerTest/Resources/MainMenu.xib delete mode 100644 Tests/Manual/CPDocumentControllerTest/Resources/spinner.gif delete mode 100644 Tests/Manual/CPDocumentControllerTest/index-debug.html delete mode 100644 Tests/Manual/CPDocumentControllerTest/index.html delete mode 100644 Tests/Manual/CPDocumentControllerTest/main.j diff --git a/Tests/Manual/CPDocumentControllerTest/AppController.j b/Tests/Manual/CPDocumentControllerTest/AppController.j deleted file mode 100644 index c66a0b5ba..000000000 --- a/Tests/Manual/CPDocumentControllerTest/AppController.j +++ /dev/null @@ -1,38 +0,0 @@ -/* - * AppController.j - * CappDoc - * - * Created by You on May 24, 2012. - * Copyright 2012, Your Company All rights reserved. - */ - -@import -@import "Document.j" -@import "DocumentController.j" - -@implementation AppController : CPObject -{ - CPDocumentController subclassedCPDocumentController; -} - -- (void)applicationDidFinishLaunching:(CPNotification)aNotification -{ - // This is called when the application is done loading. - var cpAlert = [CPAlert alertWithMessageText:@"Is this the shared instance? " + ([CPDocumentController sharedDocumentController] == subclassedCPDocumentController) defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:nil]; - [cpAlert beginSheetModalForWindow:[[CPApplication sharedApplication] mainWindow]]; -} - -- (void)applicationWillFinishLaunching:(CPNotification)aNotification -{ - // instantiate a subclass of DocumentController - subclassedCPDocumentController = [[DocumentController alloc] init]; -} - -- (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. -} - -@end diff --git a/Tests/Manual/CPDocumentControllerTest/Document.j b/Tests/Manual/CPDocumentControllerTest/Document.j deleted file mode 100644 index e6a1c7ef4..000000000 --- a/Tests/Manual/CPDocumentControllerTest/Document.j +++ /dev/null @@ -1,12 +0,0 @@ -@import - -@implementation Document : CPDocument -{ -} - -- (CPString)windowCibName -{ - return @"Document"; -} - -@end diff --git a/Tests/Manual/CPDocumentControllerTest/DocumentController.j b/Tests/Manual/CPDocumentControllerTest/DocumentController.j deleted file mode 100644 index 0066d795b..000000000 --- a/Tests/Manual/CPDocumentControllerTest/DocumentController.j +++ /dev/null @@ -1,15 +0,0 @@ -@import -@import - -@implementation DocumentController : CPDocumentController -{ -} - -- (id)init -{ - self = [super init]; - - return self; -} - -@end diff --git a/Tests/Manual/CPDocumentControllerTest/Info.plist b/Tests/Manual/CPDocumentControllerTest/Info.plist deleted file mode 100644 index b41dbc7a3..000000000 --- a/Tests/Manual/CPDocumentControllerTest/Info.plist +++ /dev/null @@ -1,23 +0,0 @@ - - - - - Main cib file base name - MainMenu.cib - CPBundleName - CappDoc - CPBundleDocumentTypes - - - CPDocumentClass - Document - CPBundleTypeName - CappDoc - CFBundleTypeExtentions - - cappdoc - - - - - diff --git a/Tests/Manual/CPDocumentControllerTest/Jakefile b/Tests/Manual/CPDocumentControllerTest/Jakefile deleted file mode 100644 index c963d80b8..000000000 --- a/Tests/Manual/CPDocumentControllerTest/Jakefile +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Jakefile - * CappDoc - * - * Created by You on May 24, 2012. - * Copyright 2012, Your Company All rights reserved. - */ - -var ENV = require("system").env, - FILE = require("file"), - JAKE = require("jake"), - task = JAKE.task, - FileList = JAKE.FileList, - app = require("cappuccino/jake").app, - configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", - OS = require("os"); - -app ("CappDoc", function(task) -{ - task.setBuildIntermediatesPath(FILE.join("Build", "CappDoc.build", configuration)); - task.setBuildPath(FILE.join("Build", configuration)); - - task.setProductName("CappDoc"); - task.setIdentifier("com.yourcompany.CappDoc"); - task.setVersion("1.0"); - task.setAuthor("Your Company"); - task.setEmail("feedback @nospam@ yourcompany.com"); - task.setSummary("CappDoc"); - task.setSources((new FileList("**/*.j")).exclude(FILE.join("Build", "**"))); - task.setResources(new FileList("Resources/**")); - task.setIndexFilePath("index.html"); - task.setInfoPlistPath("Info.plist"); - task.setNib2CibFlags("-R Resources/"); - - if (configuration === "Debug") - task.setCompilerFlags("-DDEBUG -g"); - else - task.setCompilerFlags("-O"); -}); - -task ("default", ["CappDoc"], function() -{ - printResults(configuration); -}); - -task ("build", ["default"]); - -task ("debug", function() -{ - ENV["CONFIGURATION"] = "Debug"; - JAKE.subjake(["."], "build", ENV); -}); - -task ("release", function() -{ - ENV["CONFIGURATION"] = "Release"; - JAKE.subjake(["."], "build", ENV); -}); - -task ("run", ["debug"], function() -{ - OS.system(["open", FILE.join("Build", "Debug", "CappDoc", "index.html")]); -}); - -task ("run-release", ["release"], function() -{ - OS.system(["open", FILE.join("Build", "Release", "CappDoc", "index.html")]); -}); - -task ("deploy", ["release"], function() -{ - FILE.mkdirs(FILE.join("Build", "Deployment", "CappDoc")); - OS.system(["press", "-f", FILE.join("Build", "Release", "CappDoc"), FILE.join("Build", "Deployment", "CappDoc")]); - printResults("Deployment") -}); - -task ("desktop", ["release"], function() -{ - FILE.mkdirs(FILE.join("Build", "Desktop", "CappDoc")); - require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "CappDoc"), FILE.join("Build", "Desktop", "CappDoc", "CappDoc.app")); - printResults("Desktop") -}); - -task ("run-desktop", ["desktop"], function() -{ - OS.system([FILE.join("Build", "Desktop", "CappDoc", "CappDoc.app", "Contents", "MacOS", "NativeHost"), "-i"]); -}); - -function printResults(configuration) -{ - print("----------------------------"); - print(configuration+" app built at path: "+FILE.join("Build", configuration, "CappDoc")); - print("----------------------------"); -} diff --git a/Tests/Manual/CPDocumentControllerTest/Resources/Document.cib b/Tests/Manual/CPDocumentControllerTest/Resources/Document.cib deleted file mode 100644 index b677cb212..000000000 --- a/Tests/Manual/CPDocumentControllerTest/Resources/Document.cib +++ /dev/null @@ -1 +0,0 @@ -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;18E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;23E;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;18E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;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;24E;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;25E;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;26E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;18E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;27E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;30;_CPCibWindowTemplateMinSizeKeyD;K;6;CP$UIDd;2;28E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;29E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;2;30E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;31E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;32E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;33E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;34E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;20E;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;19E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;35E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;36E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;36E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;37E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;38E;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;21E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;20E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;35E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;39E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;40E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;20E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;41E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;42E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;38E;K;6;$afontD;K;6;CP$UIDd;2;44E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;45E;K;11;$aalignmentD;K;6;CP$UIDd;2;46E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;47E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;48E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;49E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;50E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;50E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;50E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;45E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;46E;K;31;CPTextFieldPlaceholderStringKeyD;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;51E;E;S;8;DocumentD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;windowS;8;delegateS;9;{94, 108}S;32;{10000000000000, 10000000000000}S;4;ViewS;8;CPWindowS;23;{{29, 106}, {507, 413}}d;2;15S;6;Windowd;1;0S;20;{{0, 0}, {507, 413}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;22E;E;E;S;6;normalS;23;{{201, 198}, {104, 17}}S;19;{{0, 0}, {104, 17}}d;2;45S;9;textfieldD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;13;CPFontNameKeyD;K;6;CP$UIDd;2;52E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;53E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;50E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;50E;E;d;1;2d;1;4T;S;13;Contents Hered;4;3072F;S;13;CPApplicationS;17;Arial, sans-serifd;2;12E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPDocumentControllerTest/Resources/Document.xib b/Tests/Manual/CPDocumentControllerTest/Resources/Document.xib deleted file mode 100644 index 25aba9b83..000000000 --- a/Tests/Manual/CPDocumentControllerTest/Resources/Document.xib +++ /dev/null @@ -1,213 +0,0 @@ - - - - 1070 - 11E53 - 2182 - 1138.47 - 569.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2182 - - - NSTextField - NSTextFieldCell - NSWindowTemplate - NSView - NSCustomObject - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - Document - - - FirstResponder - - - 15 - 2 - {{29, 539}, {507, 413}} - 1886912512 - Window - NSWindow - View - - {94, 86} - - - 256 - - - - 301 - {{201, 198}, {104, 17}} - - - _NS:1505 - YES - - 68288064 - 272630784 - Contents Here - - LucidaGrande - 13 - 1044 - - _NS:1505 - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - - - {507, 413} - - - - - {{0, 0}, {1920, 1058}} - {94, 108} - {10000000000000, 10000000000000} - YES - - - NSApplication - - - - - - - window - - - - 18 - - - - delegate - - - - 17 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - 5 - - - - - - Window - - - 6 - - - - - - - - -3 - - - Application - - - 100098 - - - - - - - - 100099 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{133, 170}, {507, 413}} - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 100100 - - - - - Document - NSDocument - - IBProjectSource - ./Classes/Document.h - - - - - 0 - IBCocoaFramework - YES - 3 - - diff --git a/Tests/Manual/CPDocumentControllerTest/Resources/MainMenu.cib b/Tests/Manual/CPDocumentControllerTest/Resources/MainMenu.cib deleted file mode 100644 index e3a1f4978..000000000 --- a/Tests/Manual/CPDocumentControllerTest/Resources/MainMenu.cib +++ /dev/null @@ -1 +0,0 @@ -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;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;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;78E;D;K;6;CP$UIDd;2;80E;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;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;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;80E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;80E;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;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;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;123E;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;124E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;106E;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;2;80E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;2;80E;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;2;80E;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;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;158E;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;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;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;203E;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;204E;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;202E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;205E;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;16E;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;206E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;207E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;90E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;208E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;209E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;211E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;214E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;215E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;216E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;217E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;218E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;219E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;93E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;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;101E;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;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;92E;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;16E;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;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;225E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;226E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;227E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;228E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;229E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;230E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;16E;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;232E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;233E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;234E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;235E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;237E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;238E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;239E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;240E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;241E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;243E;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;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;244E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;246E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;248E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;249E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;250E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;251E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;188E;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;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;190E;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;16E;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;254E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;182E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;255E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;183E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;185E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;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;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;259E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;177E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;260E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;261E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;262E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;263E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;173E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;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;266E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;203E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;267E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;268E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;269E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;83E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;270E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;273E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;83E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;278E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;83E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;279E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;83E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;280E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;83E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;281E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;282E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;89E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;282E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;283E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;284E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;285E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;286E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;287E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;288E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;289E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;290E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;291E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;292E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;293E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;99E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;293E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;294E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;295E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;296E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;287E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;298E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;103E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;298E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;299E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;300E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;301E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;302E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;106E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;302E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;304E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;305E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;306E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;308E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;310E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;312E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;314E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;316E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;318E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;117E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;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;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;321E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;322E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;324E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;325E;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;326E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;327E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;329E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;330E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;332E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;117E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;333E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;124E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;334E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;337E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;338E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;339E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;340E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;341E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;130E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;342E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;343E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;344E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;345E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;134E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;346E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;347E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;332E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;333E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;349E;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;329E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;330E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;321E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;322E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;139E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;351E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;352E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;353E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;354E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;356E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;358E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;360E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;361E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;362E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;146E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;363E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;364E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;365E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;146E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;368E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;370E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;139E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;154E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;372E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;373E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;375E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;158E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;377E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;378E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;160E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;379E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;380E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;381E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;375E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;329E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;384E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;332E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;386E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;388E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;321E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;390E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;392E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;393E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;170E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;394E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;395E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;176E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;400E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;401E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;181E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;403E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;404E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;406E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;408E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;410E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;411E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;314E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;160E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;312E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;413E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;193E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;413E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;414E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;416E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;418E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;420E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;421E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;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;277E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;314E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;424E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;312E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;424E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;426E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;8;delegateS;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;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;3;102E;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;87E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;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;90E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;93E;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;104E;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;109E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;129E;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;122E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;119E;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;127E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;128E;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;132E;D;K;6;CP$UIDd;3;131E;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;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;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;144E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;142E;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;147E;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;155E;D;K;6;CP$UIDd;3;156E;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;159E;D;K;6;CP$UIDd;3;192E;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;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;175E;D;K;6;CP$UIDd;3;180E;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;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;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;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;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;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;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;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;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;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;13;AppControllerE;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPDocumentControllerTest/Resources/MainMenu.xib b/Tests/Manual/CPDocumentControllerTest/Resources/MainMenu.xib deleted file mode 100644 index af3f6c31e..000000000 --- a/Tests/Manual/CPDocumentControllerTest/Resources/MainMenu.xib +++ /dev/null @@ -1,2822 +0,0 @@ - - - - 1050 - 11E53 - 2182 - 1138.47 - 569.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2182 - - - YES - NSMenu - NSMenuItem - NSCustomObject - - - YES - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - YES - - NSApplication - - - FirstResponder - - - NSApplication - - - AMainMenu - - YES - - - NewApplication - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - NewApplication - - YES - - - About NewApplication - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Preferences… - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Services - - 1048576 - 2147483647 - - - submenuAction: - - Services - - YES - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Hide NewApplication - h - 1048576 - 2147483647 - - - - - - Hide Others - h - 1572864 - 2147483647 - - - - - - Show All - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Quit NewApplication - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - File - - 1048576 - 2147483647 - - - submenuAction: - - File - - YES - - - New - n - 1048576 - 2147483647 - - - - - - Open… - o - 1048576 - 2147483647 - - - - - - Open Recent - - 1048576 - 2147483647 - - - submenuAction: - - Open Recent - - YES - - - Clear Menu - - 1048576 - 2147483647 - - - - - _NSRecentDocumentsMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Close - w - 1048576 - 2147483647 - - - - - - Save - s - 1048576 - 2147483647 - - - - - - Save As… - S - 1179648 - 2147483647 - - - - - - Revert to Saved - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Page Setup... - P - 1179648 - 2147483647 - - - - - - - Print… - p - 1048576 - 2147483647 - - - - - - - - - Edit - - 1048576 - 2147483647 - - - submenuAction: - - Edit - - YES - - - Undo - z - 1048576 - 2147483647 - - - - - - Redo - Z - 1179648 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Cut - x - 1048576 - 2147483647 - - - - - - Copy - c - 1048576 - 2147483647 - - - - - - Paste - v - 1048576 - 2147483647 - - - - - - Delete - - 1048576 - 2147483647 - - - - - - Select All - a - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Find - - 1048576 - 2147483647 - - - submenuAction: - - Find - - YES - - - Find… - f - 1048576 - 2147483647 - - - 1 - - - - Find Next - g - 1048576 - 2147483647 - - - 2 - - - - Find Previous - G - 1179648 - 2147483647 - - - 3 - - - - Use Selection for Find - e - 1048576 - 2147483647 - - - 7 - - - - Jump to Selection - j - 1048576 - 2147483647 - - - - - - - - - Spelling and Grammar - - 1048576 - 2147483647 - - - submenuAction: - - Spelling and Grammar - - YES - - - Show Spelling… - : - 1048576 - 2147483647 - - - - - - Check Spelling - ; - 1048576 - 2147483647 - - - - - - Check Spelling While Typing - - 1048576 - 2147483647 - - - - - - Check Grammar With Spelling - - 1048576 - 2147483647 - - - - - - - - - Substitutions - - 1048576 - 2147483647 - - - submenuAction: - - Substitutions - - YES - - - Smart Copy/Paste - f - 1048576 - 2147483647 - - - 1 - - - - Smart Quotes - g - 1048576 - 2147483647 - - - 2 - - - - Smart Links - G - 1179648 - 2147483647 - - - 3 - - - - - - - Speech - - 1048576 - 2147483647 - - - submenuAction: - - Speech - - YES - - - Start Speaking - - 1048576 - 2147483647 - - - - - - Stop Speaking - - 1048576 - 2147483647 - - - - - - - - - - - - Format - - 2147483647 - - - submenuAction: - - Format - - YES - - - Font - - 2147483647 - - - submenuAction: - - Font - - YES - - - Show Fonts - t - 1048576 - 2147483647 - - - - - - Bold - b - 1048576 - 2147483647 - - - 2 - - - - Italic - i - 1048576 - 2147483647 - - - 1 - - - - Underline - u - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Bigger - + - 1048576 - 2147483647 - - - 3 - - - - Smaller - - - 1048576 - 2147483647 - - - 4 - - - - YES - YES - - - 2147483647 - - - - - - Kern - - 2147483647 - - - submenuAction: - - Kern - - YES - - - Use Default - - 2147483647 - - - - - - Use None - - 2147483647 - - - - - - Tighten - - 2147483647 - - - - - - Loosen - - 2147483647 - - - - - - - - - Ligature - - 2147483647 - - - submenuAction: - - Ligature - - YES - - - Use Default - - 2147483647 - - - - - - Use None - - 2147483647 - - - - - - Use All - - 2147483647 - - - - - - - - - Baseline - - 2147483647 - - - submenuAction: - - Baseline - - YES - - - Use Default - - 2147483647 - - - - - - Superscript - - 2147483647 - - - - - - Subscript - - 2147483647 - - - - - - Raise - - 2147483647 - - - - - - Lower - - 2147483647 - - - - - - - - - YES - YES - - - 2147483647 - - - - - - Show Colors - C - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Copy Style - c - 1572864 - 2147483647 - - - - - - Paste Style - v - 1572864 - 2147483647 - - - - - _NSFontMenu - - - - - Text - - 2147483647 - - - submenuAction: - - Text - - YES - - - Align Left - { - 1048576 - 2147483647 - - - - - - Center - | - 1048576 - 2147483647 - - - - - - Justify - - 2147483647 - - - - - - Align Right - } - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Show Ruler - - 2147483647 - - - - - - Copy Ruler - c - 1310720 - 2147483647 - - - - - - Paste Ruler - v - 1310720 - 2147483647 - - - - - - - - - - - - View - - 1048576 - 2147483647 - - - submenuAction: - - View - - YES - - - Show Toolbar - t - 1572864 - 2147483647 - - - - - - Customize Toolbar… - - 1048576 - 2147483647 - - - - - - - - - Window - - 1048576 - 2147483647 - - - submenuAction: - - Window - - YES - - - Minimize - m - 1048576 - 2147483647 - - - - - - Zoom - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Bring All to Front - - 1048576 - 2147483647 - - - - - _NSWindowsMenu - - - - - Help - - 1048576 - 2147483647 - - - submenuAction: - - Help - - YES - - - NewApplication Help - ? - 1048576 - 2147483647 - - - - - - - - _NSMainMenu - - - AppController - - - - - YES - - - terminate: - - - - 449 - - - - orderFrontStandardAboutPanel: - - - - 142 - - - - delegate - - - - 451 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - print: - - - - 86 - - - - runPageLayout: - - - - 87 - - - - clearRecentDocuments: - - - - 127 - - - - performClose: - - - - 193 - - - - toggleContinuousSpellChecking: - - - - 222 - - - - undo: - - - - 223 - - - - copy: - - - - 224 - - - - checkSpelling: - - - - 225 - - - - paste: - - - - 226 - - - - stopSpeaking: - - - - 227 - - - - cut: - - - - 228 - - - - showGuessPanel: - - - - 230 - - - - redo: - - - - 231 - - - - selectAll: - - - - 232 - - - - startSpeaking: - - - - 233 - - - - delete: - - - - 235 - - - - performZoom: - - - - 240 - - - - performFindPanelAction: - - - - 241 - - - - centerSelectionInVisibleArea: - - - - 245 - - - - toggleGrammarChecking: - - - - 347 - - - - toggleSmartInsertDelete: - - - - 355 - - - - toggleAutomaticQuoteSubstitution: - - - - 356 - - - - toggleAutomaticLinkDetection: - - - - 357 - - - - showHelp: - - - - 360 - - - - saveDocument: - - - - 362 - - - - saveDocumentAs: - - - - 363 - - - - revertDocumentToSaved: - - - - 364 - - - - runToolbarCustomizationPalette: - - - - 365 - - - - toggleToolbarShown: - - - - 366 - - - - hide: - - - - 367 - - - - hideOtherApplications: - - - - 368 - - - - unhideAllApplications: - - - - 370 - - - - newDocument: - - - - 373 - - - - openDocument: - - - - 374 - - - - raiseBaseline: - - - - 426 - - - - lowerBaseline: - - - - 427 - - - - copyFont: - - - - 428 - - - - subscript: - - - - 429 - - - - superscript: - - - - 430 - - - - tightenKerning: - - - - 431 - - - - underline: - - - - 432 - - - - orderFrontColorPanel: - - - - 433 - - - - useAllLigatures: - - - - 434 - - - - loosenKerning: - - - - 435 - - - - pasteFont: - - - - 436 - - - - unscript: - - - - 437 - - - - useStandardKerning: - - - - 438 - - - - useStandardLigatures: - - - - 439 - - - - turnOffLigatures: - - - - 440 - - - - turnOffKerning: - - - - 441 - - - - alignLeft: - - - - 442 - - - - alignJustified: - - - - 443 - - - - copyRuler: - - - - 444 - - - - alignCenter: - - - - 445 - - - - toggleRuler: - - - - 446 - - - - alignRight: - - - - 447 - - - - pasteRuler: - - - - 448 - - - - - YES - - 0 - - YES - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 29 - - - YES - - - - - - - - - - MainMenu - - - 19 - - - YES - - - - - - 56 - - - YES - - - - - - 103 - - - YES - - - - 1 - - - 217 - - - YES - - - - - - 83 - - - YES - - - - - - 81 - - - YES - - - - - - - - - - - - - - - - 75 - - - 3 - - - 80 - - - 8 - - - 78 - - - 6 - - - 72 - - - - - 82 - - - 9 - - - 124 - - - YES - - - - - - 77 - - - 5 - - - 73 - - - 1 - - - 79 - - - 7 - - - 112 - - - 10 - - - 74 - - - 2 - - - 125 - - - YES - - - - - - 126 - - - - - 205 - - - YES - - - - - - - - - - - - - - - - - - 202 - - - - - 198 - - - - - 207 - - - - - 214 - - - - - 199 - - - - - 203 - - - - - 197 - - - - - 206 - - - - - 215 - - - - - 218 - - - YES - - - - - - 216 - - - YES - - - - - - 200 - - - YES - - - - - - - - - 219 - - - - - 201 - - - - - 204 - - - - - 220 - - - YES - - - - - - - - - - 213 - - - - - 210 - - - - - 221 - - - - - 208 - - - - - 209 - - - - - 106 - - - YES - - - - 2 - - - 111 - - - - - 57 - - - YES - - - - - - - - - - - - - - - - 58 - - - - - 134 - - - - - 150 - - - - - 136 - - - 1111 - - - 144 - - - - - 129 - - - 121 - - - 143 - - - - - 236 - - - - - 131 - - - YES - - - - - - 149 - - - - - 145 - - - - - 130 - - - - - 24 - - - YES - - - - - - - - - 92 - - - - - 5 - - - - - 239 - - - - - 23 - - - - - 295 - - - YES - - - - - - 296 - - - YES - - - - - - - 297 - - - - - 298 - - - - - 211 - - - YES - - - - - - 212 - - - YES - - - - - - - 195 - - - - - 196 - - - - - 346 - - - - - 348 - - - YES - - - - - - 349 - - - YES - - - - - - - - 350 - - - - - 351 - - - - - 354 - - - - - 375 - - - YES - - - - - - 376 - - - YES - - - - - - - 377 - - - YES - - - - - - 378 - - - YES - - - - - - 379 - - - YES - - - - - - - - - - - - - 380 - - - - - 381 - - - - - 382 - - - - - 383 - - - - - 384 - - - - - 385 - - - - - 386 - - - - - 387 - - - - - 388 - - - YES - - - - - - - - - - - - - - - - - - - - - 389 - - - - - 390 - - - - - 391 - - - - - 392 - - - - - 393 - - - - - 394 - - - - - 395 - - - - - 396 - - - - - 397 - - - YES - - - - - - 398 - - - YES - - - - - - 399 - - - YES - - - - - - 400 - - - - - 401 - - - - - 402 - - - - - 403 - - - - - 404 - - - - - 405 - - - YES - - - - - - - - - - 406 - - - - - 407 - - - - - 408 - - - - - 409 - - - - - 410 - - - - - 411 - - - YES - - - - - - - - 412 - - - - - 413 - - - - - 414 - - - - - 415 - - - YES - - - - - - - - - 416 - - - - - 417 - - - - - 418 - - - - - 419 - - - - - 450 - - - - - - - YES - - YES - -1.IBPluginDependency - -2.IBPluginDependency - -3.IBPluginDependency - 103.IBPluginDependency - 106.IBPluginDependency - 111.IBPluginDependency - 112.IBPluginDependency - 124.IBPluginDependency - 125.IBPluginDependency - 126.IBPluginDependency - 129.IBPluginDependency - 130.IBPluginDependency - 131.IBPluginDependency - 134.IBPluginDependency - 136.IBPluginDependency - 143.IBPluginDependency - 144.IBPluginDependency - 145.IBPluginDependency - 149.IBPluginDependency - 150.IBPluginDependency - 19.IBPluginDependency - 195.IBPluginDependency - 196.IBPluginDependency - 197.IBPluginDependency - 198.IBPluginDependency - 199.IBPluginDependency - 200.IBPluginDependency - 201.IBPluginDependency - 202.IBPluginDependency - 203.IBPluginDependency - 204.IBPluginDependency - 205.IBPluginDependency - 206.IBPluginDependency - 207.IBPluginDependency - 208.IBPluginDependency - 209.IBPluginDependency - 210.IBPluginDependency - 211.IBPluginDependency - 212.IBPluginDependency - 213.IBPluginDependency - 214.IBPluginDependency - 215.IBPluginDependency - 216.IBPluginDependency - 217.IBPluginDependency - 218.IBPluginDependency - 219.IBPluginDependency - 220.IBPluginDependency - 221.IBPluginDependency - 23.IBPluginDependency - 236.IBPluginDependency - 239.IBPluginDependency - 24.IBPluginDependency - 29.IBPluginDependency - 295.IBPluginDependency - 296.IBPluginDependency - 297.IBPluginDependency - 298.IBPluginDependency - 346.IBPluginDependency - 348.IBPluginDependency - 349.IBPluginDependency - 350.IBPluginDependency - 351.IBPluginDependency - 354.IBPluginDependency - 375.IBPluginDependency - 376.IBPluginDependency - 377.IBPluginDependency - 378.IBPluginDependency - 379.IBPluginDependency - 380.IBPluginDependency - 381.IBPluginDependency - 382.IBPluginDependency - 383.IBPluginDependency - 384.IBPluginDependency - 385.IBPluginDependency - 386.IBPluginDependency - 387.IBPluginDependency - 388.IBPluginDependency - 389.IBPluginDependency - 390.IBPluginDependency - 391.IBPluginDependency - 392.IBPluginDependency - 393.IBPluginDependency - 394.IBPluginDependency - 395.IBPluginDependency - 396.IBPluginDependency - 397.IBPluginDependency - 398.IBPluginDependency - 399.IBPluginDependency - 400.IBPluginDependency - 401.IBPluginDependency - 402.IBPluginDependency - 403.IBPluginDependency - 404.IBPluginDependency - 405.IBPluginDependency - 406.IBPluginDependency - 407.IBPluginDependency - 408.IBPluginDependency - 409.IBPluginDependency - 410.IBPluginDependency - 411.IBPluginDependency - 412.IBPluginDependency - 413.IBPluginDependency - 414.IBPluginDependency - 415.IBPluginDependency - 416.IBPluginDependency - 417.IBPluginDependency - 418.IBPluginDependency - 419.IBPluginDependency - 450.IBPluginDependency - 5.IBPluginDependency - 56.IBPluginDependency - 57.IBPluginDependency - 58.IBPluginDependency - 72.IBPluginDependency - 73.IBPluginDependency - 74.IBPluginDependency - 75.IBPluginDependency - 77.IBPluginDependency - 78.IBPluginDependency - 79.IBPluginDependency - 80.IBPluginDependency - 81.IBPluginDependency - 82.IBPluginDependency - 83.IBPluginDependency - 92.IBPluginDependency - - - YES - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - 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 - - - - - - YES - - - - - 459 - - - - YES - - AppController - - theWindow - NSWindow - - - theWindow - - theWindow - NSWindow - - - - IBProjectSource - ./Classes/AppController.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 - - - YES - 3 - - YES - - YES - NSMenuCheckmark - NSMenuMixedState - - - YES - {11, 11} - {10, 3} - - - - diff --git a/Tests/Manual/CPDocumentControllerTest/Resources/spinner.gif b/Tests/Manual/CPDocumentControllerTest/Resources/spinner.gif deleted file mode 100644 index 06dbc2bc21dddcf0e09b566d5b211aee89570f52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1849 zcma*odr(tX9tZHtz31lM+(&Y`A`Ou`NeG&R#DrIfV%?hng21vs6v>ooRQQFbk7E_K!V( z{?5!fpZWgIZ%*d6t%i*j24bL}AZUJm9)h6R*;%L4IWse3G#VWaN1#$zSSXcBhlYlH zJ|D}n{r&w2f+Qp)SS*&n?*G4}{}!h?td_mjU6Kad-rW*QwWYCUk7d^e+sjpZAn6kT z5rM;`{~_}-wm+L@%+E;JphLm}C3WzQAQD0wBoY|rOTQX{(@pp-WAA8Iw0HKl|15j) zhGh(SFWu#5zUCw^T!}C~eC}~?{xG-r7ugQC>taC+|L^xr&a%{#cgUOZXIM&v?)k^2 z1i5%0!U00wq)r4vlAwXBA_m5J5WNeuBm-XJQ5pG4GD%vc|K){+TJ{AkHqN@SJKczX zU}QRd9n*_bf^h94)6Ctv{CUfz_;qs#RDuQ$DR%y1&5G-a6rhf*4Y zl+UOD1*GE{GQ7vv;c-tTIMkz0ovO>9j%b5hpa@a*CBJ#W!0@ndSwF|%hMkdFtXiU) z`BEp+yhkt8ZY>tg&uyH@%^%K4jDrbA;et&vnnzZ3z22@e6<27z2Vk13kb7OtISyxv z(XoO-LNQCZe3lfzc%*pNqU<9T+p~teThOEB+~e&U0mC|zS{Q)dJZ)!^1f7L(zg*L> z*vSW%?dR~@@0(}x6-V^A`~ImD;)NaBUnP8;RH=bS2@pk`wp>>8r&jGjmGPy%1BW}v zoPo}ca$~bze@efc3kapuEVW1!%teOZT3j2Tw5=hjiAf02d}7dL0oFC%@=RXp5Ow#% z@a>+AM|YWt$n&e`>sB-32gBcuTi>R>*|8@lp`y6thc7ydyqDsuUn~YzZf|{-R@-3y zL#wx{Ii}xxL_csiW*LBn0-A$>zp4WOmkf6=ilrjlW?-l9+bCd7|i?*b5NTmy<<6NZ0T8$SN@mwdC2f z6jqK=N@bS@!=YSj%>h0}*4p+%0HbTIrE$w7UMT6+AZZ&DAo*qZAAi(OtNbIfl#Dw^ zJWeiCp~zi#&t6x}m9)O^eR4HiLV3QA<<0>HZ8%$^lrSE94Wb}=+MM^!b>n#5&-JQR zkr-CEu9C;_F*7DqDisulV6Pmg$nFL0TPn%~*m^-`Z3^BgU(sNpnx%nW(!eV9A&FvI zHL3X3lw8Wji^6=8KbQDE-e%b?svdFxxdh$8r97@7$ojeI`6AL8Ob6QC$qh&>ZWVDX1F{0vJnT%%mE;GveKWR%C} zM&4d;Jf3s9|HAA)yVUPo`Aq;0do#)uHSXi5*QF*)x@MVVHr+cN)uMZ__F|&Ta#p8d z53TOKtce!PJUuie8UWol-S(`c2nH?UGqJP{!4RR4u$LCfn)q-hj0^f=h(VYy)T6eN zhRO!ja-aDBTcgeyP(8Ua4IdiOog^*CQa?R(cP#9AgL9`j>EX-6Yf1lzX(!~``M1XC zNmM<4<6d~wWZ$Xrk0K}UteTrq@LBBk#MsjkK;pbuVhe)NI7(7Pf(l?lxC7=1Z7Pzl zMbS;nV4NI5_N{1$P)&XC)huOGQ+h^zpYUZfb*1n6>!`#*b3y52LGmi+<4sY5jyD#- zw&$d}DTguLAfnRtjrM*JfqtHqUu6rQoU=g%1E9xk%;)TDm^2<8n-0IhTsQFaek)MY}>PK4;nBk=ow4pF>vzkO& gna%Org-kgQCf=+BeMi^RbuY;YE~rTjend;_cdi8t>i_@% diff --git a/Tests/Manual/CPDocumentControllerTest/index-debug.html b/Tests/Manual/CPDocumentControllerTest/index-debug.html deleted file mode 100644 index 8435cee74..000000000 --- a/Tests/Manual/CPDocumentControllerTest/index-debug.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - - - - - - CappDoc - - - - - - - - - - - - - - -
-
- - - -
-
- - - diff --git a/Tests/Manual/CPDocumentControllerTest/index.html b/Tests/Manual/CPDocumentControllerTest/index.html deleted file mode 100644 index b03674ecf..000000000 --- a/Tests/Manual/CPDocumentControllerTest/index.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - CappDoc - - - - - - - - - - - - -
-
- - - -
-
- - - diff --git a/Tests/Manual/CPDocumentControllerTest/main.j b/Tests/Manual/CPDocumentControllerTest/main.j deleted file mode 100644 index 5cbdc7c55..000000000 --- a/Tests/Manual/CPDocumentControllerTest/main.j +++ /dev/null @@ -1,18 +0,0 @@ -/* - * AppController.j - * CappDoc - * - * Created by You on May 24, 2012. - * Copyright 2012, Your Company All rights reserved. - */ - -@import -@import - -@import "AppController.j" - - -function main(args, namedArgs) -{ - CPApplicationMain(args, namedArgs); -} From 8e785c22108ebdca90cc380fbe010f564da5eedc Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Fri, 25 May 2012 10:47:07 +0200 Subject: [PATCH 034/112] Removed set and get methods and blank line before if added. --- AppKit/CPTableView.j | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index d33f62dc1..39bd69836 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -794,26 +794,6 @@ NOT YET IMPLEMENTED return [self currentValueForThemeAttribute:@"selection-color"]; } -/*! - Sets the highlight radius for a row or column selection. - - @param aRadius a int -*/ -- (void)setSelectionHighlightRadius:(int)aRadius -{ - [self setValue:aRadius forThemeAttribute:"selection-radius"]; - - [self setNeedsDisplay:YES]; -} - -/*! - Returns the highlight radius for a row or column selection. -*/ -- (int)selectionHighlightRadius -{ - return [self currentValueForThemeAttribute:@"selection-radius"]; -} - /*! Sets the highlight gradient for a row or column selection @@ -3794,7 +3774,8 @@ Your delegate can implement this method to avoid subclassing the tableview to ad } else { - var radius = [self selectionHighlightRadius]; + var radius = [self currentValueForThemeAttribute:@"selection-radius"]; + if (radius > 0) { var minX = CGRectGetMinX(rowRect), From 49adcd85fcf7ee6d7be030b53aefe72ca0ee4f9f Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Fri, 25 May 2012 10:54:10 +0200 Subject: [PATCH 035/112] Removed useless space after capp_lint warning --- AppKit/CPTableView.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 39bd69836..da047e411 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -3782,7 +3782,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad maxX = CGRectGetMaxX(rowRect), minY = CGRectGetMinY(rowRect), maxY = CGRectGetMaxY(rowRect); - + CGContextMoveToPoint(context, minX + radius, minY); CGContextAddArcToPoint(context, maxX, minY, maxX, minY + radius, radius); CGContextAddArcToPoint(context, maxX, maxY, maxX - radius, maxY, radius); From 288ec78c3e7a20f8d2665c3da1788eff3567f87e Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 26 May 2012 00:04:12 +0100 Subject: [PATCH 036/112] Fixed: split view autosave. The fix to prevent incorrect autosaving prevented correct autosaving as well. --- AppKit/CPSplitView.j | 2 +- Tests/AppKit/CPSplitViewTest.j | 42 ++++++++++++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/AppKit/CPSplitView.j b/AppKit/CPSplitView.j index 35058b37a..02b1e06f9 100644 --- a/AppKit/CPSplitView.j +++ b/AppKit/CPSplitView.j @@ -1065,7 +1065,7 @@ The sum of the views and the sum of the dividers should be equal to the size of */ - (void)_autosave { - if (!_shouldAutosave || !autosaveName) + if (!_shouldAutosave || !_autosaveName) return; var userDefaults = [CPUserDefaults standardUserDefaults], diff --git a/Tests/AppKit/CPSplitViewTest.j b/Tests/AppKit/CPSplitViewTest.j index bb05b417e..04a99b9be 100644 --- a/Tests/AppKit/CPSplitViewTest.j +++ b/Tests/AppKit/CPSplitViewTest.j @@ -111,11 +111,27 @@ { // Verify that the split view does not attempt to auto save without an auto save name. + // This storage class will cause a crash if a save is attempted. [[CPUserDefaults standardUserDefaults] setPersistentStoreClass:CPUserDefaultsFailingStore forDomain:CPApplicationDomain reloadData:NO]; - [splitView setPosition:50 ofDividerAtIndex:0]; - [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + + // Now test that it does work normally. + [[CPUserDefaults standardUserDefaults] setPersistentStoreClass:CPUserDefaultsTestStore forDomain:CPApplicationDomain reloadData:NO]; + [splitView setAutosaveName:@"Charles"]; + [splitView setPosition:25 ofDividerAtIndex:0]; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + + // Recreate the split view. + [self setUp]; + [splitView setAutosaveName:@"Charles"]; + // FIXME At the moment restore from autosave only happens if the split view is loaded from a + // coder. It seems like it should happen when initialising in code too, but some research of + // Cocoa's behaviour will need to be done first. + splitView._needsRestoreFromAutosave = YES; + // Trigger autosave restore. + [splitView setFrameSize:CGSizeMake(110, 100)]; + [self assert:25 equals:[viewA frameSize].height message:@"divider position restored"]; } @end @@ -131,6 +147,7 @@ } @end + /*! This store always fails. */ @@ -149,3 +166,24 @@ } @end + +/*! + This is a temporary store. +*/ +@implementation CPUserDefaultsTestStore : CPUserDefaultsStore +{ + CPData _data; +} + +- (CPData)data +{ + return _data; +} + +- (void)setData:(CPData)aData +{ + _data = aData; +} + +@end + From aa546374f3a65c69e3bec28840772a6832559080 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 26 May 2012 00:22:23 +0100 Subject: [PATCH 037/112] Fixed: typo in aa4eff9. --- Foundation/CPNumber.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Foundation/CPNumber.j b/Foundation/CPNumber.j index 48a393100..1373a025a 100644 --- a/Foundation/CPNumber.j +++ b/Foundation/CPNumber.j @@ -316,8 +316,8 @@ FIXME: Do we need this? { if (self > aNumber) return CPOrderedDescending; - else if (self < aNumber) return - CPOrderedAscending; + else if (self < aNumber) + return CPOrderedAscending; return CPOrderedSame; } From 02b65e6dfbe08f5e5a2c3787c4813e6ea797ce45 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Fri, 25 May 2012 18:06:05 -0700 Subject: [PATCH 038/112] Fix a bug in Nib2Cib.j when configInfo is null --- Tools/nib2cib/Nib2Cib.j | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Tools/nib2cib/Nib2Cib.j b/Tools/nib2cib/Nib2Cib.j index 6c2fac4d1..20a9942e9 100644 --- a/Tools/nib2cib/Nib2Cib.j +++ b/Tools/nib2cib/Nib2Cib.j @@ -127,6 +127,8 @@ var FILE = require("file"), if (systemFontSize) [CPFont setSystemFontSize:parseFloat(systemFontSize, 10)]; } + else + infoPlist = [CPDictionary dictionary]; var themeList = [self getThemeList:options], themes = [self loadThemesFromList:themeList]; From fabe1d89917dbae53fc7aacfb32be1a6c32fa280 Mon Sep 17 00:00:00 2001 From: ggsato Date: Sat, 26 May 2012 11:08:57 +0900 Subject: [PATCH 039/112] formatting and now subclassing is tested by Open a document --- AppKit/CPApplication.j | 2 -- .../CPDocumentControllerTest/withNib/AppController.j | 4 ---- .../CPDocumentControllerTest/withNib/DocumentController.j | 8 ++++++++ .../CPDocumentControllerTest/withoutNib/AppController.j | 5 +---- .../withoutNib/DocumentController.j | 8 ++++++++ 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index c33fad3e7..15ad65916 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -234,9 +234,7 @@ CPRunContinuesResponse = -1002; var delegateClass = objj_getClass(delegateClassName); if (delegateClass) - { [self setDelegate:[[delegateClass alloc] init]]; - } } var defaultCenter = [CPNotificationCenter defaultCenter]; diff --git a/Tests/Manual/CPDocumentControllerTest/withNib/AppController.j b/Tests/Manual/CPDocumentControllerTest/withNib/AppController.j index 7b5998837..0300cac6e 100644 --- a/Tests/Manual/CPDocumentControllerTest/withNib/AppController.j +++ b/Tests/Manual/CPDocumentControllerTest/withNib/AppController.j @@ -17,10 +17,6 @@ - (void)applicationDidFinishLaunching:(CPNotification)aNotification { // This is called when the application is done loading. - var sharedDocController = [CPDocumentController sharedDocumentController]; - var docController = [[DocumentController alloc] init]; - var cpAlert = [CPAlert alertWithMessageText:@"Is this the shared instance? " + (sharedDocController == docController) defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:nil]; - [cpAlert beginSheetModalForWindow:[[CPApplication sharedApplication] mainWindow]]; } - (void)applicationWillFinishLaunching:(CPNotification)aNotification diff --git a/Tests/Manual/CPDocumentControllerTest/withNib/DocumentController.j b/Tests/Manual/CPDocumentControllerTest/withNib/DocumentController.j index 4f37b6aad..c8474ab74 100644 --- a/Tests/Manual/CPDocumentControllerTest/withNib/DocumentController.j +++ b/Tests/Manual/CPDocumentControllerTest/withNib/DocumentController.j @@ -12,4 +12,12 @@ return [CPDocumentController sharedDocumentController]; } +/* Instead of throwing error in browser environment, show an alert + */ +- (void)openDocument:(id)aSender +{ + var anAlert = [CPAlert alertWithError:@"Opening a document is not available!"]; + [anAlert beginSheetModalForWindow:[[CPApplication sharedApplication] mainWindow]]; +} + @end diff --git a/Tests/Manual/CPDocumentControllerTest/withoutNib/AppController.j b/Tests/Manual/CPDocumentControllerTest/withoutNib/AppController.j index c66a0b5ba..a74d59a9d 100644 --- a/Tests/Manual/CPDocumentControllerTest/withoutNib/AppController.j +++ b/Tests/Manual/CPDocumentControllerTest/withoutNib/AppController.j @@ -12,20 +12,17 @@ @implementation AppController : CPObject { - CPDocumentController subclassedCPDocumentController; } - (void)applicationDidFinishLaunching:(CPNotification)aNotification { // This is called when the application is done loading. - var cpAlert = [CPAlert alertWithMessageText:@"Is this the shared instance? " + ([CPDocumentController sharedDocumentController] == subclassedCPDocumentController) defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:nil]; - [cpAlert beginSheetModalForWindow:[[CPApplication sharedApplication] mainWindow]]; } - (void)applicationWillFinishLaunching:(CPNotification)aNotification { // instantiate a subclass of DocumentController - subclassedCPDocumentController = [[DocumentController alloc] init]; + [[DocumentController alloc] init]; } - (void)awakeFromCib diff --git a/Tests/Manual/CPDocumentControllerTest/withoutNib/DocumentController.j b/Tests/Manual/CPDocumentControllerTest/withoutNib/DocumentController.j index 0066d795b..11d16c2eb 100644 --- a/Tests/Manual/CPDocumentControllerTest/withoutNib/DocumentController.j +++ b/Tests/Manual/CPDocumentControllerTest/withoutNib/DocumentController.j @@ -12,4 +12,12 @@ return self; } +/* Instead of throwing error in browser environment, show an alert + */ +- (void)openDocument:(id)aSender +{ + var anAlert = [CPAlert alertWithError:@"Opening a document is not available!"]; + [anAlert beginSheetModalForWindow:[[CPApplication sharedApplication] mainWindow]]; +} + @end From bc79d577126a7a6da6a50dacc3dda12b08e35c15 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 27 May 2012 22:15:57 +0100 Subject: [PATCH 040/112] Clean up. --- Tests/Manual/TableTest/DragAndDrop/AppController.j | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Tests/Manual/TableTest/DragAndDrop/AppController.j b/Tests/Manual/TableTest/DragAndDrop/AppController.j index 62d87e38e..0cc82401b 100644 --- a/Tests/Manual/TableTest/DragAndDrop/AppController.j +++ b/Tests/Manual/TableTest/DragAndDrop/AppController.j @@ -2,7 +2,7 @@ * AppController.j * DragAndDrop * - * Created by You on December 10, 2010. + * Created by Mike Fellows on December 10, 2010. * Copyright 2010, Your Company All rights reserved. */ @@ -10,7 +10,7 @@ @import @import -TableTestDragAndDropTableViewDataType = "@TableTestDragAndDropTableViewDataType"; +TableTestDragAndDropTableViewDataType = @"TableTestDragAndDropTableViewDataType"; @implementation AppController : CPObject { @@ -25,10 +25,10 @@ TableTestDragAndDropTableViewDataType = "@TableTestDragAndDropTableViewDataType" count = 100; rowList = []; - while(count--) + while (count--) rowList[count] = count; - [scroll setAutoresizingMask:CPViewWidthSizable|CPViewHeightSizable]; + [scroll setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; var table = [[CPTableView alloc] initWithFrame:CGRectMakeZero()]; [table setDataSource:self]; @@ -101,7 +101,7 @@ TableTestDragAndDropTableViewDataType = "@TableTestDragAndDropTableViewDataType" - (id)tableView:(id)tableView objectValueForTableColumn:(CPTableColumn)aColumn row:(int)aRow { - if([aColumn identifier] == "Row") + if ([aColumn identifier] == "Row") return aRow; else return "Col " + [aColumn identifier] + ", Started as Row " + rowList[aRow]; @@ -133,7 +133,7 @@ TableTestDragAndDropTableViewDataType = "@TableTestDragAndDropTableViewDataType" destinationRange, destinationIndexes; - if(operation == CPTableViewDropAbove) + if (operation == CPTableViewDropAbove) { // Save the first object in the list so we can determine where the // beginning of the moved block begins once all the selected rows have From eeceaa0c9b5a475b4a2cc1d6eed6637c6f6158d3 Mon Sep 17 00:00:00 2001 From: Blair Duncan Date: Fri, 1 Jun 2012 20:17:09 -0400 Subject: [PATCH 041/112] unlite if mouse is moved off and cursor up hilites last item if none --- AppKit/CPMenu/_CPMenuManager.j | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/AppKit/CPMenu/_CPMenuManager.j b/AppKit/CPMenu/_CPMenuManager.j index e78b08475..d8a92c39c 100644 --- a/AppKit/CPMenu/_CPMenuManager.j +++ b/AppKit/CPMenu/_CPMenuManager.j @@ -137,10 +137,7 @@ var STICKY_TIME_INTERVAL = 0.5, // Periodic events don't have a valid location. var globalLocation = type === CPPeriodic ? _lastGlobalLocation : [anEvent globalLocation]; - // Remember this for the next periodic event. - _lastGlobalLocation = globalLocation; - - if (!_lastGlobalLocation) + if (!globalLocation) return; // Find which menu window the mouse is currently on top of @@ -152,6 +149,14 @@ var STICKY_TIME_INTERVAL = 0.5, activeItemIndex = activeMenuContainer ? [activeMenuContainer itemIndexAtPoint:menuLocation] : CPNotFound, activeItem = activeItemIndex !== CPNotFound ? [activeMenu itemAtIndex:activeItemIndex] : nil; + // unhighlight when mouse is moved off the menu + if (_lastGlobalLocation && CGRectContainsPoint([activeMenuContainer globalFrame], _lastGlobalLocation) + && !CGRectContainsPoint([activeMenuContainer globalFrame], globalLocation)) + [activeMenu _highlightItemAtIndex:CPNotFound]; + + // Remember this for the next periodic event. + _lastGlobalLocation = globalLocation; + // If the item isn't enabled its as if we clicked on nothing. if (![activeItem isEnabled] || [activeItem _isMenuBarButton]) { @@ -667,8 +672,11 @@ var STICKY_TIME_INTERVAL = 0.5, var index = menu._highlightedIndex - 1; if (index < 0) + { + if (index != CPNotFound) + [menu _highlightItemAtIndex:[menu numberOfItems] - 1]; return; - + } [menu _highlightItemAtIndex:index]; var item = [menu highlightedItem]; From f2dd6b5dce9d8a8f24052da386a3a5901720a340 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 2 Jun 2012 19:38:34 +0200 Subject: [PATCH 042/112] CPDateReferenceDate should be 'Jan 1 2001' instead of 'Feb 1 2001' --- Foundation/CPDate.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Foundation/CPDate.j b/Foundation/CPDate.j index d65b4226a..b2aeb3b5f 100644 --- a/Foundation/CPDate.j +++ b/Foundation/CPDate.j @@ -24,7 +24,7 @@ @import "CPString.j" @import "CPException.j" -var CPDateReferenceDate = new Date(Date.UTC(2001, 1, 1, 0, 0, 0, 0)); +var CPDateReferenceDate = new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0)); /*! @class CPDate From 6877aaaf6119ba35c21a464d08dcfcaa6e7008be Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 2 Jun 2012 11:27:19 -0700 Subject: [PATCH 043/112] Re #1556. Unit test CPDate dateWithTimeIntervalSinceReferenceDate:. --- Tests/Foundation/CPDateTest.j | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/Tests/Foundation/CPDateTest.j b/Tests/Foundation/CPDateTest.j index f4a285989..26aa04f0a 100644 --- a/Tests/Foundation/CPDateTest.j +++ b/Tests/Foundation/CPDateTest.j @@ -49,13 +49,13 @@ - (void)testInitWithString { var tests = [ - ["1970-01-01 00:00:00 +0000", 0], - ["1970-01-01 00:01:00 +0000", 60], - ["1970-01-01 01:00:00 +0000", 60*60], - ["1970-01-02 00:00:00 +0000", 24*60*60], - ["2009-11-17 17:52:04 +0000", 1258480324], - ["2009-11-17 18:52:04 +0200", 1258476724], - ]; + ["1970-01-01 00:00:00 +0000", 0], + ["1970-01-01 00:01:00 +0000", 60], + ["1970-01-01 01:00:00 +0000", 60*60], + ["1970-01-02 00:00:00 +0000", 24*60*60], + ["2009-11-17 17:52:04 +0000", 1258480324], + ["2009-11-17 18:52:04 +0200", 1258476724], + ]; for (var i = 0; i < tests.length; i++) { @@ -65,6 +65,15 @@ } } +- (void)testInitWithTimeIntervalSinceReferenceDate_ +{ + var referenceDate = [[CPDate alloc] initWithTimeIntervalSinceReferenceDate:0], + referenceDatePlusOneHour = [[CPDate alloc] initWithTimeIntervalSinceReferenceDate:3600]; + + [self assert:[[CPDate alloc] initWithString:"2001-01-01 00:00:00 +0000"] equals:referenceDate message:@"reference date"]; + [self assert:[[CPDate alloc] initWithString:"2001-01-01 01:00:00 +0000"] equals:referenceDatePlusOneHour message:@"reference date plus one hour"]; +} + - (void)testEncoding { var date = new Date(), From fc858933bef559dc8de8aa72593c3102416d652c Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 2 Jun 2012 11:32:19 -0700 Subject: [PATCH 044/112] Re #1556. Make CPDate testSince1970 agree with new reference date. --- Tests/Foundation/CPDateTest.j | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Tests/Foundation/CPDateTest.j b/Tests/Foundation/CPDateTest.j index 26aa04f0a..e2a3c1309 100644 --- a/Tests/Foundation/CPDateTest.j +++ b/Tests/Foundation/CPDateTest.j @@ -4,10 +4,10 @@ - (void)testSince1970 { - /* These two dates should be equal to Fri Feb 13 2009 15:31:30 GMT-0800 */ - unixDate = [CPDate dateWithTimeIntervalSince1970: 1234567890]; - cocoaDate = [CPDate dateWithTimeIntervalSinceReferenceDate: 253582290]; - [self assertTrue:[unixDate isEqualToDate: cocoaDate]]; + /* These two dates should be equal to Fri Jan 13 2009 23:31:30 +0000 */ + unixDate = [CPDate dateWithTimeIntervalSince1970:1231889490]; + cocoaDate = [CPDate dateWithTimeIntervalSinceReferenceDate:253582290]; + [self assertTrue:[unixDate isEqualToDate:cocoaDate] message:[unixDate description] + " isEqualToDate: " + [cocoaDate description]]; } - (void)testDate From 25763962b21fcf7d4fe11c2d8606339b9dc2009f Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 2 Jun 2012 11:53:04 -0700 Subject: [PATCH 045/112] Code formatting. --- Foundation/CPDate.j | 2 -- Tests/Foundation/CPDateTest.j | 11 ++++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Foundation/CPDate.j b/Foundation/CPDate.j index b2aeb3b5f..7825a4a97 100644 --- a/Foundation/CPDate.j +++ b/Foundation/CPDate.j @@ -30,8 +30,6 @@ var CPDateReferenceDate = new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0)); @class CPDate @ingroup foundation @brief A representation of a single point in time. - - */ @implementation CPDate : CPObject { diff --git a/Tests/Foundation/CPDateTest.j b/Tests/Foundation/CPDateTest.j index e2a3c1309..48a514923 100644 --- a/Tests/Foundation/CPDateTest.j +++ b/Tests/Foundation/CPDateTest.j @@ -19,7 +19,7 @@ past = [CPDate distantPast]; [self assertTrue:(before <= middle) message:"before not less than middle"]; - [self assertTrue:(middle <= after) message:"middle not less than after ("+middle+","+after+")"]; + [self assertTrue:(middle <= after) message:"middle not less than after (" + middle + "," + after + ")"]; [self assert:middle equals:[middle earlierDate:future] message:"earlierDate incorrect"]; [self assert:middle equals:[middle laterDate:past] message:"laterDate incorrect"]; @@ -51,8 +51,8 @@ var tests = [ ["1970-01-01 00:00:00 +0000", 0], ["1970-01-01 00:01:00 +0000", 60], - ["1970-01-01 01:00:00 +0000", 60*60], - ["1970-01-02 00:00:00 +0000", 24*60*60], + ["1970-01-01 01:00:00 +0000", 60 * 60], + ["1970-01-02 00:00:00 +0000", 24 * 60 * 60], ["2009-11-17 17:52:04 +0000", 1258480324], ["2009-11-17 18:52:04 +0200", 1258476724], ]; @@ -67,11 +67,12 @@ - (void)testInitWithTimeIntervalSinceReferenceDate_ { + // Related issue #1556: "CPDateReferenceDate should be 'Jan 1 2001' instead of 'Feb 1 2001'". var referenceDate = [[CPDate alloc] initWithTimeIntervalSinceReferenceDate:0], referenceDatePlusOneHour = [[CPDate alloc] initWithTimeIntervalSinceReferenceDate:3600]; - [self assert:[[CPDate alloc] initWithString:"2001-01-01 00:00:00 +0000"] equals:referenceDate message:@"reference date"]; - [self assert:[[CPDate alloc] initWithString:"2001-01-01 01:00:00 +0000"] equals:referenceDatePlusOneHour message:@"reference date plus one hour"]; + [self assert:[[CPDate alloc] initWithString:@"2001-01-01 00:00:00 +0000"] equals:referenceDate message:@"reference date"]; + [self assert:[[CPDate alloc] initWithString:@"2001-01-01 01:00:00 +0000"] equals:referenceDatePlusOneHour message:@"reference date plus one hour"]; } - (void)testEncoding From d0c7796e7c0f543485cd29d6250ebd7ddf70e158 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 2 Jun 2012 13:17:34 -0700 Subject: [PATCH 046/112] Match CPDate distantPast and distantFuture with Cocoa. --- Foundation/CPDate.j | 4 ++-- Tests/Foundation/CPDateTest.j | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Foundation/CPDate.j b/Foundation/CPDate.j index 7825a4a97..bd86a42f1 100644 --- a/Foundation/CPDate.j +++ b/Foundation/CPDate.j @@ -64,12 +64,12 @@ var CPDateReferenceDate = new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0)); + (id)distantPast { - return new Date(-10000, 1, 1, 0, 0, 0, 0); + return [CPDate dateWithTimeIntervalSinceReferenceDate:-63113817600.0]; } + (id)distantFuture { - return new Date(10000, 1, 1, 0, 0, 0, 0); + return [CPDate dateWithTimeIntervalSinceReferenceDate:63113990400.0]; } - (id)initWithTimeIntervalSinceNow:(CPTimeInterval)seconds diff --git a/Tests/Foundation/CPDateTest.j b/Tests/Foundation/CPDateTest.j index 48a514923..343d2227a 100644 --- a/Tests/Foundation/CPDateTest.j +++ b/Tests/Foundation/CPDateTest.j @@ -10,6 +10,16 @@ [self assertTrue:[unixDate isEqualToDate:cocoaDate] message:[unixDate description] + " isEqualToDate: " + [cocoaDate description]]; } +- (void)testDistantPast +{ + [self assert:[CPDate dateWithTimeIntervalSinceReferenceDate:-63113817600.0] equals:[CPDate distantPast]]; +} + +- (void)testDistantFuture +{ + [self assert:[CPDate dateWithTimeIntervalSinceReferenceDate:63113990400.0] equals:[CPDate distantFuture]]; +} + - (void)testDate { var before = new Date(), From 55709cb83a4e81eea90d36053e0a21b5fd4e44e5 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 2 Jun 2012 13:18:58 -0700 Subject: [PATCH 047/112] Test CPDate testInitWithString with a date prior to 1970. This verifies that there are no problems with negative time intervals. --- Foundation/CPDate.j | 4 ++-- Tests/Foundation/CPDateTest.j | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Foundation/CPDate.j b/Foundation/CPDate.j index bd86a42f1..86bf25deb 100644 --- a/Foundation/CPDate.j +++ b/Foundation/CPDate.j @@ -167,7 +167,7 @@ var CPDateReferenceDate = new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0)); - (CPComparisonResult)compare:(CPDate)anotherDate { - return (self > anotherDate) ? CPOrderedDescending : ((self < anotherDate) ? CPOrderedAscending : CPOrderedSame); + return (self > anotherDate) ? CPOrderedDescending : ((self < anotherDate) ? CPOrderedAscending : CPOrderedSame); } - (CPDate)earlierDate:(CPDate)anotherDate @@ -198,7 +198,7 @@ var CPDateReferenceDate = new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0)); */ - (CPString)description { - return [CPString stringWithFormat:@"%04d-%02d-%02d %02d:%02d:%02d %s", self.getFullYear(), self.getMonth()+1, self.getDate(), self.getHours(), self.getMinutes(), self.getSeconds(), [CPDate timezoneOffsetString:self.getTimezoneOffset()]]; + return [CPString stringWithFormat:@"%04d-%02d-%02d %02d:%02d:%02d %s", self.getFullYear(), self.getMonth() + 1, self.getDate(), self.getHours(), self.getMinutes(), self.getSeconds(), [CPDate timezoneOffsetString:self.getTimezoneOffset()]]; } - (id)copy diff --git a/Tests/Foundation/CPDateTest.j b/Tests/Foundation/CPDateTest.j index 343d2227a..d719eee85 100644 --- a/Tests/Foundation/CPDateTest.j +++ b/Tests/Foundation/CPDateTest.j @@ -59,6 +59,7 @@ - (void)testInitWithString { var tests = [ + ["1800-01-01 00:00:00 +0000", -5364662400], ["1970-01-01 00:00:00 +0000", 0], ["1970-01-01 00:01:00 +0000", 60], ["1970-01-01 01:00:00 +0000", 60 * 60], From 299a664b9c44b0f2c71d7f5ce984b56b9959c5b4 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Wed, 6 Jun 2012 14:24:28 +0200 Subject: [PATCH 048/112] CPTableView -selectedColumn : missing return statement --- AppKit/CPTableView.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 38b86ff85..7b52f08f3 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -1257,7 +1257,7 @@ NOT YET IMPLEMENTED */ - (int)selectedColumn { - [_selectedColumnIndexes lastIndex]; + return [_selectedColumnIndexes lastIndex]; } /*! From dc30092b605c9f1f6c92a49f4aae2be6cbe883be Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Thu, 7 Jun 2012 23:25:58 +0200 Subject: [PATCH 049/112] A very fast sortUsingDescriptors: I needed to sort a lot of objects and was not impressed by the speed. Sharing my improvements... --- Foundation/CPArray/CPMutableArray.j | 191 +++++++++++++++++++++------- 1 file changed, 148 insertions(+), 43 deletions(-) diff --git a/Foundation/CPArray/CPMutableArray.j b/Foundation/CPArray/CPMutableArray.j index 420bf0873..f62ae1c06 100644 --- a/Foundation/CPArray/CPMutableArray.j +++ b/Foundation/CPArray/CPMutableArray.j @@ -334,7 +334,15 @@ - (void)sortUsingDescriptors:(CPArray)descriptors { - [self sortUsingFunction:compareObjectsUsingDescriptors context:descriptors]; + var i = [descriptors count], + jsDescriptors = []; + // Revert the order of the descriptors + while (i--) + { + var d = [descriptors objectAtIndex:i]; + [jsDescriptors addObject:{ "k": [d key], "a": [d ascending]}]; + } + sortArrayUsingJSDescriptors(self, jsDescriptors); } /*! @@ -344,46 +352,7 @@ */ - (void)sortUsingFunction:(Function)aFunction context:(id)aContext { - var h, - i, - j, - k, - l, - m, - n = [self count], - o; - - var A, - B = []; - - for (h = 1; h < n; h += h) - { - for (m = n - 1 - h; m >= 0; m -= h + h) - { - l = m - h + 1; - if (l < 0) - l = 0; - - for (i = 0, j = l; j <= m; i++, j++) - B[i] = self[j]; - - for (i = 0, k = l; k < j && j <= m + h; k++) - { - A = self[j]; - o = aFunction(A, B[i], aContext); - if (o >= 0) - self[k] = B[i++]; - else - { - self[k] = A; - j++; - } - } - - while (k < j) - self[k++] = B[i++]; - } - } + sortArrayUsingFunction(self, aFunction, aContext); } /*! @@ -392,7 +361,7 @@ */ - (void)sortUsingSelector:(SEL)aSelector { - [self sortUsingFunction:selectorCompare context:aSelector]; + sortArrayUsingFunction(self, selectorCompare, aSelector); } @end @@ -413,8 +382,52 @@ var selectorCompare = function selectorCompare(object1, object2, selector) return [object1 performSelector:selector withObject:object2]; }; +var sortArrayUsingFunction = function sortArrayUsingFunction(array, aFunction, aContext) +{ + var h, + i, + j, + k, + l, + m, + n = array.length, + o; + + var A, + B = []; + + for (h = 1; h < n; h += h) + { + for (m = n - 1 - h; m >= 0; m -= h + h) + { + l = m - h + 1; + if (l < 0) + l = 0; + + for (i = 0, j = l; j <= m; i++, j++) + B[i] = array[j]; + + for (i = 0, k = l; k < j && j <= m + h; k++) + { + A = array[j]; + o = aFunction(A, B[i], aContext); + if (o >= 0) + array[k] = B[i++]; + else + { + array[k] = A; + j++; + } + } + + while (k < j) + array[k++] = B[i++]; + } + } +} + // sort using sort descriptors -var compareObjectsUsingDescriptors= function compareObjectsUsingDescriptors(lhs, rhs, descriptors) +var compareObjectsUsingDescriptors = function compareObjectsUsingDescriptors(lhs, rhs, descriptors) { var result = CPOrderedSame, i = 0, @@ -425,3 +438,95 @@ var compareObjectsUsingDescriptors= function compareObjectsUsingDescriptors(lhs, return result; }; + +// Observe that the sort descriptors has the reversed order by the caller +var sortArrayUsingJSDescriptors = function sortArrayUsingJSDescriptors(a, d) +{ + var h, + i, + j, + k, + l, + m, + n = a.length, + dl = d.length - 1, + o, + c = {}; + + var A, + B = [], + C1, + C2, + cn, + aUID, + bUID, + key; + + if (dl < 0) + return; + for (h = 1; h < n; h += h) + { + for (m = n - 1 - h; m >= 0; m -= h + h) + { + l = m - h + 1; + if (l < 0) + l = 0; + + for (i = 0, j = l; j <= m; i++, j++) + B[i] = a[j]; + + for (i = 0, k = l; k < j && j <= m + h; k++) + { + A = a[j]; + aUID = A._UID; + if (!aUID) + aUID = [A UID]; + C1 = c[aUID]; + if (!C1) + { + C1 = {}; + cn = dl; + do + { + key = d[cn].k; + C1[key] = [A valueForKey:key]; + } while (cn--) + c[aUID] = C1; + } + bUID = B[i]._UID; + if (!bUID) + bUID = [B[i] UID]; + C2 = c[bUID]; + if (!C2) + { + C2 = {}; + cn = dl; + do + { + key = d[cn].k; + C2[key] = [B[i] valueForKey:key]; + } while (cn--) + c[bUID] = C2; + } + cn = dl; + do + { + key = d[cn].k; + o = [C1[key] compare:C2[key]]; + if (o && !d[cn].a) + o = -o; + } while (cn-- && o == CPOrderedSame) + if (o >= 0) + a[k] = B[i++]; + else + { + a[k] = A; + j++; + } + } + + while (k < j) + a[k++] = B[i++]; + } + } +} From 56c0f7f6f12e7f4640d5b3b904fb89d665f7f5fb Mon Sep 17 00:00:00 2001 From: Malte Tancred Date: Fri, 8 Jun 2012 13:21:47 +0200 Subject: [PATCH 050/112] Create support sources folder if necessary. Make sure the the xCodeSupport/Sources folder is always present. The objj tool will fail if it's missing. The Sources folder could be missing if it's not checked into a repos for example. --- Tools/XcodeCapp/TNXCodeCapp.m | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Tools/XcodeCapp/TNXCodeCapp.m b/Tools/XcodeCapp/TNXCodeCapp.m index ffe2d1cab..2ecee5fdc 100644 --- a/Tools/XcodeCapp/TNXCodeCapp.m +++ b/Tools/XcodeCapp/TNXCodeCapp.m @@ -460,14 +460,23 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification [PBXContent writeToFile:XCodeSupportPBXPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; DLog(@"PBX file adapted to the project"); - DLog(@"Creating source folder %@", [XCodeSupportProjectSources path]); - [fm createDirectoryAtPath:[XCodeSupportProjectSources path] withIntermediateDirectories:YES attributes:nil error:nil]; + [self createXcodeSupportProjectSourcesDirIfNecessary]; return NO; } + [self createXcodeSupportProjectSourcesDirIfNecessary]; return YES; } +/*! + Create the xCodeSupport/Sources folder if necessary. + */ +- (void)createXcodeSupportProjectSourcesDirIfNecessary { + if ([fm fileExistsAtPath:[XCodeSupportProjectSources path]]) return; + DLog(@"Creating source folder %@", [XCodeSupportProjectSources path]); + [fm createDirectoryAtPath:[XCodeSupportProjectSources path] withIntermediateDirectories:YES attributes:nil error:nil]; +} + /*! Initialize the creation of the .xCodeSupport project. This Operation is threaded From 0483f9d7142e092da244407467a3a0b9038aa661 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Fri, 8 Jun 2012 18:19:37 +0200 Subject: [PATCH 051/112] CPArrayPerformanceTest: fixed native sort testing, added tests for random numeric array and text array --- Tests/Foundation/CPArrayPerformanceTest.j | 180 ++++++++++++++++++---- Tests/Foundation/the_big_sort.txt | 1 + 2 files changed, 150 insertions(+), 31 deletions(-) create mode 100644 Tests/Foundation/the_big_sort.txt diff --git a/Tests/Foundation/CPArrayPerformanceTest.j b/Tests/Foundation/CPArrayPerformanceTest.j index 573e54dab..7c7339b2a 100644 --- a/Tests/Foundation/CPArrayPerformanceTest.j +++ b/Tests/Foundation/CPArrayPerformanceTest.j @@ -1,72 +1,111 @@ +var FILE = require("file"); + @import @import @import @import - var ELEMENTS = 100, REPEATS = 10; @implementation CPArrayPerformanceTest : OJTestCase - -- (void)testSortUsingDescriptorsSpeed { - var array = [self makeUnsorted]; + CPArray descriptors; + CPString the_big_sort; +} +- (void)setUp +{ var descriptors = [ [CPSortDescriptor sortDescriptorWithKey:"a" ascending:NO], [CPSortDescriptor sortDescriptorWithKey:"b" ascending:YES] ]; + the_big_sort = FILE.read(FILE.join(FILE.dirname(module.path), "the_big_sort.txt"), { charset:"UTF-8" }); +} + +- (void)testAlmostSortedNumericUsingMergeSort +{ + CPLog.warn("\nNUMERIC ALMOST SORTED"); + var a = [self makeUnsorted]; + var sorted = [self sortUsingMergeSort:a]; + [self checkAlmostSorted:sorted]; +} + +- (void)testAlmostSortedNumericUsingNativeSort +{ + var a = [self makeUnsorted]; + var sorted = [self sortUsingNativeSort:a]; + [self checkAlmostSorted:sorted]; +} + +- (void)testRandomNumericUsingMergeSort +{ + CPLog.warn("\nNUMERIC RANDOM"); + var a = [self makeRandomNumeric]; + var sorted = [self sortUsingMergeSort:a]; + [self checkRandomSorted:sorted]; +} + +- (void)testRandomNumericUsingNativeSort +{ + var a = [self makeRandomNumeric]; + var sorted = [self sortUsingNativeSort:a]; + [self checkRandomSorted:sorted]; +} + +- (void)testRandomTextUsingMergeSort +{ + CPLog.warn("\nTEXT RANDOM"); + var a = [self makeRandomText]; + var sorted = [self sortUsingMergeSort:a]; + [self checkRandomSorted:sorted]; +} + +- (void)testRandomTextUsingNativeSort +{ + var a = [self makeRandomText]; + var sorted = [self sortUsingNativeSort:a]; + [self checkRandomSorted:sorted]; +} + +- (CPArray)sortUsingMergeSort:(CPArray)anArray +{ + var sorted; + var start = (new Date).getTime(); for (var i = 0; i < REPEATS; ++i) - { - var sorted = [array sortedArrayUsingDescriptors:descriptors]; - - [self checkSorted:sorted]; - } + sorted = [anArray sortedArrayUsingDescriptors:descriptors]; var end = (new Date).getTime(); CPLog.warn(_cmd + ": " + (end - start) + "ms"); + + return sorted; } -- (void)testSortUsingNativeSort +- (void)sortUsingNativeSort:(CPArray)anArray { - var array = [self makeUnsorted]; - - var descriptors = [ - [CPSortDescriptor sortDescriptorWithKey:"a" ascending:NO], - [CPSortDescriptor sortDescriptorWithKey:"b" ascending:YES] - ]; - - function sortFunction(lhs, rhs) - { - return ([lhs a] === [rhs a]) ? ([lhs b] - [rhs b]) : ([rhs a] - [lhs a]); - } + var sorted; var start = (new Date).getTime(); for (var i = 0; i < REPEATS; ++i) - { - var sorted = [array copy]; - - sorted.sort(sortFunction) - - [self checkSorted:sorted]; - } + sorted = [anArray _native_sortedArrayUsingDescriptors:descriptors]; var end = (new Date).getTime(); CPLog.warn(_cmd+": " + (end - start) + "ms"); + + return sorted; } - (CPArray)makeUnsorted { var array = []; - for (var i=0; i < ELEMENTS; ++i) + for (var i = 0; i < ELEMENTS; ++i) { var s = [Sortable new]; @@ -79,10 +118,46 @@ var ELEMENTS = 100, return array; } -- (void)checkSorted:(CPArray)sorted +- (CPArray)makeRandomNumeric +{ + var array = []; + + for (var i = 0; i < ELEMENTS; i++) + { + var s = [Sortable new], + n1 = ROUND(RAND() * ELEMENTS); + n2 = ROUND(RAND() * ELEMENTS); + + [s setA:n1]; + [s setB:n2]; + array.push(s); + } + + return array; +} + +- (CPArray)makeRandomText +{ + var words = the_big_sort.split(" ", ELEMENTS), + wordcount = words.length, + array = []; + + for (var i=0; i < wordcount-1; i++) + { + var s = [Sortable new]; + + [s setA:words[i]]; + [s setB:words[i+1]]; + array.push(s); + } + + return array; +} + +- (void)checkAlmostSorted:(CPArray)sorted { // Verify it really got sorted. - for (var j=0; j < ELEMENTS; ++j) + for (var j=0; j < sorted.length; ++j) { var expectedA = 4-FLOOR(j * 5 / ELEMENTS); @@ -96,6 +171,49 @@ var ELEMENTS = 100, } } +- (void)checkRandomSorted:(CPArray)sorted +{ + // Verify it really got sorted. + for (var j=0; j < sorted.length - 1; ++j) + { + if ([sorted[j].a compare:sorted[j+1].a] == CPOrderedAscending) + [self fail:"a out of order: " + sorted[j].a + " > " + sorted[j+1].a]; + + if ([sorted[j].a compare:sorted[j+1].a] == CPOrderedSame && [sorted[j].b compare: sorted[j+1].b] == CPOrderedDescending) + [self fail:"b out of order: " + sorted[j].b + " < " + sorted[j+1].b]; + } +} + +@end + +@implementation CPArray (NativeSort) + +- (CPArray)_native_sortedArrayUsingDescriptors:(CPArray)descriptors +{ + var sorted = [self copy]; + + [sorted _native_sortUsingDescriptors:descriptors]; + + return sorted; +} + +- (CPArray)_native_sortUsingDescriptors:(CPArray)descriptors +{ + var count = [descriptors count]; + + sort(function(lhs, rhs) + { + var i = 0, + result = CPOrderedSame; + + while (i < count) + if ((result = [descriptors[i++] compareObject:lhs withObject:rhs]) != CPOrderedSame) + return result; + + return result; + }); +} + @end @implementation Sortable : CPObject diff --git a/Tests/Foundation/the_big_sort.txt b/Tests/Foundation/the_big_sort.txt new file mode 100644 index 000000000..871ec5b6a --- /dev/null +++ b/Tests/Foundation/the_big_sort.txt @@ -0,0 +1 @@ +Introduction We have a neighborhood Internet listserve in South Austin that is often a source of good information about painters, plumbers, and lost animals. The e-discussion can also become a parody of liberal preciousness. One participant wrote to say that he planned to live-trap rats that had invaded his garage. The vermin-friendly homeowner wanted to know where it might be safe to relocate the rodents. The one Republican on the newsgroup, Stephen Mason, dared to say what most of us probably thought, volunteering that the man could release the varmints near Masons rat terrier, Hotard, who would happily relocate them to rat heaven. Our lone conservative correspondent, however, knew better than to make his comments overtly political. Mason, an intellectual property attorney and Texas A&M graduate, had tried to start a genuine political discussion on the list the year before. He wasnt about to try again. It was the spring of 2004, so things were already tense when Mason called the newsgroups attention to the election for the board of the local community college. Mason gave the names of both candidates, listed their websites, and then, after a warning that what followed was possibly inappropriate electioneering, recommended one of the candidates. The man Mason backed was deeply conservative, a member of the Federalist Society, a former officer of the Young Conservatives of Texas, and an opponent of gay marriage and adoption. Within the day, the newsgroup reacted in a way that wasnt as much ideological as biological. Mason wasnt just someone to be argued against. For the protection of the group, he needed to be isolated, sealed off, and expelled. First response: Okay, as a member of this list, Id really like to see this political discussion disappear. As a lesbian, obviously Im not going to vote for anybody who doesnt believe I shouldnt be allowed to adopt kids . . . As a resident of Travis Heights and a member of this neighborhood list, Im not interested in having this kind of discussion here. I have to defend myself against my government pretty much daily these days, and one place I dont want to have to do it is on this list. And then: A-men. Stephen, youre in the minority politically on this list and in this neighborhood, and while your opinions are your own to have, this list isnt the place for them . . . T-Hts is my home, and this list an extension of that . . . I hope we can all agree to prevent it from becoming a battleground. Mason responded: [The] ideological balkanization of America is dead-on true . . . Living here, especially as an out Republican, is a great deal of fun, and I learn a great deal from it. The most valuable thing that I learn daily is the capacity to respect people with whom I have disagreements. I hope not to be exiled to some place where the vast majority agrees with me. Then, alas, enough with the calls for reasoned discussion: Im really not interested [in] being surprised by right-wing e-mail in my in box, no matter what its guise. It makes me feel bad, and I dont like it. There were dissenting views. I really dont want political or other uncomfortable subjects segregated into some kind of opinion ghetto where only proselytizing activists and ideologues would venture, wrote one South Austinite. Another: Im going to stick my neck out here. I DO want to have political discussion . . . It is a tragedy that this country is becoming more and more polarized. Neighborhoods are becoming more and more homogeneous, either Democrat or Republican. Talk about segregation! But Mason got the picture: he was a Republican Crusoe on this Democratic island, and so he withdrew, promising never to talk politics again with his neighbors. Look, I know a lot about homogeneous political communities, Mason said one afternoon at a South Austin coffeehouse. Hed grown up in the Republican suburbs of Houston and attended the conservative hive of Texas A&M University. He was pugnacious about his politics, ending every e-mail message with a quote from Teddy Roosevelt: Aggressive fighting for the right is the greatest sport in the world. Mason was also engaged to marry a feminist filmmaker, an experience that taught him that nearly everything is political. But nothing had prepared him for the unsettling experience of being a political minority in the community where he lived — for being a minority in the age of political segregation. I ran off that listserve when the rhetoric became so shrill that I didnt have the taste for saying about anyone the things you would need to say to win that argument, Mason continued. Im not going to use that listserve for politics again, and there is some shame in that. The experience had changed the way he saw himself in the neighborhood. Knowing he was a minority, he wondered what people thought of him as he walked Hotard. In some way after that exchange, I think Im viewed with suspicion by my neighbors because of an act of political expression, which is a little on the bizarre side, he said. Im just a guy who has a dog and works a job. Chapter 3: The Psychology of the Tribe Washington was, from its beginning, a politically segregated city. In his forty-year-old study, The Washington Community, historian James Sterling Young mapped three Washingtons, one created for each of the three branches of government. The nine members of the U.S. Supreme Court lived in the same house until 1845. Executive branch workers gathered in one section of the city, near the White House, while congressmen were bunched together nearer the Capitol. Men whom the Constitution merely separated into different work groups separated themselves into different societies, wrote Young. Congressmen lived in boarding houses. They formed eating clubs around common tables, and they slept together, two to a room. Young tracked the membership of these new boarding house communities and found that the residential \ No newline at end of file From d7ff93f7f27c4ab048b7e79d9311b7fb13d94e8e Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Fri, 8 Jun 2012 19:48:39 +0200 Subject: [PATCH 052/112] SortUsingDescriptors: Using the selector in the descriptor instead of always using compare: --- Foundation/CPArray/CPMutableArray.j | 12 +++++++----- Tests/Foundation/CPArrayTest.j | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Foundation/CPArray/CPMutableArray.j b/Foundation/CPArray/CPMutableArray.j index f62ae1c06..2f6fcc58f 100644 --- a/Foundation/CPArray/CPMutableArray.j +++ b/Foundation/CPArray/CPMutableArray.j @@ -340,7 +340,7 @@ while (i--) { var d = [descriptors objectAtIndex:i]; - [jsDescriptors addObject:{ "k": [d key], "a": [d ascending]}]; + [jsDescriptors addObject:{ "k": [d key], "a": [d ascending], "s": [d selector]}]; } sortArrayUsingJSDescriptors(self, jsDescriptors); } @@ -460,7 +460,8 @@ var sortArrayUsingJSDescriptors = function sortArrayUsingJSDescriptors(a, d) cn, aUID, bUID, - key; + key, + dd; if (dl < 0) return; @@ -511,9 +512,10 @@ var sortArrayUsingJSDescriptors = function sortArrayUsingJSDescriptors(a, d) cn = dl; do { - key = d[cn].k; - o = [C1[key] compare:C2[key]]; - if (o && !d[cn].a) + dd = d[cn]; + key = dd.k; + o = objj_msgSend(C1[key], dd.s, C2[key]); + if (o && !dd.a) o = -o; } while (cn-- && o == CPOrderedSame) if (o >= 0) diff --git a/Tests/Foundation/CPArrayTest.j b/Tests/Foundation/CPArrayTest.j index 75951c471..a99dfc931 100644 --- a/Tests/Foundation/CPArrayTest.j +++ b/Tests/Foundation/CPArrayTest.j @@ -539,6 +539,20 @@ [self assertTrue:d.indexOf("y: 6") !== -1 message:"Can't find 'y: 6' in description of array " + d]; } +- (void)testSortUsingDescriptorsWithDifferentSelectors +{ + var a = [CPDictionary dictionaryWithJSObject:{"a": "AB", "b": "ba"}], + b = [CPDictionary dictionaryWithJSObject:{"a": "aa", "b": "BB"}], + array = [a, b], + d1 = [[CPSortDescriptor sortDescriptorWithKey:@"a" ascending:YES selector:@selector(compare:)]], + d2 = [[CPSortDescriptor sortDescriptorWithKey:@"a" ascending:YES selector:@selector(caseInsensitiveCompare:)]], + s1 = [array sortedArrayUsingDescriptors:d1], + s2 = [array sortedArrayUsingDescriptors:d2]; + + [self assertTrue:s1[0] === a message:s1[0] + " is larger then " + a + " when sorting case sensitive"]; + [self assertTrue:s2[1] === a message:s2[1] + " is larger then " + a + " when sorting case insensitive"]; +} + @end @implementation AlwaysEqual : CPObject From 0696b22971b324bcfeaff63c92811e410614aa58 Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Fri, 8 Jun 2012 20:18:22 +0200 Subject: [PATCH 053/112] Fixed formatting --- Foundation/CPArray/CPMutableArray.j | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/Foundation/CPArray/CPMutableArray.j b/Foundation/CPArray/CPMutableArray.j index 2f6fcc58f..42e3a88de 100644 --- a/Foundation/CPArray/CPMutableArray.j +++ b/Foundation/CPArray/CPMutableArray.j @@ -336,6 +336,7 @@ { var i = [descriptors count], jsDescriptors = []; + // Revert the order of the descriptors while (i--) { @@ -377,12 +378,12 @@ @end -var selectorCompare = function selectorCompare(object1, object2, selector) +var selectorCompare = function(object1, object2, selector) { return [object1 performSelector:selector withObject:object2]; }; -var sortArrayUsingFunction = function sortArrayUsingFunction(array, aFunction, aContext) +var sortArrayUsingFunction = function(array, aFunction, aContext) { var h, i, @@ -411,6 +412,7 @@ var sortArrayUsingFunction = function sortArrayUsingFunction(array, aFunction, a { A = array[j]; o = aFunction(A, B[i], aContext); + if (o >= 0) array[k] = B[i++]; else @@ -427,7 +429,7 @@ var sortArrayUsingFunction = function sortArrayUsingFunction(array, aFunction, a } // sort using sort descriptors -var compareObjectsUsingDescriptors = function compareObjectsUsingDescriptors(lhs, rhs, descriptors) +var compareObjectsUsingDescriptors = function(lhs, rhs, descriptors) { var result = CPOrderedSame, i = 0, @@ -440,7 +442,7 @@ var compareObjectsUsingDescriptors = function compareObjectsUsingDescriptors(lhs }; // Observe that the sort descriptors has the reversed order by the caller -var sortArrayUsingJSDescriptors = function sortArrayUsingJSDescriptors(a, d) +var sortArrayUsingJSDescriptors = function(a, d) { var h, i, @@ -465,11 +467,13 @@ var sortArrayUsingJSDescriptors = function sortArrayUsingJSDescriptors(a, d) if (dl < 0) return; + for (h = 1; h < n; h += h) { for (m = n - 1 - h; m >= 0; m -= h + h) { l = m - h + 1; + if (l < 0) l = 0; @@ -480,44 +484,59 @@ var sortArrayUsingJSDescriptors = function sortArrayUsingJSDescriptors(a, d) { A = a[j]; aUID = A._UID; + if (!aUID) aUID = [A UID]; + C1 = c[aUID]; + if (!C1) { C1 = {}; cn = dl; + do { key = d[cn].k; C1[key] = [A valueForKey:key]; } while (cn--) + c[aUID] = C1; } + bUID = B[i]._UID; + if (!bUID) bUID = [B[i] UID]; + C2 = c[bUID]; + if (!C2) { C2 = {}; cn = dl; + do { key = d[cn].k; C2[key] = [B[i] valueForKey:key]; } while (cn--) + c[bUID] = C2; } + cn = dl; + do { dd = d[cn]; key = dd.k; o = objj_msgSend(C1[key], dd.s, C2[key]); + if (o && !dd.a) o = -o; } while (cn-- && o == CPOrderedSame) + if (o >= 0) a[k] = B[i++]; else From 7b307a6fb491aa7b1277225eb7ec120b5b55fff7 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 9 Jun 2012 23:08:27 +0100 Subject: [PATCH 054/112] Re #1562. Format code. --- Tests/Foundation/CPArrayPerformanceTest.j | 64 +++++++++++------------ 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/Tests/Foundation/CPArrayPerformanceTest.j b/Tests/Foundation/CPArrayPerformanceTest.j index 7c7339b2a..cf6db1187 100644 --- a/Tests/Foundation/CPArrayPerformanceTest.j +++ b/Tests/Foundation/CPArrayPerformanceTest.j @@ -17,9 +17,9 @@ var ELEMENTS = 100, - (void)setUp { var descriptors = [ - [CPSortDescriptor sortDescriptorWithKey:"a" ascending:NO], - [CPSortDescriptor sortDescriptorWithKey:"b" ascending:YES] - ]; + [CPSortDescriptor sortDescriptorWithKey:"a" ascending:NO], + [CPSortDescriptor sortDescriptorWithKey:"b" ascending:YES] + ]; the_big_sort = FILE.read(FILE.join(FILE.dirname(module.path), "the_big_sort.txt"), { charset:"UTF-8" }); } @@ -27,53 +27,52 @@ var ELEMENTS = 100, - (void)testAlmostSortedNumericUsingMergeSort { CPLog.warn("\nNUMERIC ALMOST SORTED"); - var a = [self makeUnsorted]; - var sorted = [self sortUsingMergeSort:a]; + var a = [self makeUnsorted], + sorted = [self sortUsingMergeSort:a]; [self checkAlmostSorted:sorted]; } - (void)testAlmostSortedNumericUsingNativeSort { - var a = [self makeUnsorted]; - var sorted = [self sortUsingNativeSort:a]; + var a = [self makeUnsorted], + sorted = [self sortUsingNativeSort:a]; [self checkAlmostSorted:sorted]; } - (void)testRandomNumericUsingMergeSort { CPLog.warn("\nNUMERIC RANDOM"); - var a = [self makeRandomNumeric]; - var sorted = [self sortUsingMergeSort:a]; + var a = [self makeRandomNumeric], + sorted = [self sortUsingMergeSort:a]; [self checkRandomSorted:sorted]; } - (void)testRandomNumericUsingNativeSort { - var a = [self makeRandomNumeric]; - var sorted = [self sortUsingNativeSort:a]; + var a = [self makeRandomNumeric], + sorted = [self sortUsingNativeSort:a]; [self checkRandomSorted:sorted]; } - (void)testRandomTextUsingMergeSort { CPLog.warn("\nTEXT RANDOM"); - var a = [self makeRandomText]; - var sorted = [self sortUsingMergeSort:a]; + var a = [self makeRandomText], + sorted = [self sortUsingMergeSort:a]; [self checkRandomSorted:sorted]; } - (void)testRandomTextUsingNativeSort { - var a = [self makeRandomText]; - var sorted = [self sortUsingNativeSort:a]; + var a = [self makeRandomText], + sorted = [self sortUsingNativeSort:a]; [self checkRandomSorted:sorted]; } - (CPArray)sortUsingMergeSort:(CPArray)anArray { - var sorted; - - var start = (new Date).getTime(); + var sorted, + start = (new Date).getTime(); for (var i = 0; i < REPEATS; ++i) sorted = [anArray sortedArrayUsingDescriptors:descriptors]; @@ -87,16 +86,15 @@ var ELEMENTS = 100, - (void)sortUsingNativeSort:(CPArray)anArray { - var sorted; - - var start = (new Date).getTime(); + var sorted, + start = (new Date).getTime(); for (var i = 0; i < REPEATS; ++i) sorted = [anArray _native_sortedArrayUsingDescriptors:descriptors]; var end = (new Date).getTime(); - CPLog.warn(_cmd+": " + (end - start) + "ms"); + CPLog.warn(_cmd + ": " + (end - start) + "ms"); return sorted; } @@ -125,7 +123,7 @@ var ELEMENTS = 100, for (var i = 0; i < ELEMENTS; i++) { var s = [Sortable new], - n1 = ROUND(RAND() * ELEMENTS); + n1 = ROUND(RAND() * ELEMENTS), n2 = ROUND(RAND() * ELEMENTS); [s setA:n1]; @@ -142,12 +140,12 @@ var ELEMENTS = 100, wordcount = words.length, array = []; - for (var i=0; i < wordcount-1; i++) + for (var i = 0; i < wordcount - 1; i++) { var s = [Sortable new]; [s setA:words[i]]; - [s setB:words[i+1]]; + [s setB:words[i + 1]]; array.push(s); } @@ -157,9 +155,9 @@ var ELEMENTS = 100, - (void)checkAlmostSorted:(CPArray)sorted { // Verify it really got sorted. - for (var j=0; j < sorted.length; ++j) + for (var j = 0; j < sorted.length; ++j) { - var expectedA = 4-FLOOR(j * 5 / ELEMENTS); + var expectedA = 4 - FLOOR(j * 5 / ELEMENTS); if (sorted[j].a != expectedA) [self fail:"a out of order: " + expectedA + " != " + sorted[j].a]; @@ -173,14 +171,14 @@ var ELEMENTS = 100, - (void)checkRandomSorted:(CPArray)sorted { - // Verify it really got sorted. - for (var j=0; j < sorted.length - 1; ++j) + // Verify that it really got sorted. + for (var j = 0; j < sorted.length - 1; ++j) { - if ([sorted[j].a compare:sorted[j+1].a] == CPOrderedAscending) - [self fail:"a out of order: " + sorted[j].a + " > " + sorted[j+1].a]; + if ([sorted[j].a compare:sorted[j + 1].a] == CPOrderedAscending) + [self fail:"a out of order: " + sorted[j].a + " > " + sorted[j + 1].a]; - if ([sorted[j].a compare:sorted[j+1].a] == CPOrderedSame && [sorted[j].b compare: sorted[j+1].b] == CPOrderedDescending) - [self fail:"b out of order: " + sorted[j].b + " < " + sorted[j+1].b]; + if ([sorted[j].a compare:sorted[j + 1].a] == CPOrderedSame && [sorted[j].b compare: sorted[j + 1].b] == CPOrderedDescending) + [self fail:"b out of order: " + sorted[j].b + " < " + sorted[j + 1].b]; } } From f042996e7f9b690c5f726f76a23a31aa19c5117d Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 9 Jun 2012 23:16:52 +0100 Subject: [PATCH 055/112] Re #1562. Only load sort text for tests which use it. --- Tests/Foundation/CPArrayPerformanceTest.j | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Tests/Foundation/CPArrayPerformanceTest.j b/Tests/Foundation/CPArrayPerformanceTest.j index cf6db1187..c31c11a71 100644 --- a/Tests/Foundation/CPArrayPerformanceTest.j +++ b/Tests/Foundation/CPArrayPerformanceTest.j @@ -11,7 +11,6 @@ var ELEMENTS = 100, @implementation CPArrayPerformanceTest : OJTestCase { CPArray descriptors; - CPString the_big_sort; } - (void)setUp @@ -20,8 +19,6 @@ var ELEMENTS = 100, [CPSortDescriptor sortDescriptorWithKey:"a" ascending:NO], [CPSortDescriptor sortDescriptorWithKey:"b" ascending:YES] ]; - - the_big_sort = FILE.read(FILE.join(FILE.dirname(module.path), "the_big_sort.txt"), { charset:"UTF-8" }); } - (void)testAlmostSortedNumericUsingMergeSort @@ -136,7 +133,8 @@ var ELEMENTS = 100, - (CPArray)makeRandomText { - var words = the_big_sort.split(" ", ELEMENTS), + var the_big_sort = FILE.read(FILE.join(FILE.dirname(module.path), "the_big_sort.txt"), { charset:"UTF-8" }), + words = the_big_sort.split(" ", ELEMENTS), wordcount = words.length, array = []; From 0827f584be59bec0206dd1c0ae384cbd064b6131 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 10 Jun 2012 00:39:37 +0100 Subject: [PATCH 056/112] Re #1562. Simplify. --- Tests/Foundation/CPArrayPerformanceTest.j | 31 ++++++----------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/Tests/Foundation/CPArrayPerformanceTest.j b/Tests/Foundation/CPArrayPerformanceTest.j index c31c11a71..4407befe8 100644 --- a/Tests/Foundation/CPArrayPerformanceTest.j +++ b/Tests/Foundation/CPArrayPerformanceTest.j @@ -25,14 +25,14 @@ var ELEMENTS = 100, { CPLog.warn("\nNUMERIC ALMOST SORTED"); var a = [self makeUnsorted], - sorted = [self sortUsingMergeSort:a]; + sorted = [self sort:a usingSortSelector:@selector(sortedArrayUsingDescriptors:) withObject:descriptors]; [self checkAlmostSorted:sorted]; } - (void)testAlmostSortedNumericUsingNativeSort { var a = [self makeUnsorted], - sorted = [self sortUsingNativeSort:a]; + sorted = [self sort:a usingSortSelector:@selector(_native_sortedArrayUsingDescriptors:) withObject:descriptors]; [self checkAlmostSorted:sorted]; } @@ -40,14 +40,14 @@ var ELEMENTS = 100, { CPLog.warn("\nNUMERIC RANDOM"); var a = [self makeRandomNumeric], - sorted = [self sortUsingMergeSort:a]; + sorted = [self sort:a usingSortSelector:@selector(sortedArrayUsingDescriptors:) withObject:descriptors]; [self checkRandomSorted:sorted]; } - (void)testRandomNumericUsingNativeSort { var a = [self makeRandomNumeric], - sorted = [self sortUsingNativeSort:a]; + sorted = [self sort:a usingSortSelector:@selector(_native_sortedArrayUsingDescriptors:) withObject:descriptors]; [self checkRandomSorted:sorted]; } @@ -55,39 +55,24 @@ var ELEMENTS = 100, { CPLog.warn("\nTEXT RANDOM"); var a = [self makeRandomText], - sorted = [self sortUsingMergeSort:a]; + sorted = [self sort:a usingSortSelector:@selector(sortedArrayUsingDescriptors:) withObject:descriptors]; [self checkRandomSorted:sorted]; } - (void)testRandomTextUsingNativeSort { var a = [self makeRandomText], - sorted = [self sortUsingNativeSort:a]; + sorted = [self sort:a usingSortSelector:@selector(_native_sortedArrayUsingDescriptors:) withObject:descriptors]; [self checkRandomSorted:sorted]; } -- (CPArray)sortUsingMergeSort:(CPArray)anArray +- (CPArray)sort:(CPArray)anArray usingSortSelector:(SEL)aSelector withObject:(id)anObject { var sorted, start = (new Date).getTime(); for (var i = 0; i < REPEATS; ++i) - sorted = [anArray sortedArrayUsingDescriptors:descriptors]; - - var end = (new Date).getTime(); - - CPLog.warn(_cmd + ": " + (end - start) + "ms"); - - return sorted; -} - -- (void)sortUsingNativeSort:(CPArray)anArray -{ - var sorted, - start = (new Date).getTime(); - - for (var i = 0; i < REPEATS; ++i) - sorted = [anArray _native_sortedArrayUsingDescriptors:descriptors]; + sorted = [anArray performSelector:aSelector withObject:anObject]; var end = (new Date).getTime(); From 58103ce0f364928bb1e9a8154bcb322cd68d2fff Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 10 Jun 2012 00:58:27 +0100 Subject: [PATCH 057/112] Re #1562. Also performance test selector sort. It looks like issue #1560 will cause a different sorting function to be used for selectors vs descriptors so performance of both should be monitored for regressions. --- Tests/Foundation/CPArrayPerformanceTest.j | 71 ++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/Tests/Foundation/CPArrayPerformanceTest.j b/Tests/Foundation/CPArrayPerformanceTest.j index 4407befe8..ece1b6b96 100644 --- a/Tests/Foundation/CPArrayPerformanceTest.j +++ b/Tests/Foundation/CPArrayPerformanceTest.j @@ -66,6 +66,51 @@ var ELEMENTS = 100, [self checkRandomSorted:sorted]; } +- (void)testAlmostSortedNumericUsingMergeSelectorSort +{ + CPLog.warn("\nNUMERIC ALMOST SORTED (SELECTOR)"); + var a = [self makeUnsorted], + sorted = [self sort:a usingSortSelector:@selector(sortedArrayUsingSelector:) withObject:@selector(compareAAscendingThenBDescending:)]; + [self checkAlmostSorted:sorted]; +} + +- (void)testAlmostSortedNumericUsingNativeSelectorSort +{ + var a = [self makeUnsorted], + sorted = [self sort:a usingSortSelector:@selector(_native_sortedArrayUsingSelector:) withObject:@selector(compareAAscendingThenBDescending:)]; + [self checkAlmostSorted:sorted]; +} + +- (void)testRandomNumericUsingMergeSelectorSort +{ + CPLog.warn("\nNUMERIC RANDOM (SELECTOR)"); + var a = [self makeRandomNumeric], + sorted = [self sort:a usingSortSelector:@selector(sortedArrayUsingSelector:) withObject:@selector(compareAAscendingThenBDescending:)]; + [self checkRandomSorted:sorted]; +} + +- (void)testRandomNumericUsingNativeSelectorSort +{ + var a = [self makeRandomNumeric], + sorted = [self sort:a usingSortSelector:@selector(_native_sortedArrayUsingSelector:) withObject:@selector(compareAAscendingThenBDescending:)]; + [self checkRandomSorted:sorted]; +} + +- (void)testRandomTextUsingMergeSelectorSort +{ + CPLog.warn("\nTEXT RANDOM (SELECTOR)"); + var a = [self makeRandomText], + sorted = [self sort:a usingSortSelector:@selector(sortedArrayUsingSelector:) withObject:@selector(compareAAscendingThenBDescending:)]; + [self checkRandomSorted:sorted]; +} + +- (void)testRandomTextUsingNativeSelectorSort +{ + var a = [self makeRandomText], + sorted = [self sort:a usingSortSelector:@selector(_native_sortedArrayUsingSelector:) withObject:@selector(compareAAscendingThenBDescending:)]; + [self checkRandomSorted:sorted]; +} + - (CPArray)sort:(CPArray)anArray usingSortSelector:(SEL)aSelector withObject:(id)anObject { var sorted, @@ -76,7 +121,7 @@ var ELEMENTS = 100, var end = (new Date).getTime(); - CPLog.warn(_cmd + ": " + (end - start) + "ms"); + CPLog.warn(aSelector + ": " + (end - start) + "ms"); return sorted; } @@ -195,6 +240,23 @@ var ELEMENTS = 100, }); } +- (CPArray)_native_sortedArrayUsingSelector:(SEL)aSelector +{ + var sorted = [self copy]; + + [sorted _native_sortUsingSelector:aSelector]; + + return sorted; +} + +- (CPArray)_native_sortUsingSelector:(SEL)aSelector +{ + sort(function(lhs, rhs) + { + return [lhs performSelector:aSelector withObject:rhs]; + }); +} + @end @implementation Sortable : CPObject @@ -203,4 +265,11 @@ var ELEMENTS = 100, int b @accessors; } +- (int)compareAAscendingThenBDescending:(Sortable)other +{ + var aResult = [a compare:other.a]; + + return aResult === CPOrderedSame ? [b compare:other.b] : -aResult; +} + @end From fcf62080d68e32cd1315e7f745d13a11d14697dc Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 10 Jun 2012 00:59:08 +0100 Subject: [PATCH 058/112] Re #1562. Make native comparison more realistic. This might have a small speed implication. --- Tests/Foundation/CPArrayPerformanceTest.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/Foundation/CPArrayPerformanceTest.j b/Tests/Foundation/CPArrayPerformanceTest.j index ece1b6b96..5c1f4235a 100644 --- a/Tests/Foundation/CPArrayPerformanceTest.j +++ b/Tests/Foundation/CPArrayPerformanceTest.j @@ -233,7 +233,7 @@ var ELEMENTS = 100, result = CPOrderedSame; while (i < count) - if ((result = [descriptors[i++] compareObject:lhs withObject:rhs]) != CPOrderedSame) + if ((result = [descriptors[i++] compareObject:lhs withObject:rhs]) !== CPOrderedSame) return result; return result; From f538cbc51d20118b81aa549a0904809441777d06 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 10 Jun 2012 01:18:56 +0100 Subject: [PATCH 059/112] Re #1560. Remove obsolete function. --- Foundation/CPArray/CPMutableArray.j | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/Foundation/CPArray/CPMutableArray.j b/Foundation/CPArray/CPMutableArray.j index 42e3a88de..308390429 100644 --- a/Foundation/CPArray/CPMutableArray.j +++ b/Foundation/CPArray/CPMutableArray.j @@ -428,19 +428,6 @@ var sortArrayUsingFunction = function(array, aFunction, aContext) } } -// sort using sort descriptors -var compareObjectsUsingDescriptors = function(lhs, rhs, descriptors) -{ - var result = CPOrderedSame, - i = 0, - n = [descriptors count]; - - while (i < n && result === CPOrderedSame) - result = [descriptors[i++] compareObject:lhs withObject:rhs]; - - return result; -}; - // Observe that the sort descriptors has the reversed order by the caller var sortArrayUsingJSDescriptors = function(a, d) { From ad5403b538418ac83fc9ef6e68cfa07e1fb028d4 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 11 Jun 2012 13:13:36 +0100 Subject: [PATCH 060/112] Setting the shadow style just once will do. --- AppKit/CPMenu/_CPMenuWindow.j | 2 -- 1 file changed, 2 deletions(-) diff --git a/AppKit/CPMenu/_CPMenuWindow.j b/AppKit/CPMenu/_CPMenuWindow.j index 053d493d8..c1150fb54 100644 --- a/AppKit/CPMenu/_CPMenuWindow.j +++ b/AppKit/CPMenu/_CPMenuWindow.j @@ -110,8 +110,6 @@ var STICKY_TIME_INTERVAL = 500, [_moreBelowView setFrameSize:[_CPMenuWindowMoreBelowImage size]]; [contentView addSubview:_moreBelowView]; - - [self setShadowStyle:CPWindowShadowStyleMenu]; } return self; From 2a955884b8b224c6882f7b1e80a375a305815d27 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 11 Jun 2012 13:14:00 +0100 Subject: [PATCH 061/112] Fix header. --- AppKit/_CPAttachedWindow.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/_CPAttachedWindow.j b/AppKit/_CPAttachedWindow.j index 8e53162a6..ccbf265f1 100644 --- a/AppKit/_CPAttachedWindow.j +++ b/AppKit/_CPAttachedWindow.j @@ -1,5 +1,5 @@ /* - * _CPToolTipWindowView.j + * _CPAttachedWindow.j * AppKit * * Created by Antoine Mercadal From 52fff2056b5d6cd2908c8e646548c0fa02a5adda Mon Sep 17 00:00:00 2001 From: Malte Tancred Date: Tue, 12 Jun 2012 17:44:17 +0200 Subject: [PATCH 062/112] Fixed code standard issues. --- Tools/XcodeCapp/TNXCodeCapp.m | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Tools/XcodeCapp/TNXCodeCapp.m b/Tools/XcodeCapp/TNXCodeCapp.m index 2ecee5fdc..5558f9e22 100644 --- a/Tools/XcodeCapp/TNXCodeCapp.m +++ b/Tools/XcodeCapp/TNXCodeCapp.m @@ -469,10 +469,13 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification } /*! - Create the xCodeSupport/Sources folder if necessary. + Create the .xCodeSupport/Sources folder if necessary. */ -- (void)createXcodeSupportProjectSourcesDirIfNecessary { - if ([fm fileExistsAtPath:[XCodeSupportProjectSources path]]) return; +- (void)createXcodeSupportProjectSourcesDirIfNecessary +{ + if ([fm fileExistsAtPath:[XCodeSupportProjectSources path]]) + return; + DLog(@"Creating source folder %@", [XCodeSupportProjectSources path]); [fm createDirectoryAtPath:[XCodeSupportProjectSources path] withIntermediateDirectories:YES attributes:nil error:nil]; } From 2a48b0ca54de6ca3b8b8692562819acf46b07c8d Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Tue, 12 Jun 2012 11:57:19 -0700 Subject: [PATCH 063/112] make actualResizeEvent a private method --- AppKit/Platform/DOM/CPPlatformWindow+DOM.j | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index 11c7a0a64..bdab72a10 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -1088,12 +1088,15 @@ var resizeTimer = nil; // This is a hack for the browser resize bug in safari. // See bug ID: 1325 // https://github.com/cappuccino/cappuccino/issues/1325 + // Addendum by Antoine Mercadal : I also noticed that reszing is causing + // problem under latest Firefox 13.0. Let's just use this hack + // for all browser now. [resizeTimer invalidate]; - resizeTimer = [CPTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(actualResizeEvent) userInfo:nil repeats:NO]; + resizeTimer = [CPTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(_actualResizeEvent) userInfo:nil repeats:NO]; } -- (void)actualResizeEvent +- (void)_actualResizeEvent { resizeTimer = nil; From 3bc18490418b6bd051b37d7292e58d2daff230e7 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Tue, 12 Jun 2012 23:04:33 +0100 Subject: [PATCH 064/112] Improve toolbar item layout. The height of all items is determined by the tallest item, like in Cocoa. But unlike Cocoa our toolbar is presently fixed height so in order to make this look well for small or large items, the whole row of items is now vertically centred, making the allocation of margin above and below automatic. Furthermore if a toolbar item has a small view or a small icon, it is now centred within the available space above the label. For example, for a tiny icon in one item next to a normal size icon the tiny icon would be centre aligned with the larger icon. --- AppKit/CPToolbar.j | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/AppKit/CPToolbar.j b/AppKit/CPToolbar.j index c759a87a2..72fa5b8c4 100644 --- a/AppKit/CPToolbar.j +++ b/AppKit/CPToolbar.j @@ -536,8 +536,7 @@ var _CPToolbarViewBackgroundColor = nil, _CPToolbarViewExtraItemsImage = nil, _CPToolbarViewExtraItemsAlternateImage = nil; -var TOOLBAR_TOP_MARGIN = 5.0, - TOOLBAR_ITEM_MARGIN = 10.0, +var TOOLBAR_ITEM_MARGIN = 10.0, TOOLBAR_EXTRA_ITEMS_WIDTH = 20.0; var _CPToolbarItemInfoMake = function(anIndex, aView, aLabel, aMinWidth) @@ -754,14 +753,15 @@ var _CPToolbarItemInfoMake = function(anIndex, aView, aLabel, aMinWidth) // Now that all the visible items are the correct width, give them their final frames. var index = 0, count = _visibleItems.length, - x = TOOLBAR_ITEM_MARGIN; + x = TOOLBAR_ITEM_MARGIN, + y = CEIL(([self frame].size.height - height) / 2.0); for (; index < count; ++index) { var view = [self viewForItem:_visibleItems[index]], viewWidth = CGRectGetWidth([view frame]); - [view setFrame:CGRectMake(x, 0.0, viewWidth, height)]; + [view setFrame:CGRectMake(x, y, viewWidth, height)]; x += viewWidth + TOOLBAR_ITEM_MARGIN; } @@ -906,8 +906,7 @@ var _CPToolbarItemVisibilityPriorityCompare = function(lhs, rhs) return CPOrderedDescending; }; -var TOP_MARGIN = 5.0, - LABEL_MARGIN = 2.0; +var LABEL_MARGIN = 2.0; @implementation _CPToolbarItemView : CPControl { @@ -1042,7 +1041,7 @@ var TOP_MARGIN = 5.0, _labelSize = [_labelField frame].size; - _minSize = CGSizeMake(MAX(_labelSize.width, minSize.width), _labelSize.height + minSize.height + LABEL_MARGIN + TOP_MARGIN); + _minSize = CGSizeMake(MAX(_labelSize.width, minSize.width), _labelSize.height + minSize.height + LABEL_MARGIN); _maxSize = CGSizeMake(MAX(_labelSize.width, maxSize.width), 100000000.0); [_toolbar tile]; @@ -1062,18 +1061,20 @@ var TOP_MARGIN = 5.0, if (identifier === CPToolbarSeparatorItemIdentifier) return [_view setFrame:CGRectMake(ROUND((width - 2.0) / 2.0), 0.0, 2.0, _CGRectGetHeight(bounds))]; + // The view is centred in the available space above the label. var view = _view || _imageView, itemMaxSize = [_toolbarItem maxSize], - height = _CGRectGetHeight(bounds) - _labelSize.height - LABEL_MARGIN - TOP_MARGIN, + height = _CGRectGetHeight(bounds) - _labelSize.height, viewWidth = MIN(itemMaxSize.width, width), viewHeight = MIN(itemMaxSize.height, height); - [view setFrame:CGRectMake( ROUND((width - viewWidth) / 2.0), - TOP_MARGIN + ROUND((height - viewHeight) / 2.0), - viewWidth, - viewHeight)]; + [view setFrame:CGRectMake(ROUND((width - viewWidth) / 2.0), + ROUND((height - viewHeight) / 2.0), + viewWidth, + viewHeight)]; - [_labelField setFrameOrigin:CGPointMake(ROUND((width - _labelSize.width) / 2.0), TOP_MARGIN + height + LABEL_MARGIN)]; + // Label is always drawn at the bottom of the view. So if the view is really tall but the icon is tiny, the icon is centred above the label but the label remains on the bottom. + [_labelField setFrameOrigin:CGPointMake(ROUND((width - _labelSize.width) / 2.0), _CGRectGetHeight(bounds) - _labelSize.height)]; } - (void)mouseDown:(CPEvent)anEvent From 026c210e644dc4e453b2ff6d1f96a6104911212e Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Tue, 12 Jun 2012 23:05:16 +0100 Subject: [PATCH 065/112] Toolbar CPToolbarDisplayModeIconOnly support. --- AppKit/CPToolbar.j | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/AppKit/CPToolbar.j b/AppKit/CPToolbar.j index 72fa5b8c4..0ad30ebac 100644 --- a/AppKit/CPToolbar.j +++ b/AppKit/CPToolbar.j @@ -91,7 +91,7 @@ var TOOLBAR_REGULAR_HEIGHT = 59.0, @implementation CPToolbar : CPObject { CPString _identifier; - CPToolbarDisplayMode _displayMode; + CPToolbarDisplayMode _displayMode @accessors(property=displayMode); BOOL _showsBaselineSeparator; BOOL _allowsUserCustomization; BOOL _isVisible; @@ -246,6 +246,15 @@ var TOOLBAR_REGULAR_HEIGHT = 59.0, [self _reloadToolbarItems]; } +- (void)setDisplayMode:(CPToolbarDisplayMode)aDisplayMode +{ + if (_displayMode === aDisplayMode) + return; + _displayMode = aDisplayMode; + + [self _reloadToolbarItems]; +} + /* @ignore */ - (void)_loadConfiguration { @@ -1039,7 +1048,10 @@ var LABEL_MARGIN = 2.0; [self setEnabled:[_toolbarItem isEnabled]]; - _labelSize = [_labelField frame].size; + var iconOnly = [[_toolbarItem toolbar] displayMode] === CPToolbarDisplayModeIconOnly; + [_labelField setHidden:iconOnly]; + + _labelSize = iconOnly ? CGSizeMakeZero(): [_labelField frame].size; _minSize = CGSizeMake(MAX(_labelSize.width, minSize.width), _labelSize.height + minSize.height + LABEL_MARGIN); _maxSize = CGSizeMake(MAX(_labelSize.width, maxSize.width), 100000000.0); From 70bc45ba126b58aaa5ce7b5d8736573d57ed3206 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Tue, 12 Jun 2012 23:26:43 +0100 Subject: [PATCH 066/112] Toolbar CPToolbarDisplayModeIconOnly support. --- AppKit/CPToolbar.j | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/AppKit/CPToolbar.j b/AppKit/CPToolbar.j index 0ad30ebac..a2a4969d3 100644 --- a/AppKit/CPToolbar.j +++ b/AppKit/CPToolbar.j @@ -1048,12 +1048,14 @@ var LABEL_MARGIN = 2.0; [self setEnabled:[_toolbarItem isEnabled]]; - var iconOnly = [[_toolbarItem toolbar] displayMode] === CPToolbarDisplayModeIconOnly; + _labelSize = [_labelField frame].size; + + var iconOnly = [[_toolbarItem toolbar] displayMode] === CPToolbarDisplayModeIconOnly, + labelOnly = [[_toolbarItem toolbar] displayMode] === CPToolbarDisplayModeLabelOnly; [_labelField setHidden:iconOnly]; + [_view setHidden:labelOnly]; - _labelSize = iconOnly ? CGSizeMakeZero(): [_labelField frame].size; - - _minSize = CGSizeMake(MAX(_labelSize.width, minSize.width), _labelSize.height + minSize.height + LABEL_MARGIN); + _minSize = CGSizeMake(MAX(_labelSize.width, minSize.width), (labelOnly ? 0 : minSize.height) + (iconOnly ? 0 : _labelSize.height +LABEL_MARGIN)); _maxSize = CGSizeMake(MAX(_labelSize.width, maxSize.width), 100000000.0); [_toolbar tile]; @@ -1076,7 +1078,8 @@ var LABEL_MARGIN = 2.0; // The view is centred in the available space above the label. var view = _view || _imageView, itemMaxSize = [_toolbarItem maxSize], - height = _CGRectGetHeight(bounds) - _labelSize.height, + iconOnly = [[_toolbarItem toolbar] displayMode] === CPToolbarDisplayModeIconOnly, + height = _CGRectGetHeight(bounds) - (iconOnly ? 0 : _labelSize.height), viewWidth = MIN(itemMaxSize.width, width), viewHeight = MIN(itemMaxSize.height, height); @@ -1085,7 +1088,7 @@ var LABEL_MARGIN = 2.0; viewWidth, viewHeight)]; - // Label is always drawn at the bottom of the view. So if the view is really tall but the icon is tiny, the icon is centred above the label but the label remains on the bottom. + // Label is always drawn at the bottom of the view. So if the view is really tall but the icon is tiny, the icon is centred above the label while the label remains on the bottom. [_labelField setFrameOrigin:CGPointMake(ROUND((width - _labelSize.width) / 2.0), _CGRectGetHeight(bounds) - _labelSize.height)]; } From acd3425c43a35caee696c43a560c5bb806453ba8 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Wed, 13 Jun 2012 01:26:33 +0100 Subject: [PATCH 067/112] Dynamic CPToolbar height, * Support for tall custom widgets. You can now finally have that CPTableView you always wanted in your toolbar. * "Labels only" mode now makes sense, resulting in a narrow text only toolbar instead of a very tall toolbar with centred labels. * Use any size toolbar icons such as 48x48 and the toolbar adapts automatically (unlike Cocoa). --- AppKit/CPToolbar.j | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/AppKit/CPToolbar.j b/AppKit/CPToolbar.j index a2a4969d3..5c00b79e8 100644 --- a/AppKit/CPToolbar.j +++ b/AppKit/CPToolbar.j @@ -59,7 +59,8 @@ var CPToolbarsByIdentifier = nil, CPToolbarConfigurationsByIdentifier = nil; var TOOLBAR_REGULAR_HEIGHT = 59.0, - TOOLBAR_SMALL_HEIGHT = 46.0; + TOOLBAR_SMALL_HEIGHT = 46.0, + TOOLBAR_MARGIN_HEIGHT = 7.0; /*! @ingroup appkit @@ -96,6 +97,7 @@ var TOOLBAR_REGULAR_HEIGHT = 59.0, BOOL _allowsUserCustomization; BOOL _isVisible; int _sizeMode @accessors(property=sizeMode); + int _desiredHeight; id _delegate; @@ -158,6 +160,7 @@ var TOOLBAR_REGULAR_HEIGHT = 59.0, _identifier = anIdentifier; _isVisible = YES; _sizeMode = CPToolbarSizeModeDefault; + _desiredHeight = 0; [CPToolbar _addToolbar:self forIdentifier:_identifier]; } @@ -263,7 +266,8 @@ var TOOLBAR_REGULAR_HEIGHT = 59.0, - (CGRect)_toolbarViewFrame { - return CPRectMake(0.0, 0.0, 1200.0, _sizeMode != CPToolbarSizeModeSmall ? TOOLBAR_REGULAR_HEIGHT : TOOLBAR_SMALL_HEIGHT); + var height = _desiredHeight || (_sizeMode != CPToolbarSizeModeSmall ? TOOLBAR_REGULAR_HEIGHT : TOOLBAR_SMALL_HEIGHT); + return CPRectMake(0.0, 0.0, 1200.0, height); } /* @ignore */ @@ -701,6 +705,23 @@ var _CPToolbarItemInfoMake = function(anIndex, aView, aLabel, aMinWidth) height = minSize.height; } + // We'll figure out the proper height for the toolbar depending on its items. + // If nothing has a minimum size we'll use the standard toolbar size for the + // sizeMode, indicated by a 0 _desiredHeight. + var newDesiredHeight = height ? height + TOOLBAR_MARGIN_HEIGHT : 0; + + if (newDesiredHeight != _toolbar._desiredHeight) + { + // FIXME Probably the toolbar view shouldn't be telling the toolbar which height it should be. Maybe refactor + // to just have the toolbar scan the toolbar items whenever the items change. + _toolbar._desiredHeight = newDesiredHeight; + + [self setFrame:[_toolbar _toolbarViewFrame]]; + [_toolbar._window _noteToolbarChanged]; + // The above will cause tile to be called again. + return; + } + // Determine all the items that have flexible width. // Also determine the height of the toolbar. var count = _visibleItems.length, From a66942b1b1e082929c22c1f85e392307b3a2e860 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Wed, 13 Jun 2012 01:40:20 +0100 Subject: [PATCH 068/112] Fix and tweak toolbar margins. --- AppKit/CPToolbar.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPToolbar.j b/AppKit/CPToolbar.j index 5c00b79e8..982cc2301 100644 --- a/AppKit/CPToolbar.j +++ b/AppKit/CPToolbar.j @@ -60,7 +60,7 @@ var CPToolbarsByIdentifier = nil, var TOOLBAR_REGULAR_HEIGHT = 59.0, TOOLBAR_SMALL_HEIGHT = 46.0, - TOOLBAR_MARGIN_HEIGHT = 7.0; + TOOLBAR_MARGIN_HEIGHT = 4.0; /*! @ingroup appkit @@ -708,7 +708,7 @@ var _CPToolbarItemInfoMake = function(anIndex, aView, aLabel, aMinWidth) // We'll figure out the proper height for the toolbar depending on its items. // If nothing has a minimum size we'll use the standard toolbar size for the // sizeMode, indicated by a 0 _desiredHeight. - var newDesiredHeight = height ? height + TOOLBAR_MARGIN_HEIGHT : 0; + var newDesiredHeight = height ? height + 2 * TOOLBAR_MARGIN_HEIGHT : 0; if (newDesiredHeight != _toolbar._desiredHeight) { From 7a467e249e922f35bfd5e3be1c3d60d2319c48b6 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Wed, 13 Jun 2012 01:40:59 +0100 Subject: [PATCH 069/112] Manual test for toolbars. --- Tests/Manual/CPToolbarTest/AppController.j | 133 ++++++++++++++++++ Tests/Manual/CPToolbarTest/Info.plist | 12 ++ Tests/Manual/CPToolbarTest/Jakefile | 93 ++++++++++++ .../Resources/CPImageNameColorPanel.png | Bin 0 -> 1902 bytes Tests/Manual/CPToolbarTest/Resources/New.png | Bin 0 -> 497 bytes .../CPToolbarTest/Resources/spinner.gif | Bin 0 -> 1849 bytes Tests/Manual/CPToolbarTest/index-debug.html | 107 ++++++++++++++ Tests/Manual/CPToolbarTest/index.html | 78 ++++++++++ Tests/Manual/CPToolbarTest/main.j | 18 +++ 9 files changed, 441 insertions(+) create mode 100644 Tests/Manual/CPToolbarTest/AppController.j create mode 100644 Tests/Manual/CPToolbarTest/Info.plist create mode 100644 Tests/Manual/CPToolbarTest/Jakefile create mode 100644 Tests/Manual/CPToolbarTest/Resources/CPImageNameColorPanel.png create mode 100644 Tests/Manual/CPToolbarTest/Resources/New.png create mode 100644 Tests/Manual/CPToolbarTest/Resources/spinner.gif create mode 100644 Tests/Manual/CPToolbarTest/index-debug.html create mode 100644 Tests/Manual/CPToolbarTest/index.html create mode 100644 Tests/Manual/CPToolbarTest/main.j diff --git a/Tests/Manual/CPToolbarTest/AppController.j b/Tests/Manual/CPToolbarTest/AppController.j new file mode 100644 index 000000000..538a74ecf --- /dev/null +++ b/Tests/Manual/CPToolbarTest/AppController.j @@ -0,0 +1,133 @@ +/* + * AppController.j + * CPToolbarTest + * + * Created by Alexander Ljungberg on June 12, 2012. + * Copyright 2012, SlevenBits Ltd. All rights reserved. + */ + +@import + + +@implementation AppController : CPObject +{ +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + // We want to test all combinations of: + // Label/Icon/Label and Icon/Small/Normal/Has oversized item. + + var NO_LABEL = 1 << 0, + NO_ICON = 1 << 1, + HAS_TALL_ITEM = 1 << 2, + IS_SMALL = 1 << 3, + windows = [], + x = 10, + y = 30; + + for (var i = 0; i < (NO_LABEL | NO_ICON | IS_SMALL | HAS_TALL_ITEM); i++) + { + var hasLabel = !(i & NO_LABEL), + hasIcon = !(i & NO_ICON), + isSmall = !!(i & IS_SMALL), + hasTallItem = !!(i & HAS_TALL_ITEM); + + if (!hasLabel && !hasIcon) + continue; + + // A tall item where the view isn't visible is just a label so don't bother showing that. + if (!hasIcon && hasTallItem) + continue; + + var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(x, y, 400, 20) styleMask:CPTitledWindowMask], + contentView = [theWindow contentView]; + + [theWindow setTitle:"Toolbar (LBL: " + hasLabel + " ICN: " + hasIcon + " SMALL: " + isSmall + " TALLITEM: " + hasTallItem + ")"]; + + var toolbarDelegate = [ToolbarDelegate new], + items = [@"new"]; + if (!isSmall) + [items addObject:@"colour"]; + if (hasTallItem) + [items addObject:@"tallitem"]; + [toolbarDelegate setItems:items]; + + var toolbar = [CPToolbar new]; + [toolbar setSizeMode:isSmall ? CPToolbarSizeModeSmall : CPToolbarSizeModeRegular]; + if (hasLabel && hasIcon) + [toolbar setDisplayMode:CPToolbarDisplayModeIconAndLabel]; + else if (hasLabel) + [toolbar setDisplayMode:CPToolbarDisplayModeLabelOnly]; + else + [toolbar setDisplayMode:CPToolbarDisplayModeIconOnly]; + + [toolbar setDelegate:toolbarDelegate]; + [theWindow setToolbar:toolbar]; + + windows[i] = theWindow; + + [theWindow orderFront:nil]; + + y += [theWindow frame].size.height + 10; + if (y + 80 > [[theWindow platformWindow] visibleFrame].size.height) + { + y = 30; + x += 430; + } + } +} + + +@end + +@implementation ToolbarDelegate : CPObject +{ + CPArray items @accessors; +} + +- (CPArray)toolbarDefaultItemIdentifiers:(CPToolbar)toolbar +{ + return items; +} + +- (CPArray)toolbarAllowedItemIdentifiers:(CPToolbar)toolbar +{ + return items; +} + +- (CPToolbarItem)toolbar:(CPToolbar)toolbar itemForItemIdentifier:(CPString)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag +{ + var toolbarItem = [[CPToolbarItem alloc] initWithItemIdentifier:itemIdentifier]; + if (itemIdentifier == "colour") + { + [toolbarItem setLabel:@"Colour"]; + [toolbarItem setImage:[[CPImage alloc] initWithContentsOfFile:[[CPBundle mainBundle] pathForResource:@"CPImageNameColorPanel.png"] size:CPSizeMake(26, 29)]]; + return toolbarItem; + } + else if (itemIdentifier == "new") + { + [toolbarItem setLabel:@"Small New"]; + [toolbarItem setImage:[[CPImage alloc] initWithContentsOfFile:[[CPBundle mainBundle] pathForResource:@"New.png"] size:CPSizeMake(16, 16)]]; + return toolbarItem; + } + else if (itemIdentifier == "tallitem") + { + [toolbarItem setLabel:@"Tall Item"]; + [toolbarItem setMinSize:CGSizeMake(60, 70)]; + [toolbarItem setMaxSize:CGSizeMake(60, 70)]; + + var view = [[CPView alloc] initWithFrame:CGRectMake(0, 0, 60, 70)]; + + for (var i = 0; i < 3; i++) + { + var slider = [[CPSlider alloc] initWithFrame: CGRectMake(0, i * 25, 60, 20)]; + [view addSubview:slider]; + } + + [toolbarItem setView:view]; + return toolbarItem; + } +} + +@end diff --git a/Tests/Manual/CPToolbarTest/Info.plist b/Tests/Manual/CPToolbarTest/Info.plist new file mode 100644 index 000000000..1bdb875a5 --- /dev/null +++ b/Tests/Manual/CPToolbarTest/Info.plist @@ -0,0 +1,12 @@ + + + + + CPApplicationDelegateClass + AppController + CPBundleName + CPToolbarTest + CPPrincipalClass + CPApplication + + diff --git a/Tests/Manual/CPToolbarTest/Jakefile b/Tests/Manual/CPToolbarTest/Jakefile new file mode 100644 index 000000000..157653e69 --- /dev/null +++ b/Tests/Manual/CPToolbarTest/Jakefile @@ -0,0 +1,93 @@ +/* + * Jakefile + * CPToolbarTest + * + * Created by Alexander Ljungberg on June 12, 2012. + * Copyright 2012, SlevenBits Ltd. All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"); + +app ("CPToolbarTest", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "CPToolbarTest.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPToolbarTest"); + task.setIdentifier("com.slevenbits.CPToolbarTest"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPToolbarTest"); + task.setSources((new FileList("**/*.j")).exclude(FILE.join("Build", "**"))); + 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", ["CPToolbarTest"], function() +{ + printResults(configuration); +}); + +task ("build", ["default"]); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", "CPToolbarTest", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "CPToolbarTest", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "CPToolbarTest")); + OS.system(["press", "-f", FILE.join("Build", "Release", "CPToolbarTest"), FILE.join("Build", "Deployment", "CPToolbarTest")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "CPToolbarTest")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "CPToolbarTest"), FILE.join("Build", "Desktop", "CPToolbarTest", "CPToolbarTest.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "CPToolbarTest", "CPToolbarTest.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "CPToolbarTest")); + print("----------------------------"); +} diff --git a/Tests/Manual/CPToolbarTest/Resources/CPImageNameColorPanel.png b/Tests/Manual/CPToolbarTest/Resources/CPImageNameColorPanel.png new file mode 100644 index 0000000000000000000000000000000000000000..85f94ee5833ba1f4a1985ca7dbb52d5535c5d3a1 GIT binary patch literal 1902 zcmV-!2a))RP)6?0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU(5J^NqRCwBqmTPPr)fLCjow@VgwbyGq zPV7W&Vv|IKK#T(=6q*1@_&`J=1Bwu!NGMW2w5pK8H$YWY)DNf+zO+?8RZyuRA_~yR zRuzN@2oW9yT&l(~-~@xQvMtdB=~^_x^Zv*ZB)l0X)`IE&q z-oNYmtE&B*f7qILxv|zTOu0T8h2c_Mk47d&7f+AB<&~S4KIEGJ_zU~~@Y??cI{4_2 z*)+uO+6rRu{{6R@+k4wOB8{kq+X9R}Q%{jYf-FkNBSr?U|5f>@^xT_A8)Y%`BBSWY zvAg~nek3LkU)}T2Jp;Wy)@SkIbD|iQ7(_zm!xGXcg2lu!IwGMCW|58M zXW#qV_&XQh_=1UO@aVo{^IroUIy~$MPN(MZ-bxqrkw)b_9qO8-i zkgEz%fW>C&TSrVft+WKfC0LHAMh%*w5{=PkbaUTN*4)&6Q;~`A>1F>4^zeNr2ikM& zz#X^sZ}?;!asko+q$#zF;7}SsTpD0d5hj#Lm=2Ucb`7dih34rzO|Ux$?p|NiiU%He z;nso6AQmQ1?Yw(`tu$pgmTUT{Vd@3kzqKi-q6JayRrlUR_Ff)Tl$zrtS3Epr}Z2Im%ha(Q&~Foi_8Ns~7svlurxRpMribS^XV;W|(z zfgb)xM;GhJ=nVIW9~TP?hueyj@QTpffRUX6Ecn$d+2etdhGJ-H$~}NZAKwRnhZ4F( z%&wAU)`_zQn#ETcwo)MpW`cHy8^_h@{oHlKr`PrTpzFuZmd#7>WwoK;FxCb~1yEby zEQdNcODTxe(zeWDJrAgdhg^JbSMYF|gi%Jla`gVcgR${*^B3!%+7v% zlCIv;$Sy&!|K@`>Bz3b3FeyR@D<$a7Uencq&BHFl&2muHxnJh34XRMmO z+wcYwVdRYcR#QG z?6)V*$yOC2%VZ^J`3)^k82;yVzu2`-cb@R|#a^@6nA^PCa0*Unc6NB3^5&WHT&WZ` zf|1&^ztAifbz7XD43gjc`qZbdtAmczaTv+h7Ff-dAbChTX%nJ1Aq=c#r`vnYjdsWG zP9wQCp(W4L{Z&mIJ7pHnB^K4EL_GSzQuylobB(jOe<5vCbtYBQ9Zn5^!tVvaAU>_i zMmhJgw}_uPM2FBN*nD>Vy`Zm1mw`=M@p{VUoR(insWeiiMrPrP?=DLx?Q6~O4YvFv oX61bOX9Hzpa>e{gqyGso04<+8iScS~E&u=k07*qoM6N<$g7>_oivR!s literal 0 HcmV?d00001 diff --git a/Tests/Manual/CPToolbarTest/Resources/New.png b/Tests/Manual/CPToolbarTest/Resources/New.png new file mode 100644 index 0000000000000000000000000000000000000000..058a6caa45a0c9f650d225cea4b6e56c756b5a5f GIT binary patch literal 497 zcmV%ET; zG4Im{Kkndr@AtiT-+dAQNEkE79I}8cBQC^?Y$Dsp2C{_AO5?!=RP2J0=yW<@7zTUC zwKHT#DB%Lyd5e;3wHl*PC_o~S7z%OyS}5THYTHkVx~?;d#UjYEJld34!UZ&QfRd2qq9~9` zrC4{EyN9d@1+7+#VcRyCrpXHG^*U6mRraLQ!Q6esEflod?Wyn)0=&j4=ytmkIm!ef z@)82yt@~@Dpx5h7v>ooRQQFbk7E_K!V( z{?5!fpZWgIZ%*d6t%i*j24bL}AZUJm9)h6R*;%L4IWse3G#VWaN1#$zSSXcBhlYlH zJ|D}n{r&w2f+Qp)SS*&n?*G4}{}!h?td_mjU6Kad-rW*QwWYCUk7d^e+sjpZAn6kT z5rM;`{~_}-wm+L@%+E;JphLm}C3WzQAQD0wBoY|rOTQX{(@pp-WAA8Iw0HKl|15j) zhGh(SFWu#5zUCw^T!}C~eC}~?{xG-r7ugQC>taC+|L^xr&a%{#cgUOZXIM&v?)k^2 z1i5%0!U00wq)r4vlAwXBA_m5J5WNeuBm-XJQ5pG4GD%vc|K){+TJ{AkHqN@SJKczX zU}QRd9n*_bf^h94)6Ctv{CUfz_;qs#RDuQ$DR%y1&5G-a6rhf*4Y zl+UOD1*GE{GQ7vv;c-tTIMkz0ovO>9j%b5hpa@a*CBJ#W!0@ndSwF|%hMkdFtXiU) z`BEp+yhkt8ZY>tg&uyH@%^%K4jDrbA;et&vnnzZ3z22@e6<27z2Vk13kb7OtISyxv z(XoO-LNQCZe3lfzc%*pNqU<9T+p~teThOEB+~e&U0mC|zS{Q)dJZ)!^1f7L(zg*L> z*vSW%?dR~@@0(}x6-V^A`~ImD;)NaBUnP8;RH=bS2@pk`wp>>8r&jGjmGPy%1BW}v zoPo}ca$~bze@efc3kapuEVW1!%teOZT3j2Tw5=hjiAf02d}7dL0oFC%@=RXp5Ow#% z@a>+AM|YWt$n&e`>sB-32gBcuTi>R>*|8@lp`y6thc7ydyqDsuUn~YzZf|{-R@-3y zL#wx{Ii}xxL_csiW*LBn0-A$>zp4WOmkf6=ilrjlW?-l9+bCd7|i?*b5NTmy<<6NZ0T8$SN@mwdC2f z6jqK=N@bS@!=YSj%>h0}*4p+%0HbTIrE$w7UMT6+AZZ&DAo*qZAAi(OtNbIfl#Dw^ zJWeiCp~zi#&t6x}m9)O^eR4HiLV3QA<<0>HZ8%$^lrSE94Wb}=+MM^!b>n#5&-JQR zkr-CEu9C;_F*7DqDisulV6Pmg$nFL0TPn%~*m^-`Z3^BgU(sNpnx%nW(!eV9A&FvI zHL3X3lw8Wji^6=8KbQDE-e%b?svdFxxdh$8r97@7$ojeI`6AL8Ob6QC$qh&>ZWVDX1F{0vJnT%%mE;GveKWR%C} zM&4d;Jf3s9|HAA)yVUPo`Aq;0do#)uHSXi5*QF*)x@MVVHr+cN)uMZ__F|&Ta#p8d z53TOKtce!PJUuie8UWol-S(`c2nH?UGqJP{!4RR4u$LCfn)q-hj0^f=h(VYy)T6eN zhRO!ja-aDBTcgeyP(8Ua4IdiOog^*CQa?R(cP#9AgL9`j>EX-6Yf1lzX(!~``M1XC zNmM<4<6d~wWZ$Xrk0K}UteTrq@LBBk#MsjkK;pbuVhe)NI7(7Pf(l?lxC7=1Z7Pzl zMbS;nV4NI5_N{1$P)&XC)huOGQ+h^zpYUZfb*1n6>!`#*b3y52LGmi+<4sY5jyD#- zw&$d}DTguLAfnRtjrM*JfqtHqUu6rQoU=g%1E9xk%;)TDm^2<8n-0IhTsQFaek)MY}>PK4;nBk=ow4pF>vzkO& gna%Org-kgQCf=+BeMi^RbuY;YE~rTjend;_cdi8t>i_@% literal 0 HcmV?d00001 diff --git a/Tests/Manual/CPToolbarTest/index-debug.html b/Tests/Manual/CPToolbarTest/index-debug.html new file mode 100644 index 000000000..8daf532a4 --- /dev/null +++ b/Tests/Manual/CPToolbarTest/index-debug.html @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + CPToolbarTest + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPToolbarTest/index.html b/Tests/Manual/CPToolbarTest/index.html new file mode 100644 index 000000000..38b4c27be --- /dev/null +++ b/Tests/Manual/CPToolbarTest/index.html @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + CPToolbarTest + + + + + + + + + + + + +
+
+ + + +
+
+ + + + diff --git a/Tests/Manual/CPToolbarTest/main.j b/Tests/Manual/CPToolbarTest/main.j new file mode 100644 index 000000000..f12b07fb9 --- /dev/null +++ b/Tests/Manual/CPToolbarTest/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CPToolbarTest + * + * Created by Alexander Ljungberg on June 12, 2012. + * Copyright 2012, SlevenBits Ltd. All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From 1b9def2101173d160ec7a9e2dcd7581562fb5416 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Wed, 13 Jun 2012 02:12:49 +0100 Subject: [PATCH 070/112] Allow asymmetric toolbar margins. Foundation for theming. Toolbars cannot be themed yet but when theming becomes possible this code should adapt readily. --- AppKit/CPToolbar.j | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/AppKit/CPToolbar.j b/AppKit/CPToolbar.j index 982cc2301..aa7195012 100644 --- a/AppKit/CPToolbar.j +++ b/AppKit/CPToolbar.j @@ -58,10 +58,6 @@ CPToolbarSizeModeSmall = 2; var CPToolbarsByIdentifier = nil, CPToolbarConfigurationsByIdentifier = nil; -var TOOLBAR_REGULAR_HEIGHT = 59.0, - TOOLBAR_SMALL_HEIGHT = 46.0, - TOOLBAR_MARGIN_HEIGHT = 4.0; - /*! @ingroup appkit @class CPToolbar @@ -139,6 +135,19 @@ var TOOLBAR_REGULAR_HEIGHT = 59.0, [toolbarsSharingIdentifier addObject:toolbar]; } +/* + Temporary theme attributes until we've figured out which CPView these theme attributes should + belong to. + @ignore +*/ ++ (id)_themeAttributes +{ + // "regular-size-height" is used if no item has a non-zero min size and sizeMode == CPToolbarSizeModeRegular. + // "small-size-height" is used if no item has a non-zero min size and sizeMode == CPToolbarSizeModeSmall. + return [CPDictionary dictionaryWithObjects:[_CGInsetMake(4.0, 4.0, 4.0, TOOLBAR_ITEM_MARGIN), 59.0, 46.0] + forKeys:[@"content-inset", @"regular-size-height", @"small-size-height"]]; +} + - (id)init { return [self initWithIdentifier:@""]; @@ -266,10 +275,20 @@ var TOOLBAR_REGULAR_HEIGHT = 59.0, - (CGRect)_toolbarViewFrame { - var height = _desiredHeight || (_sizeMode != CPToolbarSizeModeSmall ? TOOLBAR_REGULAR_HEIGHT : TOOLBAR_SMALL_HEIGHT); + var height = _desiredHeight || (_sizeMode != CPToolbarSizeModeSmall ? [self _valueForThemeAttribute:@"regular-size-height"] : [self _valueForThemeAttribute:@"small-size-height"]); return CPRectMake(0.0, 0.0, 1200.0, height); } +/* + Temporary theme attributes until we've figured out which CPView these theme attributes should + belong to. + @ignore +*/ +- (id)_valueForThemeAttribute:(CPString)attributeName +{ + return [[[self class] _themeAttributes] valueForKey:attributeName]; +} + /* @ignore */ - (CPView)_toolbarView { @@ -708,7 +727,8 @@ var _CPToolbarItemInfoMake = function(anIndex, aView, aLabel, aMinWidth) // We'll figure out the proper height for the toolbar depending on its items. // If nothing has a minimum size we'll use the standard toolbar size for the // sizeMode, indicated by a 0 _desiredHeight. - var newDesiredHeight = height ? height + 2 * TOOLBAR_MARGIN_HEIGHT : 0; + var contentInset = [_toolbar _valueForThemeAttribute:@"content-inset"], + newDesiredHeight = height ? height + contentInset.top + contentInset.bottom : 0; if (newDesiredHeight != _toolbar._desiredHeight) { @@ -783,8 +803,9 @@ var _CPToolbarItemInfoMake = function(anIndex, aView, aLabel, aMinWidth) // Now that all the visible items are the correct width, give them their final frames. var index = 0, count = _visibleItems.length, - x = TOOLBAR_ITEM_MARGIN, - y = CEIL(([self frame].size.height - height) / 2.0); + x = contentInset.left, + contentInset = [_toolbar _valueForThemeAttribute:@"content-inset"], + y = contentInset.top; for (; index < count; ++index) { From 72374257ef2cdc25e28c1a63b1dcb63b8abff9c3 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Wed, 13 Jun 2012 02:20:58 +0100 Subject: [PATCH 071/112] Minor optimisation and clean up. --- AppKit/CPToolbar.j | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/AppKit/CPToolbar.j b/AppKit/CPToolbar.j index aa7195012..4c7429638 100644 --- a/AppKit/CPToolbar.j +++ b/AppKit/CPToolbar.j @@ -606,9 +606,9 @@ var _CPToolbarItemInfoMake = function(anIndex, aView, aLabel, aMinWidth) var bundle = [CPBundle bundleForClass:self]; - _CPToolbarViewExtraItemsImage = [[CPImage alloc] initWithContentsOfFile: [bundle pathForResource:"_CPToolbarView/_CPToolbarViewExtraItemsImage.png"] size:CPSizeMake(10.0, 15.0)]; + _CPToolbarViewExtraItemsImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:"_CPToolbarView/_CPToolbarViewExtraItemsImage.png"] size:CPSizeMake(10.0, 15.0)]; - _CPToolbarViewExtraItemsAlternateImage = [[CPImage alloc] initWithContentsOfFile: [bundle pathForResource:"_CPToolbarView/_CPToolbarViewExtraItemsAlternateImage.png"] size:CGSizeMake(10.0, 15.0)]; + _CPToolbarViewExtraItemsAlternateImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:"_CPToolbarView/_CPToolbarViewExtraItemsAlternateImage.png"] size:_CGSizeMake(10.0, 15.0)]; } - (id)initWithFrame:(CGRect)aFrame @@ -622,7 +622,7 @@ var _CPToolbarItemInfoMake = function(anIndex, aView, aLabel, aMinWidth) _labelColor = [CPColor blackColor]; _labelShadowColor = [CPColor colorWithWhite:1.0 alpha:0.75]; - _additionalItemsButton = [[CPPopUpButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 10.0, 15.0) pullsDown:YES]; + _additionalItemsButton = [[CPPopUpButton alloc] initWithFrame:_CGRectMake(0.0, 0.0, 10.0, 15.0) pullsDown:YES]; [_additionalItemsButton setBordered:NO]; [_additionalItemsButton setImagePosition:CPImageOnly]; @@ -674,7 +674,7 @@ var _CPToolbarItemInfoMake = function(anIndex, aView, aLabel, aMinWidth) { // We begin by recalculating the visible items. var items = [_toolbar items], - itemsWidth = CGRectGetWidth([self bounds]), + itemsWidth = _CGRectGetWidth([self bounds]), minWidth = _minWidth, // FIXME: This should be a CPSet. invisibleItemsSortedByPriority = []; @@ -761,7 +761,7 @@ var _CPToolbarItemInfoMake = function(anIndex, aView, aLabel, aMinWidth) // static width (min==max). This handles the case where the user did setView: // with a view of a different size than minSize/maxSize else - [view setFrameSize:CGSizeMake(minSize.width, height)]; + [view setFrameSize:_CGSizeMake(minSize.width, height)]; [view setHidden:NO]; } @@ -796,7 +796,7 @@ var _CPToolbarItemInfoMake = function(anIndex, aView, aLabel, aMinWidth) remainingSpace += proposedWidth - constrainedWidth; } - [view setFrameSize:CGSizeMake(constrainedWidth, height)]; + [view setFrameSize:_CGSizeMake(constrainedWidth, height)]; } } @@ -810,9 +810,9 @@ var _CPToolbarItemInfoMake = function(anIndex, aView, aLabel, aMinWidth) for (; index < count; ++index) { var view = [self viewForItem:_visibleItems[index]], - viewWidth = CGRectGetWidth([view frame]); + viewWidth = _CGRectGetWidth([view frame]); - [view setFrame:CGRectMake(x, y, viewWidth, height)]; + [view setFrame:_CGRectMake(x, y, viewWidth, height)]; x += viewWidth + TOOLBAR_ITEM_MARGIN; } @@ -846,7 +846,7 @@ var _CPToolbarItemInfoMake = function(anIndex, aView, aLabel, aMinWidth) if (needsAdditionalItemsButton) { - [_additionalItemsButton setFrameOrigin:CGPointMake(itemsWidth + 5.0, (CGRectGetHeight([self bounds]) - CGRectGetHeight([_additionalItemsButton frame])) / 2.0)]; + [_additionalItemsButton setFrameOrigin:_CGPointMake(itemsWidth + 5.0, (_CGRectGetHeight([self bounds]) - _CGRectGetHeight([_additionalItemsButton frame])) / 2.0)]; [self addSubview:_additionalItemsButton]; @@ -984,12 +984,12 @@ var LABEL_MARGIN = 2.0; { _toolbarItem = aToolbarItem; - _labelField = [[CPTextField alloc] initWithFrame:CGRectMakeZero()]; + _labelField = [[CPTextField alloc] initWithFrame:_CGRectMakeZero()]; [_labelField setFont:[CPFont systemFontOfSize:11.0]]; [_labelField setTextColor:[self FIXME_labelColor]]; [_labelField setTextShadowColor:[self FIXME_labelShadowColor]]; - [_labelField setTextShadowOffset:CGSizeMake(0.0, 1.0)]; + [_labelField setTextShadowOffset:_CGSizeMake(0.0, 1.0)]; [_labelField setAutoresizingMask:CPViewWidthSizable | CPViewMinXMargin]; [self addSubview:_labelField]; @@ -1036,11 +1036,11 @@ var LABEL_MARGIN = 2.0; if (identifier === CPToolbarSeparatorItemIdentifier) { - _view = [[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, 2.0, 32.0)]; + _view = [[CPView alloc] initWithFrame:_CGRectMake(0.0, 0.0, 2.0, 32.0)]; // FIXME: Get rid of this old API!!! sizes = {}; - sizes[@"CPToolbarItemSeparator"] = [CGSizeMake(2.0, 26.0), CGSizeMake(2.0, 1.0), CGSizeMake(2.0, 26.0)]; + sizes[@"CPToolbarItemSeparator"] = [_CGSizeMake(2.0, 26.0), _CGSizeMake(2.0, 1.0), _CGSizeMake(2.0, 26.0)]; [_view setBackgroundColor:_CPControlThreePartImagePattern(YES, sizes, @"CPToolbarItem", @"Separator")]; [self addSubview:_view]; @@ -1097,8 +1097,8 @@ var LABEL_MARGIN = 2.0; [_labelField setHidden:iconOnly]; [_view setHidden:labelOnly]; - _minSize = CGSizeMake(MAX(_labelSize.width, minSize.width), (labelOnly ? 0 : minSize.height) + (iconOnly ? 0 : _labelSize.height +LABEL_MARGIN)); - _maxSize = CGSizeMake(MAX(_labelSize.width, maxSize.width), 100000000.0); + _minSize = _CGSizeMake(MAX(_labelSize.width, minSize.width), (labelOnly ? 0 : minSize.height) + (iconOnly ? 0 : _labelSize.height + LABEL_MARGIN)); + _maxSize = _CGSizeMake(MAX(_labelSize.width, maxSize.width), 100000000.0); [_toolbar tile]; } @@ -1115,7 +1115,7 @@ var LABEL_MARGIN = 2.0; width = _CGRectGetWidth(bounds); if (identifier === CPToolbarSeparatorItemIdentifier) - return [_view setFrame:CGRectMake(ROUND((width - 2.0) / 2.0), 0.0, 2.0, _CGRectGetHeight(bounds))]; + return [_view setFrame:_CGRectMake(ROUND((width - 2.0) / 2.0), 0.0, 2.0, _CGRectGetHeight(bounds))]; // The view is centred in the available space above the label. var view = _view || _imageView, @@ -1125,13 +1125,13 @@ var LABEL_MARGIN = 2.0; viewWidth = MIN(itemMaxSize.width, width), viewHeight = MIN(itemMaxSize.height, height); - [view setFrame:CGRectMake(ROUND((width - viewWidth) / 2.0), - ROUND((height - viewHeight) / 2.0), - viewWidth, - viewHeight)]; + [view setFrame:_CGRectMake(ROUND((width - viewWidth) / 2.0), + ROUND((height - viewHeight) / 2.0), + viewWidth, + viewHeight)]; // Label is always drawn at the bottom of the view. So if the view is really tall but the icon is tiny, the icon is centred above the label while the label remains on the bottom. - [_labelField setFrameOrigin:CGPointMake(ROUND((width - _labelSize.width) / 2.0), _CGRectGetHeight(bounds) - _labelSize.height)]; + [_labelField setFrameOrigin:_CGPointMake(ROUND((width - _labelSize.width) / 2.0), _CGRectGetHeight(bounds) - _labelSize.height)]; } - (void)mouseDown:(CPEvent)anEvent @@ -1194,7 +1194,7 @@ var LABEL_MARGIN = 2.0; if (alternateImage) [_imageView setImage:alternateImage]; - [_labelField setTextShadowOffset:CGSizeMakeZero()]; + [_labelField setTextShadowOffset:_CGSizeMakeZero()]; } else { @@ -1203,7 +1203,7 @@ var LABEL_MARGIN = 2.0; if (image) [_imageView setImage:image]; - [_labelField setTextShadowOffset:CGSizeMake(0.0, 1.0)]; + [_labelField setTextShadowOffset:_CGSizeMake(0.0, 1.0)]; } [_labelField setTextShadowColor:[self FIXME_labelShadowColor]]; From 4a4aa5fc106ddbf8797f563aef1af9ba2dda5c43 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Tue, 12 Jun 2012 18:08:48 -0700 Subject: [PATCH 072/112] update artwork for CPButtonBar --- .../Themes/Aristo/Resources/buttonbar-bezel.png | Bin 122 -> 127 bytes .../Resources/buttonbar-button-bezel-center.png | Bin 134 -> 122 bytes .../buttonbar-button-bezel-disabled-center.png | Bin 120 -> 125 bytes .../buttonbar-button-bezel-disabled-left.png | Bin 118 -> 143 bytes .../buttonbar-button-bezel-disabled-right.png | Bin 118 -> 147 bytes ...uttonbar-button-bezel-highlighted-center.png | Bin 134 -> 125 bytes .../buttonbar-button-bezel-highlighted-left.png | Bin 118 -> 138 bytes ...buttonbar-button-bezel-highlighted-right.png | Bin 117 -> 141 bytes .../Resources/buttonbar-button-bezel-left.png | Bin 118 -> 136 bytes .../Resources/buttonbar-button-bezel-right.png | Bin 118 -> 142 bytes .../Resources/buttonbar-resize-control.png | Bin 187 -> 148 bytes 11 files changed, 0 insertions(+), 0 deletions(-) diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-bezel.png b/AppKit/Themes/Aristo/Resources/buttonbar-bezel.png index 72f5b738516226c00f9e7ef40c4b0a84f921c226..0786263d59b513111ff759425e8a1d13e5aa957e 100644 GIT binary patch delta 59 zcmb=bpWtbx=;`7ZQgJKEqWBrl;s5{t&vcm4*vP2edrs}h@gzQn21bShSw^YPOauNi O0D-5gpUXO@geCw9$rx4u delta 54 zcmb=gn&4?D@+16~zDm diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-center.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-center.png index 6c0baa874c514f5037722bd5546e67765cf6152b..c7e5c8cffc17f0111c7a82ac0535da800d6d0537 100644 GIT binary patch delta 55 zcmZo;teW6yDC6nk7*cU7>Bs;7_QD*-1_lXBFWzkV5pjl*!+_yTy#eEqBbreRK;Y@> K=d#Wzp$PzKN)+M% delta 67 zcmb+ diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-center.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-center.png index bc422e26e6d403771fb7d6a8a1bd51c39924f186..849780a06845d81f2b01f77349cd60e8f8e0afb0 100644 GIT binary patch delta 69 zcmb=Zogm4<#=yYvVS-EjL`4k~c~2L|kcwMLKmPx(XBM82kdVZ{bVnyACh2IwOdf#* ZhABb@jn((87Xh^}c)I$ztaD0e0svHp7%cz* delta 64 zcmb=em>|i)#K6E%|LL;EL`4mKDNh&2kcwMLHUGczKVI!$?|G>I{$E8_W)=yC2lw0# UG0Mqa0IFv2boFyt=akR{005&GXaE2J diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-left.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-left.png index f9072691374e969fecb586911ca51f37631f9bf7..54d6e3085a56314022dd70c61e4826782c40dfd3 100644 GIT binary patch delta 88 zcmV-e0H^< uNRj^t5j3g)3|ORa82FzEHDtLEAiw}=*EXb-jE~g-0000F!Nw>-$efqt=eul(>gbTq8jBE@OQ(1Gi T7X0)Ds%7wW^>bP0l+XkK#n~38 diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-right.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-right.png index 0677c2a390b01feeb080010a3ade3917c3b7d8fb..46220830eb18f2bb1d7acecc6d375d401f1f42c8 100644 GIT binary patch delta 92 zcmV-i0HgnQlL3$!2nGNE02`z0000!f2^WGH7}*#m{bJ2g T`&q^gRLkJ$>gTe~DWM4fu`?CQ diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-highlighted-center.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-highlighted-center.png index 6702e3a08b61d70911d427644731fd6cb419ae3c..ee02c199cc838477c8c9f61730d0f650b3ee7f72 100644 GIT binary patch delta 58 zcmZo;texO#BJb(q7*cU7sp9`XTVZ8oWnpG!<}j(bz8(EXWf~Zm8B{(qYriguzsCRs Mp00i_>zopr06kg~`2YX_ delta 67 zcmbQuS diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-highlighted-left.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-highlighted-left.png index 0bdaf7440347fcbb463d2774aa4103e20bf4e582..05d29954899e97236e0ddefc5bc15bd72fe274a2 100644 GIT binary patch delta 71 zcmXTxVw~XVsN?D47*cU7Y1i)$AAf&;KT`q-Bqbe11O!eV7D+jx%)VG+<0(U-bZdtO ZMuwyMtQQ$1e3vi)fv2mV%Q~loCIAEN8OQ(t delta 51 zcmeBTESun|E8*$l7*cU7DQ0`>_ub|1XGk1KxDd?1$i@)4m{oFZ)2f*aK;Y@>=d#Wz Gp$Py9l@k5{ diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-highlighted-right.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-highlighted-right.png index b0533c1d93ad180cbc00a7472f6012ddae22512b..2aef0e98ed963b4d33bf7bddc914ed093f819f78 100644 GIT binary patch delta 74 zcmXTzWt`yYqVMVA7*cU7sp|W?yLa3BXG%y)N=it~kT}pFAy=lFAhn*&jZNUl1m;OS eE;slD5*QArvYy`T^ZN?}5O})!xvXJc;tw- b9U#B}&RjL52Jk))00000NkvXXu0mjff(9PR delta 51 zcmeBRESun|E8*$l7*cU7=|=gZPu=|cXG$DMxDd?1$i~nf&l;QcaFHtm5O})!xvX`6)002ovPDHLkV1i;BAhG}e delta 51 zcmeBUESun|E8*$l7*cU7sp{jy>-&VK&y+Zja3Pq1k&U6Vo;5Dy#ln{iK;Y@>=d#Wz Gp$PyMkrSf; diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-resize-control.png b/AppKit/Themes/Aristo/Resources/buttonbar-resize-control.png index 744010abc44e15dac673eea202b1639597eeb8c9..b31cc36b94a45adda7f77c2617d446fa63d4e4ec 100644 GIT binary patch delta 94 zcmV-k0HOc80h9rd83+OZ008q_180#TC`&d;L_t(|+G5zcb?dip-+ul2wQJX|j~_oW zF`xnv|33_%@F5IreC+yhtH-XNhlhuWi3uRU0H~`%_q^-8D*ylh07*qoM6N<$f<~|? Aq5uE@ delta 133 zcmV;00DAwF0lNW^83+ad004YBlrWJYC~{p%L_t(|+Eh-zsQHy)rL)S#g< zCMZpoHEl-&Q{L17pOp8`iH34RzG1;>*7bnGqux*iEkyjF(7>uMIXL}VnmzF6mh;g? nx0k9OZ`M)j{J?otJpv2>jlVf}d;d&F00000NkvXXu0mjfO4&K7 From 0018be6fd886c0e1e7fc13f967fb8b6d4949983a Mon Sep 17 00:00:00 2001 From: Malte Tancred Date: Wed, 13 Jun 2012 10:37:08 +0200 Subject: [PATCH 073/112] Make XcodeCapp synchronize file system event status more frequently. This is a small fix that makes XcodeCapp update the latestEventId value in the defaults database at the end of each FSEvents callback. Prior to this fix, the synchronization was performed only when the user actively decided to stop listening to a project. --- Tools/XcodeCapp/FSEventCallback.m | 2 ++ Tools/XcodeCapp/TNXCodeCapp.h | 1 + Tools/XcodeCapp/TNXCodeCapp.m | 20 +++++++++++++------- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Tools/XcodeCapp/FSEventCallback.m b/Tools/XcodeCapp/FSEventCallback.m index c4af80093..f546a0b78 100644 --- a/Tools/XcodeCapp/FSEventCallback.m +++ b/Tools/XcodeCapp/FSEventCallback.m @@ -138,4 +138,6 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, } } } + + [xcc synchronizeLastEventId]; } diff --git a/Tools/XcodeCapp/TNXCodeCapp.h b/Tools/XcodeCapp/TNXCodeCapp.h index 937132502..1606df375 100644 --- a/Tools/XcodeCapp/TNXCodeCapp.h +++ b/Tools/XcodeCapp/TNXCodeCapp.h @@ -80,6 +80,7 @@ extern NSString * const XCCListeningStartNotification; - (void)initializeEventStreamWithPath:(NSString*)aPath; - (void)stopEventStream; - (void)updateLastEventId:(uint64_t)eventId; +- (void)synchronizeLastEventId; - (void)listenProjectAtPath:(NSString *)path; - (void)clear; - (void)start; diff --git a/Tools/XcodeCapp/TNXCodeCapp.m b/Tools/XcodeCapp/TNXCodeCapp.m index ffe2d1cab..d7f28b60b 100644 --- a/Tools/XcodeCapp/TNXCodeCapp.m +++ b/Tools/XcodeCapp/TNXCodeCapp.m @@ -195,13 +195,7 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification */ - (void)clear { - if (lastEventId && [lastEventId longLongValue] != 0) - { - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - [defaults setObject:lastEventId forKey:@"lastEventId"]; - [defaults synchronize]; - } - + [self synchronizeLastEventId]; currentProjectURL = nil; currentProjectName = nil; [ignoredFilePaths removeAllObjects]; @@ -259,6 +253,18 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification lastEventId = [NSNumber numberWithUnsignedLongLong:eventId]; } +/*! + Synchronizes the last recorded event ID with the user defaults. + */ +- (void)synchronizeLastEventId { + if (lastEventId && [lastEventId longLongValue] != 0) + { + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + [defaults setObject:lastEventId forKey:@"lastEventId"]; + [defaults synchronize]; + } +} + /*! Run a NSTask with the given arguments @param arguments NSArray containing the NSTask arguments From d67a03bfb4776a39251d14c234ec897b3ad574c8 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 13 Jun 2012 14:30:26 -0700 Subject: [PATCH 074/112] make disabled buttonbar buttons more visible --- .../buttonbar-button-bezel-disabled-center.png | Bin 125 -> 123 bytes .../buttonbar-button-bezel-disabled-left.png | Bin 143 -> 130 bytes .../buttonbar-button-bezel-disabled-right.png | Bin 147 -> 145 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-center.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-center.png index 849780a06845d81f2b01f77349cd60e8f8e0afb0..2d033863994e9cfed5098e8493618be366abd8d4 100644 GIT binary patch delta 67 zcmb=eo*>D=#K6E%|LL;EL`4lFSx*7v?ZFFgRdnG+#h^x{Z*$!U2YJ XuF_&hbiM}zH86O(`njxgN@xNA03H@Q delta 69 zcmb=fogm4<#=yYvVS-EjL`4k~c~2L|kcwMLKmPx(XBM82kdVZ{bVnyACh2IwOdf#* ZhABb@jn((87Xh^}c)I$ztaD0e0svK37%%_; diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-left.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-left.png index 54d6e3085a56314022dd70c61e4826782c40dfd3..b14a4263ac318e5a9521fe37297bb10ce6925921 100644 GIT binary patch delta 76 zcmeBYY+{@s$-%_Hz%b=#hW1274NDbI7srr_TS-;lA3py7|Nl%035f+F0trD8Pfv)d g#L2hGI5aRaykL}lzJ0Q@2T&h_r>mdKI;Vst01)mQ8vp|Nk497=QrCU;r~f vfJl-52oW@?{|s29a2WWX2sLE65Fo$+Y1cNSl#Gwn00000NkvXXu0mjf4TU2G diff --git a/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-right.png b/AppKit/Themes/Aristo/Resources/buttonbar-button-bezel-disabled-right.png index 46220830eb18f2bb1d7acecc6d375d401f1f42c8..e8c8f2192221a038b75a57f3c7b9c6a97ea69095 100644 GIT binary patch delta 91 zcmV-h0Hptu0g(Za83+OZ005N5Xe*H+C`dC&L_t(|+G6_m@87!*ADRCD|Ifg{z{CIs xXcSgCuo#jcSjm4V4@Co3LHtJJbPGU$0RW8N8t2-AQr7?g002ovPDHLkV1kQMB#8h3 delta 93 zcmV-j0HXhq0h0lc83+ad000}O|9p`lC`vU+L_t(|+G70s_iw|)r_ULf{{R2a00K-5 zP(Y*zi29FJ3MdRh2q}C9{s$|^tA;EW0t6TUEEzK?Xw8$`00000NkvXXu0mjfjtwFW From ecdb064a5bbcf04d7a771064e7943ac538cea9cc Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 13 Jun 2012 15:21:42 -0700 Subject: [PATCH 075/112] Makes CPButton to dim image when disabled by default --- AppKit/CPButton.j | 2 ++ 1 file changed, 2 insertions(+) diff --git a/AppKit/CPButton.j b/AppKit/CPButton.j index b79b72c93..f40fbdf75 100644 --- a/AppKit/CPButton.j +++ b/AppKit/CPButton.j @@ -176,6 +176,8 @@ CPButtonImageOffset = 3.0; // Continuous button defaults. _periodicInterval = 0.05; _periodicDelay = 0.5; + + _imageDimsWhenDisabled = YES; } // Setting the state From 19794b06abe0a912dd50a0059f96189d7bee0d33 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 13 Jun 2012 15:22:26 -0700 Subject: [PATCH 076/112] nib2cib sets _imageDimsWhenDisabled to YES for buttons --- Tools/nib2cib/NSButton.j | 1 + 1 file changed, 1 insertion(+) diff --git a/Tools/nib2cib/NSButton.j b/Tools/nib2cib/NSButton.j index f83e48356..e62a9e9a6 100644 --- a/Tools/nib2cib/NSButton.j +++ b/Tools/nib2cib/NSButton.j @@ -196,6 +196,7 @@ var NSButtonIsBorderedMask = 0x00800000, _keyEquivalent = [cell keyEquivalent]; _keyEquivalentModifierMask = [cell keyEquivalentModifierMask]; + _imageDimsWhenDisabled = YES; _allowsMixedState = [cell allowsMixedState]; [self setImage:[cell normalImage]]; From 6f32e598e9606c44276f670f0e484249e1300584 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 13 Jun 2012 15:22:53 -0700 Subject: [PATCH 077/112] Add manual tests for disabled button with image --- Tests/Manual/CPButtonTest/AppController.j | 4 +- .../CPButtonTest/Resources/MainMenu.cib | 2 +- .../CPButtonTest/Resources/MainMenu.xib | 86 +++++++++++++++---- 3 files changed, 74 insertions(+), 18 deletions(-) diff --git a/Tests/Manual/CPButtonTest/AppController.j b/Tests/Manual/CPButtonTest/AppController.j index 832c3797f..831c77664 100644 --- a/Tests/Manual/CPButtonTest/AppController.j +++ b/Tests/Manual/CPButtonTest/AppController.j @@ -16,6 +16,7 @@ CPLogRegister(CPLogConsole); @outlet CPButton button; @outlet CPButton imageButton; + @outlet CPButton imageDisabledButton; @outlet CPCheckBox checkbox; @outlet CPCheckBox multiCheckbox; @outlet CPRadio radio1; @@ -32,6 +33,7 @@ CPLogRegister(CPLogConsole); { var path = [[CPBundle bundleForClass:[CPView class]] pathForResource:@"action_button.png"]; [imageButton setImage:[[CPImage alloc] initWithContentsOfFile:path size:CGSizeMake(22.0, 14.0)]]; + [imageDisabledButton setImage:[[CPImage alloc] initWithContentsOfFile:path size:CGSizeMake(22.0, 14.0)]]; [self _setImagePosition:CPImageLeft]; [positionMenu selectItemAtIndex:CPImageLeft]; @@ -40,7 +42,7 @@ CPLogRegister(CPLogConsole); - (void)_setupButtons { - buttons = [button, imageButton]; + buttons = [button, imageButton, imageDisabledButton]; checksAndRadios = [checkbox, multiCheckbox, radio1, radio2]; var checkboxHeight = [checkbox frameSize].height, diff --git a/Tests/Manual/CPButtonTest/Resources/MainMenu.cib b/Tests/Manual/CPButtonTest/Resources/MainMenu.cib index cc4b9daf7..b8fc901df 100644 --- a/Tests/Manual/CPButtonTest/Resources/MainMenu.cib +++ b/Tests/Manual/CPButtonTest/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;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;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;30E;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;1;0E;D;K;6;CP$UIDd;2;38E;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;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;48E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;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;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;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;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;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;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;59E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;38E;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;66E;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;67E;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;57E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;68E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;50E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;69E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;53E;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;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;63E;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;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;51E;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;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;54E;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;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;38E;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;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;76E;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;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;78E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;79E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;80E;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;38E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;57E;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;57E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;61E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;57E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;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;57E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;83E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;66E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;31E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;84E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;85E;K;33;_CPCibWindowTemplateWindowRectKeyD;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;34E;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;33E;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;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;35E;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;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;94E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;34E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;97E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;K;6;$afontD;K;6;CP$UIDd;2;99E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;100E;K;11;$aalignmentD;K;6;CP$UIDd;3;101E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;102E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;103E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;104E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;105E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;105E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;105E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;100E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;101E;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;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;34E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;65E;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;34E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;109E;K;6;$afontD;K;6;CP$UIDd;3;110E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;101E;K;11;$aalignmentD;K;6;CP$UIDd;2;89E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;101E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;105E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;100E;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;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;111E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;38E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;112E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;113E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;114E;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;115E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;38E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;112E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;113E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;114E;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;116E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;38E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;112E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;114E;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;117E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;38E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;112E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;114E;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;118E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;38E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;112E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;114E;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;119E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;38E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;112E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;114E;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;120E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;38E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;112E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;114E;E;D;K;10;$classnameS;16;_CPCibCustomViewK;8;$classesA;S;16;_CPCibCustomViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;47E;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;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;121E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;123E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;34E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;124E;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;49E;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;125E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;126E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;48E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;109E;K;6;$afontD;K;6;CP$UIDd;3;110E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;11;$aalignmentD;K;6;CP$UIDd;3;100E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;101E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;127E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;105E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;100E;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;49E;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;128E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;129E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;48E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;109E;K;16;$aimage-positionD;K;6;CP$UIDd;3;100E;K;6;$afontD;K;6;CP$UIDd;3;110E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;11;$aalignmentD;K;6;CP$UIDd;3;100E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;101E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;130E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;105E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;100E;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;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;52E;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;131E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;132E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;48E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;133E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;134E;K;16;$aimage-positionD;K;6;CP$UIDd;3;100E;K;6;$afontD;K;6;CP$UIDd;2;99E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;11;$aalignmentD;K;6;CP$UIDd;3;100E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;113E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;101E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;135E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;105E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;100E;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;52E;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;136E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;137E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;48E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;133E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;134E;K;16;$aimage-positionD;K;6;CP$UIDd;3;100E;K;6;$afontD;K;6;CP$UIDd;2;99E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;11;$aalignmentD;K;6;CP$UIDd;2;89E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;113E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;101E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;138E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;102E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;100E;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;33E;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;139E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;140E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;141E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;48E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;E;D;K;6;$classD;K;6;CP$UIDd;2;49E;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;142E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;143E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;48E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;109E;K;6;$afontD;K;6;CP$UIDd;3;110E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;11;$aalignmentD;K;6;CP$UIDd;3;100E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;101E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;144E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;105E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;100E;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;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;31E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;84E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;85E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;146E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;147E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;148E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;59E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;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;149E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;150E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;E;D;K;6;$classD;K;6;CP$UIDd;2;49E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;59E;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;151E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;152E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;59E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;109E;K;6;$afontD;K;6;CP$UIDd;3;110E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;11;$aalignmentD;K;6;CP$UIDd;3;100E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;101E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;153E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;105E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;100E;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;49E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;59E;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;154E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;155E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;59E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;109E;K;6;$afontD;K;6;CP$UIDd;3;110E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;11;$aalignmentD;K;6;CP$UIDd;3;100E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;156E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;157E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;105E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;100E;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;35E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;59E;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;158E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;159E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;59E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;97E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;K;6;$afontD;K;6;CP$UIDd;2;99E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;100E;K;11;$aalignmentD;K;6;CP$UIDd;3;101E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;102E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;160E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;104E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;105E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;105E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;105E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;100E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;101E;K;31;CPTextFieldPlaceholderStringKeyD;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;59E;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;59E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;97E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;K;6;$afontD;K;6;CP$UIDd;2;99E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;100E;K;11;$aalignmentD;K;6;CP$UIDd;3;113E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;102E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;163E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;104E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;105E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;105E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;105E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;100E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;113E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;64E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;164E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;165E;E;S;13;CPApplicationD;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;58E;E;E;S;8;delegateS;6;buttonS;8;checkboxS;10;clickCountS;11;imageButtonS;13;multiCheckboxS;12;positionMenuD;K;10;$classnameS;7;CPRadioK;8;$classesA;S;7;CPRadioS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;75E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;55E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;166E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;166E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;55E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;92E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;168E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;169E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;170E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;100E;K;16;$aimage-positionD;K;6;CP$UIDd;3;100E;K;6;$afontD;K;6;CP$UIDd;2;99E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;100E;K;11;$aalignmentD;K;6;CP$UIDd;2;89E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;113E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;101E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;171E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;105E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;100E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;89E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;172E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;173E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;175E;E;S;6;radio1D;K;6;$classD;K;6;CP$UIDd;2;75E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;55E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;176E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;166E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;55E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;92E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;168E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;169E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;109E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;100E;K;16;$aimage-positionD;K;6;CP$UIDd;3;100E;K;6;$afontD;K;6;CP$UIDd;2;99E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;100E;K;11;$aalignmentD;K;6;CP$UIDd;2;89E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;101E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;177E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;105E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;1;0E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;100E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;89E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;172E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;173E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;175E;E;S;6;radio2S;9;theWindowS;17;setImagePosition:S;11;countClick:S;20;switchSelectedRadio:S;32;{10000000000000, 10000000000000}S;8;CPWindowS;23;{{100, 65}, {380, 253}}d;1;7S;19;CPButton Image Testd;1;0S;20;{{0, 0}, {380, 253}}D;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;38E;D;K;6;CP$UIDd;2;48E;E;E;d;2;18S;6;normalS;22;{{40, 212}, {101, 17}}S;19;{{0, 0}, {101, 17}}d;2;36S;9;textfieldD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;178E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;179E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;105E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;105E;E;d;1;2d;1;4T;S;15;Image Position:d;4;3072F;S;23;{{141, 211}, {201, 24}}S;19;{{0, 0}, {201, 24}}S;12;popup-buttonS;8;borderedD;K;6;$classD;K;6;CP$UIDd;2;98E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;178E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;179E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;102E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;105E;E;S;8;No ImageS;17;_popUpItemAction:d;1;1d;7;1048576S;10;Image OnlyS;4;LeftS;5;RightS;5;BelowS;5;AboveS;8;OverlapsS;22;{{20, 20}, {340, 174}}S;20;{{0, 0}, {340, 174}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;50E;E;E;S;9;BezelViewS;20;{{22, 15}, {96, 24}}S;18;{{0, 0}, {96, 24}}S;6;ButtonS;22;{{141, 15}, {176, 24}}S;19;{{0, 0}, {176, 24}}S;17;Button With ImageS;20;{{29, 65}, {85, 40}}S;18;{{0, 0}, {85, 40}}S;9;check-boxS;8;selectedS;8;CheckboxS;22;{{163, 65}, {152, 40}}S;19;{{0, 0}, {152, 40}}S;19;Multistate CheckboxS;22;{{31, 120}, {168, 40}}S;19;{{0, 0}, {168, 40}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;78E;E;E;S;23;{{198, 128}, {119, 24}}S;19;{{0, 0}, {119, 24}}S;14;Set radio 2 OnS;13;AppControllerS;23;{{131, 383}, {318, 85}}d;2;15S;22;Continuous Button TestS;19;{{0, 0}, {318, 85}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;21;{{18, 18}, {120, 24}}S;19;{{0, 0}, {120, 24}}S;13;Normal ButtonS;22;{{150, 18}, {146, 24}}S;19;{{0, 0}, {146, 24}}d;5;65540S;17;Continuous ButtonS;21;{{17, 48}, {107, 17}}S;19;{{0, 0}, {107, 17}}S;16;Recorded clicks:S;22;{{126, 48}, {175, 17}}S;19;{{0, 0}, {175, 17}}S;1;0S;10;OtherViewsD;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;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;E;E;S;18;{{0, 0}, {82, 40}}D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;167E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;180E;E;S;5;radioS;17;selected+borderedS;7;Radio 1f;3;0.5f;4;0.05D;K;10;$classnameS;12;CPRadioGroupK;8;$classesA;S;12;CPRadioGroupS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;174E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;181E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;2;76E;E;S;19;{{86, 0}, {82, 40}}S;7;Radio 2S;17;Arial, sans-serifd;2;12D;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;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;78E;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;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;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;1;0E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;1;0E;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;49E;D;K;6;CP$UIDd;2;51E;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;1;0E;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;1;0E;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;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;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;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;35E;D;K;6;CP$UIDd;2;39E;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;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;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;61E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;65E;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;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;59E;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;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;51E;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;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;54E;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;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;65E;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;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;52E;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;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;58E;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;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;55E;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;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;39E;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;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;79E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;81E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;33E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;83E;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;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;39E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;62E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;85E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;85E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;86E;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;87E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;88E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;89E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;90E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;91E;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;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;93E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;93E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;94E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;95E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;96E;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;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;97E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;98E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;96E;K;6;$afontD;K;6;CP$UIDd;3;102E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;11;$aalignmentD;K;6;CP$UIDd;3;104E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;105E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;106E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;107E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;108E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;108E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;108E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;104E;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;38E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;67E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;109E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;110E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;111E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;113E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;104E;K;11;$aalignmentD;K;6;CP$UIDd;2;92E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;104E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;105E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;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;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;114E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;39E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;116E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;117E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;118E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;39E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;115E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;116E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;117E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;119E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;39E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;115E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;117E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;120E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;39E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;115E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;117E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;121E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;39E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;115E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;117E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;122E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;39E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;115E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;117E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;123E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;39E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;115E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;117E;E;D;K;10;$classnameS;16;_CPCibCustomViewK;8;$classesA;S;16;_CPCibCustomViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;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;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;126E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;96E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;127E;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;50E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;49E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;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;49E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;71E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;113E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;104E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;130E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;105E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;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;50E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;49E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;131E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;132E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;49E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;71E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;112E;K;16;$aimage-positionD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;113E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;104E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;133E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;105E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;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;53E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;49E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;134E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;135E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;49E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;136E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;137E;K;16;$aimage-positionD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;102E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;116E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;104E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;138E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;105E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;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;53E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;49E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;139E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;140E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;49E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;136E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;137E;K;16;$aimage-positionD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;102E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;11;$aalignmentD;K;6;CP$UIDd;2;92E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;116E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;104E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;141E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;105E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;105E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;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;34E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;49E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;142E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;143E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;144E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;49E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;96E;E;D;K;6;$classD;K;6;CP$UIDd;2;50E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;49E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;145E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;146E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;49E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;71E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;113E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;104E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;147E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;105E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;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;50E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;49E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;148E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;132E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;49E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;71E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;149E;K;16;$aimage-positionD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;113E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;104E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;150E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;105E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;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;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;32E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;87E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;88E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;152E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;153E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;154E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;61E;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;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;155E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;155E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;96E;E;D;K;6;$classD;K;6;CP$UIDd;2;50E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;61E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;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;61E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;71E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;113E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;104E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;159E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;105E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;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;50E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;61E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;160E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;161E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;61E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;71E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;113E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;162E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;163E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;105E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;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;61E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;164E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;165E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;61E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;96E;K;6;$afontD;K;6;CP$UIDd;3;102E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;11;$aalignmentD;K;6;CP$UIDd;3;104E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;105E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;166E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;107E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;108E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;108E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;108E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;104E;K;31;CPTextFieldPlaceholderStringKeyD;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;61E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;167E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;168E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;61E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;96E;K;6;$afontD;K;6;CP$UIDd;3;102E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;11;$aalignmentD;K;6;CP$UIDd;3;116E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;105E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;169E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;107E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;108E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;108E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;108E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;116E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;170E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;171E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;60E;E;E;S;8;delegateS;6;buttonS;8;checkboxS;10;clickCountS;11;imageButtonS;19;imageDisabledButtonS;13;multiCheckboxS;12;positionMenuD;K;10;$classnameS;7;CPRadioK;8;$classesA;S;7;CPRadioS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;78E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;56E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;172E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;172E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;56E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;95E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;175E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;176E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;103E;K;16;$aimage-positionD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;102E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;103E;K;11;$aalignmentD;K;6;CP$UIDd;2;92E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;116E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;104E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;177E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;105E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;178E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;179E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;181E;E;S;6;radio1D;K;6;$classD;K;6;CP$UIDd;2;78E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;56E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;182E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;172E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;56E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;95E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;175E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;112E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;103E;K;16;$aimage-positionD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;102E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;103E;K;11;$aalignmentD;K;6;CP$UIDd;2;92E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;104E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;183E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;108E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;105E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;178E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;179E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;181E;E;S;6;radio2S;9;theWindowS;17;setImagePosition:S;11;countClick:S;20;switchSelectedRadio:S;32;{10000000000000, 10000000000000}S;8;CPWindowS;24;{{106, 103}, {380, 253}}d;1;7S;19;CPButton Image Testd;1;0S;20;{{0, 0}, {380, 253}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;49E;E;E;d;2;18S;6;normalS;22;{{40, 212}, {101, 17}}S;19;{{0, 0}, {101, 17}}d;2;36S;9;textfieldD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;184E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;185E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;108E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;108E;E;d;1;2d;1;4T;S;15;Image Position:d;4;3072F;S;23;{{141, 211}, {201, 24}}S;19;{{0, 0}, {201, 24}}S;12;popup-buttonS;8;borderedD;K;6;$classD;K;6;CP$UIDd;3;101E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;184E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;185E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;105E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;108E;E;S;8;No ImageS;17;_popUpItemAction:d;1;1d;7;1048576S;10;Image OnlyS;4;LeftS;5;RightS;5;BelowS;5;AboveS;8;OverlapsS;22;{{20, 20}, {340, 174}}S;20;{{0, 0}, {340, 174}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;51E;E;E;S;9;BezelViewS;20;{{22, 15}, {96, 24}}S;18;{{0, 0}, {96, 24}}S;6;ButtonS;22;{{141, 15}, {176, 24}}S;19;{{0, 0}, {176, 24}}S;17;Button With ImageS;20;{{29, 65}, {85, 40}}S;18;{{0, 0}, {85, 40}}S;9;check-boxS;8;selectedS;8;CheckboxS;22;{{163, 65}, {152, 40}}S;19;{{0, 0}, {152, 40}}S;19;Multistate CheckboxS;22;{{31, 120}, {168, 40}}S;19;{{0, 0}, {168, 40}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;81E;E;E;S;23;{{198, 128}, {119, 24}}S;19;{{0, 0}, {119, 24}}S;14;Set radio 2 OnS;22;{{141, 45}, {176, 24}}S;17;disabled+borderedS;19;Disabled With ImageS;13;AppControllerS;23;{{554, 201}, {318, 85}}d;2;15S;22;Continuous Button TestS;19;{{0, 0}, {318, 85}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;21;{{18, 18}, {120, 24}}S;19;{{0, 0}, {120, 24}}S;13;Normal ButtonS;22;{{150, 18}, {146, 24}}S;19;{{0, 0}, {146, 24}}d;5;65540S;17;Continuous ButtonS;21;{{17, 48}, {107, 17}}S;19;{{0, 0}, {107, 17}}S;16;Recorded clicks:S;22;{{126, 48}, {175, 17}}S;19;{{0, 0}, {175, 17}}S;1;0S;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;18;{{0, 0}, {82, 40}}D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;173E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;186E;E;S;5;radioS;17;selected+borderedS;7;Radio 1f;3;0.5f;4;0.05D;K;10;$classnameS;12;CPRadioGroupK;8;$classesA;S;12;CPRadioGroupS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;180E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;187E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;2;79E;E;S;19;{{86, 0}, {82, 40}}S;7;Radio 2S;17;Arial, sans-serifd;2;12D;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;92E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;92E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;81E;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPButtonTest/Resources/MainMenu.xib b/Tests/Manual/CPButtonTest/Resources/MainMenu.xib index 31f4f1478..421a5b364 100644 --- a/Tests/Manual/CPButtonTest/Resources/MainMenu.xib +++ b/Tests/Manual/CPButtonTest/Resources/MainMenu.xib @@ -2,13 +2,13 @@ 1070 - 11B26 - 1617 - 1138 - 566.00 + 11E53 + 2182 + 1138.47 + 569.00 com.apple.InterfaceBuilder.CocoaPlugin - 1617 + 2182 NSPopUpButton @@ -28,7 +28,10 @@ com.apple.InterfaceBuilder.CocoaPlugin - + + PluginDependencyRecalculationVersion + + NSApplication @@ -42,8 +45,8 @@ 7 2 - {{100, 1100}, {380, 253}} - 1948778496 + {{106, 672}, {380, 253}} + 1954021376 CPButton Image Test NSWindow @@ -212,6 +215,28 @@ 268 + + + 268 + {{143, 103}, {176, 25}} + + + + YES + + 604110336 + 134217728 + Disabled With Image + + + -2034482945 + 163 + + + 200 + 25 + + 268 @@ -377,7 +402,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{29, 69}, {85, 40}} - + YES -2080244224 @@ -452,7 +477,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA - {{0, 0}, {2560, 1418}} + {{0, 0}, {1680, 1028}} {10000000000000, 10000000000000} YES @@ -462,8 +487,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 15 2 - {{131, 950}, {318, 85}} - 606601216 + {{554, 742}, {318, 85}} + 611844096 Continuous Button Test NSWindow @@ -558,7 +583,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA - {{0, 0}, {2560, 1418}} + {{0, 0}, {1680, 1028}} {10000000000000, 10000000000000} YES @@ -677,6 +702,14 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 1206
+ + + imageDisabledButton + + + + 1209 + @@ -815,6 +848,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA + @@ -979,6 +1013,19 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
+ + 1207 + + + + + + + + 1208 + + +
@@ -1025,6 +1072,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1037,7 +1086,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA - 1206 + 1209
@@ -1068,6 +1117,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA CPCheckBox NSTextField NSButton + NSButton CPCheckBox NSPopUpButton CPRadio @@ -1090,6 +1140,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA imageButton NSButton + + imageDisabledButton + NSButton + multiCheckbox CPCheckBox @@ -1127,8 +1181,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA YES 3 - {9, 8} - {7, 2} + {11, 11} + {10, 3} {15, 15} From 1fd021770ed23b3be5220d66cd4ae97bb13212aa Mon Sep 17 00:00:00 2001 From: Malte Tancred Date: Thu, 14 Jun 2012 11:43:52 +0200 Subject: [PATCH 078/112] Split -synchronizeLastEventId in two methods. The first method (updateUserDefaultsWithLastEventId) just sets the default while the other (synchronizeUserDefaultsWithDisk) forces a synchronization with the disk. --- Tools/XcodeCapp/FSEventCallback.m | 2 +- Tools/XcodeCapp/TNXCodeCapp.h | 3 ++- Tools/XcodeCapp/TNXCodeCapp.m | 20 ++++++++++++++------ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/Tools/XcodeCapp/FSEventCallback.m b/Tools/XcodeCapp/FSEventCallback.m index f546a0b78..9df1fd56a 100644 --- a/Tools/XcodeCapp/FSEventCallback.m +++ b/Tools/XcodeCapp/FSEventCallback.m @@ -139,5 +139,5 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, } } - [xcc synchronizeLastEventId]; + [xcc updateUserDefaultsWithLastEventId]; } diff --git a/Tools/XcodeCapp/TNXCodeCapp.h b/Tools/XcodeCapp/TNXCodeCapp.h index 1606df375..51c507de3 100644 --- a/Tools/XcodeCapp/TNXCodeCapp.h +++ b/Tools/XcodeCapp/TNXCodeCapp.h @@ -80,7 +80,8 @@ extern NSString * const XCCListeningStartNotification; - (void)initializeEventStreamWithPath:(NSString*)aPath; - (void)stopEventStream; - (void)updateLastEventId:(uint64_t)eventId; -- (void)synchronizeLastEventId; +- (void)updateUserDefaultsWithLastEventId; +- (void)synchronizeUserDefaultsWithDisk; - (void)listenProjectAtPath:(NSString *)path; - (void)clear; - (void)start; diff --git a/Tools/XcodeCapp/TNXCodeCapp.m b/Tools/XcodeCapp/TNXCodeCapp.m index d7f28b60b..e6d6e9af7 100644 --- a/Tools/XcodeCapp/TNXCodeCapp.m +++ b/Tools/XcodeCapp/TNXCodeCapp.m @@ -195,7 +195,8 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification */ - (void)clear { - [self synchronizeLastEventId]; + [self updateUserDefaultsWithLastEventId]; + [self synchronizeUserDefaultsWithDisk]; currentProjectURL = nil; currentProjectName = nil; [ignoredFilePaths removeAllObjects]; @@ -254,17 +255,24 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification } /*! - Synchronizes the last recorded event ID with the user defaults. + Updates the user defaults with the last recorded event Id. */ -- (void)synchronizeLastEventId { +- (void)updateUserDefaultsWithLastEventId +{ if (lastEventId && [lastEventId longLongValue] != 0) { - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - [defaults setObject:lastEventId forKey:@"lastEventId"]; - [defaults synchronize]; + [[NSUserDefaults standardUserDefaults] setObject:lastEventId forKey:@"lastEventId"]; } } +/*! + Tells the standard user defaults to synchronize with disk. + */ +- (void)synchronizeUserDefaultsWithDisk +{ + [[NSUserDefaults standardUserDefaults] synchronize]; +} + /*! Run a NSTask with the given arguments @param arguments NSArray containing the NSTask arguments From ca0a07cab8ed0cec9e1d9ffa9210214940746530 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 4 Jun 2012 18:38:08 -0700 Subject: [PATCH 079/112] Formatting. --- AppKit/CPTokenField.j | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 7bd42d779..f1a377576 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -664,7 +664,7 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", CPTokenFieldKeyDownFunction = function(aDOMEvent) { - aDOMEvent = aDOMEvent || window.event + aDOMEvent = aDOMEvent || window.event; CPTokenFieldTextDidChangeValue = [CPTokenFieldInputOwner stringValue]; @@ -1150,10 +1150,10 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", @implementation CPTokenField (CPTokenFieldDelegate) -// // Each element in the array should be an NSString or an array of NSStrings. -// // substring is the partial string that is being completed. tokenIndex is the index of the token being completed. -// // selectedIndex allows you to return by reference an index specifying which of the completions should be selected initially. -// // The default behavior is not to have any completions. +// Each element in the array should be an NSString or an array of NSStrings. +// substring is the partial string that is being completed. tokenIndex is the index of the token being completed. +// selectedIndex allows you to return by reference an index specifying which of the completions should be selected initially. +// The default behavior is not to have any completions. - (CPArray)tokenField:(CPTokenField)tokenField completionsForSubstring:(CPString)substring indexOfToken:(int)tokenIndex indexOfSelectedItem:(int)selectedIndex { if ([[self delegate] respondsToSelector:@selector(tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem:)]) @@ -1164,8 +1164,8 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", return []; } -// // Allows the delegate to provide a string to be displayed as a proxy for the given represented object. -// // If you return nil or do not implement this method, then representedObject is displayed as the string. +// Allows the delegate to provide a string to be displayed as a proxy for the given represented object. +// If you return nil or do not implement this method, then representedObject is displayed as the string. - (CPString)tokenField:(CPTokenField)tokenField displayStringForRepresentedObject:(id)representedObject { if ([[self delegate] respondsToSelector:@selector(tokenField:displayStringForRepresentedObject:)]) @@ -1181,9 +1181,9 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", } // -// // return an array of represented objects you want to add. -// // If you want to reject the add, return an empty array. -// // returning nil will cause an error. +// return an array of represented objects you want to add. +// If you want to reject the add, return an empty array. +// returning nil will cause an error. - (CPArray)tokenField:(CPTokenField)tokenField shouldAddObjects:(CPArray)tokens atIndex:(int)index { var delegate = [self delegate]; @@ -1198,23 +1198,23 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", } // -// // If you return nil or don't implement these delegate methods, we will assume -// // editing string = display string = represented object +// If you return nil or don't implement these delegate methods, we will assume +// editing string = display string = represented object // - (NSString *)tokenField:(NSTokenField *)tokenField editingStringForRepresentedObject:(id)representedObject; // - (id)tokenField:(NSTokenField *)tokenField representedObjectForEditingString: (NSString *)editingString; // -// // We put the string on the pasteboard before calling this delegate method. -// // By default, we write the NSStringPboardType as well as an array of NSStrings. +// We put the string on the pasteboard before calling this delegate method. +// By default, we write the NSStringPboardType as well as an array of NSStrings. // - (BOOL)tokenField:(NSTokenField *)tokenField writeRepresentedObjects:(NSArray *)objects toPasteboard:(NSPasteboard *)pboard; // -// // Return an array of represented objects to add to the token field. +// Return an array of represented objects to add to the token field. // - (NSArray *)tokenField:(NSTokenField *)tokenField readFromPasteboard:(NSPasteboard *)pboard; // -// // By default the tokens have no menu. +// By default the tokens have no menu. // - (NSMenu *)tokenField:(NSTokenField *)tokenField menuForRepresentedObject:(id)representedObject; // - (BOOL)tokenField:(NSTokenField *)tokenField hasMenuForRepresentedObject:(id)representedObject; // -// // This method allows you to change the style for individual tokens as well as have mixed text and tokens. +// This method allows you to change the style for individual tokens as well as have mixed text and tokens. // - (NSTokenStyle)tokenField:(NSTokenField *)tokenField styleForRepresentedObject:(id)representedObject; @end From 7ffd65476b3946f0057f185eea2611948813019e Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Tue, 5 Jun 2012 08:36:49 -0700 Subject: [PATCH 080/112] Fixed: token field auto completions. Auto completions are strings, not represented objects. Revert "Fix CPTokenField autocompletion to deal with represented objects" This reverts commit 8b9a0edebaff922894105b6ae4224da93d65c048. --- AppKit/CPTokenField.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index f1a377576..6ad2a9d2d 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -1126,7 +1126,7 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", - (void)tableView:(CPTableView)tableView objectValueForTableColumn:(CPTableColumn)tableColumn row:(int)row { - return [self tokenField:self displayStringForRepresentedObject:[_cachedCompletions objectAtIndex:row]]; + return [_cachedCompletions objectAtIndex:row]; } - (void)tableViewSelectionDidChange:(CPNotification)notification From d07ee3ea231e13fc412969ead37f1f301756cd6c Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Tue, 5 Jun 2012 22:02:34 -0700 Subject: [PATCH 081/112] Hide non-public API in CPTokenField. Also improve documentation. --- AppKit/CPTokenField.j | 54 ++++++++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 6ad2a9d2d..2ae16b7db 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -164,7 +164,7 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", { var indexOfSelectedItem = 0; - _cachedCompletions = [self tokenField:self completionsForSubstring:[self _inputElement].value indexOfToken:0 indexOfSelectedItem:indexOfSelectedItem]; + _cachedCompletions = [self _completionsForSubstring:[self _inputElement].value indexOfToken:0 indexOfSelectedItem:indexOfSelectedItem]; [_autocompleteView selectRowIndexes:[CPIndexSet indexSetWithIndex:indexOfSelectedItem] byExtendingSelection:NO]; [_autocompleteView reloadData]; @@ -208,7 +208,7 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", [objectValue removeObjectAtIndex:_selectedRange.location]; // Give the delegate a chance to confirm, replace or add to the list of tokens being added. - var delegateApprovedObjects = [self tokenField:self shouldAddObjects:[CPArray arrayWithObject:token] atIndex:_selectedRange.location], + var delegateApprovedObjects = [self _shouldAddObjects:[CPArray arrayWithObject:token] atIndex:_selectedRange.location], delegateApprovedObjectsCount = [delegateApprovedObjects count]; if (delegateApprovedObjects) { @@ -544,7 +544,7 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", { // Do we have this token among the old ones? var tokenObject = aValue[i], - tokenValue = [self tokenField:self displayStringForRepresentedObject:tokenObject], + tokenValue = [self _displayStringForRepresentedObject:tokenObject], newToken = nil; for (var j = 0, oldCount = [oldTokens count]; j < oldCount; j++) @@ -1150,27 +1150,38 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", @implementation CPTokenField (CPTokenFieldDelegate) -// Each element in the array should be an NSString or an array of NSStrings. -// substring is the partial string that is being completed. tokenIndex is the index of the token being completed. -// selectedIndex allows you to return by reference an index specifying which of the completions should be selected initially. -// The default behavior is not to have any completions. -- (CPArray)tokenField:(CPTokenField)tokenField completionsForSubstring:(CPString)substring indexOfToken:(int)tokenIndex indexOfSelectedItem:(int)selectedIndex +/*! + Private API to get the delegate tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem: result. + + The delegate method should return an array of strings matching the provided substring for autocompletion. + tokenIndex is the index of the token being completed. selectedIndex allows the selected autocompletion option + to be indicated by reference. + + @ignore +*/ +- (CPArray)_completionsForSubstring:(CPString)substring indexOfToken:(int)tokenIndex indexOfSelectedItem:(int)selectedIndex { if ([[self delegate] respondsToSelector:@selector(tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem:)]) { - return [[self delegate] tokenField:tokenField completionsForSubstring:substring indexOfToken:tokenIndex indexOfSelectedItem:selectedIndex]; + return [[self delegate] tokenField:self completionsForSubstring:substring indexOfToken:tokenIndex indexOfSelectedItem:selectedIndex]; } return []; } -// Allows the delegate to provide a string to be displayed as a proxy for the given represented object. -// If you return nil or do not implement this method, then representedObject is displayed as the string. -- (CPString)tokenField:(CPTokenField)tokenField displayStringForRepresentedObject:(id)representedObject +/*! + Private API to get the delegate tokenField:displayStringForRepresentedObject: result. + + The delegate method should return a string to be displayed for the given represtented object. + If this delegate method is not implemented, the representedObject is displayed as a string. + + @ignore +*/ +- (CPString)_displayStringForRepresentedObject:(id)representedObject { if ([[self delegate] respondsToSelector:@selector(tokenField:displayStringForRepresentedObject:)]) { - var stringForRepresentedObject = [[self delegate] tokenField:tokenField displayStringForRepresentedObject:representedObject]; + var stringForRepresentedObject = [[self delegate] tokenField:self displayStringForRepresentedObject:representedObject]; if (stringForRepresentedObject !== nil) { return stringForRepresentedObject; @@ -1180,16 +1191,21 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", return representedObject; } -// -// return an array of represented objects you want to add. -// If you want to reject the add, return an empty array. -// returning nil will cause an error. -- (CPArray)tokenField:(CPTokenField)tokenField shouldAddObjects:(CPArray)tokens atIndex:(int)index +/*! + Private API to get the delegate tokenField:shouldAddObjects:atIndex: result. + + The delegate should return an array of represented objects which should be added based on the + suggested tokens to add and the insertion position specified by index. To add no tokens, + return an empty array. Returning nil is an error. + + @ignore +*/ +- (CPArray)_shouldAddObjects:(CPArray)tokens atIndex:(int)index { var delegate = [self delegate]; if ([delegate respondsToSelector:@selector(tokenField:shouldAddObjects:atIndex:)]) { - var approvedObjects = [delegate tokenField:tokenField shouldAddObjects:tokens atIndex:index]; + var approvedObjects = [delegate tokenField:self shouldAddObjects:tokens atIndex:index]; if (approvedObjects !== nil) return approvedObjects; } From bbc45dd9476c1ae32204d3e1886057d4644111c1 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 9 Jun 2012 16:45:58 +0100 Subject: [PATCH 082/112] Support `tokenField:representedObjectForEditingString:` delegate method. This improves support for represented objects and is used both when an autocompletion suggestion is used or when the name of a token is typed in by hand. The behaviour of taking an array of strings from `completionsForSubstring` and then asking for a represented object once a choice has been accepted matches the behaviour of Cocoa. --- AppKit/CPTokenField.j | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 2ae16b7db..59568b6b5 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -207,6 +207,9 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", if (shouldRemoveLastObject) [objectValue removeObjectAtIndex:_selectedRange.location]; + // Convert typed text into a represented object. + token = [self _representedObjectForEditingString:token]; + // Give the delegate a chance to confirm, replace or add to the list of tokens being added. var delegateApprovedObjects = [self _shouldAddObjects:[CPArray arrayWithObject:token] atIndex:_selectedRange.location], delegateApprovedObjectsCount = [delegateApprovedObjects count]; @@ -1213,11 +1216,28 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", return tokens; } +/*! + Private API to get the delegate tokenField:representedObjectForEditingString: result. + + The delegate method should return a represented object for the provided string which + may have been typed by the user or selected from the completion menu. If the method is + not implemented, the string is assumed to be the represented object. + + @ignore +*/ +- (id)_representedObjectForEditingString:(CPString)aString +{ + var delegate = [self delegate]; + if ([delegate respondsToSelector:@selector(tokenField:representedObjectForEditingString:)]) + return [delegate tokenField:self representedObjectForEditingString:aString]; + + return aString; +} + // // If you return nil or don't implement these delegate methods, we will assume // editing string = display string = represented object // - (NSString *)tokenField:(NSTokenField *)tokenField editingStringForRepresentedObject:(id)representedObject; -// - (id)tokenField:(NSTokenField *)tokenField representedObjectForEditingString: (NSString *)editingString; // // We put the string on the pasteboard before calling this delegate method. // By default, we write the NSStringPboardType as well as an array of NSStrings. From 80ee88d3a714172f3c43ec9387538498ad48b206 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 10 Jun 2012 15:50:02 +0100 Subject: [PATCH 083/112] Hide another non-public API in CPTokenField. --- AppKit/CPTokenField.j | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 59568b6b5..710d958ab 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -672,22 +672,22 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", CPTokenFieldTextDidChangeValue = [CPTokenFieldInputOwner stringValue]; // Update the selectedIndex if necessary - var index = [[CPTokenFieldInputOwner autocompleteView] selectedRow]; + var index = [[CPTokenFieldInputOwner _autocompleteView] selectedRow]; if (aDOMEvent.keyCode === CPUpArrowKeyCode) index -= 1; else if (aDOMEvent.keyCode === CPDownArrowKeyCode) index += 1; - if (index > [[CPTokenFieldInputOwner autocompleteView] numberOfRows] - 1) - index = [[CPTokenFieldInputOwner autocompleteView] numberOfRows] - 1; + if (index > [[CPTokenFieldInputOwner _autocompleteView] numberOfRows] - 1) + index = [[CPTokenFieldInputOwner _autocompleteView] numberOfRows] - 1; if (index < 0) index = 0; - [[CPTokenFieldInputOwner autocompleteView] selectRowIndexes:[CPIndexSet indexSetWithIndex:index] byExtendingSelection:NO]; + [[CPTokenFieldInputOwner _autocompleteView] selectRowIndexes:[CPIndexSet indexSetWithIndex:index] byExtendingSelection:NO]; - var autocompleteView = [CPTokenFieldInputOwner autocompleteView], + var autocompleteView = [CPTokenFieldInputOwner _autocompleteView], clipView = [[autocompleteView enclosingScrollView] contentView], rowRect = [autocompleteView rectOfRow:index], owner = CPTokenFieldInputOwner; @@ -1099,14 +1099,15 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", // Only carry out the scroll if the cursor isn't visible. if (!(isEditing && _selectedRange.length == 0)) { - var scrollToToken = _shouldScrollTo; + if (scrollToToken === CPScrollDestinationLeft) scrollToToken = tokens[_selectedRange.location] else if (scrollToToken === CPScrollDestinationRight) scrollToToken = tokens[MAX(0, CPMaxRange(_selectedRange) - 1)]; [self _scrollTokenViewToVisible:scrollToToken]; } + _shouldScrollTo = CPScrollDestinationNone; } } @@ -1141,10 +1142,7 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", }, 2.0); } -// ============= -// = ACCESSORS = -// ============= -- (CPTableView)autocompleteView +- (CPTableView)_autocompleteView { return _autocompleteView; } From 0ef03d31b888b11c83f8753fd884a03acc05387c Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 10 Jun 2012 20:09:22 +0100 Subject: [PATCH 084/112] Refactor CPTokenField autocomplete. The new code is simpler (single responsibility principle) and makes it easier to improve on autocomplete. --- AppKit/CPTokenField.j | 338 +++++++++++++++++++++++++----------------- 1 file changed, 199 insertions(+), 139 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 710d958ab..e506f15ff 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -67,13 +67,9 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", CPRange _selectedRange; - CPView _autocompleteContainer; - CPScrollView _autocompleteScrollView; - CPTableView _autocompleteView; - CPTimeInterval _completionDelay; - CPTimer _showCompletionsTimer; + _CPTokenFieldAutocompleteMenu _autocompleteMenu @accessors; - CPArray _cachedCompletions; + CPTimeInterval _completionDelay; CPCharacterSet _tokenizingCharacterSet @accessors(property=tokenizingCharacterSet); @@ -128,56 +124,17 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", [self addSubview:_tokenScrollView]; - _cachedCompletions = []; - - _autocompleteContainer = [[CPView alloc] initWithFrame:CPRectMake(0.0, 0.0, frame.size.width, 92.0)]; - [_autocompleteContainer setBackgroundColor:[_CPMenuWindow backgroundColorForBackgroundStyle:_CPMenuWindowPopUpBackgroundStyle]]; - - _autocompleteScrollView = [[CPScrollView alloc] initWithFrame:CPRectMake(1.0, 1.0, frame.size.width - 2.0, 90.0)]; - [_autocompleteScrollView setAutohidesScrollers:YES]; - [_autocompleteScrollView setHasHorizontalScroller:NO]; - [_autocompleteContainer addSubview:_autocompleteScrollView]; - - _autocompleteView = [[CPTableView alloc] initWithFrame:CPRectMakeZero()]; - - var tableColumn = [[CPTableColumn alloc] initWithIdentifier:CPTokenFieldTableColumnIdentifier]; - [tableColumn setResizingMask:CPTableColumnAutoresizingMask]; - [_autocompleteView addTableColumn:tableColumn]; - - [_autocompleteView setDataSource:self]; - [_autocompleteView setDelegate:self]; - [_autocompleteView setAllowsMultipleSelection:NO]; - [_autocompleteView setHeaderView:nil]; - [_autocompleteView setCornerView:nil]; - [_autocompleteView setRowHeight:30.0]; - [_autocompleteView setGridStyleMask:CPTableViewSolidHorizontalGridLineMask]; - [_autocompleteView setBackgroundColor:[CPColor clearColor]]; - [_autocompleteView setGridColor:[CPColor colorWithRed:242.0 / 255.0 green:243.0 / 255.0 blue:245.0 / 255.0 alpha:1.0]]; - - [_autocompleteScrollView setDocumentView:_autocompleteView]; -} - -// =============== -// = CONVENIENCE = -// =============== -- (void)_retrieveCompletions -{ - var indexOfSelectedItem = 0; - - _cachedCompletions = [self _completionsForSubstring:[self _inputElement].value indexOfToken:0 indexOfSelectedItem:indexOfSelectedItem]; - - [_autocompleteView selectRowIndexes:[CPIndexSet indexSetWithIndex:indexOfSelectedItem] byExtendingSelection:NO]; - [_autocompleteView reloadData]; + _autocompleteMenu = [[_CPTokenFieldAutocompleteMenu alloc] initWithTokenField:self]; } - (void)_autocompleteWithDOMEvent:(JSObject)DOMEvent { - if (![self _inputElement].value && (!_cachedCompletions || ![self hasThemeState:CPThemeStateAutoCompleting])) + if (![self _inputElement].value && (![_autocompleteMenu contentArray] || ![self hasThemeState:CPThemeStateAutoCompleting])) return; [self _hideCompletions]; - var token = _cachedCompletions ? _cachedCompletions[[_autocompleteView selectedRow]] : nil, + var token = [_autocompleteMenu selectedItem], shouldRemoveLastObject = token !== @"" && [self _inputElement].value !== @""; if (!token) @@ -616,16 +573,16 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", // ======== - (void)viewDidMoveToWindow { - [[[self window] contentView] addSubview:_autocompleteContainer]; + [[[self window] contentView] addSubview:_autocompleteMenu]; #if PLATFORM(DOM) - _autocompleteContainer._DOMElement.style.zIndex = 1000; // Anything else doesn't seem to work + _autocompleteMenu._DOMElement.style.zIndex = 1000; // Anything else doesn't seem to work #endif } - (void)removeFromSuperview { - [_autocompleteContainer removeFromSuperview]; + [_autocompleteMenu removeFromSuperview]; } // ============= @@ -671,29 +628,12 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", CPTokenFieldTextDidChangeValue = [CPTokenFieldInputOwner stringValue]; - // Update the selectedIndex if necessary - var index = [[CPTokenFieldInputOwner _autocompleteView] selectedRow]; - if (aDOMEvent.keyCode === CPUpArrowKeyCode) - index -= 1; + [[CPTokenFieldInputOwner _autocompleteMenu] selectPrevious]; else if (aDOMEvent.keyCode === CPDownArrowKeyCode) - index += 1; + [[CPTokenFieldInputOwner _autocompleteMenu] selectNext]; - if (index > [[CPTokenFieldInputOwner _autocompleteView] numberOfRows] - 1) - index = [[CPTokenFieldInputOwner _autocompleteView] numberOfRows] - 1; - - if (index < 0) - index = 0; - - [[CPTokenFieldInputOwner _autocompleteView] selectRowIndexes:[CPIndexSet indexSetWithIndex:index] byExtendingSelection:NO]; - - var autocompleteView = [CPTokenFieldInputOwner _autocompleteView], - clipView = [[autocompleteView enclosingScrollView] contentView], - rowRect = [autocompleteView rectOfRow:index], - owner = CPTokenFieldInputOwner; - - if (rowRect && !CPRectContainsRect([clipView bounds], rowRect)) - [clipView scrollToPoint:[autocompleteView rectOfRow:index].origin]; + var owner = CPTokenFieldInputOwner; if (aDOMEvent.keyCode === CPReturnKeyCode || aDOMEvent.keyCode === CPTabKeyCode) { @@ -924,37 +864,6 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", return 0.5; } -// =========================== -// = SHOW / HIDE COMPLETIONS = -// =========================== -- (void)_showCompletions:(CPTimer)timer -{ - [self _retrieveCompletions] - [self setThemeState:CPThemeStateAutoCompleting]; - - [self setNeedsLayout]; -} - -- (void)_delayedShowCompletions -{ - _showCompletionsTimer = [CPTimer scheduledTimerWithTimeInterval:[self completionDelay] target:self - selector:@selector(_showCompletions:) userInfo:nil repeats:NO]; -} - -- (void)_cancelShowCompletions -{ - if ([_showCompletionsTimer isValid]) - [_showCompletionsTimer invalidate]; -} - -- (void)_hideCompletions -{ - [self _cancelShowCompletions]; - - [self unsetThemeState:CPThemeStateAutoCompleting]; - [self setNeedsLayout]; -} - // ========== // = LAYOUT = // ========== @@ -973,23 +882,13 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", var frame = [self frame], contentView = [_tokenScrollView documentView], - tokens = [self _tokens]; + tokens = [self _tokens], + shouldShowAutoComplete = [self hasThemeState:CPThemeStateAutoCompleting]; - // Correctly size the tableview - // FIXME Horizontal scrolling will not work because we are not actually looking at the content to set the width for the table column - [[_autocompleteView tableColumnWithIdentifier:CPTokenFieldTableColumnIdentifier] setWidth:[[_autocompleteScrollView contentView] frame].size.width]; + [_autocompleteMenu setHidden:!shouldShowAutoComplete]; - if ([self hasThemeState:CPThemeStateAutoCompleting] && [_cachedCompletions count]) - { - // Manually sizeToFit because CPTableView's sizeToFit doesn't work properly - [_autocompleteContainer setHidden:NO]; - var frameOrigin = [self convertPoint:[self bounds].origin toView:[_autocompleteContainer superview]]; - [_autocompleteContainer setFrameOrigin:CPPointMake(frameOrigin.x, frameOrigin.y + frame.size.height)]; - [_autocompleteContainer setFrameSize:CPSizeMake(CPRectGetWidth([self bounds]), 92.0)]; - [_autocompleteScrollView setFrameSize:CPSizeMake([_autocompleteContainer frame].size.width - 2.0, 90.0)]; - } - else - [_autocompleteContainer setHidden:YES]; + if (shouldShowAutoComplete) + [_autocompleteMenu setNeedsLayout]; // Hack to make sure we are handling an array if (![tokens isKindOfClass:[CPArray class]]) @@ -1120,28 +1019,6 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", return [[_tokenScrollView documentView] scrollRectToVisible:[aToken frame]]; } -// ====================== -// = TABLEVIEW DATSOURCE / DELEGATE = -// ====================== -- (int)numberOfRowsInTableView:(CPTableView)tableView -{ - return [_cachedCompletions count]; -} - -- (void)tableView:(CPTableView)tableView objectValueForTableColumn:(CPTableColumn)tableColumn row:(int)row -{ - return [_cachedCompletions objectAtIndex:row]; -} - -- (void)tableViewSelectionDidChange:(CPNotification)notification -{ - // make sure a mouse click in the tableview doesn't steal first responder state - window.setTimeout(function() - { - [[self window] makeFirstResponder:self]; - }, 2.0); -} - - (CPTableView)_autocompleteView { return _autocompleteView; @@ -1251,6 +1128,189 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", // This method allows you to change the style for individual tokens as well as have mixed text and tokens. // - (NSTokenStyle)tokenField:(NSTokenField *)tokenField styleForRepresentedObject:(id)representedObject; +- (void)_delayedShowCompletions +{ + [_autocompleteMenu _delayedShowCompletions]; +} + +- (void)_hideCompletions +{ + [_autocompleteMenu _hideCompletions]; +} + +@end + +@implementation _CPTokenFieldAutocompleteMenu : CPView +{ + CPTokenField tokenField; + CPArray contentArray @accessors; + + CPScrollView scrollView; + CPTableView tableView; + + CPTimer _showCompletionsTimer; +} + +- (id)initWithTokenField:(CPTokenField)aTokenField +{ + if (self = [super initWithFrame:CGRectMakeZero()]) + { + tokenField = aTokenField; + + [self setBackgroundColor:[_CPMenuWindow backgroundColorForBackgroundStyle:_CPMenuWindowPopUpBackgroundStyle]]; + + scrollView = [[CPScrollView alloc] initWithFrame:CGRectMakeZero()]; + [scrollView setAutohidesScrollers:YES]; + [scrollView setHasHorizontalScroller:NO]; + [self addSubview:scrollView]; + + tableView = [[CPTableView alloc] initWithFrame:CPRectMakeZero()]; + + var tableColumn = [[CPTableColumn alloc] initWithIdentifier:CPTokenFieldTableColumnIdentifier]; + [tableColumn setResizingMask:CPTableColumnAutoresizingMask]; + [tableView addTableColumn:tableColumn]; + + [tableView setDataSource:self]; + [tableView setDelegate:self]; + [tableView setAllowsMultipleSelection:NO]; + [tableView setHeaderView:nil]; + [tableView setCornerView:nil]; + [tableView setRowHeight:30.0]; + [tableView setGridStyleMask:CPTableViewSolidHorizontalGridLineMask]; + [tableView setBackgroundColor:[CPColor clearColor]]; + [tableView setGridColor:[CPColor colorWithRed:242.0 / 255.0 green:243.0 / 255.0 blue:245.0 / 255.0 alpha:1.0]]; + + [scrollView setDocumentView:tableView]; + } + + return self; +} + +/*! + Set an array of strings to use as the available completions. +*/ +- (void)setContentArray:(CPArray)anArray +{ + contentArray = anArray; + + [tableView reloadData]; +} + +- (void)setIndexOfSelectedItem:(int)anIndex +{ + [tableView selectRowIndexes:[CPIndexSet indexSetWithIndex:anIndex] byExtendingSelection:NO]; + + var clipView = [scrollView contentView], + rowRect = [tableView rectOfRow:anIndex]; + + if (rowRect && !CPRectContainsRect([clipView bounds], rowRect)) + [clipView scrollToPoint:rowRect.origin]; +} + +- (int)indexOfSelectedItem +{ + return [tableView selectedRow]; +} + +- (CPString)selectedItem +{ + return contentArray ? contentArray[[tableView selectedRow]] : nil; +} + +- (void)layoutSubviews +{ + // TODO + // The autocompletion menu should be underneath the current token, it should at least be wide enough to fit the widest + // option but no wider than the width of the token field. It might stick out on the right side, so that if the token + // is small enough to fit on the right side the menu might extend a full token field width more into space on the right + // side. It should not stick out outside of the screen. The height should be the smallest possible to fit all options + // or at most ~307px (based on Cocoa). If the options don't fit horizontally they should be truncated with an ellipsis. + + var frame = [tokenField frame]; + + // Correctly size the tableview + // FIXME Horizontal scrolling will not work because we are not actually looking at the content to set the width for the table column + [[tableView tableColumnWithIdentifier:CPTokenFieldTableColumnIdentifier] setWidth:[[scrollView contentView] frame].size.width]; + + // Manually sizeToFit because CPTableView's sizeToFit doesn't work properly + var frameOrigin = [tokenField convertPoint:[tokenField bounds].origin toView:[self superview]], + newFrame = CGRectMake(frameOrigin.x, frameOrigin.y + frame.size.height, CPRectGetWidth([tokenField bounds]), 92.0); + [self setFrame:newFrame]; + [scrollView setFrame:CGRectInset([self bounds], 1.0, 1.0)]; +} + +- (void)_showCompletions:(CPTimer)timer +{ + var indexOfSelectedItem = [self indexOfSelectedItem]; + + [self setContentArray:[tokenField _completionsForSubstring:[tokenField _inputElement].value indexOfToken:0 indexOfSelectedItem:indexOfSelectedItem]]; + + // TODO Support indexOfSelectedItem. Always 0 right now. + [self setIndexOfSelectedItem:indexOfSelectedItem]; + + [tokenField setThemeState:CPThemeStateAutoCompleting]; + + [self setNeedsLayout]; +} + +- (void)_delayedShowCompletions +{ + _showCompletionsTimer = [CPTimer scheduledTimerWithTimeInterval:[tokenField completionDelay] + target:self + selector:@selector(_showCompletions:) + userInfo:nil + repeats:NO]; +} + +- (void)_hideCompletions +{ + [_showCompletionsTimer invalidate]; + _showCompletionsTimer = nil; + + [tokenField unsetThemeState:CPThemeStateAutoCompleting]; + [self setNeedsLayout]; +} + +- (void)selectNext +{ + var index = [self indexOfSelectedItem] + 1; + + if (index >= [contentArray count]) + return; + + [self setIndexOfSelectedItem:index]; +} + +- (void)selectPrevious +{ + var index = [self indexOfSelectedItem] - 1; + + if (index < 0) + return; + + [self setIndexOfSelectedItem:index]; +} + +- (int)numberOfRowsInTableView:(CPTableView)tableView +{ + return [contentArray count]; +} + +- (void)tableView:(CPTableView)tableView objectValueForTableColumn:(CPTableColumn)tableColumn row:(int)row +{ + return [contentArray objectAtIndex:row]; +} + +- (void)tableViewSelectionDidChange:(CPNotification)notification +{ + // FIXME + // make sure a mouse click in the tableview doesn't steal first responder state + window.setTimeout(function() + { + [[self window] makeFirstResponder:tokenField]; + }, 2.0); +} + @end @implementation _CPTokenFieldToken : CPTextField From feaf9c6f204d5a7b4e031d56e85bef3764905cff Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 10 Jun 2012 20:11:12 +0100 Subject: [PATCH 085/112] Improve CPTokenField autocomplete scrolling. --- AppKit/CPTokenField.j | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index e506f15ff..27eaec82e 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -356,6 +356,8 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", - (BOOL)resignFirstResponder { + CPLog("%@ resignFirstResponder", self); + if (_preventResign) return NO; @@ -1199,12 +1201,7 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", - (void)setIndexOfSelectedItem:(int)anIndex { [tableView selectRowIndexes:[CPIndexSet indexSetWithIndex:anIndex] byExtendingSelection:NO]; - - var clipView = [scrollView contentView], - rowRect = [tableView rectOfRow:anIndex]; - - if (rowRect && !CPRectContainsRect([clipView bounds], rowRect)) - [clipView scrollToPoint:rowRect.origin]; + [tableView scrollRowToVisible:anIndex]; } - (int)indexOfSelectedItem From b1669953272e3934d8a7d8c912e1721ad3c3240e Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 10 Jun 2012 20:53:06 +0100 Subject: [PATCH 086/112] Move autocomplete into reusable class. --- AppKit/CPTheme.j | 2 + AppKit/CPTokenField.j | 199 ++------------------------------- AppKit/_CPAutocompleteMenu.j | 210 +++++++++++++++++++++++++++++++++++ 3 files changed, 224 insertions(+), 187 deletions(-) create mode 100644 AppKit/_CPAutocompleteMenu.j diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 6decba8ec..1da505571 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -418,6 +418,8 @@ CPThemeStateEditing = CPThemeState("editing"); CPThemeStateVertical = CPThemeState("vertical"); CPThemeStateDefault = CPThemeState("default"); CPThemeStateCircular = CPThemeState("circular"); +CPThemeStateAutocompleting = CPThemeState("autocompleting"); + @implementation _CPThemeAttribute : CPObject { diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 27eaec82e..384777b52 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -29,8 +29,7 @@ @import "CPTextField.j" @import "CPTableView.j" @import "CPWindow.j" -@import "_CPMenuWindow.j" - +@import "_CPAutocompleteMenu.j" #if PLATFORM(DOM) @@ -53,10 +52,7 @@ var CPTokenFieldDOMInputElement = nil, #endif -var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", - CPTokenFieldTableColumnIdentifier = @"CPTokenFieldTableColumnIdentifier", - - CPScrollDestinationNone = 0, +var CPScrollDestinationNone = 0, CPScrollDestinationLeft = 1, CPScrollDestinationRight = 2; @@ -67,7 +63,7 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", CPRange _selectedRange; - _CPTokenFieldAutocompleteMenu _autocompleteMenu @accessors; + _CPAutocompleteMenu _autocompleteMenu @accessors; CPTimeInterval _completionDelay; @@ -124,12 +120,12 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", [self addSubview:_tokenScrollView]; - _autocompleteMenu = [[_CPTokenFieldAutocompleteMenu alloc] initWithTokenField:self]; + _autocompleteMenu = [[_CPAutocompleteMenu alloc] initWithTextField:self]; } - (void)_autocompleteWithDOMEvent:(JSObject)DOMEvent { - if (![self _inputElement].value && (![_autocompleteMenu contentArray] || ![self hasThemeState:CPThemeStateAutoCompleting])) + if (![self _inputElement].value && (![_autocompleteMenu contentArray] || ![self hasThemeState:CPThemeStateAutocompleting])) return; [self _hideCompletions]; @@ -575,16 +571,18 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", // ======== - (void)viewDidMoveToWindow { - [[[self window] contentView] addSubview:_autocompleteMenu]; + // TODO Switch to a window. + [[[self window] contentView] addSubview:[_autocompleteMenu contentView]]; #if PLATFORM(DOM) - _autocompleteMenu._DOMElement.style.zIndex = 1000; // Anything else doesn't seem to work + [_autocompleteMenu contentView]._DOMElement.style.zIndex = 1000; // Anything else doesn't seem to work #endif } - (void)removeFromSuperview { - [_autocompleteMenu removeFromSuperview]; + // TODO + [[_autocompleteMenu contentView] removeFromSuperview]; } // ============= @@ -646,7 +644,7 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", aDOMEvent.cancelBubble = true; // Only resign first responder if we weren't auto-completing - if (![CPTokenFieldInputOwner hasThemeState:CPThemeStateAutoCompleting]) + if (![CPTokenFieldInputOwner hasThemeState:CPThemeStateAutocompleting]) { if (aDOMEvent && aDOMEvent.keyCode === CPReturnKeyCode) { @@ -885,12 +883,7 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", var frame = [self frame], contentView = [_tokenScrollView documentView], tokens = [self _tokens], - shouldShowAutoComplete = [self hasThemeState:CPThemeStateAutoCompleting]; - - [_autocompleteMenu setHidden:!shouldShowAutoComplete]; - - if (shouldShowAutoComplete) - [_autocompleteMenu setNeedsLayout]; + shouldShowAutoComplete = [self hasThemeState:CPThemeStateAutocompleting]; // Hack to make sure we are handling an array if (![tokens isKindOfClass:[CPArray class]]) @@ -1142,174 +1135,6 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", @end -@implementation _CPTokenFieldAutocompleteMenu : CPView -{ - CPTokenField tokenField; - CPArray contentArray @accessors; - - CPScrollView scrollView; - CPTableView tableView; - - CPTimer _showCompletionsTimer; -} - -- (id)initWithTokenField:(CPTokenField)aTokenField -{ - if (self = [super initWithFrame:CGRectMakeZero()]) - { - tokenField = aTokenField; - - [self setBackgroundColor:[_CPMenuWindow backgroundColorForBackgroundStyle:_CPMenuWindowPopUpBackgroundStyle]]; - - scrollView = [[CPScrollView alloc] initWithFrame:CGRectMakeZero()]; - [scrollView setAutohidesScrollers:YES]; - [scrollView setHasHorizontalScroller:NO]; - [self addSubview:scrollView]; - - tableView = [[CPTableView alloc] initWithFrame:CPRectMakeZero()]; - - var tableColumn = [[CPTableColumn alloc] initWithIdentifier:CPTokenFieldTableColumnIdentifier]; - [tableColumn setResizingMask:CPTableColumnAutoresizingMask]; - [tableView addTableColumn:tableColumn]; - - [tableView setDataSource:self]; - [tableView setDelegate:self]; - [tableView setAllowsMultipleSelection:NO]; - [tableView setHeaderView:nil]; - [tableView setCornerView:nil]; - [tableView setRowHeight:30.0]; - [tableView setGridStyleMask:CPTableViewSolidHorizontalGridLineMask]; - [tableView setBackgroundColor:[CPColor clearColor]]; - [tableView setGridColor:[CPColor colorWithRed:242.0 / 255.0 green:243.0 / 255.0 blue:245.0 / 255.0 alpha:1.0]]; - - [scrollView setDocumentView:tableView]; - } - - return self; -} - -/*! - Set an array of strings to use as the available completions. -*/ -- (void)setContentArray:(CPArray)anArray -{ - contentArray = anArray; - - [tableView reloadData]; -} - -- (void)setIndexOfSelectedItem:(int)anIndex -{ - [tableView selectRowIndexes:[CPIndexSet indexSetWithIndex:anIndex] byExtendingSelection:NO]; - [tableView scrollRowToVisible:anIndex]; -} - -- (int)indexOfSelectedItem -{ - return [tableView selectedRow]; -} - -- (CPString)selectedItem -{ - return contentArray ? contentArray[[tableView selectedRow]] : nil; -} - -- (void)layoutSubviews -{ - // TODO - // The autocompletion menu should be underneath the current token, it should at least be wide enough to fit the widest - // option but no wider than the width of the token field. It might stick out on the right side, so that if the token - // is small enough to fit on the right side the menu might extend a full token field width more into space on the right - // side. It should not stick out outside of the screen. The height should be the smallest possible to fit all options - // or at most ~307px (based on Cocoa). If the options don't fit horizontally they should be truncated with an ellipsis. - - var frame = [tokenField frame]; - - // Correctly size the tableview - // FIXME Horizontal scrolling will not work because we are not actually looking at the content to set the width for the table column - [[tableView tableColumnWithIdentifier:CPTokenFieldTableColumnIdentifier] setWidth:[[scrollView contentView] frame].size.width]; - - // Manually sizeToFit because CPTableView's sizeToFit doesn't work properly - var frameOrigin = [tokenField convertPoint:[tokenField bounds].origin toView:[self superview]], - newFrame = CGRectMake(frameOrigin.x, frameOrigin.y + frame.size.height, CPRectGetWidth([tokenField bounds]), 92.0); - [self setFrame:newFrame]; - [scrollView setFrame:CGRectInset([self bounds], 1.0, 1.0)]; -} - -- (void)_showCompletions:(CPTimer)timer -{ - var indexOfSelectedItem = [self indexOfSelectedItem]; - - [self setContentArray:[tokenField _completionsForSubstring:[tokenField _inputElement].value indexOfToken:0 indexOfSelectedItem:indexOfSelectedItem]]; - - // TODO Support indexOfSelectedItem. Always 0 right now. - [self setIndexOfSelectedItem:indexOfSelectedItem]; - - [tokenField setThemeState:CPThemeStateAutoCompleting]; - - [self setNeedsLayout]; -} - -- (void)_delayedShowCompletions -{ - _showCompletionsTimer = [CPTimer scheduledTimerWithTimeInterval:[tokenField completionDelay] - target:self - selector:@selector(_showCompletions:) - userInfo:nil - repeats:NO]; -} - -- (void)_hideCompletions -{ - [_showCompletionsTimer invalidate]; - _showCompletionsTimer = nil; - - [tokenField unsetThemeState:CPThemeStateAutoCompleting]; - [self setNeedsLayout]; -} - -- (void)selectNext -{ - var index = [self indexOfSelectedItem] + 1; - - if (index >= [contentArray count]) - return; - - [self setIndexOfSelectedItem:index]; -} - -- (void)selectPrevious -{ - var index = [self indexOfSelectedItem] - 1; - - if (index < 0) - return; - - [self setIndexOfSelectedItem:index]; -} - -- (int)numberOfRowsInTableView:(CPTableView)tableView -{ - return [contentArray count]; -} - -- (void)tableView:(CPTableView)tableView objectValueForTableColumn:(CPTableColumn)tableColumn row:(int)row -{ - return [contentArray objectAtIndex:row]; -} - -- (void)tableViewSelectionDidChange:(CPNotification)notification -{ - // FIXME - // make sure a mouse click in the tableview doesn't steal first responder state - window.setTimeout(function() - { - [[self window] makeFirstResponder:tokenField]; - }, 2.0); -} - -@end - @implementation _CPTokenFieldToken : CPTextField { _CPTokenFieldTokenCloseButton _deleteButton; diff --git a/AppKit/_CPAutocompleteMenu.j b/AppKit/_CPAutocompleteMenu.j new file mode 100644 index 000000000..3d4e45888 --- /dev/null +++ b/AppKit/_CPAutocompleteMenu.j @@ -0,0 +1,210 @@ +/* + * _CPAutocompleteMenu.j + * AppKit + * + * Created by Alexander Ljungberg on May 10, 2012. + * Copyright 2012, Alexander Ljungberg. All rights reserved. + * + * 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 "CPTextField.j" +@import "_CPMenuWindow.j" + +var CPTokenFieldTableColumnIdentifier = @"CPTokenFieldTableColumnIdentifier"; + + +/*! + An "autocomplete" menu displayed by a text field. +*/ +@implementation _CPAutocompleteMenu : CPObject +{ + CPTextField textField @accessors; + CPArray contentArray @accessors; + + CPView contentView @accessors; + CPScrollView scrollView; + CPTableView tableView; + + CPTimer _showCompletionsTimer; +} + +- (id)initWithTextField:(CPTextField)aTextField +{ + if (self = [super init]) + { + textField = aTextField; + + contentView = [[CPView alloc] initWithFrame:CGRectMakeZero()]; + + [contentView setBackgroundColor:[_CPMenuWindow backgroundColorForBackgroundStyle:_CPMenuWindowPopUpBackgroundStyle]]; + + scrollView = [[CPScrollView alloc] initWithFrame:CGRectMakeZero()]; + [scrollView setAutohidesScrollers:YES]; + [scrollView setHasHorizontalScroller:NO]; + [contentView addSubview:scrollView]; + + tableView = [[CPTableView alloc] initWithFrame:CPRectMakeZero()]; + + var tableColumn = [[CPTableColumn alloc] initWithIdentifier:CPTokenFieldTableColumnIdentifier]; + [tableColumn setResizingMask:CPTableColumnAutoresizingMask]; + [tableView addTableColumn:tableColumn]; + + [tableView setDataSource:self]; + [tableView setDelegate:self]; + [tableView setAllowsMultipleSelection:NO]; + [tableView setHeaderView:nil]; + [tableView setCornerView:nil]; + [tableView setRowHeight:30.0]; + [tableView setGridStyleMask:CPTableViewSolidHorizontalGridLineMask]; + [tableView setBackgroundColor:[CPColor clearColor]]; + [tableView setGridColor:[CPColor colorWithRed:242.0 / 255.0 green:243.0 / 255.0 blue:245.0 / 255.0 alpha:1.0]]; + + [scrollView setDocumentView:tableView]; + } + + return self; +} + +/*! + Set an array of strings to use as the available completions. +*/ +- (void)setContentArray:(CPArray)anArray +{ + contentArray = anArray; + + [tableView reloadData]; +} + +- (void)setIndexOfSelectedItem:(int)anIndex +{ + [tableView selectRowIndexes:[CPIndexSet indexSetWithIndex:anIndex] byExtendingSelection:NO]; + [tableView scrollRowToVisible:anIndex]; +} + +- (int)indexOfSelectedItem +{ + return [tableView selectedRow]; +} + +- (CPString)selectedItem +{ + return contentArray ? contentArray[[tableView selectedRow]] : nil; +} + +- (void)layoutSubviews +{ + // TODO + // The autocompletion menu should be underneath the current token, it should at least be wide enough to fit the widest + // option but no wider than the width of the token field. It might stick out on the right side, so that if the token + // is small enough to fit on the right side the menu might extend a full token field width more into space on the right + // side. It should not stick out outside of the screen. The height should be the smallest possible to fit all options + // or at most ~307px (based on Cocoa). If the options don't fit horizontally they should be truncated with an ellipsis. + + var frame = [textField frame]; + + // Correctly size the tableview + // FIXME Horizontal scrolling will not work because we are not actually looking at the content to set the width for the table column + [[tableView tableColumnWithIdentifier:CPTokenFieldTableColumnIdentifier] setWidth:[[scrollView contentView] frame].size.width]; + + // Manually sizeToFit because CPTableView's sizeToFit doesn't work properly + var frameOrigin = [textField convertPoint:[textField bounds].origin toView:[contentView superview]], + newFrame = CGRectMake(frameOrigin.x, frameOrigin.y + frame.size.height, CPRectGetWidth([textField bounds]), 92.0); + [contentView setFrame:newFrame]; + [scrollView setFrame:CGRectInset([contentView bounds], 1.0, 1.0)]; +} + +- (void)_showCompletions:(CPTimer)timer +{ + var indexOfSelectedItem = [self indexOfSelectedItem]; + + [self setContentArray:[textField _completionsForSubstring:[textField _inputElement].value indexOfToken:0 indexOfSelectedItem:indexOfSelectedItem]]; + + // TODO Support indexOfSelectedItem. Always 0 right now. + [self setIndexOfSelectedItem:indexOfSelectedItem]; + + [textField setThemeState:CPThemeStateAutocompleting]; + [contentView setHidden:NO]; + + [self layoutSubviews]; +} + +- (void)_delayedShowCompletions +{ + var completionDelay = 0.5; + + if ([textField respondsToSelector:@selector(completionDelay)]) + completionDelay = [textField completionDelay]; + + _showCompletionsTimer = [CPTimer scheduledTimerWithTimeInterval:completionDelay + target:self + selector:@selector(_showCompletions:) + userInfo:nil + repeats:NO]; +} + +- (void)_hideCompletions +{ + [_showCompletionsTimer invalidate]; + _showCompletionsTimer = nil; + + [textField unsetThemeState:CPThemeStateAutocompleting]; + [contentView setHidden:YES]; + [self layoutSubviews]; +} + +- (void)selectNext +{ + var index = [self indexOfSelectedItem] + 1; + + if (index >= [contentArray count]) + return; + + [self setIndexOfSelectedItem:index]; +} + +- (void)selectPrevious +{ + var index = [self indexOfSelectedItem] - 1; + + if (index < 0) + return; + + [self setIndexOfSelectedItem:index]; +} + +- (int)numberOfRowsInTableView:(CPTableView)tableView +{ + return [contentArray count]; +} + +- (void)tableView:(CPTableView)tableView objectValueForTableColumn:(CPTableColumn)tableColumn row:(int)row +{ + return [contentArray objectAtIndex:row]; +} + +- (void)tableViewSelectionDidChange:(CPNotification)notification +{ + // FIXME + // make sure a mouse click in the tableview doesn't steal first responder state + window.setTimeout(function() + { + [[contentView window] makeFirstResponder:textField]; + }, 2.0); +} + +@end From 2574fac44a87c9fbbb074533e85f95230c099ebb Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 10 Jun 2012 20:55:25 +0100 Subject: [PATCH 087/112] Remove token field reference. --- AppKit/_CPAutocompleteMenu.j | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/AppKit/_CPAutocompleteMenu.j b/AppKit/_CPAutocompleteMenu.j index 3d4e45888..196dd0a31 100644 --- a/AppKit/_CPAutocompleteMenu.j +++ b/AppKit/_CPAutocompleteMenu.j @@ -25,8 +25,6 @@ @import "CPTextField.j" @import "_CPMenuWindow.j" -var CPTokenFieldTableColumnIdentifier = @"CPTokenFieldTableColumnIdentifier"; - /*! An "autocomplete" menu displayed by a text field. @@ -60,7 +58,7 @@ var CPTokenFieldTableColumnIdentifier = @"CPTokenFieldTableColumnIdentifier"; tableView = [[CPTableView alloc] initWithFrame:CPRectMakeZero()]; - var tableColumn = [[CPTableColumn alloc] initWithIdentifier:CPTokenFieldTableColumnIdentifier]; + var tableColumn = [CPTableColumn new]; [tableColumn setResizingMask:CPTableColumnAutoresizingMask]; [tableView addTableColumn:tableColumn]; @@ -119,7 +117,7 @@ var CPTokenFieldTableColumnIdentifier = @"CPTokenFieldTableColumnIdentifier"; // Correctly size the tableview // FIXME Horizontal scrolling will not work because we are not actually looking at the content to set the width for the table column - [[tableView tableColumnWithIdentifier:CPTokenFieldTableColumnIdentifier] setWidth:[[scrollView contentView] frame].size.width]; + [[[tableView tableColumns] firstObject] setWidth:[[scrollView contentView] frame].size.width]; // Manually sizeToFit because CPTableView's sizeToFit doesn't work properly var frameOrigin = [textField convertPoint:[textField bounds].origin toView:[contentView superview]], From 33fe1573aded38bed331cf677b8a6ca0fb6867cc Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 10 Jun 2012 22:19:42 +0100 Subject: [PATCH 088/112] Ensure autocomplete menu is on top. The menu should appear above other normal windows and controls like a regular CPMenu. To do this, put the pop up in its own window with the `CPPopUpMenuWindowLevel` window level. --- AppKit/CPTokenField.j | 37 ++++++++---------------------------- AppKit/_CPAutocompleteMenu.j | 37 ++++++++++++++++++++++-------------- 2 files changed, 31 insertions(+), 43 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 384777b52..7762eb502 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -63,7 +63,7 @@ var CPScrollDestinationNone = 0, CPRange _selectedRange; - _CPAutocompleteMenu _autocompleteMenu @accessors; + _CPAutocompleteMenu _autocompleteMenu; CPTimeInterval _completionDelay; @@ -119,8 +119,13 @@ var CPScrollDestinationNone = 0, [_tokenScrollView setDocumentView:contentView]; [self addSubview:_tokenScrollView]; +} - _autocompleteMenu = [[_CPAutocompleteMenu alloc] initWithTextField:self]; +- (_CPAutocompleteMenu)_autocompleteMenu +{ + if (!_autocompleteMenu) + _autocompleteMenu = [[_CPAutocompleteMenu alloc] initWithTextField:self]; + return _autocompleteMenu; } - (void)_autocompleteWithDOMEvent:(JSObject)DOMEvent @@ -352,8 +357,6 @@ var CPScrollDestinationNone = 0, - (BOOL)resignFirstResponder { - CPLog("%@ resignFirstResponder", self); - if (_preventResign) return NO; @@ -566,25 +569,6 @@ var CPScrollDestinationNone = 0, { } -// ======== -// = VIEW = -// ======== -- (void)viewDidMoveToWindow -{ - // TODO Switch to a window. - [[[self window] contentView] addSubview:[_autocompleteMenu contentView]]; - -#if PLATFORM(DOM) - [_autocompleteMenu contentView]._DOMElement.style.zIndex = 1000; // Anything else doesn't seem to work -#endif -} - -- (void)removeFromSuperview -{ - // TODO - [[_autocompleteMenu contentView] removeFromSuperview]; -} - // ============= // = TEXTFIELD = // ============= @@ -1014,11 +998,6 @@ var CPScrollDestinationNone = 0, return [[_tokenScrollView documentView] scrollRectToVisible:[aToken frame]]; } -- (CPTableView)_autocompleteView -{ - return _autocompleteView; -} - @end @implementation CPTokenField (CPTokenFieldDelegate) @@ -1125,7 +1104,7 @@ var CPScrollDestinationNone = 0, - (void)_delayedShowCompletions { - [_autocompleteMenu _delayedShowCompletions]; + [[self _autocompleteMenu] _delayedShowCompletions]; } - (void)_hideCompletions diff --git a/AppKit/_CPAutocompleteMenu.j b/AppKit/_CPAutocompleteMenu.j index 196dd0a31..a8be9d0ef 100644 --- a/AppKit/_CPAutocompleteMenu.j +++ b/AppKit/_CPAutocompleteMenu.j @@ -34,7 +34,7 @@ CPTextField textField @accessors; CPArray contentArray @accessors; - CPView contentView @accessors; + CPWindow _menuWindow; CPScrollView scrollView; CPTableView tableView; @@ -47,9 +47,15 @@ { textField = aTextField; - contentView = [[CPView alloc] initWithFrame:CGRectMakeZero()]; + _menuWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0, 0, 100, 100) styleMask:CPBorderlessWindowMask]; - [contentView setBackgroundColor:[_CPMenuWindow backgroundColorForBackgroundStyle:_CPMenuWindowPopUpBackgroundStyle]]; + [_menuWindow setLevel:CPPopUpMenuWindowLevel]; + [_menuWindow setHasShadow:YES]; + [_menuWindow setShadowStyle:CPMenuWindowShadowStyle]; + [_menuWindow setAcceptsMouseMovedEvents:NO]; + [_menuWindow setBackgroundColor:[_CPMenuWindow backgroundColorForBackgroundStyle:_CPMenuWindowPopUpBackgroundStyle]]; + + var contentView = [_menuWindow contentView]; scrollView = [[CPScrollView alloc] initWithFrame:CGRectMakeZero()]; [scrollView setAutohidesScrollers:YES]; @@ -107,11 +113,14 @@ - (void)layoutSubviews { // TODO - // The autocompletion menu should be underneath the current token, it should at least be wide enough to fit the widest - // option but no wider than the width of the token field. It might stick out on the right side, so that if the token - // is small enough to fit on the right side the menu might extend a full token field width more into space on the right - // side. It should not stick out outside of the screen. The height should be the smallest possible to fit all options - // or at most ~307px (based on Cocoa). If the options don't fit horizontally they should be truncated with an ellipsis. + /* + The autocompletion menu should be underneath the word/text being autocompleted. It should at least be wide enough to + fit the widest + option but no wider than the width of the text field. It might stick out on the right side, so that if the edited text + is on the right of the text field the menu might extend a full text field width more into space on the right + side. It should not stick out outside of the screen. The height should be the smallest possible to fit all options + or at most ~307px (based on Cocoa). If the options don't fit horizontally they should be truncated with an ellipsis. + */ var frame = [textField frame]; @@ -120,10 +129,10 @@ [[[tableView tableColumns] firstObject] setWidth:[[scrollView contentView] frame].size.width]; // Manually sizeToFit because CPTableView's sizeToFit doesn't work properly - var frameOrigin = [textField convertPoint:[textField bounds].origin toView:[contentView superview]], + var frameOrigin = [textField convertPoint:[textField bounds].origin toView:nil], newFrame = CGRectMake(frameOrigin.x, frameOrigin.y + frame.size.height, CPRectGetWidth([textField bounds]), 92.0); - [contentView setFrame:newFrame]; - [scrollView setFrame:CGRectInset([contentView bounds], 1.0, 1.0)]; + [_menuWindow setFrame:[_menuWindow frameRectForContentRect:newFrame]]; + [scrollView setFrame:CGRectInset([[_menuWindow contentView] bounds], 1.0, 1.0)]; } - (void)_showCompletions:(CPTimer)timer @@ -136,7 +145,7 @@ [self setIndexOfSelectedItem:indexOfSelectedItem]; [textField setThemeState:CPThemeStateAutocompleting]; - [contentView setHidden:NO]; + [_menuWindow orderFront:self]; [self layoutSubviews]; } @@ -161,7 +170,7 @@ _showCompletionsTimer = nil; [textField unsetThemeState:CPThemeStateAutocompleting]; - [contentView setHidden:YES]; + [_menuWindow orderOut:self]; [self layoutSubviews]; } @@ -201,7 +210,7 @@ // make sure a mouse click in the tableview doesn't steal first responder state window.setTimeout(function() { - [[contentView window] makeFirstResponder:textField]; + [[textField window] makeFirstResponder:textField]; }, 2.0); } From 85cfb18906752b7460ae4f77dca8d0696808cf9d Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 10 Jun 2012 22:46:49 +0100 Subject: [PATCH 089/112] Place token autocomplete underneath what's being completed. This matches Cocoa. --- AppKit/CPTokenField.j | 23 +++++++++++++++++------ AppKit/_CPAutocompleteMenu.j | 34 +++++++++++++++++++++------------- 2 files changed, 38 insertions(+), 19 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 7762eb502..9c38b2ef8 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -64,6 +64,7 @@ var CPScrollDestinationNone = 0, CPRange _selectedRange; _CPAutocompleteMenu _autocompleteMenu; + CGRect _inputFrame; CPTimeInterval _completionDelay; @@ -924,16 +925,16 @@ var CPScrollDestinationNone = 0, textWidth = MAX(contentSize.width - offset.x - 1, textWidth); } - var inputFrame = fitAndFrame(textWidth, tokenHeight); + _inputFrame = fitAndFrame(textWidth, tokenHeight); - element.style.left = inputFrame.origin.x + "px"; - element.style.top = inputFrame.origin.y + "px"; - element.style.width = inputFrame.size.width + "px"; - element.style.height = inputFrame.size.height + "px"; + element.style.left = _inputFrame.origin.x + "px"; + element.style.top = _inputFrame.origin.y + "px"; + element.style.width = _inputFrame.size.width + "px"; + element.style.height = _inputFrame.size.height + "px"; // When editing, always scroll to the cursor. if (_selectedRange.length == 0) - [[_tokenScrollView documentView] scrollRectToVisible:inputFrame]; + [[_tokenScrollView documentView] scrollRectToVisible:_inputFrame]; }; for (var i = 0, count = [tokens count]; i < count; i++) @@ -964,6 +965,7 @@ var CPScrollDestinationNone = 0, // so we can continue using our standard keyboard handling events. if (isEditing && _selectedRange.length) { + _inputFrame = nil; [self _inputElement].style.left = "-10000px"; [self _inputElement].focus(); } @@ -1021,6 +1023,15 @@ var CPScrollDestinationNone = 0, return []; } +/*! + Private API used by the _CPAutocompleteMenu to determine where to place the menu in local coordinates. +*/ +- (CGPoint)_completionOrigin:(_CPAutocompleteMenu)anAutocompleteMenu +{ + var relativeFrame = _inputFrame ? [[_tokenScrollView documentView] convertRect:_inputFrame toView:self ] : [self bounds]; + return CGPointMake(CGRectGetMinX(relativeFrame), CGRectGetMaxY(relativeFrame)); +} + /*! Private API to get the delegate tokenField:displayStringForRepresentedObject: result. diff --git a/AppKit/_CPAutocompleteMenu.j b/AppKit/_CPAutocompleteMenu.j index a8be9d0ef..aed0ce1bb 100644 --- a/AppKit/_CPAutocompleteMenu.j +++ b/AppKit/_CPAutocompleteMenu.j @@ -114,25 +114,33 @@ { // TODO /* - The autocompletion menu should be underneath the word/text being autocompleted. It should at least be wide enough to - fit the widest - option but no wider than the width of the text field. It might stick out on the right side, so that if the edited text - is on the right of the text field the menu might extend a full text field width more into space on the right - side. It should not stick out outside of the screen. The height should be the smallest possible to fit all options - or at most ~307px (based on Cocoa). If the options don't fit horizontally they should be truncated with an ellipsis. + The autocompletion menu should be underneath the word/text being + autocompleted. It should at least be wide enough to fit the widest option + but no wider than the width of the text field. It might stick out on the + right side, so that if the edited text is on the right of the text field + the menu might extend a full text field width more into space on the right + side. It should not stick out outside of the screen. The height should be + the smallest possible to fit all options or at most ~307px (based on + Cocoa). If the options don't fit horizontally they should be truncated + with an ellipsis. */ - var frame = [textField frame]; + var frame = [textField frame], + origin = frame.origin; + if ([textField respondsToSelector:@selector(_completionOrigin:)]) + origin = [textField _completionOrigin:self]; + + + // Manually sizeToFit because CPTableView's sizeToFit doesn't work properly + var frameOrigin = [textField convertPoint:origin toView:nil], + newFrame = CGRectMake(frameOrigin.x, frameOrigin.y, CPRectGetWidth([textField bounds]), 92.0); + newFrame = [_menuWindow frameRectForContentRect:newFrame]; + [_menuWindow setFrame:newFrame]; + [scrollView setFrame:CGRectInset([[_menuWindow contentView] bounds], 1.0, 1.0)]; // Correctly size the tableview // FIXME Horizontal scrolling will not work because we are not actually looking at the content to set the width for the table column [[[tableView tableColumns] firstObject] setWidth:[[scrollView contentView] frame].size.width]; - - // Manually sizeToFit because CPTableView's sizeToFit doesn't work properly - var frameOrigin = [textField convertPoint:[textField bounds].origin toView:nil], - newFrame = CGRectMake(frameOrigin.x, frameOrigin.y + frame.size.height, CPRectGetWidth([textField bounds]), 92.0); - [_menuWindow setFrame:[_menuWindow frameRectForContentRect:newFrame]]; - [scrollView setFrame:CGRectInset([[_menuWindow contentView] bounds], 1.0, 1.0)]; } - (void)_showCompletions:(CPTimer)timer From 9575fd777113ec149e6c9769e2809b8d720a7d99 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 11 Jun 2012 00:29:45 +0100 Subject: [PATCH 090/112] Autosize token field autocomplete menu. The new menu is much more efficient for the user: * Less tall items makes it much easier to select among many completions. * Exactly wide enough for widest item. * Tall enough to show all items (instead of just 3 as before). * Uses a maximum width and height defined by the screen edges and some Cocoa-like constants. --- AppKit/_CPAutocompleteMenu.j | 57 ++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/AppKit/_CPAutocompleteMenu.j b/AppKit/_CPAutocompleteMenu.j index aed0ce1bb..86a87b1f8 100644 --- a/AppKit/_CPAutocompleteMenu.j +++ b/AppKit/_CPAutocompleteMenu.j @@ -25,6 +25,8 @@ @import "CPTextField.j" @import "_CPMenuWindow.j" +// TODO Make themable. +var _CPAutocompleteMenuMaximumHeight = 307; /*! An "autocomplete" menu displayed by a text field. @@ -33,6 +35,7 @@ { CPTextField textField @accessors; CPArray contentArray @accessors; + float widestItemWidth; CPWindow _menuWindow; CPScrollView scrollView; @@ -73,7 +76,7 @@ [tableView setAllowsMultipleSelection:NO]; [tableView setHeaderView:nil]; [tableView setCornerView:nil]; - [tableView setRowHeight:30.0]; + [tableView setRowHeight:24.0]; [tableView setGridStyleMask:CPTableViewSolidHorizontalGridLineMask]; [tableView setBackgroundColor:[CPColor clearColor]]; [tableView setGridColor:[CPColor colorWithRed:242.0 / 255.0 green:243.0 / 255.0 blue:245.0 / 255.0 alpha:1.0]]; @@ -89,9 +92,19 @@ */ - (void)setContentArray:(CPArray)anArray { - contentArray = anArray; + if (contentArray === anArray || [contentArray isEqualToArray:anArray]) + return; + + contentArray = [anArray copy]; + + // Go away automatically if there are no suggestions. + if (![contentArray count]) + [self _hideCompletions]; + + widestItemWidth = CPNotFound; [tableView reloadData]; + [self layoutSubviews]; } - (void)setIndexOfSelectedItem:(int)anIndex @@ -126,21 +139,44 @@ */ var frame = [textField frame], - origin = frame.origin; + origin = frame.origin, + tableColumn = [[tableView tableColumns] firstObject]; if ([textField respondsToSelector:@selector(_completionOrigin:)]) origin = [textField _completionOrigin:self]; + if (widestItemWidth === CPNotFound) + { + // This calculation could be slow for many items. + + var dataView = [tableColumn dataView], + fontNormal = [dataView valueForThemeAttribute:@"font" inState:CPThemeStateTableDataView], + fontSelected = [dataView valueForThemeAttribute:@"font" inState:CPThemeStateTableDataView | CPThemeStateSelectedTableDataView], + contentInsetNormal = [dataView valueForThemeAttribute:@"content-inset" inState:CPThemeStateTableDataView], + contentInsetSelected = [dataView valueForThemeAttribute:@"content-inset" inState:CPThemeStateTableDataView | CPThemeStateSelectedTableDataView]; + + var mergedString = contentArray.join("\n"); + + widestItemWidth = MAX([mergedString sizeWithFont:fontNormal].width + contentInsetNormal.left + contentInsetNormal.right, [mergedString sizeWithFont:fontSelected].width + contentInsetSelected.left + contentInsetSelected.right) + [tableView intercellSpacing].width + 2.0 + 5.0; // 2.0 because we inset by 1.0 below, 5.0 mystery constant. + // TODO Track down why mystery constant is needed to allocate enough width. Scroll view insets? + } - // Manually sizeToFit because CPTableView's sizeToFit doesn't work properly var frameOrigin = [textField convertPoint:origin toView:nil], - newFrame = CGRectMake(frameOrigin.x, frameOrigin.y, CPRectGetWidth([textField bounds]), 92.0); + screenSize = [[_menuWindow screen] visibleFrame].size, + availableWidth = screenSize.width - frameOrigin.x, + availableHeight = screenSize.height - frameOrigin.y, + width = MIN(widestItemWidth, availableWidth), + spacingHeight = [tableView intercellSpacing].height, + height = MIN(MIN(spacingHeight + [contentArray count] * ([tableView rowHeight] + spacingHeight), _CPAutocompleteMenuMaximumHeight), availableHeight), + newFrame = CGRectMake(frameOrigin.x, frameOrigin.y, width, height); + newFrame = [_menuWindow frameRectForContentRect:newFrame]; [_menuWindow setFrame:newFrame]; - [scrollView setFrame:CGRectInset([[_menuWindow contentView] bounds], 1.0, 1.0)]; - // Correctly size the tableview - // FIXME Horizontal scrolling will not work because we are not actually looking at the content to set the width for the table column - [[[tableView tableColumns] firstObject] setWidth:[[scrollView contentView] frame].size.width]; + + var scrollFrame = CGRectInset([[_menuWindow contentView] bounds], 1.0, 1.0); + [scrollView setFrame:scrollFrame]; + + [tableColumn setWidth:[[scrollView contentView] frame].size.width]; } - (void)_showCompletions:(CPTimer)timer @@ -149,6 +185,9 @@ [self setContentArray:[textField _completionsForSubstring:[textField _inputElement].value indexOfToken:0 indexOfSelectedItem:indexOfSelectedItem]]; + if (![contentArray count]) + return; + // TODO Support indexOfSelectedItem. Always 0 right now. [self setIndexOfSelectedItem:indexOfSelectedItem]; From 317364681a4b08b8be105784906e17fa98436d5e Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Tue, 12 Jun 2012 18:09:36 +0100 Subject: [PATCH 091/112] Fixed: make sure autocomplete menu fits within browser. --- AppKit/_CPAutocompleteMenu.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/_CPAutocompleteMenu.j b/AppKit/_CPAutocompleteMenu.j index 86a87b1f8..a79c1ae80 100644 --- a/AppKit/_CPAutocompleteMenu.j +++ b/AppKit/_CPAutocompleteMenu.j @@ -162,7 +162,7 @@ var _CPAutocompleteMenuMaximumHeight = 307; } var frameOrigin = [textField convertPoint:origin toView:nil], - screenSize = [[_menuWindow screen] visibleFrame].size, + screenSize = [([CPPlatform isBrowser] ? [_menuWindow platformWindow] : [_menuWindow screen]) visibleFrame].size, availableWidth = screenSize.width - frameOrigin.x, availableHeight = screenSize.height - frameOrigin.y, width = MIN(widestItemWidth, availableWidth), From 429933f6016a1f295cbf16572c2857dc74786201 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 15 Jun 2012 02:07:41 +0100 Subject: [PATCH 092/112] Fix token field `keyDown:` handling. `CPTokenField` had custom key down handling making it function poorly with Cappuccino's event handling and subclasses. --- AppKit/CPTokenField.j | 281 ++++++++++++++++++++---------------------- 1 file changed, 137 insertions(+), 144 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 9c38b2ef8..729baf1cf 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -129,7 +129,7 @@ var CPScrollDestinationNone = 0, return _autocompleteMenu; } -- (void)_autocompleteWithDOMEvent:(JSObject)DOMEvent +- (void)_autocompleteWithEvent:(CPEvent)anEvent { if (![self _inputElement].value && (![_autocompleteMenu contentArray] || ![self hasThemeState:CPThemeStateAutocompleting])) return; @@ -147,9 +147,12 @@ var CPScrollDestinationNone = 0, // responder or selecting the next or previous key view. if (!token || token === @"") { - if (DOMEvent && DOMEvent.keyCode === CPTabKeyCode) + var character = [anEvent charactersIgnoringModifiers], + modifierFlags = [anEvent modifierFlags]; + + if (character === CPTabCharacter) { - if (!DOMEvent.shiftKey) + if (!(modifierFlags & CPShiftKeyMask)) [[self window] selectNextKeyView:self]; else [[self window] selectPreviousKeyView:self]; @@ -197,7 +200,7 @@ var CPScrollDestinationNone = 0, - (void)_autocomplete { - [self _autocompleteWithDOMEvent:nil]; + [self _autocompleteWithEvent:nil]; } - (void)_selectToken:(_CPTokenFieldToken)token byExtendingSelection:(BOOL)extend @@ -607,143 +610,6 @@ var CPScrollDestinationNone = 0, return true; }; - CPTokenFieldKeyDownFunction = function(aDOMEvent) - { - aDOMEvent = aDOMEvent || window.event; - - CPTokenFieldTextDidChangeValue = [CPTokenFieldInputOwner stringValue]; - - if (aDOMEvent.keyCode === CPUpArrowKeyCode) - [[CPTokenFieldInputOwner _autocompleteMenu] selectPrevious]; - else if (aDOMEvent.keyCode === CPDownArrowKeyCode) - [[CPTokenFieldInputOwner _autocompleteMenu] selectNext]; - - var owner = CPTokenFieldInputOwner; - - if (aDOMEvent.keyCode === CPReturnKeyCode || aDOMEvent.keyCode === CPTabKeyCode) - { - if (aDOMEvent.preventDefault) - aDOMEvent.preventDefault(); - if (aDOMEvent.stopPropagation) - aDOMEvent.stopPropagation(); - aDOMEvent.cancelBubble = true; - - // Only resign first responder if we weren't auto-completing - if (![CPTokenFieldInputOwner hasThemeState:CPThemeStateAutocompleting]) - { - if (aDOMEvent && aDOMEvent.keyCode === CPReturnKeyCode) - { - [owner sendAction:[owner action] to:[owner target]]; - [[owner window] makeFirstResponder:nil]; - } - else if (aDOMEvent && aDOMEvent.keyCode === CPTabKeyCode) - { - if (!aDOMEvent.shiftKey) - [[owner window] selectNextKeyView:owner]; - else - [[owner window] selectPreviousKeyView:owner]; - } - } - - [owner _autocompleteWithDOMEvent:aDOMEvent]; - [owner setNeedsLayout]; - } - else if (aDOMEvent.keyCode === CPEscapeKeyCode) - { - [CPTokenFieldInputOwner _hideCompletions]; - } - else if (aDOMEvent.keyCode === CPUpArrowKeyCode || aDOMEvent.keyCode === CPDownArrowKeyCode) - { - if (aDOMEvent.preventDefault) - aDOMEvent.preventDefault(); - if (aDOMEvent.stopPropagation) - aDOMEvent.stopPropagation(); - aDOMEvent.cancelBubble = true; - } - else if (aDOMEvent.keyCode == CPLeftArrowKeyCode && owner._selectedRange.location > 0 && CPTokenFieldDOMInputElement.value == "") - { - // Move the cursor back one token if the input is empty and the left arrow key is pressed. - if (!aDOMEvent.shiftKey) - { - if (owner._selectedRange.length) - // Simply collapse the range. - owner._selectedRange.length = 0; - else - owner._selectedRange.location--; - } - else - { - owner._selectedRange.location--; - // When shift is depressed, select the next token backwards. - owner._selectedRange.length++; - } - owner._shouldScrollTo = CPScrollDestinationLeft; - [owner setNeedsLayout]; - } - else if (aDOMEvent.keyCode == CPRightArrowKeyCode && owner._selectedRange.location < [[owner _tokens] count] && CPTokenFieldDOMInputElement.value == "") - { - if (!aDOMEvent.shiftKey) - { - if (owner._selectedRange.length) - { - // Place the cursor at the end of the selection and collapse. - owner._selectedRange.location = CPMaxRange(owner._selectedRange); - owner._selectedRange.length = 0; - } - else - { - // Move the cursor forward one token if the input is empty and the right arrow key is pressed. - owner._selectedRange.location = MIN([[owner _tokens] count], owner._selectedRange.location + owner._selectedRange.length + 1); - } - } - else - { - // Leave the selection location in place but include the next token to the right. - owner._selectedRange.length++; - } - owner._shouldScrollTo = CPScrollDestinationRight; - [owner setNeedsLayout]; - } - else if (aDOMEvent.keyCode === CPDeleteKeyCode) - { - // Highlight the previous token if backspace was pressed in an empty input element or re-show the completions view - if (CPTokenFieldDOMInputElement.value == @"") - { - [self _hideCompletions]; - - if (CPEmptyRange(CPTokenFieldInputOwner._selectedRange)) - { - if (CPTokenFieldInputOwner._selectedRange.location > 0) - { - var tokens = [CPTokenFieldInputOwner _tokens], - tokenView = [tokens objectAtIndex:(CPTokenFieldInputOwner._selectedRange.location - 1)]; - [CPTokenFieldInputOwner _selectToken:tokenView byExtendingSelection:NO]; - } - } - else - [CPTokenFieldInputOwner _removeSelectedTokens:nil]; - } - else - [CPTokenFieldInputOwner _delayedShowCompletions]; - } - else if (aDOMEvent.keyCode === CPDeleteForwardKeyCode && CPTokenFieldDOMInputElement.value == @"") - { - // Delete forward if nothing is selected, else delete all selected. - [self _hideCompletions]; - - if (CPEmptyRange(CPTokenFieldInputOwner._selectedRange)) - { - var tokens = [CPTokenFieldInputOwner _tokens]; - if (CPTokenFieldInputOwner._selectedRange.location < [tokens count]) - [CPTokenFieldInputOwner _deleteToken:tokens[CPTokenFieldInputOwner._selectedRange.location]]; - } - else - [CPTokenFieldInputOwner _removeSelectedTokens:nil]; - } - - return true; - }; - CPTokenFieldKeyPressFunction = function(aDOMEvent) { aDOMEvent = aDOMEvent || window.event; @@ -759,7 +625,7 @@ var CPScrollDestinationNone = 0, aDOMEvent.stopPropagation(); aDOMEvent.cancelBubble = true; - [owner _autocompleteWithDOMEvent:aDOMEvent]; + [owner _autocompleteWithEvent:aDOMEvent]; [owner setNeedsLayout]; return true; @@ -797,13 +663,11 @@ var CPScrollDestinationNone = 0, if (document.attachEvent) { CPTokenFieldDOMInputElement.attachEvent("on" + CPDOMEventKeyUp, CPTokenFieldKeyUpFunction); - CPTokenFieldDOMInputElement.attachEvent("on" + CPDOMEventKeyDown, CPTokenFieldKeyDownFunction); CPTokenFieldDOMInputElement.attachEvent("on" + CPDOMEventKeyPress, CPTokenFieldKeyPressFunction); } else { CPTokenFieldDOMInputElement.addEventListener(CPDOMEventKeyUp, CPTokenFieldKeyUpFunction, NO); - CPTokenFieldDOMInputElement.addEventListener(CPDOMEventKeyDown, CPTokenFieldKeyDownFunction, NO); CPTokenFieldDOMInputElement.addEventListener(CPDOMEventKeyPress, CPTokenFieldKeyPressFunction, NO); } @@ -827,6 +691,135 @@ var CPScrollDestinationNone = 0, } #endif +- (void)keyDown:(CPEvent)anEvent +{ + var character = [anEvent charactersIgnoringModifiers], + modifierFlags = [anEvent modifierFlags]; + + // Check for the key events manually, as opposed to waiting for CPWindow to sent the actual action message + // in _processKeyboardUIKey:, because we might not want to handle the arrow events. + if (character === CPUpArrowFunctionKey) + { + [[CPTokenFieldInputOwner _autocompleteMenu] selectPrevious]; + } + else if (character === CPDownArrowFunctionKey) + { + [[CPTokenFieldInputOwner _autocompleteMenu] selectNext]; + } + else if (character === CPNewlineCharacter || character === CPCarriageReturnCharacter || character === CPTabCharacter) + { + // Only resign first responder if we weren't auto-completing + if (![self hasThemeState:CPThemeStateAutocompleting]) + { + if (character === CPNewlineCharacter || character === CPCarriageReturnCharacter) + { + [self sendAction:[self action] to:[self target]]; + [[self window] makeFirstResponder:nil]; + } + else if (character === CPTabCharacter) + { + if (!(modifierFlags & CPShiftKeyMask)) + [[self window] selectNextKeyView:self]; + else + [[self window] selectPreviousKeyView:self]; + } + } + + [self _autocompleteWithEvent:anEvent]; + [self setNeedsLayout]; + } + else if (character === CPEscapeFunctionKey) + { + [self _hideCompletions]; + } + else if (character === CPLeftArrowFunctionKey && _selectedRange.location > 0 && CPTokenFieldDOMInputElement.value == "") + { + // Move the cursor back one token if the input is empty and the left arrow key is pressed. + if (!(modifierFlags & CPShiftKeyMask)) + { + if (_selectedRange.length) + // Simply collapse the range. + _selectedRange.length = 0; + else + _selectedRange.location--; + } + else + { + _selectedRange.location--; + // When shift is depressed, select the next token backwards. + _selectedRange.length++; + } + _shouldScrollTo = CPScrollDestinationLeft; + [self setNeedsLayout]; + } + else if (character === CPRightArrowFunctionKey && _selectedRange.location < [[self _tokens] count] && CPTokenFieldDOMInputElement.value == "") + { + if (!(modifierFlags & CPShiftKeyMask)) + { + if (_selectedRange.length) + { + // Place the cursor at the end of the selection and collapse. + _selectedRange.location = CPMaxRange(_selectedRange); + _selectedRange.length = 0; + } + else + { + // Move the cursor forward one token if the input is empty and the right arrow key is pressed. + _selectedRange.location = MIN([[self _tokens] count], _selectedRange.location + _selectedRange.length + 1); + } + } + else + { + // Leave the selection location in place but include the next token to the right. + _selectedRange.length++; + } + _shouldScrollTo = CPScrollDestinationRight; + [self setNeedsLayout]; + } + else if ((character === CPBackspaceCharacter || character === CPDeleteCharacter) && CPTokenFieldDOMInputElement.value == @"") + { + // Highlight the previous token if backspace was pressed in an empty input element + [self _hideCompletions]; + + if (CPEmptyRange(_selectedRange)) + { + if (_selectedRange.location > 0) + { + var tokenView = [[self _tokens] objectAtIndex:(_selectedRange.location - 1)]; + [self _selectToken:tokenView byExtendingSelection:NO]; + } + } + else + [self _removeSelectedTokens:nil]; + } + else if (character === CPDeleteFunctionKey && CPTokenFieldDOMInputElement.value == @"") + { + // Delete forward if nothing is selected, else delete all selected. + [self _hideCompletions]; + + if (CPEmptyRange(_selectedRange)) + { + if (_selectedRange.location < [[self _tokens] count]) + [self _deleteToken:[[self _tokens] objectAtIndex:[_selectedRange.location]]]; + } + else + [self _removeSelectedTokens:nil]; + } + else + { + // We didn't do anything special, so pass the event on to the input element. + // Allow the input element to receive the event. + if ([[self window] firstResponder] == self) + { + CPTokenFieldTextDidChangeValue = [CPTokenFieldInputOwner stringValue]; + // TODO if changed + // [self _delayedShowCompletions]; + + [[[self window] platformWindow] _propagateCurrentDOMEvent:YES]; + } + } +} + // - (void)setTokenStyle: (NSTokenStyle) style; // - (NSTokenStyle)tokenStyle; // From 5683af9bc8b6ad998875efa56fca64adbbc3fd9d Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 15 Jun 2012 02:35:19 +0100 Subject: [PATCH 093/112] Improve token field subclassing support. Token field now triggers autocompletion from textDidChange: which better meets the expectations of Cappuccino programmers, and is closer to how Cocoa does it. Eliminated custom non-Cappuccino key press handler. --- AppKit/CPTokenField.j | 52 ++++++++++++++----------------------------- 1 file changed, 17 insertions(+), 35 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 729baf1cf..20560de9d 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -46,8 +46,6 @@ var CPTokenFieldDOMInputElement = nil, CPTokenFieldFocusInput = NO, CPTokenFieldBlurFunction = nil, - CPTokenFieldKeyUpFunction = nil, - CPTokenFieldKeyPressFunction = nil, CPTokenFieldKeyDownFunction = nil; #endif @@ -610,36 +608,6 @@ var CPScrollDestinationNone = 0, return true; }; - CPTokenFieldKeyPressFunction = function(aDOMEvent) - { - aDOMEvent = aDOMEvent || window.event; - - var character = String.fromCharCode(aDOMEvent.keyCode || aDOMEvent.which), - owner = CPTokenFieldInputOwner; - - if ([[owner tokenizingCharacterSet] characterIsMember:character]) - { - if (aDOMEvent.preventDefault) - aDOMEvent.preventDefault(); - if (aDOMEvent.stopPropagation) - aDOMEvent.stopPropagation(); - aDOMEvent.cancelBubble = true; - - [owner _autocompleteWithEvent:aDOMEvent]; - [owner setNeedsLayout]; - - return true; - } - - [CPTokenFieldInputOwner _delayedShowCompletions]; - // If there was a selection, collapse it now since we're typing in a new token. - owner._selectedRange.length = 0; - - // Force immediate layout in case word wrapping is now necessary. - [owner setNeedsLayout]; - [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; - }; - CPTokenFieldKeyUpFunction = function() { if ([CPTokenFieldInputOwner stringValue] !== CPTokenFieldTextDidChangeValue) @@ -663,12 +631,10 @@ var CPScrollDestinationNone = 0, if (document.attachEvent) { CPTokenFieldDOMInputElement.attachEvent("on" + CPDOMEventKeyUp, CPTokenFieldKeyUpFunction); - CPTokenFieldDOMInputElement.attachEvent("on" + CPDOMEventKeyPress, CPTokenFieldKeyPressFunction); } else { CPTokenFieldDOMInputElement.addEventListener(CPDOMEventKeyUp, CPTokenFieldKeyUpFunction, NO); - CPTokenFieldDOMInputElement.addEventListener(CPDOMEventKeyPress, CPTokenFieldKeyPressFunction, NO); } //FIXME make this not onblur @@ -706,7 +672,7 @@ var CPScrollDestinationNone = 0, { [[CPTokenFieldInputOwner _autocompleteMenu] selectNext]; } - else if (character === CPNewlineCharacter || character === CPCarriageReturnCharacter || character === CPTabCharacter) + else if (character === CPNewlineCharacter || character === CPCarriageReturnCharacter || character === CPTabCharacter || [_tokenizingCharacterSet characterIsMember:character]) { // Only resign first responder if we weren't auto-completing if (![self hasThemeState:CPThemeStateAutocompleting]) @@ -820,6 +786,22 @@ var CPScrollDestinationNone = 0, } } +- (void)textDidChange:(CPNotification)aNotification +{ + if ([aNotification object] !== self) + return; + + [super textDidChange:aNotification]; + + // For future reference: in Cocoa, textDidChange: appears to call [self complete:]. + [self _delayedShowCompletions]; + // If there was a selection, collapse it now since we're typing in a new token. + _selectedRange.length = 0; + + // Force immediate layout in case word wrapping is now necessary. + [self setNeedsLayout]; +} + // - (void)setTokenStyle: (NSTokenStyle) style; // - (NSTokenStyle)tokenStyle; // From 132ac7c03fd7802ae3eebe75041352da80edf898 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 15 Jun 2012 12:05:56 +0100 Subject: [PATCH 094/112] Token field 'keyUp:' support. --- AppKit/CPTokenField.j | 40 ++++++++++++---------------------------- 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 20560de9d..5d4d8f94c 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -45,8 +45,7 @@ var CPTokenFieldDOMInputElement = nil, CPTokenFieldCachedDragFunction = nil, CPTokenFieldFocusInput = NO, - CPTokenFieldBlurFunction = nil, - CPTokenFieldKeyDownFunction = nil; + CPTokenFieldBlurFunction = nil; #endif @@ -608,19 +607,6 @@ var CPScrollDestinationNone = 0, return true; }; - CPTokenFieldKeyUpFunction = function() - { - if ([CPTokenFieldInputOwner stringValue] !== CPTokenFieldTextDidChangeValue) - { - CPTokenFieldTextDidChangeValue = [CPTokenFieldInputOwner stringValue]; - [CPTokenFieldInputOwner textDidChange:[CPNotification notificationWithName:CPControlTextDidChangeNotification object:CPTokenFieldInputOwner userInfo:nil]]; - } - - [self setNeedsLayout]; - - [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; - }; - CPTokenFieldHandleBlur = function(anEvent) { CPTokenFieldInputOwner = nil; @@ -628,15 +614,6 @@ var CPScrollDestinationNone = 0, [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; }; - if (document.attachEvent) - { - CPTokenFieldDOMInputElement.attachEvent("on" + CPDOMEventKeyUp, CPTokenFieldKeyUpFunction); - } - else - { - CPTokenFieldDOMInputElement.addEventListener(CPDOMEventKeyUp, CPTokenFieldKeyUpFunction, NO); - } - //FIXME make this not onblur CPTokenFieldDOMInputElement.onblur = CPTokenFieldBlurFunction; @@ -777,15 +754,22 @@ var CPScrollDestinationNone = 0, // Allow the input element to receive the event. if ([[self window] firstResponder] == self) { - CPTokenFieldTextDidChangeValue = [CPTokenFieldInputOwner stringValue]; - // TODO if changed - // [self _delayedShowCompletions]; - + CPTokenFieldTextDidChangeValue = [self stringValue]; [[[self window] platformWindow] _propagateCurrentDOMEvent:YES]; } } } +- (void)keyUp:(CPEvent)anEvent +{ + if ([self stringValue] !== CPTokenFieldTextDidChangeValue) + { + [self textDidChange:[CPNotification notificationWithName:CPControlTextDidChangeNotification object:self userInfo:nil]]; + } + + [[[self window] platformWindow] _propagateCurrentDOMEvent:YES]; +} + - (void)textDidChange:(CPNotification)aNotification { if ([aNotification object] !== self) From 69f5fc536c38a5f019cfecb28001323cc48625d8 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 15 Jun 2012 14:26:58 +0100 Subject: [PATCH 095/112] Key bindings support for token field. Also improve compatibility with `CPTextField` superclass and subclassing support by properly using `interpretKeyEvents:` like `CPTextField`. --- AppKit/CPTokenField.j | 214 ++++++++++++++++++++++++++---------------- 1 file changed, 134 insertions(+), 80 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 5d4d8f94c..496f155e5 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -634,94 +634,141 @@ var CPScrollDestinationNone = 0, } #endif -- (void)keyDown:(CPEvent)anEvent +- (void)moveUp:(id)sender { - var character = [anEvent charactersIgnoringModifiers], - modifierFlags = [anEvent modifierFlags]; + [[self _autocompleteMenu] selectPrevious]; + [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; +} - // Check for the key events manually, as opposed to waiting for CPWindow to sent the actual action message - // in _processKeyboardUIKey:, because we might not want to handle the arrow events. - if (character === CPUpArrowFunctionKey) - { - [[CPTokenFieldInputOwner _autocompleteMenu] selectPrevious]; - } - else if (character === CPDownArrowFunctionKey) - { - [[CPTokenFieldInputOwner _autocompleteMenu] selectNext]; - } - else if (character === CPNewlineCharacter || character === CPCarriageReturnCharacter || character === CPTabCharacter || [_tokenizingCharacterSet characterIsMember:character]) - { - // Only resign first responder if we weren't auto-completing - if (![self hasThemeState:CPThemeStateAutocompleting]) - { - if (character === CPNewlineCharacter || character === CPCarriageReturnCharacter) - { - [self sendAction:[self action] to:[self target]]; - [[self window] makeFirstResponder:nil]; - } - else if (character === CPTabCharacter) - { - if (!(modifierFlags & CPShiftKeyMask)) - [[self window] selectNextKeyView:self]; - else - [[self window] selectPreviousKeyView:self]; - } - } +- (void)moveDown:(id)sender +{ + [[self _autocompleteMenu] selectNext]; + [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; +} +- (void)insertNewline:(id)sender +{ + if ([self hasThemeState:CPThemeStateAutocompleting]) + { + [self _autocompleteWithEvent:[CPApp currentEvent]]; + } + else + { + [self sendAction:[self action] to:[self target]]; + [[self window] makeFirstResponder:nil]; + } + + [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; +} + +- (void)insertTab:(id)sender +{ + var anEvent = [CPApp currentEvent]; + if ([self hasThemeState:CPThemeStateAutocompleting]) + { [self _autocompleteWithEvent:anEvent]; - [self setNeedsLayout]; } - else if (character === CPEscapeFunctionKey) + else { - [self _hideCompletions]; - } - else if (character === CPLeftArrowFunctionKey && _selectedRange.location > 0 && CPTokenFieldDOMInputElement.value == "") - { - // Move the cursor back one token if the input is empty and the left arrow key is pressed. - if (!(modifierFlags & CPShiftKeyMask)) - { - if (_selectedRange.length) - // Simply collapse the range. - _selectedRange.length = 0; - else - _selectedRange.location--; - } + // Default to standard tabbing behaviour. + if (!([anEvent modifierFlags] & CPShiftKeyMask)) + [[self window] selectNextKeyView:self]; + else + [[self window] selectPreviousKeyView:self]; + } + + [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; +} + +- (void)insertText:(CPString)characters +{ + if ([_tokenizingCharacterSet characterIsMember:[characters substringToIndex:1]]) + { + [self _autocompleteWithEvent:[CPApp currentEvent]]; + [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; + return; + } + + // If we didn't handle it, allow _propagateCurrentDOMEvent to remain YES so that the input field can receive + // the new character. +} + +- (void)cancelOperation:(id)sender +{ + [self _hideCompletions]; + [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; +} + +- (void)moveLeft:(id)sender +{ + // Left arrow + if (_selectedRange.location > 0 && CPTokenFieldDOMInputElement.value == "") + { + if (_selectedRange.length) + // Simply collapse the range. + _selectedRange.length = 0; else - { _selectedRange.location--; - // When shift is depressed, select the next token backwards. - _selectedRange.length++; - } - _shouldScrollTo = CPScrollDestinationLeft; [self setNeedsLayout]; + [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; + _shouldScrollTo = CPScrollDestinationLeft; } - else if (character === CPRightArrowFunctionKey && _selectedRange.location < [[self _tokens] count] && CPTokenFieldDOMInputElement.value == "") +} + +- (void)moveLeftAndModifySelection:(id)sender +{ + if (_selectedRange.location > 0 && CPTokenFieldDOMInputElement.value == "") { - if (!(modifierFlags & CPShiftKeyMask)) + _selectedRange.location--; + // When shift is depressed, select the next token backwards. + _selectedRange.length++; + [self setNeedsLayout]; + [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; + _shouldScrollTo = CPScrollDestinationLeft; + } +} + +- (void)moveRight:(id)sender +{ + // Right arrow + if (_selectedRange.location < [[self _tokens] count] && CPTokenFieldDOMInputElement.value == "") + { + if (_selectedRange.length) { - if (_selectedRange.length) - { - // Place the cursor at the end of the selection and collapse. - _selectedRange.location = CPMaxRange(_selectedRange); - _selectedRange.length = 0; - } - else - { - // Move the cursor forward one token if the input is empty and the right arrow key is pressed. - _selectedRange.location = MIN([[self _tokens] count], _selectedRange.location + _selectedRange.length + 1); - } + // Place the cursor at the end of the selection and collapse. + _selectedRange.location = CPMaxRange(_selectedRange); + _selectedRange.length = 0; } else { - // Leave the selection location in place but include the next token to the right. - _selectedRange.length++; + // Move the cursor forward one token if the input is empty and the right arrow key is pressed. + _selectedRange.location = MIN([[self _tokens] count], _selectedRange.location + _selectedRange.length + 1); } - _shouldScrollTo = CPScrollDestinationRight; + [self setNeedsLayout]; + [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; + _shouldScrollTo = CPScrollDestinationRight; } - else if ((character === CPBackspaceCharacter || character === CPDeleteCharacter) && CPTokenFieldDOMInputElement.value == @"") +} + +- (void)moveRightAndModifySelection:(id)sender +{ + if (CPMaxRange(_selectedRange) < [[self _tokens] count] && CPTokenFieldDOMInputElement.value == "") + { + // Leave the selection location in place but include the next token to the right. + _selectedRange.length++; + [self setNeedsLayout]; + [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; + _shouldScrollTo = CPScrollDestinationRight; + } +} + +- (void)deleteBackward:(id)sender +{ + // TODO Even if the editor isn't empty you should be able to delete the previous token by placing the cursor + // at the beginning of the editor. + if (CPTokenFieldDOMInputElement.value == @"") { - // Highlight the previous token if backspace was pressed in an empty input element [self _hideCompletions]; if (CPEmptyRange(_selectedRange)) @@ -734,8 +781,16 @@ var CPScrollDestinationNone = 0, } else [self _removeSelectedTokens:nil]; + + [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; } - else if (character === CPDeleteFunctionKey && CPTokenFieldDOMInputElement.value == @"") +} + +- (void)deleteForward:(id)sender +{ + // TODO Even if the editor isn't empty you should be able to delete the next token by placing the cursor + // at the end of the editor. + if (CPTokenFieldDOMInputElement.value == @"") { // Delete forward if nothing is selected, else delete all selected. [self _hideCompletions]; @@ -747,17 +802,16 @@ var CPScrollDestinationNone = 0, } else [self _removeSelectedTokens:nil]; + + [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; } - else - { - // We didn't do anything special, so pass the event on to the input element. - // Allow the input element to receive the event. - if ([[self window] firstResponder] == self) - { - CPTokenFieldTextDidChangeValue = [self stringValue]; - [[[self window] platformWindow] _propagateCurrentDOMEvent:YES]; - } - } +} + +- (void)keyDown:(CPEvent)anEvent +{ + CPTokenFieldTextDidChangeValue = [self stringValue]; + + [super keyDown:anEvent]; } - (void)keyUp:(CPEvent)anEvent From f43c643d5a2600e639e1332520c232fb0c6ba744 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 15 Jun 2012 14:31:45 +0100 Subject: [PATCH 096/112] Allow token field subclasses to override defaultCompletionDelay. Also fixed incorrect return type. --- AppKit/CPTokenField.j | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 496f155e5..3345f7129 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -78,6 +78,11 @@ var CPScrollDestinationNone = 0, return [CPCharacterSet characterSetWithCharactersInString:@","]; } ++ (CPTimeInterval)defaultCompletionDelay +{ + return 0.5; +} + + (CPString)defaultThemeClass { return "tokenfield"; @@ -87,7 +92,7 @@ var CPScrollDestinationNone = 0, { if (self = [super initWithFrame:frame]) { - _completionDelay = [CPTokenField defaultCompletionDelay]; + _completionDelay = [[self class] defaultCompletionDelay]; _tokenizingCharacterSet = [[self class] defaultTokenizingCharacterSet]; [self setBezeled:YES]; @@ -857,11 +862,6 @@ var CPScrollDestinationNone = 0, return _completionDelay; } -+ (NSTimeInterval)defaultCompletionDelay -{ - return 0.5; -} - // ========== // = LAYOUT = // ========== From 55ca956f500802b8c7d7ca9cad8ee756449d6f47 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 15 Jun 2012 15:02:11 +0100 Subject: [PATCH 097/112] Remove nonstandard `CPCopyRange`. --- AppKit/CPTokenField.j | 3 ++- Foundation/CPAttributedString.j | 2 +- Foundation/CPRange.j | 11 ----------- 3 files changed, 3 insertions(+), 13 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 3345f7129..b4a05211c 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -245,7 +245,8 @@ var CPScrollDestinationNone = 0, [self _deselectToken:token]; // Preserve selection. - var selection = CPCopyRange(_selectedRange); + var selection = CPMakeRangeCopy(_selectedRange); + [objectValue removeObjectAtIndex:indexOfToken]; [self setObjectValue:objectValue]; _selectedRange = selection; diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j index 2a54b09cb..29c8b7749 100644 --- a/Foundation/CPAttributedString.j +++ b/Foundation/CPAttributedString.j @@ -823,7 +823,7 @@ var makeRangeEntry = function makeRangeEntry(/*CPRange*/aRange, /*CPDictionary*/ var copyRangeEntry = function copyRangeEntry(/*RangeEntry*/aRangeEntry) { - return makeRangeEntry(CPCopyRange(aRangeEntry.range), [aRangeEntry.attributes copy]); + return makeRangeEntry(CPMakeRangeCopy(aRangeEntry.range), [aRangeEntry.attributes copy]); }; var splitRangeEntry = function splitRangeEntryAtIndex(/*RangeEntry*/aRangeEntry, /*unsigned*/anIndex) diff --git a/Foundation/CPRange.j b/Foundation/CPRange.j index a6092a483..a4816b385 100755 --- a/Foundation/CPRange.j +++ b/Foundation/CPRange.j @@ -37,17 +37,6 @@ function CPMakeRange(location, length) return { location: location, length: length }; } -/*! - Makes a copy of a CPRange. - @param aRange the CPRange to copy - @group CPRange - @return CPRange the copy of the range -*/ -function CPCopyRange(aRange) -{ - return { location: aRange.location, length: aRange.length }; -} - /*! Makes a copy of a CPRange. @param aRange the CPRange to copy From e9ba32661067d4db38df79b43fc5b90e6b2704fa Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 15 Jun 2012 15:03:43 +0100 Subject: [PATCH 098/112] Inlineable range functions. --- Foundation/CPIndexSet.j | 6 ++---- Foundation/CPRange.h | 25 +++++++++++++++++++++++++ Foundation/CPRange.j | 19 +++++++------------ 3 files changed, 34 insertions(+), 16 deletions(-) create mode 100644 Foundation/CPRange.h diff --git a/Foundation/CPIndexSet.j b/Foundation/CPIndexSet.j index eac5a42a3..c0a13c3d4 100644 --- a/Foundation/CPIndexSet.j +++ b/Foundation/CPIndexSet.j @@ -20,14 +20,12 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "CPRange.h" + @import "CPArray.j" @import "CPObject.j" @import "CPRange.j" -#define _CPMaxRange(aRange) ((aRange).location + (aRange).length) -#define _CPMakeRange(aLocation, aLength) { location:(aLocation), length:aLength } -#define _CPMakeRangeCopy(aRange) { location:(aRange).location, length:(aRange).length } - /*! @class CPIndexSet @ingroup foundation diff --git a/Foundation/CPRange.h b/Foundation/CPRange.h new file mode 100644 index 000000000..f20a08f7a --- /dev/null +++ b/Foundation/CPRange.h @@ -0,0 +1,25 @@ +/* + * CPRange.h + * Foundation + * + * Created by Alexander Ljungberg. + * Copyright 2012, SlevenBits Ltd. + * + * 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 + */ + +#define _CPMaxRange(aRange) ((aRange).location + (aRange).length) +#define _CPMakeRange(aLocation, aLength) { location:(aLocation), length:aLength } +#define _CPMakeRangeCopy(aRange) { location:(aRange).location, length:(aRange).length } diff --git a/Foundation/CPRange.j b/Foundation/CPRange.j index a4816b385..d96bbb834 100755 --- a/Foundation/CPRange.j +++ b/Foundation/CPRange.j @@ -20,6 +20,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#define _function(inline) function inline { return _##inline; } + +#include "CPRange.h" + /*! @addtogroup foundation @{ @@ -32,10 +36,7 @@ @group CPRange @return CPRange the new range object */ -function CPMakeRange(location, length) -{ - return { location: location, length: length }; -} +_function(CPMakeRange(location, length)) /*! Makes a copy of a CPRange. @@ -43,10 +44,7 @@ function CPMakeRange(location, length) @group CPRange @return CPRange the copy of the range */ -function CPMakeRangeCopy(aRange) -{ - return { location:aRange.location, length:aRange.length }; -} +_function(CPMakeRangeCopy(aRange)) /*! Determines if a range is empty \c length is 0. @@ -65,10 +63,7 @@ function CPEmptyRange(aRange) @group CPRange @return int the range maximum */ -function CPMaxRange(aRange) -{ - return aRange.location + aRange.length; -} +_function(CPMaxRange(aRange)) /*! Determines if two CPRanges are equal. From 6d6cf52180b9ec0aba22932f00a60104e0a710d7 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 15 Jun 2012 15:05:16 +0100 Subject: [PATCH 099/112] Minor token field optimisation. --- AppKit/CPTokenField.j | 59 +++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index b4a05211c..df3af90b2 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -20,6 +20,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#import "../Foundation/CPRange.h" + @import @import @import @@ -108,7 +110,7 @@ var CPScrollDestinationNone = 0, - (void)_init { - _selectedRange = CPMakeRange(0, 0); + _selectedRange = _CPMakeRange(0, 0); var frame = [self frame]; @@ -192,7 +194,7 @@ var CPScrollDestinationNone = 0, if (delegateApprovedObjectsCount) location += delegateApprovedObjectsCount; - _selectedRange = CPMakeRange(location, 0); + _selectedRange = _CPMakeRange(location, 0); [self _inputElement].value = @""; [self setNeedsLayout]; @@ -212,12 +214,12 @@ var CPScrollDestinationNone = 0, if (indexOfToken == CPNotFound) { if (!extend) - _selectedRange = CPMakeRange([[self _tokens] count], 0); + _selectedRange = _CPMakeRange([[self _tokens] count], 0); } else if (extend) - _selectedRange = CPUnionRange(_selectedRange, CPMakeRange(indexOfToken, 1)); + _selectedRange = CPUnionRange(_selectedRange, _CPMakeRange(indexOfToken, 1)); else - _selectedRange = CPMakeRange(indexOfToken, 1); + _selectedRange = _CPMakeRange(indexOfToken, 1); [self setNeedsLayout]; } @@ -227,7 +229,7 @@ var CPScrollDestinationNone = 0, var indexOfToken = [[self _tokens] indexOfObject:token]; if (CPLocationInRange(indexOfToken, _selectedRange)) - _selectedRange = CPMakeRange(MAX(indexOfToken, _selectedRange.location), MIN(_selectedRange.length, indexOfToken - _selectedRange.location)); + _selectedRange = _CPMakeRange(MAX(indexOfToken, _selectedRange.location), MIN(_selectedRange.length, indexOfToken - _selectedRange.location)); [self setNeedsLayout]; } @@ -276,10 +278,11 @@ var CPScrollDestinationNone = 0, [tokens removeObjectAtIndex:_selectedRange.location + i]; var collapsedSelection = _selectedRange.location; + [self setObjectValue:tokens]; // setObjectValue moves the cursor to the end of the selection. We want it to stay // where the selected tokens were. - _selectedRange = CPMakeRange(collapsedSelection, 0); + _selectedRange = _CPMakeRange(collapsedSelection, 0); [self _controlTextDidChange]; } @@ -440,13 +443,14 @@ var CPScrollDestinationNone = 0, - (void)mouseUpOnToken:(_CPTokenFieldToken)aToken withEvent:(CPEvent)anEvent { - if (_mouseDownEvent && CGPointEqualToPoint([_mouseDownEvent locationInWindow], [anEvent locationInWindow])) + if (_mouseDownEvent && _CGPointEqualToPoint([_mouseDownEvent locationInWindow], [anEvent locationInWindow])) { [self _selectToken:aToken byExtendingSelection:[anEvent modifierFlags] & CPShiftKeyMask]; [[self window] makeFirstResponder:self]; // Snap to the token if it's only half visible due to mouse wheel scrolling. _shouldScrollTo = aToken; } + _preventResign = NO; } @@ -500,12 +504,11 @@ var CPScrollDestinationNone = 0, if (aValue === superValue || [aValue isEqualToArray:superValue]) return; - var contentView = [_tokenScrollView documentView]; - - // Preserve as many existing tokens as possible to reduce redraw flickering. - var oldTokens = [self _tokens], + var contentView = [_tokenScrollView documentView], + oldTokens = [self _tokens], newTokens = []; + // Preserve as many existing tokens as possible to reduce redraw flickering. if (aValue !== nil) { for (var i = 0, count = [aValue count]; i < count; i++) @@ -742,7 +745,7 @@ var CPScrollDestinationNone = 0, if (_selectedRange.length) { // Place the cursor at the end of the selection and collapse. - _selectedRange.location = CPMaxRange(_selectedRange); + _selectedRange.location = _CPMaxRange(_selectedRange); _selectedRange.length = 0; } else @@ -759,7 +762,7 @@ var CPScrollDestinationNone = 0, - (void)moveRightAndModifySelection:(id)sender { - if (CPMaxRange(_selectedRange) < [[self _tokens] count] && CPTokenFieldDOMInputElement.value == "") + if (_CPMaxRange(_selectedRange) < [[self _tokens] count] && CPTokenFieldDOMInputElement.value == "") { // Leave the selection location in place but include the next token to the right. _selectedRange.length++; @@ -889,7 +892,7 @@ var CPScrollDestinationNone = 0, return; // Move each token into the right position. - var contentRect = CGRectMakeCopy([contentView bounds]), + var contentRect = _CGRectMakeCopy([contentView bounds]), contentOrigin = contentRect.origin, contentSize = contentRect.size, offset = CPPointMake(contentOrigin.x, contentOrigin.y), @@ -900,11 +903,11 @@ var CPScrollDestinationNone = 0, // Get the height of a typical token, or a token token if you will. [tokenToken sizeToFit]; - var tokenHeight = CGRectGetHeight([tokenToken bounds]); + var tokenHeight = _CGRectGetHeight([tokenToken bounds]); var fitAndFrame = function(width, height) { - var r = CGRectMake(0, 0, width, height); + var r = _CGRectMake(0, 0, width, height); if (offset.x + width >= contentSize.width && offset.x > contentOrigin.x) { @@ -916,8 +919,8 @@ var CPScrollDestinationNone = 0, r.origin.y = offset.y; // Make sure the frame fits. - if (CGRectGetHeight([contentView bounds]) < offset.y + height) - [contentView setFrame:CGRectMake(0, 0, CGRectGetWidth([_tokenScrollView bounds]), offset.y + height)]; + if (_CGRectGetHeight([contentView bounds]) < offset.y + height) + [contentView setFrame:_CGRectMake(0, 0, _CGRectGetWidth([_tokenScrollView bounds]), offset.y + height)]; offset.x += width + spaceBetweenTokens.width; @@ -953,7 +956,7 @@ var CPScrollDestinationNone = 0, for (var i = 0, count = [tokens count]; i < count; i++) { - if (isEditing && i == CPMaxRange(_selectedRange)) + if (isEditing && i == _CPMaxRange(_selectedRange)) placeEditor(false); var tokenView = [tokens objectAtIndex:i]; @@ -972,7 +975,7 @@ var CPScrollDestinationNone = 0, [tokenView setFrame:tokenFrame]; } - if (isEditing && CPMaxRange(_selectedRange) >= [tokens count]) + if (isEditing && _CPMaxRange(_selectedRange) >= [tokens count]) placeEditor(true); // Hide the editor if there are selected tokens, but still keep it active @@ -985,8 +988,8 @@ var CPScrollDestinationNone = 0, } // Trim off any excess height downwards. - if (CGRectGetHeight([contentView bounds]) > offset.y + tokenHeight) - [contentView setFrame:CGRectMake(0, 0, CGRectGetWidth([_tokenScrollView bounds]), offset.y + tokenHeight)]; + if (_CGRectGetHeight([contentView bounds]) > offset.y + tokenHeight) + [contentView setFrame:_CGRectMake(0, 0, _CGRectGetWidth([_tokenScrollView bounds]), offset.y + tokenHeight)]; if (_shouldScrollTo !== CPScrollDestinationNone) { @@ -998,7 +1001,7 @@ var CPScrollDestinationNone = 0, if (scrollToToken === CPScrollDestinationLeft) scrollToToken = tokens[_selectedRange.location] else if (scrollToToken === CPScrollDestinationRight) - scrollToToken = tokens[MAX(0, CPMaxRange(_selectedRange) - 1)]; + scrollToToken = tokens[MAX(0, _CPMaxRange(_selectedRange) - 1)]; [self _scrollTokenViewToVisible:scrollToToken]; } @@ -1043,7 +1046,7 @@ var CPScrollDestinationNone = 0, - (CGPoint)_completionOrigin:(_CPAutocompleteMenu)anAutocompleteMenu { var relativeFrame = _inputFrame ? [[_tokenScrollView documentView] convertRect:_inputFrame toView:self ] : [self bounds]; - return CGPointMake(CGRectGetMinX(relativeFrame), CGRectGetMaxY(relativeFrame)); + return _CGPointMake(_CGRectGetMinX(relativeFrame), _CGRectGetMaxY(relativeFrame)); } /*! @@ -1188,7 +1191,7 @@ var CPScrollDestinationNone = 0, - (CGSize)_minimumFrameSize { - var size = CGSizeMakeZero(), + var size = _CGSizeMakeZero(), minSize = [self currentValueForThemeAttribute:@"min-size"], contentInset = [self currentValueForThemeAttribute:@"content-inset"]; @@ -1216,7 +1219,7 @@ var CPScrollDestinationNone = 0, buttonOffset = [_deleteButton currentValueForThemeAttribute:@"offset"], buttonSize = [_deleteButton currentValueForThemeAttribute:@"min-size"]; - [_deleteButton setFrame:CPRectMake(CPRectGetMaxX(frame) - buttonOffset.x, CPRectGetMinY(frame) + buttonOffset.y, buttonSize.width, buttonSize.height)]; + [_deleteButton setFrame:_CGRectMake(CPRectGetMaxX(frame) - buttonOffset.x, CPRectGetMinY(frame) + buttonOffset.y, buttonSize.width, buttonSize.height)]; } } @@ -1248,7 +1251,7 @@ var CPScrollDestinationNone = 0, { var attributes = [CPButton themeAttributes]; - [attributes setObject:CGPointMake(15, 5) forKey:@"offset"]; + [attributes setObject:_CGPointMake(15, 5) forKey:@"offset"]; return attributes; } From fb404a0671dde270c954269379640241c365be97 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 15 Jun 2012 15:05:36 +0100 Subject: [PATCH 100/112] Hide private token field API. Fix return type. --- AppKit/CPTokenField.j | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index df3af90b2..3116f8e51 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -435,13 +435,13 @@ var CPScrollDestinationNone = 0, _mouseDownEvent = nil; } -- (void)mouseDownOnToken:(_CPTokenFieldToken)aToken withEvent:(CPEvent)anEvent +- (void)_mouseDownOnToken:(_CPTokenFieldToken)aToken withEvent:(CPEvent)anEvent { _preventResign = YES; _mouseDownEvent = anEvent; } -- (void)mouseUpOnToken:(_CPTokenFieldToken)aToken withEvent:(CPEvent)anEvent +- (void)_mouseUpOnToken:(_CPTokenFieldToken)aToken withEvent:(CPEvent)anEvent { if (_mouseDownEvent && _CGPointEqualToPoint([_mouseDownEvent locationInWindow], [anEvent locationInWindow])) { @@ -861,7 +861,7 @@ var CPScrollDestinationNone = 0, _completionDelay = delay; } -- (NSTimeInterval)completionDelay +- (CPTimeInterval)completionDelay { return _completionDelay; } @@ -1225,12 +1225,12 @@ var CPScrollDestinationNone = 0, - (void)mouseDown:(CPEvent)anEvent { - [_tokenField mouseDownOnToken:self withEvent:anEvent]; + [_tokenField _mouseDownOnToken:self withEvent:anEvent]; } - (void)mouseUp:(CPEvent)anEvent { - [_tokenField mouseUpOnToken:self withEvent:anEvent]; + [_tokenField _mouseUpOnToken:self withEvent:anEvent]; } - (void)_delete:(id)sender From 3eab2a528fb2157fd9a0b20309f60c90cac10311 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 15 Jun 2012 19:33:07 +0100 Subject: [PATCH 101/112] Make token field object value more like Cocoa. If a half typed token is in the field, Cocoa tries to convert it to a representedObject before responding to objectValue. Now CPTokenField does the same. --- AppKit/CPTokenField.j | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 3116f8e51..3593ab45b 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -485,7 +485,10 @@ var CPScrollDestinationNone = 0, #if PLATFORM(DOM) if ([self _inputElement].value != @"") + { + var token = [self _representedObjectForEditingString:[self _inputElement].value]; [objectValue insertObject:[self _inputElement].value atIndex:_selectedRange.location]; + } #endif From 3c20bf8ad6526c9bd1a2b74ba5951dc17501b383 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 15 Jun 2012 19:53:23 +0100 Subject: [PATCH 102/112] Allow token field insertText: to be somewhat overridden. If `insertText:` is overridden to do nothing, nothing in inserted. --- AppKit/CPTokenField.j | 70 +++++++++++++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 19 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 3593ab45b..fcfd05f96 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -669,8 +669,6 @@ var CPScrollDestinationNone = 0, [self sendAction:[self action] to:[self target]]; [[self window] makeFirstResponder:nil]; } - - [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; } - (void)insertTab:(id)sender @@ -688,27 +686,32 @@ var CPScrollDestinationNone = 0, else [[self window] selectPreviousKeyView:self]; } - - [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; } - (void)insertText:(CPString)characters { + // Note that in Cocoa NStokenField uses a hidden input field not accessible to the user, + // so insertText: is called on that field instead. That seems rather silly since it makes + // it pretty much impossible to override insertText:. This version is better. if ([_tokenizingCharacterSet characterIsMember:[characters substringToIndex:1]]) { [self _autocompleteWithEvent:[CPApp currentEvent]]; - [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; - return; } + else + { + // If we didn't handle it, allow _propagateCurrentDOMEvent the input field to receive + // the new character. - // If we didn't handle it, allow _propagateCurrentDOMEvent to remain YES so that the input field can receive - // the new character. + // This method also allows a subclass to override insertText: to do nothing. + // Unfortunately calling super with some different characters won't work since + // the browser will see the original key event. + [[[self window] platformWindow] _propagateCurrentDOMEvent:YES]; + } } - (void)cancelOperation:(id)sender { [self _hideCompletions]; - [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; } - (void)moveLeft:(id)sender @@ -722,9 +725,13 @@ var CPScrollDestinationNone = 0, else _selectedRange.location--; [self setNeedsLayout]; - [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; _shouldScrollTo = CPScrollDestinationLeft; } + else + { + // Allow cursor movement within the text field. + [[[self window] platformWindow] _propagateCurrentDOMEvent:YES]; + } } - (void)moveLeftAndModifySelection:(id)sender @@ -735,9 +742,13 @@ var CPScrollDestinationNone = 0, // When shift is depressed, select the next token backwards. _selectedRange.length++; [self setNeedsLayout]; - [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; _shouldScrollTo = CPScrollDestinationLeft; } + else + { + // Allow cursor movement within the text field. + [[[self window] platformWindow] _propagateCurrentDOMEvent:YES]; + } } - (void)moveRight:(id)sender @@ -758,9 +769,13 @@ var CPScrollDestinationNone = 0, } [self setNeedsLayout]; - [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; _shouldScrollTo = CPScrollDestinationRight; } + else + { + // Allow cursor movement within the text field. + [[[self window] platformWindow] _propagateCurrentDOMEvent:YES]; + } } - (void)moveRightAndModifySelection:(id)sender @@ -770,9 +785,13 @@ var CPScrollDestinationNone = 0, // Leave the selection location in place but include the next token to the right. _selectedRange.length++; [self setNeedsLayout]; - [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; _shouldScrollTo = CPScrollDestinationRight; } + else + { + // Allow selection to happen within the text field. + [[[self window] platformWindow] _propagateCurrentDOMEvent:YES]; + } } - (void)deleteBackward:(id)sender @@ -793,8 +812,11 @@ var CPScrollDestinationNone = 0, } else [self _removeSelectedTokens:nil]; - - [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; + } + else + { + // Allow deletion to happen within the text field. + [[[self window] platformWindow] _propagateCurrentDOMEvent:YES]; } } @@ -814,8 +836,11 @@ var CPScrollDestinationNone = 0, } else [self _removeSelectedTokens:nil]; - - [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; + } + else + { + // Allow deletion to happen within the text field. + [[[self window] platformWindow] _propagateCurrentDOMEvent:YES]; } } @@ -823,8 +848,15 @@ var CPScrollDestinationNone = 0, { CPTokenFieldTextDidChangeValue = [self stringValue]; - [super keyDown:anEvent]; -} + // By default, don't allow the HTML input field to receive the characters. We'll only + // allow that if we're not doing anything special with the characters and the editor + // is active. + [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; + + [self interpretKeyEvents:[anEvent]]; + + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; +}} - (void)keyUp:(CPEvent)anEvent { From d0769ec3609bbc73ff29ee0e25915f1c425a9957 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 15 Jun 2012 20:09:42 +0100 Subject: [PATCH 103/112] Oops. Fix object value fix. --- AppKit/CPTokenField.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index fcfd05f96..5d573046e 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -487,7 +487,7 @@ var CPScrollDestinationNone = 0, if ([self _inputElement].value != @"") { var token = [self _representedObjectForEditingString:[self _inputElement].value]; - [objectValue insertObject:[self _inputElement].value atIndex:_selectedRange.location]; + [objectValue insertObject:token atIndex:_selectedRange.location]; } #endif From 19b53746cfbc0d2cd208d0c9774c1c8f24c0dd32 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 15 Jun 2012 20:11:23 +0100 Subject: [PATCH 104/112] Fix nil `representedObjectForEditingString:` response handling. If `tokenField: representedObjectForEditingString:` returns nil, act the same as if the delegate method didn't exist. This matches Cocoa. --- AppKit/CPTokenField.j | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 5d573046e..943d593b0 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -1133,24 +1133,25 @@ var CPScrollDestinationNone = 0, The delegate method should return a represented object for the provided string which may have been typed by the user or selected from the completion menu. If the method is - not implemented, the string is assumed to be the represented object. + not implemented, or returns nil, the string is assumed to be the represented object. @ignore */ - (id)_representedObjectForEditingString:(CPString)aString { - var delegate = [self delegate]; + var delegate = [self delegate]; if ([delegate respondsToSelector:@selector(tokenField:representedObjectForEditingString:)]) - return [delegate tokenField:self representedObjectForEditingString:aString]; + { + var token = [delegate tokenField:self representedObjectForEditingString:aString]; + if (token !== nil && token !== undefined) + return token; + // If nil was returned, assume the string is the represented object. The alternative would have been + // to not add anything to the object value array for a nil response. + } return aString; } -// -// If you return nil or don't implement these delegate methods, we will assume -// editing string = display string = represented object -// - (NSString *)tokenField:(NSTokenField *)tokenField editingStringForRepresentedObject:(id)representedObject; -// // We put the string on the pasteboard before calling this delegate method. // By default, we write the NSStringPboardType as well as an array of NSStrings. // - (BOOL)tokenField:(NSTokenField *)tokenField writeRepresentedObjects:(NSArray *)objects toPasteboard:(NSPasteboard *)pboard; From d5918157ffe9603d7d5be4e93d51ba79efbf6654 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 15 Jun 2012 22:11:52 +0100 Subject: [PATCH 105/112] Overwrite selected tokens by typing support. If tokens are selected in `CPTokenField` and new text is entered, the selected tokens are overwritten by the newly entered text. --- AppKit/CPTokenField.j | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 943d593b0..8904846c9 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -699,6 +699,14 @@ var CPScrollDestinationNone = 0, } else { + // If you type something while tokens are selected, overwrite them. + if (_selectedRange.length) + { + [self _removeSelectedTokens:self]; + // Make sure the editor is placed so it can capture the characters we're overwriting with. + [self layoutSubviews]; + } + // If we didn't handle it, allow _propagateCurrentDOMEvent the input field to receive // the new character. From 44b609f604f633f2814dc80702421a4e00356299 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 15 Jun 2012 22:20:02 +0100 Subject: [PATCH 106/112] Don't make space for editing in token field if tokens are selected. If the editor is placed while there is a token selection it can cause the token view to become scrollable to a white area at the bottom even that there is no editing cursor. And even if the editor is not at the bottom, the empty space made for the editor makes no sense when no editing cursor is visible. --- AppKit/CPTokenField.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 8904846c9..c04123f18 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -999,7 +999,7 @@ var CPScrollDestinationNone = 0, for (var i = 0, count = [tokens count]; i < count; i++) { - if (isEditing && i == _CPMaxRange(_selectedRange)) + if (isEditing && !_selectedRange.length && i == _CPMaxRange(_selectedRange)) placeEditor(false); var tokenView = [tokens objectAtIndex:i]; @@ -1018,7 +1018,7 @@ var CPScrollDestinationNone = 0, [tokenView setFrame:tokenFrame]; } - if (isEditing && _CPMaxRange(_selectedRange) >= [tokens count]) + if (isEditing && !_selectedRange.length && _CPMaxRange(_selectedRange) >= [tokens count]) placeEditor(true); // Hide the editor if there are selected tokens, but still keep it active From 2200e40001b00bd4531054d86f0b292ddbf78a95 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 16 Jun 2012 03:30:00 +0100 Subject: [PATCH 107/112] Fixed: browser shortcuts wouldn't work when a token field was active. We now leave the default propagation policy of Cappuccino in place, which normally is NO for regular characters but YES for things which could be shortcuts. --- AppKit/CPTokenField.j | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index c04123f18..a5c280e39 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -856,10 +856,10 @@ var CPScrollDestinationNone = 0, { CPTokenFieldTextDidChangeValue = [self stringValue]; - // By default, don't allow the HTML input field to receive the characters. We'll only - // allow that if we're not doing anything special with the characters and the editor - // is active. - [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; + // Leave the default _propagateCurrentDOMEvent setting in place. This might be YES or NO depending + // on if something that could be a browser shortcut was pressed or not, such as Cmd-R to reload. + // If it was NO we want to leave it at NO however and only enable it in insertText:. This is what + // allows a subclass to prevent characters from being inserted by overriding and not calling super. [self interpretKeyEvents:[anEvent]]; From 6f50900b1b6a520cfc4249fbf3e2ecb02590ebf7 Mon Sep 17 00:00:00 2001 From: Aparajita Fishman Date: Mon, 18 Jun 2012 08:24:49 -0700 Subject: [PATCH 108/112] Added missing removeObjectAtArrangedObjectIndex, added missing return --- AppKit/CPArrayController.j | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/AppKit/CPArrayController.j b/AppKit/CPArrayController.j index 359876612..764096a0b 100644 --- a/AppKit/CPArrayController.j +++ b/AppKit/CPArrayController.j @@ -584,7 +584,7 @@ */ - (BOOL)__setSelectionIndexes:(CPIndexSet)indexes { - [self __setSelectionIndexes:indexes avoidEmpty:_avoidsEmptySelection]; + return [self __setSelectionIndexes:indexes avoidEmpty:_avoidsEmptySelection]; } - (BOOL)__setSelectionIndexes:(CPIndexSet)indexes avoidEmpty:(BOOL)avoidEmpty @@ -920,6 +920,15 @@ [self removeObjectsAtArrangedObjectIndexes:_selectionIndexes]; } +/*! + Removes the object at the specified index in the controller's arranged objects from the content array. + @param int index - index of the object to remove. +*/ +- (void)removeObjectAtArrangedObjectIndex:(int)index +{ + [self removeObjectsAtArrangedObjectIndexes:[CPIndexSet indexSetWithIndex:index]]; +} + /*! Removes the objects at the specified indexes in the controller's arranged objects from the content array. @param CPIndexSet indexes - indexes of the objects to remove. From 45da163230538c0b66ff480ddbf1f53daccb8c2b Mon Sep 17 00:00:00 2001 From: Aparajita Fishman Date: Mon, 18 Jun 2012 09:31:34 -0700 Subject: [PATCH 109/112] text tweak --- AppKit/CPControl.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index 563b0352f..77de1f8e1 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -532,7 +532,7 @@ var CPControlBlackColor = [CPColor blackColor]; // Cocoa raises an invalid parameter assertion and returns if you pass nil. if (aString === nil || aString === undefined) { - CPLog.warn("nil sent to CPControl -setStringValue"); + CPLog.warn("nil or undefined sent to CPControl -setStringValue"); return; } From 13423e43d51b44987f80dad8c5a69f593d6fd999 Mon Sep 17 00:00:00 2001 From: Aparajita Fishman Date: Wed, 20 Jun 2012 11:05:22 -0700 Subject: [PATCH 110/112] Removed stray console.log --- Foundation/CPDateFormatter.j | 2 -- 1 file changed, 2 deletions(-) diff --git a/Foundation/CPDateFormatter.j b/Foundation/CPDateFormatter.j index 661beac79..2e52fa725 100644 --- a/Foundation/CPDateFormatter.j +++ b/Foundation/CPDateFormatter.j @@ -99,12 +99,10 @@ CPDateFormatterFullStyle = 4; - (BOOL)getObjectValue:(id)anObject forString:(CPString)aString errorDescription:(CPString)anError { - console.log("getObjectValue: forString:" + aString); // TODO Error handling. var value = [self dateFromString:aString]; AT_DEREF(anObject, value); - console.log("got " + value); return YES; } From 7764921c210b6e87ffb1a51c17ba28b962a26c79 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 21 Jun 2012 19:17:34 +0100 Subject: [PATCH 111/112] Select all support for CPTokenField. Cmd-A (Mac) or Ctrl-A (other) finishes any ongoing editing and selects all tokens in a token field. This commit also adds support for the `selectText:` and `selectAll:` methods. --- AppKit/CPKeyBinding.j | 1 + AppKit/CPTokenField.j | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/AppKit/CPKeyBinding.j b/AppKit/CPKeyBinding.j index 6abacfddc..768e99578 100644 --- a/AppKit/CPKeyBinding.j +++ b/AppKit/CPKeyBinding.j @@ -28,6 +28,7 @@ CPStandardKeyBindings = { @"@.": @"cancelOperation:", + @"@a": @"selectAll:", @"^a": @"moveToBeginningOfParagraph:", @"^$a": @"moveToBeginningOfParagraphAndModifySelection:", @"^b": @"moveBackward:", diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index a5c280e39..0cff8e262 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -852,6 +852,27 @@ var CPScrollDestinationNone = 0, } } +- (void)_selectText:(id)sender immediately:(BOOL)immediately +{ + // Override CPTextField's version. The correct behaviour is that the text currently being + // edited is turned into a token if possible, or left as plain selected text if not. + // Regardless of if there is on-going text entry, all existing tokens are also selected. + // At this point we don't support having tokens and text selected at the same time (or + // any situation where the cursor isn't within the text being edited) so we just finish + // editing and select all tokens. + + if (([self isEditable] || [self isSelectable])) + { + [super _selectText:sender immediately:immediately]; + + // Finish any editing. + [self _autocomplete]; + _selectedRange = _CPMakeRange(0, [[self _tokens] count]); + + [self setNeedsLayout]; + } +} + - (void)keyDown:(CPEvent)anEvent { CPTokenFieldTextDidChangeValue = [self stringValue]; From d39849b297bfeed3f3d4fc143297f183c35d2002 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 21 Jun 2012 19:24:22 +0100 Subject: [PATCH 112/112] Improve token field keyboard navigation when tokens are selected. If one or more token is selected and the left arrow key is pressed, collapse the selection to the left of the first selected token. Similarly, on right arrow key collapse to the right of the last token. Note that shift-left and shift-right have no effect if the first or last token respectively in the field are already selected. --- AppKit/CPTokenField.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 0cff8e262..d306052e9 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -725,7 +725,7 @@ var CPScrollDestinationNone = 0, - (void)moveLeft:(id)sender { // Left arrow - if (_selectedRange.location > 0 && CPTokenFieldDOMInputElement.value == "") + if ((_selectedRange.location > 0 || _selectedRange.length) && CPTokenFieldDOMInputElement.value == "") { if (_selectedRange.length) // Simply collapse the range. @@ -762,7 +762,7 @@ var CPScrollDestinationNone = 0, - (void)moveRight:(id)sender { // Right arrow - if (_selectedRange.location < [[self _tokens] count] && CPTokenFieldDOMInputElement.value == "") + if ((_selectedRange.location < [[self _tokens] count] || _selectedRange.length) && CPTokenFieldDOMInputElement.value == "") { if (_selectedRange.length) {