Index: /trunk/Cocoa/Pester/Source/BDAlias.h
===================================================================
--- /trunk/Cocoa/Pester/Source/BDAlias.h	(revision 52)
+++ /trunk/Cocoa/Pester/Source/BDAlias.h	(revision 53)
@@ -63,4 +63,6 @@
 - (BOOL)isEqual:(id)object;
 
+- (NSString *)displayNameWithKindString:(NSString **)outKindString;
+
 - (NSString *)fullPath;
 - (NSString *)fullPathRelativeToPath:(NSString *)relPath;
Index: /trunk/Cocoa/Pester/Source/BDAlias.m
===================================================================
--- /trunk/Cocoa/Pester/Source/BDAlias.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/BDAlias.m	(revision 53)
@@ -245,4 +245,25 @@
 }
 
+- (NSString *)displayNameWithKindString:(NSString **)outKindString;
+{
+    AliasHandle alias = [self alias];
+    FSRef ref;
+    Boolean wasChanged;
+    CFStringRef name;
+
+    if (alias == NULL) return nil;
+    if (FSResolveAlias(NULL, alias, &ref, &wasChanged) != noErr) return nil;
+
+    if (LSCopyDisplayNameForRef(&ref, &name) != noErr) return nil;
+    [(NSString *)name autorelease];
+
+    if (outKindString != NULL) {
+        if (LSCopyKindStringForRef(&ref, (CFStringRef *)outKindString) != noErr) return nil;
+        [*outKindString autorelease];
+    }
+
+    return (NSString *)name;
+}
+
 - (NSString *)fullPath
 {
Index: /trunk/Cocoa/Pester/Source/English.lproj/MainMenu.nib/classes.nib
===================================================================
--- /trunk/Cocoa/Pester/Source/English.lproj/MainMenu.nib/classes.nib	(revision 52)
+++ /trunk/Cocoa/Pester/Source/English.lproj/MainMenu.nib/classes.nib	(revision 53)
@@ -17,4 +17,10 @@
         {CLASS = NJRIntegerFilter; LANGUAGE = ObjC; SUPERCLASS = NSNumberFormatter; }, 
         {
+            CLASS = NJRIntervalField; 
+            LANGUAGE = ObjC; 
+            OUTLETS = {intervalUnits = NSPopUpButton; }; 
+            SUPERCLASS = NSTextField; 
+        }, 
+        {
             ACTIONS = {stopSoundPreview = id; }; 
             CLASS = NJRQTMediaPopUpButton; 
@@ -23,4 +29,5 @@
             SUPERCLASS = NSPopUpButton; 
         }, 
+        {CLASS = NJRUnfocusableMovieView; LANGUAGE = ObjC; SUPERCLASS = NSMovieView; }, 
         {
             ACTIONS = {stopVoicePreview = id; }; 
@@ -29,4 +36,5 @@
             SUPERCLASS = NSPopUpButton; 
         }, 
+        {CLASS = NSDisclosureButtonCell; LANGUAGE = ObjC; SUPERCLASS = NSButtonCell; }, 
         {CLASS = NSObject; LANGUAGE = ObjC; }, 
         {
@@ -35,4 +43,5 @@
                 doScriptChanged = id; 
                 doSpeakChanged = id; 
+                editAlertChanged = id; 
                 inAtChanged = id; 
                 playSoundChanged = id; 
@@ -45,8 +54,12 @@
             LANGUAGE = ObjC; 
             OUTLETS = {
+                alertTabs = NSTabView; 
+                alertView = NSTextField; 
                 bounceDockIcon = NSButton; 
+                cancelButton = NSButton; 
                 displayMessage = NSButtonCell; 
                 doScript = NSButtonCell; 
                 doSpeak = NSButtonCell; 
+                editAlert = NSButtonCell; 
                 inAtMatrix = NSMatrix; 
                 messageField = NSTextField; 
@@ -67,4 +80,5 @@
                 timeSummary = NSTextField; 
                 voice = NJRVoicePopUpButton; 
+                wakeUp = NSButtonCell; 
             }; 
             SUPERCLASS = NSWindowController; 
Index: /trunk/Cocoa/Pester/Source/English.lproj/MainMenu.nib/info.nib
===================================================================
--- /trunk/Cocoa/Pester/Source/English.lproj/MainMenu.nib/info.nib	(revision 52)
+++ /trunk/Cocoa/Pester/Source/English.lproj/MainMenu.nib/info.nib	(revision 53)
@@ -4,12 +4,12 @@
 <dict>
 	<key>IBDocumentLocation</key>
-	<string>73 38 356 240 0 0 1600 1178 </string>
+	<string>63 2 356 240 0 0 1280 832 </string>
 	<key>IBEditorPositions</key>
 	<dict>
 		<key>29</key>
-		<string>94 343 273 44 0 0 1600 1178 </string>
+		<string>130 241 273 44 0 0 1280 832 </string>
 	</dict>
 	<key>IBFramework Version</key>
-	<string>286.0</string>
+	<string>291.0</string>
 	<key>IBOpenObjects</key>
 	<array>
@@ -18,5 +18,5 @@
 	</array>
 	<key>IBSystem Version</key>
-	<string>6D52</string>
+	<string>6G30</string>
 	<key>IBUserGuides</key>
 	<dict>
@@ -25,8 +25,12 @@
 			<key>guideLocations</key>
 			<array>
-				<string>Horizontal:92.000000</string>
-				<string>Horizontal:148.000000</string>
-				<string>Horizontal:116.000000</string>
-				<string>Horizontal:64.000000</string>
+				<string>Horizontal:122.000000</string>
+				<string>Horizontal:178.000000</string>
+				<string>Horizontal:192.000000</string>
+				<string>Vertical:36.000000</string>
+				<string>Vertical:16.000000</string>
+				<string>Vertical:85.000000</string>
+				<string>Vertical:422.000000</string>
+				<string>Horizontal:151.000000</string>
 			</array>
 			<key>guidesLocked</key>
Index: /trunk/Cocoa/Pester/Source/English.lproj/Movie alert.nib/classes.nib
===================================================================
--- /trunk/Cocoa/Pester/Source/English.lproj/Movie alert.nib/classes.nib	(revision 52)
+++ /trunk/Cocoa/Pester/Source/English.lproj/Movie alert.nib/classes.nib	(revision 53)
@@ -9,5 +9,5 @@
             SUPERCLASS = NSWindowController; 
         }, 
-        {CLASS = java.lang.Object; LANGUAGE = Java; }
+        {CLASS = "java.lang.Object"; LANGUAGE = Java; }
     ); 
     IBVersion = 1; 
Index: /trunk/Cocoa/Pester/Source/English.lproj/Movie alert.nib/info.nib
===================================================================
--- /trunk/Cocoa/Pester/Source/English.lproj/Movie alert.nib/info.nib	(revision 52)
+++ /trunk/Cocoa/Pester/Source/English.lproj/Movie alert.nib/info.nib	(revision 53)
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
-<plist version="0.9">
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
 <dict>
 	<key>IBFramework Version</key>
-	<string>263.2</string>
+	<string>291.0</string>
 	<key>IBOpenObjects</key>
 	<array>
@@ -10,5 +10,5 @@
 	</array>
 	<key>IBSystem Version</key>
-	<string>5S66</string>
+	<string>6G30</string>
 </dict>
 </plist>
Index: /trunk/Cocoa/Pester/Source/English.lproj/Notifier.nib/classes.nib
===================================================================
--- /trunk/Cocoa/Pester/Source/English.lproj/Notifier.nib/classes.nib	(revision 52)
+++ /trunk/Cocoa/Pester/Source/English.lproj/Notifier.nib/classes.nib	(revision 53)
@@ -2,9 +2,24 @@
     IBClasses = (
         {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, 
+        {CLASS = NJRIntegerFilter; LANGUAGE = ObjC; SUPERCLASS = NSNumberFormatter; }, 
         {
-            ACTIONS = {close = id; }; 
+            CLASS = NJRIntervalField; 
+            LANGUAGE = ObjC; 
+            OUTLETS = {intervalUnits = NSPopUpButton; }; 
+            SUPERCLASS = NSTextField; 
+        }, 
+        {
+            ACTIONS = {close = id; snooze = id; stopRepeating = id; }; 
             CLASS = PSAlarmNotifierController; 
             LANGUAGE = ObjC; 
-            OUTLETS = {dateField = NSTextField; messageField = NSTextField; }; 
+            OUTLETS = {
+                dateField = NSTextField; 
+                intervalField = NSTextField; 
+                messageField = NSTextField; 
+                nextDateField = NSTextField; 
+                okButton = NSButton; 
+                snoozeButton = NSButton; 
+                snoozeIntervalField = NJRIntervalField; 
+            }; 
             SUPERCLASS = NSWindowController; 
         }
Index: /trunk/Cocoa/Pester/Source/English.lproj/Notifier.nib/info.nib
===================================================================
--- /trunk/Cocoa/Pester/Source/English.lproj/Notifier.nib/info.nib	(revision 52)
+++ /trunk/Cocoa/Pester/Source/English.lproj/Notifier.nib/info.nib	(revision 53)
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
-<plist version="0.9">
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
 <dict>
 	<key>IBDocumentLocation</key>
-	<string>424 83 356 240 0 0 1280 832 </string>
+	<string>122 13 356 240 0 0 1280 832 </string>
 	<key>IBFramework Version</key>
-	<string>263.2</string>
+	<string>291.0</string>
 	<key>IBOpenObjects</key>
 	<array>
@@ -12,5 +12,21 @@
 	</array>
 	<key>IBSystem Version</key>
-	<string>5S66</string>
+	<string>6G30</string>
+	<key>IBUserGuides</key>
+	<dict>
+		<key>5</key>
+		<dict>
+			<key>guideLocations</key>
+			<array>
+				<string>Horizontal:87.000000</string>
+				<string>Horizontal:108.000000</string>
+				<string>Horizontal:66.000000</string>
+				<string>Vertical:92.000000</string>
+				<string>Horizontal:133.000000</string>
+			</array>
+			<key>guidesLocked</key>
+			<false/>
+		</dict>
+	</dict>
 </dict>
 </plist>
Index: /trunk/Cocoa/Pester/Source/NJRFSObjectSelector.m
===================================================================
--- /trunk/Cocoa/Pester/Source/NJRFSObjectSelector.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/NJRFSObjectSelector.m	(revision 53)
@@ -1,10 +1,18 @@
 #import "NJRFSObjectSelector.h"
 #import "NSImage-NJRExtensions.h"
+#import "NSString-NJRExtensions.h"
 #include <Carbon/Carbon.h>
 
+static NSImage *PopupTriangleImage = nil;
+static NSSize PopupTriangleSize;
+
 @implementation NJRFSObjectSelector
 
 - (void)_initSelector;
 {
+    if (PopupTriangleImage == nil) {
+        PopupTriangleImage = [[NSImage imageNamed: @"Popup triangle"] retain];
+        PopupTriangleSize = [PopupTriangleImage size];
+    }
     canChooseFiles = YES; canChooseDirectories = NO;
     [self setAlias: nil];
@@ -47,12 +55,6 @@
         [NSBezierPath strokeRect: NSInsetRect(boundsRect, 2, 2)];
     } else if (selectedAlias != nil && [self isEnabled]) {
-        static NSImage *popupTriangle = nil;
-        static NSSize imageSize;
-        if (popupTriangle == nil) {
-            popupTriangle = [[NSImage imageNamed: @"Popup triangle"] retain];
-            imageSize = [popupTriangle size];
-        }
         // equivalent to popup triangle location for large bezel in Carbon
-        [popupTriangle compositeToPoint: NSMakePoint(NSMaxX(boundsRect) - imageSize.width - 5, NSMaxY(boundsRect) - 5) operation: NSCompositeSourceOver];
+        [PopupTriangleImage compositeToPoint: NSMakePoint(NSMaxX(boundsRect) - PopupTriangleSize.width - 5, NSMaxY(boundsRect) - 5) operation: NSCompositeSourceOver];
     }
 }
@@ -130,5 +132,4 @@
         NSString *path = [alias fullPath];
         NSString *revealPath = nil;
-        NSString *targetName = [path lastPathComponent];
         NSMenu *menu = [[NSMenu alloc] initWithTitle: @""];
         NSFileManager *fmgr = [NSFileManager defaultManager];
@@ -136,5 +137,11 @@
         if (path != nil) { // can resolve alias
             [self setImage: [[NSWorkspace sharedWorkspace] iconForFile: path]];
-            [self setTitle: targetName];
+            {	// set image first so titleRectForBounds: returns the correct value
+                NSMutableString *title = [[fmgr displayNameAtPath: path] mutableCopy];
+                NSDictionary *fontAttributes = [[self attributedTitle] fontAttributesInRange: NSMakeRange(0, 0)];
+                [title truncateToWidth: [[self cell] titleRectForBounds: [self bounds]].size.width - PopupTriangleSize.width by: NSLineBreakByTruncatingMiddle withAttributes: fontAttributes];
+                [self setTitle: title];
+                [title release];
+            }
             do {
                 item = [menu addItemWithTitle: [fmgr displayNameAtPath: path]
Index: /trunk/Cocoa/Pester/Source/NJRHistoryTrackingComboBox.m
===================================================================
--- /trunk/Cocoa/Pester/Source/NJRHistoryTrackingComboBox.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/NJRHistoryTrackingComboBox.m	(revision 53)
@@ -60,4 +60,5 @@
     NSString *newValue = [self stringValue];
     int oldIndex = [self indexOfItemWithObjectValue: newValue];
+    if ([newValue length] == 0) return YES; // donÕt save empty entries
     [self removeItemWithObjectValue: newValue];
     [self insertItemWithObjectValue: newValue atIndex: 0];
Index: /trunk/Cocoa/Pester/Source/NJRIntegerFilter.h
===================================================================
--- /trunk/Cocoa/Pester/Source/NJRIntegerFilter.h	(revision 52)
+++ /trunk/Cocoa/Pester/Source/NJRIntegerFilter.h	(revision 53)
@@ -7,5 +7,5 @@
 //
 
-#import <AppKit/AppKit.h>
+#import <Foundation/Foundation.h>
 
 
Index: /trunk/Cocoa/Pester/Source/NJRIntegerFilter.m
===================================================================
--- /trunk/Cocoa/Pester/Source/NJRIntegerFilter.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/NJRIntegerFilter.m	(revision 53)
@@ -7,6 +7,6 @@
 //
 
-// based on MyIntegerFilter
-// Copyright © 2001 Bill Cheeseman. All rights reserved.
+// based on MyIntegerFilter, later VRIntegerNumberFilter
+// Copyright © 2001-2002 Bill Cheeseman. All rights reserved.
 
 #import "NJRIntegerFilter.h"
@@ -14,20 +14,14 @@
 @implementation NJRIntegerFilter
 
-// Input filter
+// Input validation
 
-- (BOOL)isPartialStringValid:(NSString **)partialStringPtr proposedSelectedRange:(NSRangePointer)proposedSelRangePtr originalString:(NSString *)origString originalSelectedRange:(NSRange)origSelRange errorDescription:(NSString **)error {
-
-    // Override method to enable NSControl delegate method control:didFailToValidatePartialString:errorDescription: to
-    // reject invalid keypresses. Filters out keyboard input characters other than "1" .. "9".
+- (BOOL)isPartialStringValid:(NSString **)partialStringPtr proposedSelectedRange:(NSRangePointer)proposedSelRangePtr originalString:(NSString *)origString originalSelectedRange:(NSRange)origSelRange errorDescription:(NSString **)error;
+{
+    // Override method to enable NSControl delegate method control:didFailToValidatePartialString:errorDescription: to reject invalid keypresses. Filters out keyboard input characters other than 0..9.
     if ([[*partialStringPtr substringWithRange:NSMakeRange(origSelRange.location, (*proposedSelRangePtr).location - origSelRange.location)] rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet] options:NSLiteralSearch].location != NSNotFound) {
-        *error = NSLocalizedString(@"Input is not an integer", @"Presented when user value not a numeric digit");
-        return NO; // Reject *partialStringPtr as typed, invoke delegate method
+        *error = NSLocalizedString(@"Input is not an integer.", @"Presented when user value not a numeric digit");
+        return NO; // Reject *partialStringPtr as typed, invoke delegate method for error handling
     }
-
-    if ([*partialStringPtr length] == 0) {
-        // Work around NSFormatter issue in Mac OS X 10.0.
-        [[[NSApp keyWindow] fieldEditor:NO forObject:nil] setSelectedRange:*proposedSelRangePtr];
-    }
-
+    *error = nil;
     return YES; // Accept *partialStringPtr as typed
 }
Index: /trunk/Cocoa/Pester/Source/NJRIntervalField.h
===================================================================
--- /trunk/Cocoa/Pester/Source/NJRIntervalField.h	(revision 53)
+++ /trunk/Cocoa/Pester/Source/NJRIntervalField.h	(revision 53)
@@ -0,0 +1,21 @@
+//
+//  NJRIntervalField.h
+//  Pester
+//
+//  Created by Nicholas Riley on Wed Dec 25 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import <AppKit/AppKit.h>
+
+
+@interface NJRIntervalField : NSTextField {
+    IBOutlet NSPopUpButton *intervalUnits;
+}
+
+- (NSTimeInterval)interval;
+- (BOOL)setInterval:(NSTimeInterval)interval; // returns false if out of range
+
+- (void)handleDidFailToFormatString:(NSString *)string errorDescription:(NSString *)error label:(NSString *)label;
+
+@end
Index: /trunk/Cocoa/Pester/Source/NJRIntervalField.m
===================================================================
--- /trunk/Cocoa/Pester/Source/NJRIntervalField.m	(revision 53)
+++ /trunk/Cocoa/Pester/Source/NJRIntervalField.m	(revision 53)
@@ -0,0 +1,154 @@
+//
+//  NJRIntervalField.m
+//  Pester
+//
+//  Created by Nicholas Riley on Wed Dec 25 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import "NJRIntervalField.h"
+
+// XXX much implementation borrowed from DockCam, then factored; should replace DockCam interval selector with a NJRIntervalField at some point
+
+@implementation NJRIntervalField
+
+- (NSTimeInterval)interval;
+{
+    NSText *editor = [self currentEditor];
+    id obj = nil;
+    
+    if (editor != nil) {
+        NSString *stringValue = [editor string];
+        if (![[self formatter] getObjectValue: &obj forString: stringValue errorDescription: NULL])
+            return 0;
+    } else {
+        obj = self;
+    }
+    
+    return [obj intValue] * [[intervalUnits selectedItem] tag];
+}
+
+- (BOOL)setInterval:(NSTimeInterval)interval;
+{
+    // we assume that the tags are in ascending order in the array
+    NSEnumerator *e = [[intervalUnits itemArray] reverseObjectEnumerator];
+    NSMenuItem *i;
+    int multiplierTag;
+
+    while ( (i = [e nextObject]) != nil) {
+        multiplierTag = [i tag];
+        if (((int)interval % multiplierTag) == 0) {
+            NSFormatter *formatter = [self formatter];
+            int intervalValue = interval / multiplierTag;
+            if (formatter != nil) {
+                id ignored;
+                if (![formatter getObjectValue: &ignored forString: [formatter stringForObjectValue: [NSNumber numberWithInt: intervalValue]] errorDescription: NULL]) return NO;
+            }
+            [self setIntValue: intervalValue];
+            [intervalUnits selectItem: i];
+            return YES;
+        }
+    }
+    return NO;
+}
+
+- (BOOL)textView:(NSTextView *)textView shouldChangeTextInRange:(NSRange)range replacementString:(NSString *)string;
+{
+    unsigned length = [string length];
+    if (length != 0) {
+        unichar c;
+        int tag = -1;
+        c = [string characterAtIndex: length - 1];
+        switch (c) {
+            case 's': case 'S': tag = 1; break;
+            case 'm': case 'M': tag = 60; break;
+            case 'h': case 'H': tag = 60 * 60; break;
+            default: break;
+        }
+        if (tag != -1) [intervalUnits selectItemAtIndex: [intervalUnits indexOfItemWithTag: tag]];
+    }
+    return [super textView: textView shouldChangeTextInRange: range replacementString: string];
+}
+
+- (void)handleDidFailToFormatString:(NSString *)string errorDescription:(NSString *)error label:(NSString *)label;
+{
+    NSString *alertMessage;
+    NSString *alternateButtonString;
+    NSDecimalNumber *proposedValue;
+    NSDictionary *contextInfo;
+
+    NSString *alertInformation = [NSString localizedStringWithFormat:
+        NSLocalizedString(@"The %@ field must be set to a value between %@ and %@.",
+                          @"Informative text for alert posed by text field when invalid value entered"),
+        label, [[self formatter] minimum], [[self formatter] maximum]];
+    NSString *defaultButtonString = NSLocalizedString(@"Edit", @"Name of Edit button");
+    NSString *otherButtonString = NSLocalizedString(@"Cancel", @"Name of Cancel button");
+
+    if ([error isEqualToString:
+        NSLocalizedStringFromTableInBundle(@"Fell short of minimum", @"Formatter",
+                                           [NSBundle bundleForClass:[NSFormatter class]],
+                                           @"Presented when user value smaller than minimum")]) {
+        proposedValue = [[self formatter] minimum];
+        alertMessage = [NSString stringWithFormat:
+            NSLocalizedString(@"Ò%@Ó is too small for the %@ field.",
+                              @"Message text for alert posed by numeric field when too-small value entered"),
+            string, label];
+        alternateButtonString = [NSString localizedStringWithFormat:
+            NSLocalizedString(@"Set to %@",
+                              @"Name of alternate button for alert posed by numeric field when too-small value entered"),
+            proposedValue];
+    } else if ([error isEqualToString:
+        NSLocalizedStringFromTableInBundle(@"Maximum exceeded", @"Formatter",
+                                           [NSBundle bundleForClass:[NSFormatter class]],
+                                           @"Presented when user value larger than maximum")]) {
+        proposedValue = [[self formatter] maximum];
+        alertMessage = [NSString stringWithFormat:
+            NSLocalizedString(@"Ò%@Ó is too large for the %@ field.",
+                              @"Message text for alert posed by numeric field when too-large value entered"),
+            string, label];
+        alternateButtonString = [NSString localizedStringWithFormat:
+            NSLocalizedString(@"Set to %@",
+                              @"Name of alternate button for alert posed by numeric field when too-large value entered"),
+            proposedValue];
+    } else if ([error isEqualToString:
+        NSLocalizedStringFromTableInBundle(@"Invalid number", @"Formatter",
+                                           [NSBundle bundleForClass:[NSFormatter class]],
+                                           @"Presented when user typed illegal characters: no valid object")]) {
+        alertMessage = [NSString stringWithFormat:
+            NSLocalizedString(@"Ò%@Ó is not a valid entry for the %@ field.",
+                              @"Message text for alert posed by text field when invalid value entered"),
+            string, label];
+        alternateButtonString = nil;
+    }
+
+    contextInfo = [NSDictionary dictionaryWithObject: proposedValue forKey: @"proposedValue"];
+    [contextInfo retain];
+    NSBeep();
+    NSBeginAlertSheet(alertMessage, defaultButtonString, alternateButtonString, otherButtonString, [self window],
+                      self, @selector(validationFailedSheetDidEnd:returnCode:contextInfo:), NULL, contextInfo,
+                      alertInformation);
+}
+
+- (void)_propagateValidationChange;
+{
+    NSText *fieldEditor = [self currentEditor];
+    NSDictionary *userInfo = nil;
+    if (fieldEditor != nil) userInfo = [NSDictionary dictionaryWithObject: fieldEditor forKey: @"NSFieldEditor"];
+    [[NSNotificationCenter defaultCenter] postNotificationName: NSControlTextDidChangeNotification object: self userInfo: userInfo];
+    [self selectText: self];
+}
+
+- (void)validationFailedSheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo {
+    // modal delegate callback method for NSBeginAlertSheet() function; called in the above method
+    if (returnCode == NSAlertOtherReturn) { // cancel
+        [self abortEditing]; // abort edit session and reinstate original value
+        [self _propagateValidationChange];
+    } else if (returnCode == NSAlertAlternateReturn) { // set to min/max/default value
+        [self setObjectValue: [(NSDictionary *)contextInfo objectForKey: @"proposedValue"]];
+        [self validateEditing];
+        [self _propagateValidationChange];
+    }
+    [(NSDictionary *)contextInfo release];
+}
+
+@end
Index: /trunk/Cocoa/Pester/Source/NJRQTMediaPopUpButton.h
===================================================================
--- /trunk/Cocoa/Pester/Source/NJRQTMediaPopUpButton.h	(revision 52)
+++ /trunk/Cocoa/Pester/Source/NJRQTMediaPopUpButton.h	(revision 53)
@@ -22,5 +22,8 @@
 
 - (BDAlias *)selectedAlias;
+- (void)setAlias:(BDAlias *)alias;
+
 - (BOOL)canRepeat;
+
 - (IBAction)stopSoundPreview:(id)sender;
 
Index: /trunk/Cocoa/Pester/Source/NJRQTMediaPopUpButton.m
===================================================================
--- /trunk/Cocoa/Pester/Source/NJRQTMediaPopUpButton.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/NJRQTMediaPopUpButton.m	(revision 53)
@@ -11,4 +11,10 @@
 #import "NSMovie-NJRExtensions.h"
 #import "NSImage-NJRExtensions.h"
+
+// XXX workaround for SoundFileManager log message in 10.2.3 and earlier
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+// XXX end workaround
 
 static const int NJRQTMediaPopUpButtonMaxRecentItems = 10;
@@ -103,5 +109,5 @@
 #pragma mark initialize-release
 
-- (void)awakeFromNib;
+- (void)_setUp;
 {
     NSMenu *menu;
@@ -145,4 +151,20 @@
 }
 
+- (id)initWithFrame:(NSRect)frame;
+{
+    if ( (self = [super initWithFrame: frame]) != nil) {
+        [self _setUp];
+    }
+    return self;
+}
+
+- (id)initWithCoder:(NSCoder *)coder;
+{
+    if ( (self = [super initWithCoder: coder]) != nil) {
+        [self _setUp];
+    }
+    return self;
+}
+
 - (void)dealloc;
 {
@@ -171,4 +193,12 @@
 }
 
+- (void)setAlias:(BDAlias *)alias;
+{
+    [self _setAlias: alias];
+    if ([self _validateWithPreview: NO]) {
+        [self selectItem: [self _itemForAlias: selectedAlias]];
+    }
+}
+
 - (void)_setPath:(NSString *)path;
 {
@@ -186,5 +216,15 @@
     // [self _validateRecentMedia];
     path = [alias fullPath];
-    sf = [[SoundFileManager sharedSoundFileManager] soundFileFromPath: path];
+    {   // XXX suppress log message from Apple's code:
+        // 2002-12-14 14:09:58.740 Pester[26529] Could not find sound type for directory /Users/nicholas/Desktop
+        int errfd = dup(STDERR_FILENO), nullfd = open("/dev/null", O_WRONLY, 0);
+        // need to have something open in STDERR_FILENO because if it isn't,
+        // NSLog will log to /dev/console
+        dup2(nullfd, STDERR_FILENO);
+        close(nullfd);
+        sf = [[SoundFileManager sharedSoundFileManager] soundFileFromPath: path];
+        dup2(errfd, STDERR_FILENO);
+        close(errfd);
+    }
     // NSLog(@"_itemForAlias: %@", path);
 
@@ -250,10 +290,10 @@
             [preview setMovie: nil];
             if (movie == nil) {
-                NSBeginAlertSheet(@"Format not recognized", @"OK", nil, nil, [self window], nil, nil, nil, nil, @"The item you selected isnÕt a sound or movie recognized by QuickTime.  Please select a different item.");
+                NSBeginAlertSheet(@"Format not recognized", nil, nil, nil, [self window], nil, nil, nil, nil, @"The item you selected isnÕt a sound or movie recognized by QuickTime.  Please select a different item.");
                 [self _invalidateSelection];
                 return NO;
             }
             if (![movie hasAudio] && ![movie hasVideo]) {
-                NSBeginAlertSheet(@"No video or audio", @"OK", nil, nil, [self window], nil, nil, nil, nil, @"Ò%@Ó contains neither audio nor video content playable by QuickTime.  Please select a different item.", [[NSFileManager defaultManager] displayNameAtPath: [selectedAlias fullPath]]);
+                NSBeginAlertSheet(@"No video or audio", nil, nil, nil, [self window], nil, nil, nil, nil, @"Ò%@Ó contains neither audio nor video content playable by QuickTime.  Please select a different item.", [[NSFileManager defaultManager] displayNameAtPath: [selectedAlias fullPath]]);
                 [self _invalidateSelection];
                 [movie release];
@@ -262,5 +302,5 @@
         }
         [movie release];
-        [preview start: self];
+        if (doPreview) [preview start: self];
     }
     [[NSNotificationCenter defaultCenter] postNotificationName: NJRQTMediaPopUpButtonMovieChangedNotification object: self];
Index: /trunk/Cocoa/Pester/Source/NJRTableDelegate.m
===================================================================
--- /trunk/Cocoa/Pester/Source/NJRTableDelegate.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/NJRTableDelegate.m	(revision 53)
@@ -179,5 +179,5 @@
             NSRect columnRect = [superview convertRect: [tableView rectOfColumn: [tableView columnWithIdentifier: sortingKey]] fromView: tableView];
             // XXX support horizontal scroll bar/clipping (not for Pester, but eventually)
-            NSRect tableScrollFrame = [[tableView enclosingScrollView] frame];
+            // NSRect tableScrollFrame = [[tableView enclosingScrollView] frame];
             NSRect selectFrame = [typeSelectControl frame];
             [superview setNeedsDisplayInRect: selectFrame]; // fix artifacts caused by moving view
Index: /trunk/Cocoa/Pester/Source/NJRTableView.h
===================================================================
--- /trunk/Cocoa/Pester/Source/NJRTableView.h	(revision 52)
+++ /trunk/Cocoa/Pester/Source/NJRTableView.h	(revision 53)
@@ -11,4 +11,5 @@
 
 @interface NJRTableView : NSTableView {
+    NSMutableDictionary *toolTipRegionList;
     NSMutableString *typed;
     IBOutlet id typeSelectDisplay;
@@ -29,4 +30,5 @@
 
 - (void)removeSelectedRowsFromTableView:(NSTableView *)tableView;
+- (NSString *)tableView:(NSTableView *)aTableView toolTipForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex;
 
 @end
Index: /trunk/Cocoa/Pester/Source/NJRTableView.m
===================================================================
--- /trunk/Cocoa/Pester/Source/NJRTableView.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/NJRTableView.m	(revision 53)
@@ -17,4 +17,65 @@
 
 @implementation NJRTableView
+
+- (id)initWithCoder:(NSCoder *)aDecoder;
+{
+    if ( (self = [super initWithCoder: aDecoder]) != nil) {
+        toolTipRegionList = [[NSMutableDictionary alloc] initWithCapacity: 20];
+    }
+    return self;
+}
+
+- (void)dealloc;
+{
+    [toolTipRegionList release];
+    [super dealloc];
+}
+
+#pragma mark tool tips
+
+- (void)reloadData;
+{
+    [toolTipRegionList removeAllObjects];
+    [self removeAllToolTips];
+    [super reloadData];
+}
+
+- (void)noteNumberOfRowsChanged;
+{
+    [toolTipRegionList removeAllObjects];
+    [self removeAllToolTips];
+    [super noteNumberOfRowsChanged];
+}
+
+- (NSString *)_keyForColumn:(int)columnIndex row:(int)rowIndex;
+{
+    return [NSString stringWithFormat:@"%d,%d", rowIndex, columnIndex];
+}
+
+- (NSString *)view:(NSView *)view stringForToolTip:(NSToolTipTag)tag point:(NSPoint)point userData:(void *)data;
+{
+    // ask our data source for the tool tip
+    if ([[self dataSource] respondsToSelector: @selector(tableView:toolTipForTableColumn:row:)]) {
+        if ([self rowAtPoint: point] >= 0) return [[self dataSource] tableView: self toolTipForTableColumn: [[self tableColumns] objectAtIndex: [self columnAtPoint: point]] row: [self rowAtPoint: point]];
+    }
+    return nil;
+}
+
+- (NSRect)frameOfCellAtColumn:(int)columnIndex row:(int)rowIndex;
+{
+    // this cell is apparently displayed, so we need to add a region for it
+    NSNumber *toolTipTag;
+    NSRect result = [super frameOfCellAtColumn: columnIndex row: rowIndex];
+    // check if cell is already in the list
+    NSString *cellKey = [self _keyForColumn: columnIndex row: rowIndex];
+    // remove old region
+    if (toolTipTag = [toolTipRegionList objectForKey: cellKey])
+        [self removeToolTip: [toolTipTag intValue]];
+    // add new region
+    [toolTipRegionList setObject: [NSNumber numberWithInt: [self addToolTipRect: result owner: self userData: cellKey]] forKey: cellKey];
+    return [super frameOfCellAtColumn: columnIndex row: rowIndex];
+}
+
+#pragma mark type selection
 
 - (id)typeSelectDisplay;
Index: /trunk/Cocoa/Pester/Source/NJRUnfocusableMovieView.h
===================================================================
--- /trunk/Cocoa/Pester/Source/NJRUnfocusableMovieView.h	(revision 53)
+++ /trunk/Cocoa/Pester/Source/NJRUnfocusableMovieView.h	(revision 53)
@@ -0,0 +1,16 @@
+//
+//  NJRUnfocusableMovieView.h
+//  Pester
+//
+//  Created by Nicholas Riley on Sun Dec 15 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import <AppKit/AppKit.h>
+
+
+@interface NJRUnfocusableMovieView : NSMovieView {
+
+}
+
+@end
Index: /trunk/Cocoa/Pester/Source/NJRUnfocusableMovieView.m
===================================================================
--- /trunk/Cocoa/Pester/Source/NJRUnfocusableMovieView.m	(revision 53)
+++ /trunk/Cocoa/Pester/Source/NJRUnfocusableMovieView.m	(revision 53)
@@ -0,0 +1,19 @@
+//
+//  NJRUnfocusableMovieView.m
+//  Pester
+//
+//  Created by Nicholas Riley on Sun Dec 15 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import "NJRUnfocusableMovieView.h"
+
+
+@implementation NJRUnfocusableMovieView
+
+- (BOOL)acceptsFirstResponder;
+{
+    return NO;
+}
+
+@end
Index: /trunk/Cocoa/Pester/Source/NJRVoicePopUpButton.h
===================================================================
--- /trunk/Cocoa/Pester/Source/NJRVoicePopUpButton.h	(revision 52)
+++ /trunk/Cocoa/Pester/Source/NJRVoicePopUpButton.h	(revision 53)
@@ -15,6 +15,8 @@
 }
 
+- (void)setVoice:(NSString *)voice;
+
+- (id)delegate;
 - (void)setDelegate:(id)delegate;
-- (id)delegate;
 
 - (IBAction)stopVoicePreview:(id)sender;
Index: /trunk/Cocoa/Pester/Source/NJRVoicePopUpButton.m
===================================================================
--- /trunk/Cocoa/Pester/Source/NJRVoicePopUpButton.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/NJRVoicePopUpButton.m	(revision 53)
@@ -68,4 +68,14 @@
 }
 
+- (void)setVoice:(NSString *)voice;
+{
+    int voiceIdx = [self indexOfItemWithTitle: voice];
+    if (voiceIdx == -1) {
+        [self _invalidateVoiceSelection];
+    } else {
+        [self selectItemAtIndex: voiceIdx];
+    }
+}
+
 - (void)_previewVoice;
 {
@@ -80,5 +90,5 @@
 
     if ( (err = GetIndVoice(voiceIndex, &voice)) != noErr) {
-        NSBeginAlertSheet(@"Voice not available", @"OK", nil, nil, [self window], nil, nil, nil, nil, @"The voice Ò%@Ó you selected could not be used.  An error of type %ld occurred while attempting to retrieve voice information.", voiceName, err);
+        NSBeginAlertSheet(@"Voice not available", nil, nil, nil, [self window], nil, nil, nil, nil, @"The voice Ò%@Ó you selected could not be used.  An error of type %ld occurred while attempting to retrieve voice information.", voiceName, err);
         [self _invalidateVoiceSelection];
         return;
Index: /trunk/Cocoa/Pester/Source/NSAttributedString-NJRExtensions.h
===================================================================
--- /trunk/Cocoa/Pester/Source/NSAttributedString-NJRExtensions.h	(revision 53)
+++ /trunk/Cocoa/Pester/Source/NSAttributedString-NJRExtensions.h	(revision 53)
@@ -0,0 +1,16 @@
+//
+//  NSAttributedString-NJRExtensions.h
+//  Pester
+//
+//  Created by Nicholas Riley on Mon Dec 16 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import <AppKit/AppKit.h>
+
+
+@interface NSAttributedString (NJRExtensions)
+
+- (float)heightWrappedToWidth:(float)width;
+
+@end
Index: /trunk/Cocoa/Pester/Source/NSAttributedString-NJRExtensions.m
===================================================================
--- /trunk/Cocoa/Pester/Source/NSAttributedString-NJRExtensions.m	(revision 53)
+++ /trunk/Cocoa/Pester/Source/NSAttributedString-NJRExtensions.m	(revision 53)
@@ -0,0 +1,30 @@
+//
+//  NSAttributedString-NJRExtensions.m
+//  Pester
+//
+//  Created by Nicholas Riley on Mon Dec 16 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import "NSAttributedString-NJRExtensions.h"
+
+@implementation NSAttributedString (NJRExtensions)
+
+- (float)heightWrappedToWidth:(float)width;
+{
+    float height = 0;
+    NSTextStorage *storage = [[NSTextStorage alloc] initWithAttributedString: self];
+    NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
+    NSTextContainer *container = [[NSTextContainer alloc]
+        initWithContainerSize: NSMakeSize(width, MAXFLOAT)];
+    [layoutManager addTextContainer: container];
+    [storage addLayoutManager: layoutManager];
+    (void) [layoutManager glyphRangeForTextContainer: container]; // force layout
+    height = [layoutManager usedRectForTextContainer: container].size.height;
+    [layoutManager release];
+    [container release];
+    [storage release];
+    return height;
+}
+
+@end
Index: /trunk/Cocoa/Pester/Source/NSCalendarDate-NJRExtensions.h
===================================================================
--- /trunk/Cocoa/Pester/Source/NSCalendarDate-NJRExtensions.h	(revision 53)
+++ /trunk/Cocoa/Pester/Source/NSCalendarDate-NJRExtensions.h	(revision 53)
@@ -0,0 +1,17 @@
+//
+//  NSCalendarDate-NJRExtensions.h
+//  Pester
+//
+//  Created by Nicholas Riley on Sun Dec 22 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+@interface NSCalendarDate (NJRExtensions)
+
++ (NSCalendarDate *)dateForDay:(NSDate *)date;
++ (NSCalendarDate *)dateWithDate:(NSDate *)date atTime:(NSDate *)time;
+
+@end
Index: /trunk/Cocoa/Pester/Source/NSCalendarDate-NJRExtensions.m
===================================================================
--- /trunk/Cocoa/Pester/Source/NSCalendarDate-NJRExtensions.m	(revision 53)
+++ /trunk/Cocoa/Pester/Source/NSCalendarDate-NJRExtensions.m	(revision 53)
@@ -0,0 +1,49 @@
+//
+//  NSCalendarDate-NJRExtensions.m
+//  Pester
+//
+//  Created by Nicholas Riley on Sun Dec 22 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import "NSCalendarDate-NJRExtensions.h"
+
+
+@interface NSCalendarDate (Private)
+
+// implemented in Foundation, but not declared in NSDate.h
++ (NSCalendarDate *)dateWithDate:(NSDate *)date;
+
+@end
+
+@implementation NSCalendarDate (NJRExtensions)
+
++ (NSCalendarDate *)dateForDay:(NSDate *)date;
+{
+    NSCalendarDate *calDate = [NSCalendarDate dateWithDate: date];
+    return [NSCalendarDate dateWithYear: [calDate yearOfCommonEra]
+                                  month: [calDate monthOfYear]
+                                    day: [calDate dayOfMonth]
+                                   hour: 0
+                                 minute: 0
+                                 second: 0
+                               timeZone: nil];
+}
+
++ (NSCalendarDate *)dateWithDate:(NSDate *)date atTime:(NSDate *)time;
+{
+    NSCalendarDate *calTime, *calDate;
+    if (time == nil || date == nil) return nil;
+    calTime = [NSCalendarDate dateWithDate: time];
+    calDate = [NSCalendarDate dateWithDate: date];
+    if (calTime == nil || calDate == nil) return nil;
+    return [NSCalendarDate dateWithYear: [calDate yearOfCommonEra]
+                                  month: [calDate monthOfYear]
+                                    day: [calDate dayOfMonth]
+                                   hour: [calTime hourOfDay]
+                                 minute: [calTime minuteOfHour]
+                                 second: [calTime secondOfMinute]
+                               timeZone: nil];
+}
+
+@end
Index: /trunk/Cocoa/Pester/Source/NSDictionary-NJRExtensions.h
===================================================================
--- /trunk/Cocoa/Pester/Source/NSDictionary-NJRExtensions.h	(revision 53)
+++ /trunk/Cocoa/Pester/Source/NSDictionary-NJRExtensions.h	(revision 53)
@@ -0,0 +1,16 @@
+//
+//  NSDictionary-NJRExtensions.h
+//  Pester
+//
+//  Created by Nicholas Riley on Tue Nov 19 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+@interface NSDictionary (NJRExtensions)
+
+- (id)objectForRequiredKey:(NSString *)key;
+
+@end
Index: /trunk/Cocoa/Pester/Source/NSDictionary-NJRExtensions.m
===================================================================
--- /trunk/Cocoa/Pester/Source/NSDictionary-NJRExtensions.m	(revision 53)
+++ /trunk/Cocoa/Pester/Source/NSDictionary-NJRExtensions.m	(revision 53)
@@ -0,0 +1,21 @@
+//
+//  NSDictionary-NJRExtensions.m
+//  Pester
+//
+//  Created by Nicholas Riley on Tue Nov 19 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import "NSDictionary-NJRExtensions.h"
+
+
+@implementation NSDictionary (NJRExtensions)
+
+- (id)objectForRequiredKey:(NSString *)key;
+{
+    id obj = [self objectForKey: key];
+    NSAssert1(obj != nil, @"Dictionary does not contain object for required key Ò%@Ó", key);
+    return obj;
+}
+
+@end
Index: /trunk/Cocoa/Pester/Source/NSDisclosureButtonCell.h
===================================================================
--- /trunk/Cocoa/Pester/Source/NSDisclosureButtonCell.h	(revision 53)
+++ /trunk/Cocoa/Pester/Source/NSDisclosureButtonCell.h	(revision 53)
@@ -0,0 +1,18 @@
+/*
+ *     Generated by class-dump (version 2.1.5).
+ *
+ *     class-dump is Copyright (C) 1997, 1999, 2000, 2001 by Steve Nygard.
+ */
+/*
+ * File: /System/Library/Frameworks/AppKit.framework/AppKit
+ */
+
+#import <AppKit/AppKit.h>
+
+@interface NSDisclosureButtonCell : NSButtonCell
+{
+}
+
+- (void)initWithCell:(NSCell *)cell;
+
+@end
Index: /trunk/Cocoa/Pester/Source/NSString-NJRExtensions.h
===================================================================
--- /trunk/Cocoa/Pester/Source/NSString-NJRExtensions.h	(revision 53)
+++ /trunk/Cocoa/Pester/Source/NSString-NJRExtensions.h	(revision 53)
@@ -0,0 +1,28 @@
+//
+//  NSString-NJRExtensions.h
+//  Pester
+//
+//  Created by Nicholas Riley on Mon Dec 16 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import <AppKit/AppKit.h>
+
+
+@interface NSString (NJRExtensions)
+
+- (NSAttributedString *)small;
+- (NSAttributedString *)smallBold;
+- (NSAttributedString *)underlined;
+
++ (NSString *)ellipsisString;
+
+
+@end
+
+@interface NSMutableString (NJRExtensions)
+
+- (void)truncateToLength:(unsigned)maxLength by:(NSLineBreakMode)method;
+- (void)truncateToWidth:(float)maxWidth by:(NSLineBreakMode)method withAttributes:(NSDictionary *)attributes;
+
+@end
Index: /trunk/Cocoa/Pester/Source/NSString-NJRExtensions.m
===================================================================
--- /trunk/Cocoa/Pester/Source/NSString-NJRExtensions.m	(revision 53)
+++ /trunk/Cocoa/Pester/Source/NSString-NJRExtensions.m	(revision 53)
@@ -0,0 +1,94 @@
+//
+//  NSString-NJRExtensions.m
+//  Pester
+//
+//  Created by Nicholas Riley on Mon Dec 16 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import "NSString-NJRExtensions.h"
+
+@implementation NSString (NJRExtensions)
+
+- (NSAttributedString *)attributedStringWithFont:(NSFont *)font;
+{
+    return [[[NSAttributedString alloc] initWithString: self attributes: [NSDictionary dictionaryWithObject: font forKey: NSFontAttributeName]] autorelease];
+}
+
+- (NSAttributedString *)underlined;
+{
+    return [[[NSAttributedString alloc] initWithString: self attributes: [NSDictionary dictionaryWithObject: [NSNumber numberWithInt: NSSingleUnderlineStyle] forKey: NSUnderlineStyleAttributeName]] autorelease];
+}
+
+- (NSAttributedString *)small;
+{
+    return [self attributedStringWithFont: [NSFont systemFontOfSize: [NSFont smallSystemFontSize]]];
+}
+
+- (NSAttributedString *)smallBold;
+{
+    return [self attributedStringWithFont: [NSFont boldSystemFontOfSize: [NSFont smallSystemFontSize]]];
+}
+
++ (NSString *)ellipsisString;
+{
+    static NSString *ellipsis = nil;
+    if (ellipsis == nil) {
+        const unichar ellipsisChar = 0x2026;
+        ellipsis = [[NSString alloc] initWithCharacters: &ellipsisChar length: 1];
+    }
+    return ellipsis;
+}
+
+@end
+
+@implementation NSMutableString (NJRExtensions)
+
+- (void)truncateToLength:(unsigned)maxLength by:(NSLineBreakMode)method;
+{
+    if ([self length] > maxLength) {
+        NSRange range = {0, [self length] - maxLength};
+        switch (method) {
+            case NSLineBreakByTruncatingHead:
+                range.location = 0;
+                break;
+            case NSLineBreakByTruncatingMiddle:
+                range.location = maxLength / 2;
+                break;
+            case NSLineBreakByTruncatingTail:
+                range.location = maxLength;
+                break;
+            default:
+                range.location = maxLength;
+                break;
+        }
+        [self replaceCharactersInRange: range withString: [NSString ellipsisString]];
+    }
+}
+
+- (void)truncateToWidth:(float)maxWidth by:(NSLineBreakMode)method withAttributes:(NSDictionary *)attributes;
+{
+    if ([self sizeWithAttributes: attributes].width > maxWidth) {
+        float width;
+        int min = 0, max = [self length], avg;
+        NSMutableString *original = [self mutableCopy];
+        while (max >= min) {
+            avg = (max + min) / 2;
+            [self truncateToLength: avg by: method];
+            width = [self sizeWithAttributes: attributes].width;
+            if (width > maxWidth) {
+                max = avg - 1; // too wide
+            } else if (width == maxWidth) {
+                break;
+            } else {
+                min = avg + 1; // too narrow
+                [self setString: original];
+            }
+        }
+        if (width != maxWidth)
+            [self truncateToLength: max by: method];
+        [original release];
+    }
+}
+
+@end
Index: /trunk/Cocoa/Pester/Source/PSAlarm.h
===================================================================
--- /trunk/Cocoa/Pester/Source/PSAlarm.h	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSAlarm.h	(revision 53)
@@ -8,24 +8,32 @@
 
 #import <Foundation/Foundation.h>
+#import "PSPropertyListSerialization.h"
 
 typedef enum {
-    PSAlarmInvalid, PSAlarmInterval, PSAlarmDate, PSAlarmSet
+    PSAlarmInvalid, // incorrectly specified
+    PSAlarmInterval, // interval specified (possibly repeating)
+    PSAlarmDate, // date specified
+    PSAlarmSet, // pending, timer set
+    PSAlarmSnooze, // expired alarm with snooze interval set (possibly repeating)
+    PSAlarmExpired // expired alarm (possibly repeating)
 } PSAlarmType;
 
 extern NSString * const PSAlarmTimerSetNotification;
 extern NSString * const PSAlarmTimerExpiredNotification;
+extern NSString * const PSAlarmDiedNotification;
 
-// XXX figure out how to support reading old alarms
+@class PSAlert, PSAlerts;
 
-@class PSAlert;
-
-@interface PSAlarm : NSObject <NSCoding> {
-    PSAlarmType alarmType;
+@interface PSAlarm : NSObject <NSCoding, PSPropertyListSerialization> {
+    PSAlarmType alarmType; // changes during lifetime of alarm; more like a state
     NSCalendarDate *alarmDate;
     NSTimeInterval alarmInterval;
+    NSTimeInterval snoozeInterval;
+    NSTimeInterval timeRemaining;
     NSString *alarmMessage;
     NSString *invalidMessage;
     NSTimer *timer;
-    NSMutableArray *alerts;
+    PSAlerts *alerts;
+    BOOL repeating;
 }
 
@@ -34,16 +42,23 @@
 - (void)setForDate:(NSDate *)date atTime:(NSDate *)time;
 - (void)setMessage:(NSString *)aMessage;
-- (void)addAlert:(PSAlert *)alert;
-- (void)removeAlerts;
+- (void)setAlerts:(PSAlerts *)theAlerts;
+- (void)setRepeating:(BOOL)isRepeating;
+- (void)setSnoozeInterval:(NSTimeInterval)anInterval;
 
 - (NSCalendarDate *)date;
 - (NSCalendarDate *)time;
 - (NSTimeInterval)interval;
+- (NSTimeInterval)timeRemaining;
 - (NSString *)message;
-- (NSArray *)alerts;
+- (PSAlerts *)alerts;
+- (BOOL)isRepeating;
+- (NSTimeInterval)snoozeInterval; // most recent interval (nonzero return does not indicate alarm is snoozing or set to snooze)
 
 - (NSString *)dateString;
 - (NSString *)shortDateString;
 - (NSString *)timeString;
+- (NSString *)dateTimeString; // current or next alarm time
+- (NSString *)nextDateTimeString; // next alarm time
+- (NSString *)intervalString;
 - (NSString *)timeRemainingString;
 
@@ -51,9 +66,15 @@
 - (NSString *)invalidMessage;
 
+- (NSAttributedString *)prettyDescription;
+
 - (NSComparisonResult)compareDate:(PSAlarm *)otherAlarm;
 - (NSComparisonResult)compareMessage:(PSAlarm *)otherAlarm;
 
-- (BOOL)setTimer;
+- (BOOL)setTimer; // or die, if expired and no snooze/repeat
 - (void)cancelTimer;
 
+// 1.1 only, going away when we move to keyed archiving
+- (NSDictionary *)propertyListRepresentation;
+- (id)initWithPropertyList:(NSDictionary *)dict;
+
 @end
Index: /trunk/Cocoa/Pester/Source/PSAlarm.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSAlarm.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSAlarm.m	(revision 53)
@@ -9,8 +9,22 @@
 #import "PSAlarm.h"
 #import "PSAlert.h"
+#import "PSAlerts.h"
 #import "NJRDateFormatter.h"
+#import "NSCalendarDate-NJRExtensions.h"
+#import "NSDictionary-NJRExtensions.h"
+#import "NSString-NJRExtensions.h"
 
 NSString * const PSAlarmTimerSetNotification = @"PSAlarmTimerSetNotification";
 NSString * const PSAlarmTimerExpiredNotification = @"PSAlarmTimerExpiredNotification";
+NSString * const PSAlarmDiedNotification = @"PSAlarmDiedNotification";
+
+// property list keys
+static NSString * const PLAlarmType = @"type"; // NSString
+static NSString * const PLAlarmDate = @"date"; // NSNumber
+static NSString * const PLAlarmInterval = @"interval"; // NSNumber
+static NSString * const PLAlarmSnoozeInterval = @"snooze interval"; // NSNumber
+static NSString * const PLAlarmMessage = @"message"; // NSString
+static NSString * const PLAlarmAlerts = @"alerts"; // NSDictionary
+static NSString * const PLAlarmRepeating = @"repeating"; // NSNumber
 
 static NSString *dateFormat, *shortDateFormat, *timeFormat;
@@ -72,11 +86,10 @@
     invalidMessage = nil;
     alarmType = type;
+    if (type != PSAlarmInterval) [self setRepeating: NO];
 }
 
 - (void)_setDateFromInterval;
 {
-    [alarmDate release]; alarmDate = nil;
-    alarmDate = [NSCalendarDate dateWithTimeIntervalSinceNow: alarmInterval];
-    [alarmDate retain];
+    [self _setAlarmDate: [NSCalendarDate dateWithTimeIntervalSinceNow: alarmInterval]];
     [self _beValidWithType: PSAlarmInterval];
 }
@@ -84,5 +97,5 @@
 - (void)_setIntervalFromDate;
 {
-    alarmInterval = [alarmDate timeIntervalSinceNow] + 1;
+    alarmInterval = [alarmDate timeIntervalSinceNow];
     if (alarmInterval <= 0) {
         [self _beInvalid: @"Please specify an alarm time in the future."];
@@ -90,4 +103,16 @@
     }
     [self _beValidWithType: PSAlarmDate];
+}
+
+- (PSAlarmType)_alarmTypeForString:(NSString *)string;
+{
+    if ([string isEqualToString: @"PSAlarmDate"]) return PSAlarmDate;
+    if ([string isEqualToString: @"PSAlarmInterval"]) return PSAlarmInterval;
+    if ([string isEqualToString: @"PSAlarmSet"]) return PSAlarmSet;
+    if ([string isEqualToString: @"PSAlarmInvalid"]) return PSAlarmInvalid;
+    if ([string isEqualToString: @"PSAlarmSnooze"]) return PSAlarmSnooze;
+    if ([string isEqualToString: @"PSAlarmExpired"]) return PSAlarmExpired;
+    NSLog(@"unknown alarm type string: %@", string);
+    return nil;
 }
 
@@ -99,10 +124,27 @@
         case PSAlarmSet: return @"PSAlarmSet";
         case PSAlarmInvalid: return @"PSAlarmInvalid";
+        case PSAlarmSnooze: return @"PSAlarmSnooze";
+        case PSAlarmExpired: return @"PSAlarmExpired";
         default: return [NSString stringWithFormat: @"<unknown: %u>", alarmType];
     }
 }
 
+- (NSString *)_stringForInterval:(unsigned long long)interval;
+{
+    const unsigned long long minute = 60, hour = minute * 60, day = hour * 24, year = day * 365.26;
+    // +[NSString stringWithFormat:] in 10.1 does not support long longs: work around it by converting to unsigned ints or longs for display
+    if (interval == 0) return nil;
+    if (interval < minute) return [NSString stringWithFormat: @"%us", (unsigned)interval];
+    if (interval < day) return [NSString stringWithFormat: @"%uh %um", (unsigned)(interval / hour), (unsigned)((interval % hour) / minute)];
+    if (interval < 2 * day) return @"One day";
+    if (interval < year) return [NSString stringWithFormat: @"%u days", (unsigned)(interval / day)];
+    if (interval < 2 * year) return @"One year";
+    return [NSString stringWithFormat: @"%lu years", (unsigned long)(interval / year)];
+}
+
 - (void)_timerExpired:(NSTimer *)aTimer;
 {
+    NSLog(@"expired: %@; now %@", [[aTimer fireDate] description], [[NSDate date] description]);
+    alarmType = PSAlarmExpired;
     [[NSNotificationCenter defaultCenter] postNotificationName: PSAlarmTimerExpiredNotification object: self];
     [timer release]; timer = nil;
@@ -128,5 +170,5 @@
 - (void)setForDate:(NSDate *)date atTime:(NSDate *)time;
 {
-    NSCalendarDate *calTime, *calDate;
+    NSCalendarDate *dateTime;
     if (time == nil && date == nil) {
         [self _beInvalid: @"Please specify an alarm date and time."]; return;
@@ -139,17 +181,21 @@
     }
     // XXX if calTime's date is different from the default date, complain
-    calTime = [NSCalendarDate dateWithTimeIntervalSinceReferenceDate: [time timeIntervalSinceReferenceDate]];
-    calDate = [NSCalendarDate dateWithTimeIntervalSinceReferenceDate: [date timeIntervalSinceReferenceDate]];
-    if (calTime == nil || calDate == nil) {
+    dateTime = [NSCalendarDate dateWithDate: date atTime: time];
+    if (dateTime == nil) {
         [self _beInvalid: @"Please specify a reasonable date and time."];
     }
-    [self setForDateAtTime:
-        [[[NSCalendarDate alloc] initWithYear: [calDate yearOfCommonEra]
-                                        month: [calDate monthOfYear]
-                                          day: [calDate dayOfMonth]
-                                         hour: [calTime hourOfDay]
-                                       minute: [calTime minuteOfHour]
-                                       second: [calTime secondOfMinute]
-                                     timeZone: nil] autorelease]];
+    [self setForDateAtTime: dateTime];
+}
+
+- (void)setRepeating:(BOOL)isRepeating;
+{
+    repeating = isRepeating;
+}
+
+- (void)setSnoozeInterval:(NSTimeInterval)anInterval;
+{
+    snoozeInterval = anInterval;
+    NSAssert(alarmType == PSAlarmExpired, @"CanÕt snooze an alarm that hasnÕt expired");
+    alarmType = PSAlarmSnooze;
 }
 
@@ -175,5 +221,7 @@
 {
     if (alarmType == PSAlarmDate) [self _setIntervalFromDate];
-    return (alarmType != PSAlarmInvalid);
+    if (alarmType == PSAlarmInvalid ||
+        (alarmType == PSAlarmExpired && ![self isRepeating])) return NO;
+    return YES;
 }
 
@@ -204,22 +252,34 @@
 - (NSTimeInterval)interval;
 {
-    if (alarmType == PSAlarmSet || alarmType == PSAlarmDate) [self _setIntervalFromDate];
+    if (alarmType == PSAlarmDate) [self _setIntervalFromDate];
     return alarmInterval;
 }
 
-- (void)addAlert:(PSAlert *)alert;
-{
-    if (alerts == nil) alerts = [[NSMutableArray alloc] initWithCapacity: 4];
-    [alerts addObject: alert];
-}
-
-- (void)removeAlerts;
-{
-    [alerts removeAllObjects];
-}
-
-- (NSArray *)alerts;
-{
-    return [[alerts copy] autorelease];
+- (NSTimeInterval)snoozeInterval;
+{
+    return snoozeInterval;
+}
+
+- (NSTimeInterval)timeRemaining;
+{
+    NSAssert1(alarmType == PSAlarmSet, @"CanÕt get time remaining on alarm with no timer set: %@", self);
+    return -[[NSDate date] timeIntervalSinceDate: alarmDate];
+}
+
+- (void)setAlerts:(PSAlerts *)theAlerts;
+{
+    [alerts release]; alerts = nil;
+    alerts = [theAlerts retain];
+}
+
+- (PSAlerts *)alerts;
+{
+    if (alerts == nil) alerts = [[PSAlerts alloc] init];
+    return alerts;
+}
+
+- (BOOL)isRepeating;
+{
+    return repeating;
 }
 
@@ -239,15 +299,64 @@
 }
 
+- (NSString *)dateTimeString;
+{
+    return [NSString stringWithFormat: @"%@ at %@", [self dateString], [self timeString]];
+}
+
+- (NSString *)nextDateTimeString;
+{
+    if (![self isRepeating]) {
+        return nil;
+    } else {
+        NSCalendarDate *date = [[NSCalendarDate alloc] initWithTimeIntervalSinceNow: [self interval]];
+        NSString *nextDateTimeString = [NSString stringWithFormat: @"%@ at %@",
+            [date descriptionWithCalendarFormat: dateFormat locale: locale],
+            [date descriptionWithCalendarFormat: timeFormat locale: locale]];
+        [date release];
+        return nextDateTimeString;
+    }
+}
+
+- (NSString *)intervalString;
+{
+    const unsigned long long mval = 99, minute = 60, hour = minute * 60;
+    unsigned long long interval = [self interval];
+    if (interval == 0) return nil;
+    if (interval == 1) return @"One second";
+    if (interval == minute) return @"One minute";
+    if (interval % minute == 0) return [NSString stringWithFormat: @"%u minutes", (unsigned)(interval / minute)];
+    if (interval <= mval) return [NSString stringWithFormat: @"%u seconds", (unsigned)interval];
+    if (interval == hour) return @"One hour";
+    if (interval % hour == 0) return [NSString stringWithFormat: @"%u hours", (unsigned)(interval / hour)];
+    if (interval <= mval * minute) return [NSString stringWithFormat: @"%u minutes", (unsigned)(interval / minute)];
+    if (interval <= mval * hour) return [NSString stringWithFormat: @"%u hours", (unsigned)(interval / hour)];
+    return [self _stringForInterval: interval];
+}
+
 - (NSString *)timeRemainingString;
 {
-    static const unsigned long long minute = 60, hour = minute * 60, day = hour * 24, year = day * 365.26;
-    unsigned long long interval = [self interval];
-    // +[NSString stringWithFormat:] in 10.1 does not support long longs: work around it by converting to unsigned ints or longs for display
-    if (interval == 0) return @"ÇexpiredÈ";
-    if (interval < minute) return [NSString stringWithFormat: @"%us", (unsigned)interval];
-    if (interval < day) return [NSString stringWithFormat: @"%uh %um", (unsigned)(interval / hour), (unsigned)((interval % hour) / minute)];
-    if (interval < year) return [NSString stringWithFormat: @"%u days", (unsigned)(interval / day)];
-    if (interval < 2 * year) return @"One year";
-    return [NSString stringWithFormat: @"%lu years", (unsigned long)(interval / year)];
+    NSString *timeRemainingString = [self _stringForInterval: llround([self timeRemaining])];
+    
+    if (timeRemainingString == nil) return @"ÇexpiredÈ";
+    return timeRemainingString;
+}
+
+- (NSAttributedString *)prettyDescription;
+{
+    NSMutableAttributedString *string = [[NSMutableAttributedString alloc] init];
+    NSAttributedString *alertList = [alerts prettyList];
+
+    [string appendAttributedString:
+        [[NSString stringWithFormat: @"At alarm time for Ò%@Ó:\n", [self message]] small]];
+    if (alertList != nil) {
+        [string appendAttributedString: alertList];
+    } else {
+        [string appendAttributedString: [@"Do nothing." small]];
+    }
+    if ([self isRepeating]) {
+        [string appendAttributedString:
+            [[NSString stringWithFormat: @"\nAlarm repeats every %@.", [[self intervalString] lowercaseString]] small]];
+    }
+    return [string autorelease];
 }
 
@@ -256,17 +365,25 @@
 - (BOOL)setTimer;
 {
-    switch (alarmType) {
-        case PSAlarmDate: if (![self isValid]) return NO;
-        case PSAlarmInterval:
-            timer = [NSTimer scheduledTimerWithTimeInterval: alarmInterval target: self selector: @selector(_timerExpired:) userInfo: nil repeats: NO];
-            if (timer != nil) {
-                [timer retain];
-                alarmType = PSAlarmSet;
-                [[NSNotificationCenter defaultCenter] postNotificationName: PSAlarmTimerSetNotification object: self];
-                return YES;
-            }
-        default:
+    if (alarmType == PSAlarmExpired) {
+        if ([self isRepeating]) {
+            [self _setDateFromInterval];
+        } else {
+            [[NSNotificationCenter defaultCenter] postNotificationName: PSAlarmDiedNotification object: self];
             return NO;
-    }
+        }
+    } else if (alarmType == PSAlarmDate) {
+        if (![self isValid]) return NO;
+    } else if (alarmType == PSAlarmSnooze) {
+        [self _setAlarmDate: [NSCalendarDate dateWithTimeIntervalSinceNow: snoozeInterval]];
+    } else if (alarmType != PSAlarmInterval) {
+        return NO;
+    }
+    timer = [NSTimer scheduledTimerWithTimeInterval: (alarmType == PSAlarmSnooze ? snoozeInterval : alarmInterval) target: self selector: @selector(_timerExpired:) userInfo: nil repeats: NO];
+    if (timer == nil) return NO;
+    [timer retain];
+    alarmType = PSAlarmSet;
+    [[NSNotificationCenter defaultCenter] postNotificationName: PSAlarmTimerSetNotification object: self];
+    // NSLog(@"set: %@; now %@; remaining %@", [[timer fireDate] description], [[NSDate date] description], [self timeRemainingString]);
+    return YES;
 }
 
@@ -274,4 +391,5 @@
 {
     [timer invalidate]; [timer release]; timer = nil;
+    [self setRepeating: NO];
 }
 
@@ -300,5 +418,80 @@
 }
 
-#pragma mark archiving
+#pragma mark property list serialization (Pester 1.1)
+
+- (NSDictionary *)propertyListRepresentation;
+{
+    NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity: 5];
+    if (![self isValid]) return nil;
+    [dict setObject: [self _alarmTypeString] forKey: PLAlarmType];
+    switch (alarmType) {
+        case PSAlarmDate:
+        case PSAlarmSet:
+            [dict setObject: [NSNumber numberWithDouble: [alarmDate timeIntervalSinceReferenceDate]] forKey: PLAlarmDate];
+            break;
+        case PSAlarmSnooze:
+        case PSAlarmInterval:
+        case PSAlarmExpired:
+            [dict setObject: [NSNumber numberWithDouble: alarmInterval] forKey: PLAlarmInterval];
+            [dict setObject: [NSNumber numberWithBool: repeating] forKey: PLAlarmRepeating];
+            break;
+        default:
+            NSAssert1(NO, @"CanÕt save alarm type %@", [self _alarmTypeString]);
+            break;
+    }
+    if (snoozeInterval != 0)
+        [dict setObject: [NSNumber numberWithDouble: snoozeInterval] forKey: PLAlarmSnoozeInterval];
+    [dict setObject: alarmMessage forKey: PLAlarmMessage];
+    if (alerts != nil) {
+        [dict setObject: [alerts propertyListRepresentation] forKey: PLAlarmAlerts];
+    }
+    return dict;
+}
+
+- (id)initWithPropertyList:(NSDictionary *)dict;
+{
+    if ( (self = [self init]) != nil) {
+        PSAlerts *alarmAlerts;
+        alarmType = [self _alarmTypeForString: [dict objectForRequiredKey: PLAlarmType]];
+        switch (alarmType) {
+            case PSAlarmDate:
+            case PSAlarmSet:
+               { NSCalendarDate *date = [[NSCalendarDate alloc] initWithTimeIntervalSinceReferenceDate: [[dict objectForRequiredKey: PLAlarmDate] doubleValue]];
+                [self _setAlarmDate: date];
+                [date release];
+               }
+                break;
+            case PSAlarmSnooze: // snooze interval set but not confirmed; ignore
+                alarmType = PSAlarmExpired;
+            case PSAlarmInterval:
+            case PSAlarmExpired:
+                alarmInterval = [[dict objectForRequiredKey: PLAlarmInterval] doubleValue];
+                repeating = [[dict objectForRequiredKey: PLAlarmRepeating] boolValue];
+                break;
+            default:
+                NSAssert1(NO, @"CanÕt load alarm type %@", [self _alarmTypeString]);
+                break;
+        }
+        snoozeInterval = [[dict objectForKey: PLAlarmSnoozeInterval] doubleValue];
+        [self setMessage: [dict objectForRequiredKey: PLAlarmMessage]];
+        alarmAlerts = [[PSAlerts alloc] initWithPropertyList: [dict objectForRequiredKey: PLAlarmAlerts]];
+        [self setAlerts: alarmAlerts];
+        [alarmAlerts release];
+        if (alarmType == PSAlarmSet) {
+            alarmType = PSAlarmDate;
+            [self setTimer];
+        }
+        if (alarmType == PSAlarmExpired) {
+            [self setTimer];
+            if (alarmType == PSAlarmExpired) { // failed to restart
+                [self release];
+                self = nil;
+            }
+        }
+    }
+    return self;
+}
+
+#pragma mark archiving (Pester 1.0)
 
 - (void)encodeWithCoder:(NSCoder *)coder;
@@ -324,5 +517,8 @@
 - (id)initWithCoder:(NSCoder *)coder;
 {
-    if ( (self = [super init]) != nil) {
+    if ( (self = [self init]) != nil) {
+        PSAlerts *legacyAlerts = [[PSAlerts alloc] initWithPesterVersion1Alerts];
+        [self setAlerts: legacyAlerts];
+        [legacyAlerts release];
         [coder decodeValueOfObjCType: @encode(PSAlarmType) at: &alarmType];
         switch (alarmType) {
Index: /trunk/Cocoa/Pester/Source/PSAlarmAlertController.h
===================================================================
--- /trunk/Cocoa/Pester/Source/PSAlarmAlertController.h	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSAlarmAlertController.h	(revision 53)
@@ -13,5 +13,7 @@
 
 @interface PSAlarmAlertController : NSObject {
-
+    NSMutableSet *pendingAlerts;
+    ProcessSerialNumber frontmostApp;
+    BOOL appWasHidden;
 }
 
Index: /trunk/Cocoa/Pester/Source/PSAlarmAlertController.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSAlarmAlertController.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSAlarmAlertController.m	(revision 53)
@@ -8,4 +8,6 @@
 
 #import "PSAlarmAlertController.h"
+#import "PSAlert.h"
+#import "PSAlerts.h"
 
 NSString * const PSAlarmAlertStopNotification = @"PSAlarmAlertStopNotification";
@@ -23,13 +25,61 @@
 }
 
+- (void)_resumeAlarm:(PSAlarm *)alarm;
+{
+    [[NSNotificationCenter defaultCenter] removeObserver: self];
+    [alarm setTimer]; // if snooze not set and not repeating, alarm will die
+    if (frontmostApp.highLongOfPSN != 0 || frontmostApp.lowLongOfPSN != 0) {
+        SetFrontProcess(&frontmostApp);
+        if (appWasHidden)
+            [NSApp hide: self];
+    }
+}
+
+- (void)_alertCompleted:(NSNotification *)notification;
+{
+    PSAlert *alert = [[notification userInfo] objectForKey: @"alert"];
+    unsigned count = [pendingAlerts count];
+    [pendingAlerts removeObject: alert];
+    NSLog(@"removed: %@; still pending: %@", alert, [pendingAlerts description]);
+    NSLog(@"alarm: %@ retainCount %d", [notification object], [[notification object] retainCount]);
+    NSAssert2([pendingAlerts count] == count - 1, @"alert not in set: %@\n%@", alert, notification);
+    if ([pendingAlerts count] == 0) {
+        [self _resumeAlarm: [notification object]];
+        [self release];
+    }
+}
+
 - (id)initWithAlarm:(PSAlarm *)alarm;
 {
     if ( (self = [super init]) != nil) {
-        [[alarm alerts] makeObjectsPerformSelector: @selector(triggerForAlarm:)
-                                        withObject: alarm];
-        [NSApp activateIgnoringOtherApps: YES];
+        PSAlerts *alerts = [alarm alerts];
+        NSArray *allAlerts = [alerts allAlerts];
+        if ([allAlerts count] == 0) {
+            [self _resumeAlarm: alarm];
+        } else {
+            pendingAlerts = [[NSMutableSet alloc] init];
+            [pendingAlerts addObjectsFromArray: allAlerts];
+            [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(_alertCompleted:)
+                                                         name: PSAlarmAlertCompletedNotification object: alarm];
+            [self retain]; // release in _alertCompleted:
+        }
+        [alerts triggerForAlarm: alarm];
+        if ([alerts requirePesterFrontmost] && ![NSApp isActive]) { // restore frontmost process afterward
+            NSDictionary *activeProcessInfo = [[NSWorkspace sharedWorkspace] activeApplication];
+            frontmostApp.highLongOfPSN = [[activeProcessInfo objectForKey: @"NSApplicationProcessSerialNumberHigh"] longValue];
+            frontmostApp.lowLongOfPSN = [[activeProcessInfo objectForKey: @"NSApplicationProcessSerialNumberLow"] longValue];
+            appWasHidden = [NSApp isHidden];
+            [NSApp activateIgnoringOtherApps: YES];
+        }
     }
     return self;
 }
 
+- (void)dealloc;
+{
+    NSLog(@"%@ dealloc", self);
+    [pendingAlerts release];
+    [super dealloc];
+}
+
 @end
Index: /trunk/Cocoa/Pester/Source/PSAlarmNotifierController.h
===================================================================
--- /trunk/Cocoa/Pester/Source/PSAlarmNotifierController.h	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSAlarmNotifierController.h	(revision 53)
@@ -9,4 +9,5 @@
 #import <AppKit/AppKit.h>
 
+@class NJRIntervalField;
 @class PSAlarm;
 
@@ -14,9 +15,19 @@
     IBOutlet NSTextField *messageField;
     IBOutlet NSTextField *dateField;
+    IBOutlet NSTextField *intervalField;
+    IBOutlet NSTextField *nextDateField;
+    IBOutlet NJRIntervalField *snoozeIntervalField;
+    IBOutlet NSButton *okButton;
+    IBOutlet NSButton *snoozeButton;
+    NSTimer *updateTimer;
+    PSAlarm *alarm;
+    BOOL canSnooze;
 }
 
-- (id)initWithAlarm:(PSAlarm *)alarm;
+- (id)initWithAlarm:(PSAlarm *)anAlarm;
 
-- (IBAction)close:(NSButton *)sender;
+- (IBAction)close:(id)sender;
+- (IBAction)snooze:(NSButton *)sender;
+- (IBAction)stopRepeating:(NSButton *)sender;
 
 @end
Index: /trunk/Cocoa/Pester/Source/PSAlarmNotifierController.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSAlarmNotifierController.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSAlarmNotifierController.m	(revision 53)
@@ -10,4 +10,15 @@
 #import "PSAlarmAlertController.h"
 #import "PSAlarm.h"
+#import "PSNotifierAlert.h"
+#import "NJRIntervalField.h"
+
+static NSString * const PSAlarmSnoozeInterval = @"Pester alarm snooze interval"; // NSUserDefaults key
+
+@interface PSAlarmNotifierController (Private)
+
+- (void)update:(id)sender;
+- (void)updateNextDateDisplay:(id)sender;
+
+@end
 
 @implementation PSAlarmNotifierController
@@ -15,15 +26,58 @@
 // XXX should use NSNonactivatingPanelMask on 10.2
 
-- (id)initWithAlarm:(PSAlarm *)alarm;
+- (id)initWithAlarm:(PSAlarm *)anAlarm;
 {
     if ([self initWithWindowNibName: @"Notifier"]) {
-        [[self window] center];
+        NSWindow *window = [self window];
+        NSRect frameRect = [window frame];
+        alarm = [anAlarm retain];
         [messageField setStringValue: [alarm message]];
-        [dateField setStringValue:
-            [NSString stringWithFormat: @"%@ at %@", [alarm dateString], [alarm timeString]]];
-        [[self window] makeKeyAndOrderFront: nil];
-        [[self window] orderFrontRegardless];
+        [dateField setStringValue: [alarm dateTimeString]];
+        if (![snoozeIntervalField setInterval: [alarm snoozeInterval]] &&
+            ![snoozeIntervalField setInterval: [[[NSUserDefaults standardUserDefaults] objectForKey: PSAlarmSnoozeInterval] doubleValue]])
+            [snoozeIntervalField setInterval: 15 * 60]; // 15 minutes
+        if ([alarm isRepeating]) {
+            [intervalField setStringValue:
+                [NSString stringWithFormat: @"every %@", [[alarm intervalString] lowercaseString]]];
+            [self updateNextDateDisplay: nil];
+            updateTimer = [NSTimer scheduledTimerWithTimeInterval: 1 target: self selector: @selector(updateNextDateDisplay:) userInfo: nil repeats: YES];
+            frameRect.size = [window maxSize];
+        } else {
+            frameRect.size = [window minSize];
+        }
+        [window setFrame: frameRect display: NO];
+        [window center];
+        [window makeKeyAndOrderFront: nil];
+        [window orderFrontRegardless];
     }
     return self;
+}
+
+- (void)dealloc;
+{
+    [alarm release];
+    [updateTimer invalidate]; updateTimer = nil;
+    [super dealloc];
+}
+
+- (void)updateNextDateDisplay:(id)sender;
+{
+    if (!canSnooze) {
+        NSString *nextDateTimeString = [alarm nextDateTimeString];
+        if (nextDateTimeString == nil) { // no longer repeating
+            [updateTimer invalidate]; updateTimer = nil;
+        } else {
+            [nextDateField setStringValue: nextDateTimeString];
+        }
+    }
+}
+
+- (void)update:(id)sender;
+{
+    canSnooze = [snoozeIntervalField interval] != 0;
+    if (canSnooze) [nextDateField setStringValue: @"after snooze"];
+    [snoozeButton setEnabled: canSnooze];
+    [canSnooze ? snoozeButton : okButton setKeyEquivalent: @"\r"];
+    [canSnooze ? okButton : snoozeButton setKeyEquivalent: @""];
 }
 
@@ -32,5 +86,81 @@
     [PSAlarmAlertController stopAlerts: sender];
     [self close];
+    [[PSNotifierAlert alert] completedForAlarm: alarm];
+}
+
+- (IBAction)snooze:(NSButton *)sender;
+{
+    NSTimeInterval snoozeInterval = [snoozeIntervalField interval];
+    [alarm setSnoozeInterval: snoozeInterval];
+    [[NSUserDefaults standardUserDefaults] setObject: [NSNumber numberWithDouble: snoozeInterval] forKey: PSAlarmSnoozeInterval];
+    [self close: sender];
+}
+
+- (IBAction)stopRepeating:(NSButton *)sender;
+{
+    NSWindow *window = [self window];
+    NSRect frameRect = [window frame];
+    NSSize newSize = [window minSize];
+    
+    [alarm setRepeating: NO];
+    [sender setEnabled: NO];
+    frameRect.origin.y += frameRect.size.height - newSize.height;
+    frameRect.size = newSize;
+    [window setFrame: frameRect display: YES animate: YES];
 }
 
 @end
+
+@implementation PSAlarmNotifierController (NSControlSubclassDelegate)
+
+- (BOOL)control:(NSControl *)control didFailToFormatString:(NSString *)string errorDescription:(NSString *)error;
+{
+    if (control == snoozeIntervalField)
+        [snoozeIntervalField handleDidFailToFormatString: string errorDescription: error label: @"snooze interval"];
+    return NO;
+}
+
+- (void)control:(NSControl *)control didFailToValidatePartialString:(NSString *)string errorDescription:(NSString *)error;
+{
+    // NSLog(@"UPDATING FROM validation");
+    [self update: control]; // switch to snooze if someone types something weird...
+}
+
+- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector;
+{
+    // NSLog(@"UPDATING from textView: %@", NSStringFromSelector(commandSelector));
+    if (commandSelector == @selector(cancel:)) {
+        // if someone just wants the stupid thing to go away and presses escape, donÕt hinder them
+        [self close: control];
+        return YES;
+    }
+    // if someone invokes the default button or switches fields, donÕt override it
+    if (commandSelector == @selector(insertNewline:) ||
+        commandSelector == @selector(insertTab:) ||
+        commandSelector == @selector(insertBacktab:)) return NO;
+    [self update: control]; // ...or if they type a navigation key...
+    return NO; // we donÕt handle it
+}
+
+@end
+
+@implementation PSAlarmNotifierController (NSControlSubclassNotifications)
+
+- (void)controlTextDidChange:(NSNotification *)notification;
+{
+    // NSLog(@"UPDATING FROM controlTextDidChange: %@", [notification object]);
+    [self update: [notification object]]; // ...or if they modify the snooze interval
+}
+
+@end
+
+@implementation PSAlarmNotifierController (NSWindowNotifications)
+
+- (void)windowWillClose:(NSNotification *)notification;
+{
+    // canÕt rely on dealloc to invalidate the timer, because it retains this object
+    [updateTimer invalidate]; updateTimer = nil;
+    [self release]; // in non-document-based apps, this is needed; see docs
+}
+
+@end
Index: /trunk/Cocoa/Pester/Source/PSAlarmSetController.h
===================================================================
--- /trunk/Cocoa/Pester/Source/PSAlarmSetController.h	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSAlarmSetController.h	(revision 53)
@@ -11,4 +11,5 @@
 
 @class NJRFSObjectSelector;
+@class NJRIntervalField;
 @class NJRQTMediaPopUpButton;
 @class NJRVoicePopUpButton;
@@ -17,5 +18,5 @@
     IBOutlet NSTextField *messageField;
     IBOutlet NSMatrix *inAtMatrix;
-    IBOutlet NSTextField *timeInterval;
+    IBOutlet NJRIntervalField *timeInterval;
     IBOutlet NSPopUpButton *timeIntervalUnits;
     IBOutlet NSButton *timeIntervalRepeats;
@@ -23,4 +24,7 @@
     IBOutlet NSTextField *timeDate;
     IBOutlet NSPopUpButton *timeDateCompletions; // XXX should go away when bug preventing both formatters and popup menus from existing is fixed
+    IBOutlet NSButtonCell *editAlert;
+    IBOutlet NSTextField *alertView;
+    IBOutlet NSTabView *alertTabs;
     IBOutlet NSButtonCell *displayMessage;
     IBOutlet NSButton *bounceDockIcon;
@@ -35,5 +39,7 @@
     IBOutlet NJRVoicePopUpButton *voice;
     IBOutlet NSButton *scriptSelectButton;
+    IBOutlet NSButtonCell *wakeUp;
     IBOutlet NSTextField *timeSummary;
+    IBOutlet NSButton *cancelButton;
     IBOutlet NSButton *setButton;
     NSString *status;
@@ -46,4 +52,5 @@
 - (IBAction)dateCompleted:(NSPopUpButton *)sender;
 - (IBAction)inAtChanged:(id)sender;
+- (IBAction)editAlertChanged:(id)sender;
 - (IBAction)playSoundChanged:(id)sender;
 - (IBAction)doScriptChanged:(id)sender;
Index: /trunk/Cocoa/Pester/Source/PSAlarmSetController.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSAlarmSetController.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSAlarmSetController.m	(revision 53)
@@ -9,10 +9,16 @@
 #import "PSAlarmSetController.h"
 #import "PSAlarmAlertController.h"
+#import "PSPowerManager.h"
 #import "NJRDateFormatter.h"
 #import "NJRFSObjectSelector.h"
+#import "NJRIntervalField.h"
 #import "NJRQTMediaPopUpButton.h"
 #import "NJRVoicePopUpButton.h"
+#import "NSString-NJRExtensions.h"
+#import "NSAttributedString-NJRExtensions.h"
+#import "NSCalendarDate-NJRExtensions.h"
 #import <Carbon/Carbon.h>
 
+#import "PSAlerts.h"
 #import "PSDockBounceAlert.h"
 #import "PSScriptAlert.h"
@@ -38,4 +44,5 @@
 ¥ If you feed NSCalendarDate dateWithNaturalLanguageString: an " AM"/" PM" locale, it doesn't accept that date format.
 ¥ descriptions for %X and %x are reversed (time zone is in %X, not %x)
+¥ NSComboBox data source issues, canÕt have it appear as ÒtodayÓ because the formatter doesnÕt like that.  Should be able to enter text into the data source and have the formatter process it without altering it.
 ¥ too hard to implement date-only or time-only formatters
 ¥ should be able to specify that natural language favors date or time (10 = 10th of month, not 10am)
@@ -44,6 +51,11 @@
 */
 
+static NSString * const PSAlertsSelected = @"Pester alerts selected"; // NSUserDefaults key
+static NSString * const PSAlertsEditing = @"Pester alerts editing"; // NSUserDefaults key
+
 @interface PSAlarmSetController (Private)
 
+- (void)_readAlerts:(PSAlerts *)alerts;
+- (BOOL)_setAlerts;
 - (void)_stopUpdateTimer;
 
@@ -54,4 +66,5 @@
 - (void)awakeFromNib;
 {
+    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
     alarm = [[PSAlarm alloc] init];
     [[self window] center];
@@ -60,5 +73,5 @@
     [timeDate setFormatter: [[NJRDateFormatter alloc] initWithDateFormat: [NJRDateFormatter localizedDateFormatIncludingWeekday: NO] allowNaturalLanguage: YES]];
     {
-        NSArray *dayNames = [[NSUserDefaults standardUserDefaults] arrayForKey:
+        NSArray *dayNames = [defaults arrayForKey:
             NSWeekDayNameArray];
         NSArray *completions = [timeDateCompletions itemTitles];
@@ -83,18 +96,33 @@
         }
     }
+    [editAlert setIntValue: [defaults boolForKey: PSAlertsEditing]];
+    {
+        NSDictionary *plAlerts = [defaults dictionaryForKey: PSAlertsSelected];
+        PSAlerts *alerts;
+        if (plAlerts == nil) {
+            alerts = [[PSAlerts alloc] initWithPesterVersion1Alerts];
+        } else {
+            NS_DURING
+                alerts = [[PSAlerts alloc] initWithPropertyList: plAlerts];
+            NS_HANDLER
+                NSRunAlertPanel(@"Unable to restore alerts", @"Pester could not restore recent alert information for one or more alerts in the Set Alarm window.  The default set of alerts will be used instead.\n\n%@", nil, nil, nil, [localException reason]);
+                alerts = [[PSAlerts alloc] initWithPesterVersion1Alerts];
+            NS_ENDHANDLER
+        }
+        [self _readAlerts: alerts];
+    }
     [timeDate setObjectValue: [NSDate date]];
-    [self inAtChanged: nil];
+    [self inAtChanged: nil]; // by convention, if sender is nil, we're initializing
     [self playSoundChanged: nil];
     [self doScriptChanged: nil];
     [self doSpeakChanged: nil];
+    [self editAlertChanged: nil];
     [script setFileTypes: [NSArray arrayWithObjects: @"applescript", @"script", NSFileTypeForHFSTypeCode(kOSAFileType), NSFileTypeForHFSTypeCode('TEXT'), nil]];
     [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(silence:) name: PSAlarmAlertStopNotification object: nil];
     [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(playSoundChanged:) name: NJRQTMediaPopUpButtonMovieChangedNotification object: sound];
-    [voice setDelegate: self];
-    // XXX still broken under 10.2, check 10.1 behavior and see if subclassing NSComboBox will help
-    // if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_1) {
-        // XXX workaround for 10.1.x bug which sets the first responder to the wrong field, but it works if I set the initial first responder to nil... go figure.
-        [[self window] setInitialFirstResponder: nil];
-    // }
+    [voice setDelegate: self]; // XXX why don't we do this in IB?  It should use the accessor...
+    [wakeUp setEnabled: [PSPowerManager autoWakeSupported]];
+    // XXX workaround for 10.1.x and 10.2.x bug which sets the first responder to the wrong field alternately, but it works if I set the initial first responder to nil... go figure.
+    [[self window] setInitialFirstResponder: nil];
     [[self window] makeKeyAndOrderFront: nil];
 }
@@ -110,4 +138,5 @@
 }
 
+// XXX with -[NSControl currentEditor] don't need to compare?  Also check -[NSControl validateEditing]
 - (id)objectValueForTextField:(NSTextField *)field whileEditing:(id)sender;
 {
@@ -124,10 +153,10 @@
 }
 
+#pragma mark date/interval setting
+
 - (void)setAlarmDateAndInterval:(id)sender;
 {
     if (isInterval) {
-        [alarm setInterval:
-            [[self objectValueForTextField: timeInterval whileEditing: sender] intValue] *
-                [timeIntervalUnits selectedTag]];
+        [alarm setInterval: [timeInterval interval]];
     } else {
         [alarm setForDate: [self objectValueForTextField: timeDate whileEditing: sender]
@@ -141,5 +170,5 @@
 }
 
-// XXX use OACalendar?
+// XXX use OACalendar in popup like Palm Desktop?
 
 - (IBAction)updateDateDisplay:(id)sender;
@@ -193,8 +222,70 @@
     [timeDateCompletions setEnabled: !isInterval];
     if (sender != nil)
-        [[self window] makeFirstResponder: isInterval ? timeInterval : timeOfDay];
+        [[self window] makeFirstResponder: isInterval ? (NSTextField *)timeInterval : timeOfDay];
     // NSLog(@"UPDATING FROM inAtChanged");
     [self update: nil];
 }
+
+- (IBAction)dateCompleted:(NSPopUpButton *)sender;
+{
+    [timeDate setStringValue: [sender titleOfSelectedItem]];
+    [self update: sender];
+}
+
+#pragma mark alert editing
+
+- (IBAction)editAlertChanged:(id)sender;
+{
+    BOOL editAlertSelected = [editAlert intValue];
+    NSView *editAlertControl = [editAlert controlView];
+    NSWindow *window = [self window];
+    NSRect frame = [window frame];
+    if (editAlertSelected) {
+        NSSize editWinSize = [window maxSize];
+        [editAlertControl setNextKeyView: [displayMessage controlView]];
+        frame.origin.y += frame.size.height - editWinSize.height;
+        frame.size = editWinSize;
+        [window setFrame: frame display: (sender != nil) animate: (sender != nil)];
+        [self updateDateDisplay: sender];
+        [alertTabs selectTabViewItemWithIdentifier: @"edit"];
+    } else {
+        NSSize viewWinSize = [window minSize];
+        NSRect textFrame = [alertView frame];
+        float textHeight;
+        if (![self _setAlerts]) {
+            [alertView setStringValue: [NSString stringWithFormat: @"CouldnÕt process alert information.\n%@", status]];
+        } else {
+            NSAttributedString *string = [[alarm alerts] prettyList];
+            if (string == nil) {
+                [alertView setStringValue: @"Do nothing. Click the button labeled ÒEditÓ to add an alert."];
+            } else {
+                [alertView setAttributedStringValue: string];
+                [self updateDateDisplay: sender];
+            }
+        }
+        if (sender != nil) { // nil == we're initializing, don't mess with focus
+            NSResponder *oldResponder = [window firstResponder];
+            // make sure focus doesn't get stuck in the edit tab: it is confusing and leaves behind artifacts
+            if (oldResponder == editAlertControl || [oldResponder isKindOfClass: [NSView class]] && [(NSView *)oldResponder isDescendantOf: alertTabs])
+                [window makeFirstResponder: messageField]; // would use editAlertControl, but can't get it to display anomaly-free.
+            [self silence: sender];
+        }
+        // allow height to expand, though not arbitrarily (should still fit on an 800x600 screen)
+        textHeight = [[alertView cell] cellSizeForBounds: NSMakeRect(0, 0, textFrame.size.width, 400)].height;
+        textFrame.origin.y += textFrame.size.height - textHeight;
+        textFrame.size.height = textHeight;
+        [alertView setFrame: textFrame];
+        viewWinSize.height += textHeight;
+        [alertTabs selectTabViewItemWithIdentifier: @"view"];
+        frame.origin.y += frame.size.height - viewWinSize.height;
+        frame.size = viewWinSize;
+        [window setFrame: frame display: (sender != nil) animate: (sender != nil)];
+        [editAlertControl setNextKeyView: cancelButton];
+    }
+    if (sender != nil) {
+        [[NSUserDefaults standardUserDefaults] setBool: editAlertSelected forKey: PSAlertsEditing];
+    }
+}
+
 
 - (IBAction)playSoundChanged:(id)sender;
@@ -206,6 +297,7 @@
     [soundRepetitionStepper setEnabled: canRepeat];
     [soundRepetitionsLabel setTextColor: canRepeat ? [NSColor controlTextColor] : [NSColor disabledControlTextColor]];
-    if (playSoundSelected && sender != nil)
+    if (playSoundSelected && sender == playSound) {
         [[self window] makeFirstResponder: sound];
+    }
 }
 
@@ -234,11 +326,13 @@
     [script setEnabled: doScriptSelected];
     [scriptSelectButton setEnabled: doScriptSelected];
-    if (doScriptSelected && sender != nil)
+    if (doScriptSelected && sender != nil) {
         [[self window] makeFirstResponder: scriptSelectButton];
+        if ([script alias] == nil) [scriptSelectButton performClick: sender];
+    }
 }
 
 - (IBAction)doSpeakChanged:(id)sender;
 {
-    BOOL doSpeakSelected = [doSpeak intValue];
+    BOOL doSpeakSelected = [doSpeak state] == NSOnState;
     [voice setEnabled: doSpeakSelected];
     if (doSpeakSelected && sender != nil)
@@ -246,9 +340,87 @@
 }
 
-- (IBAction)dateCompleted:(NSPopUpButton *)sender;
-{
-    [timeDate setStringValue: [sender titleOfSelectedItem]];
-    [self update: sender];
-}
+- (void)_readAlerts:(PSAlerts *)alerts;
+{
+    NSEnumerator *e = [alerts alertEnumerator];
+    PSAlert *alert;
+    
+    [alarm setAlerts: alerts];
+
+    // turn off all alerts
+    [bounceDockIcon setState: NSOffState];
+    [doScript setIntValue: NO];
+    [displayMessage setIntValue: NO];
+    [playSound setIntValue: NO];
+    [doSpeak setIntValue: NO];
+
+    while ( (alert = [e nextObject]) != nil) {
+        if ([alert isKindOfClass: [PSDockBounceAlert class]]) {
+            [bounceDockIcon setState: NSOnState];
+        } else if ([alert isKindOfClass: [PSScriptAlert class]]) {
+            [doScript setIntValue: YES];
+            [script setAlias: [(PSScriptAlert *)alert scriptFileAlias]];
+        } else if ([alert isKindOfClass: [PSNotifierAlert class]]) {
+            [displayMessage setIntValue: YES];
+        } else if ([alert isKindOfClass: [PSBeepAlert class]]) {
+            unsigned int repetitions = [(PSBeepAlert *)alert repetitions];
+            [playSound setIntValue: YES];
+            [sound setAlias: nil];
+            [soundRepetitions setIntValue: repetitions];
+            [soundRepetitionStepper setIntValue: repetitions];
+        } else if ([alert isKindOfClass: [PSMovieAlert class]]) {
+            unsigned int repetitions = [(PSMovieAlert *)alert repetitions];
+            [playSound setIntValue: YES];
+            [sound setAlias: [(PSMovieAlert *)alert movieFileAlias]];
+            [soundRepetitions setIntValue: repetitions];
+            [soundRepetitionStepper setIntValue: repetitions];
+        } else if ([alert isKindOfClass: [PSSpeechAlert class]]) {
+            [doSpeak setIntValue: YES];
+            [voice setVoice: [(PSSpeechAlert *)alert voice]];
+        }
+    }
+}
+
+- (BOOL)_setAlerts;
+{
+    PSAlerts *alerts = [alarm alerts];
+    
+    [alerts removeAlerts];
+    NS_DURING
+        // dock bounce alert
+        if ([bounceDockIcon state] == NSOnState)
+            [alerts addAlert: [PSDockBounceAlert alert]];
+        // script alert
+        if ([doScript intValue]) {
+            BDAlias *scriptFileAlias = [script alias];
+            if (scriptFileAlias == nil) {
+                [self setStatus: @"Unable to set script alert (no script specified?)"];
+                return NO;
+            }
+            [alerts addAlert: [PSScriptAlert alertWithScriptFileAlias: scriptFileAlias]];
+        }
+        // notifier alert
+        if ([displayMessage intValue])
+            [alerts addAlert: [PSNotifierAlert alert]];
+        // sound alerts
+        if ([playSound intValue]) {
+            BDAlias *soundAlias = [sound selectedAlias];
+            unsigned short numReps = [soundRepetitions intValue];
+            if (soundAlias == nil) // beep alert
+                [alerts addAlert: [PSBeepAlert alertWithRepetitions: numReps]];
+            else // movie alert
+                [alerts addAlert: [PSMovieAlert alertWithMovieFileAlias: soundAlias repetitions: numReps]];
+        }
+        // speech alert
+        if ([doSpeak intValue])
+            [alerts addAlert: [PSSpeechAlert alertWithVoice: [voice titleOfSelectedItem]]];
+        [[NSUserDefaults standardUserDefaults] setObject: [alerts propertyListRepresentation] forKey: PSAlertsSelected];
+    NS_HANDLER
+        [self setStatus: [localException reason]];
+        NS_VALUERETURN(NO, BOOL);
+    NS_ENDHANDLER
+    return YES;
+}
+
+#pragma mark actions
 
 // to ensure proper updating of interval, this should be the only method by which the window is shown (e.g. from the Alarm menu)
@@ -256,6 +428,10 @@
 {
     if (![[self window] isVisible]) {
+        NSDate *today = [NSCalendarDate dateForDay: [NSDate date]];
+        if ([(NSDate *)[timeDate objectValue] compare: today] == NSOrderedAscending) {
+            [timeDate setObjectValue: today];
+        }
         [self update: self];
-        // XXX otherwise, first responder appears to alternate every time the window is shown?!  And if you set the initial first responder, you can't tab in the window. :(
+        // XXX bug workaround - otherwise, first responder appears to alternate every time the window is shown.  And if you set the initial first responder, you can't tab in the window. :(
         [[self window] makeFirstResponder: [[self window] initialFirstResponder]];
     }
@@ -266,35 +442,9 @@
 {
     // set alerts before setting alarm...
-    [alarm removeAlerts];
-    // dock bounce alert
-    if ([bounceDockIcon state] == NSOnState)
-        [alarm addAlert: [PSDockBounceAlert alert]];
-    // script alert
-    if ([doScript intValue]) {
-        BDAlias *scriptFileAlias = [script alias];
-        if (scriptFileAlias == nil) {
-            [self setStatus: @"Unable to set script alert (no script specified?)"];
-            return;
-        }
-        [alarm addAlert: [PSScriptAlert alertWithScriptFileAlias: scriptFileAlias]];
-    }
-    // notifier alert
-    if ([displayMessage intValue])
-        [alarm addAlert: [PSNotifierAlert alert]];
-    // sound alerts
-    if ([playSound intValue]) {
-        BDAlias *soundAlias = [sound selectedAlias];
-        unsigned short numReps = [soundRepetitions intValue];
-        if (soundAlias == nil) // beep alert
-            [alarm addAlert: [PSBeepAlert alertWithRepetitions: numReps]];
-        else // movie alert
-            [alarm addAlert: [PSMovieAlert alertWithMovieFileAlias: soundAlias repetitions: numReps]];
-    }
-    // speech alert
-    if ([doSpeak intValue])
-        [alarm addAlert: [PSSpeechAlert alertWithVoice: [voice titleOfSelectedItem]]];
+    if (![self _setAlerts]) return;
 
     // set alarm
     [self setAlarmDateAndInterval: sender];
+    [alarm setRepeating: [timeIntervalRepeats state] == NSOnState];
     [alarm setMessage: [messageField stringValue]];
     if (![alarm setTimer]) {
@@ -319,21 +469,15 @@
 @implementation PSAlarmSetController (NSControlSubclassDelegate)
 
+- (BOOL)control:(NSControl *)control didFailToFormatString:(NSString *)string errorDescription:(NSString *)error;
+{
+    if (control == timeInterval)
+        [timeInterval handleDidFailToFormatString: string errorDescription: error label: @"alarm interval"];
+    return NO;
+}
+
 - (void)control:(NSControl *)control didFailToValidatePartialString:(NSString *)string errorDescription:(NSString *)error;
 {
-    unichar c;
-    int tag;
-    unsigned length = [string length];
-    if (control != timeInterval || length == 0) return;
-    c = [string characterAtIndex: length - 1];
-    switch (c) {
-        case 's': case 'S': tag = 1; break;
-        case 'm': case 'M': tag = 60; break;
-        case 'h': case 'H': tag = 60 * 60; break;
-        default: return;
-    }
-    [timeIntervalUnits selectItemAtIndex:
-        [timeIntervalUnits indexOfItemWithTag: tag]];
     // NSLog(@"UPDATING FROM validation");
-    [self update: timeInterval]; // make sure we still examine the field editor, otherwise if the existing numeric string is invalid, it'll be cleared
+    if (control == timeInterval) [self update: timeInterval]; // make sure we still examine the field editor, otherwise if the existing numeric string is invalid, it'll be cleared
 }
 
@@ -347,4 +491,5 @@
     [self silence: nil];
     [self _stopUpdateTimer];
+    [self _setAlerts];
 }
 
@@ -367,5 +512,8 @@
 - (NSString *)voicePopUpButton:(NJRVoicePopUpButton *)sender previewStringForVoice:(NSString *)voice;
 {
-    return [messageField stringValue];
+    NSString *message = [messageField stringValue];
+    if (message == nil || [message length] == 0)
+        message = [alarm message];
+    return message;
 }
 
Index: /trunk/Cocoa/Pester/Source/PSAlarms.h
===================================================================
--- /trunk/Cocoa/Pester/Source/PSAlarms.h	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSAlarms.h	(revision 53)
@@ -8,4 +8,5 @@
 
 #import <Cocoa/Cocoa.h>
+#import "PSPropertyListSerialization.h"
 
 extern NSString * const PSAlarmsDidChangeNotification;
@@ -14,6 +15,7 @@
 @class PSAlarm;
 
-@interface PSAlarms : NSObject {
+@interface PSAlarms : NSObject <PSPropertyListSerialization> {
     NSMutableArray *alarms;
+    NSMutableSet *expiredAlarms;
     PSAlarm *nextAlarm;
 }
@@ -22,5 +24,10 @@
 + (PSAlarms *)allAlarms;
 
+- (unsigned)countOfVersion1Alarms;
+- (void)importVersion1Alarms;
+- (void)discardVersion1Alarms;
+
 - (NSArray *)alarms;
+
 - (PSAlarm *)nextAlarm;
 - (int)alarmCount;
Index: /trunk/Cocoa/Pester/Source/PSAlarms.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSAlarms.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSAlarms.m	(revision 53)
@@ -9,9 +9,18 @@
 #import "PSAlarms.h"
 #import "PSAlarm.h"
+#import "NSDictionary-NJRExtensions.h"
+
+NSString * const PSAlarmImportException = @"PSAlarmImportException";
 
 NSString * const PSAlarmsDidChangeNotification = @"PSAlarmsDidChangeNotification";
 NSString * const PSAlarmsNextAlarmDidChangeNotification = @"PSAlarmsNextAlarmDidChangeNotification";
 
-static NSString * const PSPendingAlarms = @"Pester pending alarms"; // NSUserDefaults key
+// NSUserDefaults key
+static NSString * const PSPendingAlarms = @"Pester pending alarms"; // 1.0 Ð 1.1a3
+static NSString * const PSAllAlarms = @"Pester alarms"; // 1.1a4 Ð 
+
+// property list keys
+static NSString * const PLAlarmsPending = @"pending";
+static NSString * const PLAlarmsExpired = @"expired";
 
 static PSAlarms *PSAlarmsAllAlarms = nil;
@@ -28,5 +37,10 @@
 {
     if (PSAlarmsAllAlarms == nil) {
-        PSAlarmsAllAlarms = [[self alloc] init];
+        NSDictionary *plAlarms = [[NSUserDefaults standardUserDefaults] objectForKey: PSAllAlarms];
+        if (plAlarms == nil) {
+            PSAlarmsAllAlarms = [[self alloc] init];
+        } else {
+            PSAlarmsAllAlarms = [[self alloc] initWithPropertyList: plAlarms];
+        }
         [PSAlarmsAllAlarms _updateNextAlarm]; // only generate notifications after singleton established
     }
@@ -37,4 +51,46 @@
     NSAssert(PSAlarmsAllAlarms != nil, @"Attempt to use +[PSAlarms allAlarms] before setup complete");
     return PSAlarmsAllAlarms;
+}
+
+#pragma mark private
+
+- (void)_changed;
+{
+    NSMutableArray *alarmsData = [[NSMutableArray alloc] init];
+    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+    [self _updateNextAlarm];
+    // NSLog(@"PSAlarms _changed:\n%@", alarms);
+    [defaults setObject: [self propertyListRepresentation] forKey: PSAllAlarms];
+    [defaults synchronize];
+    [alarmsData release];
+    [[NSNotificationCenter defaultCenter] postNotificationName: PSAlarmsDidChangeNotification object: self];
+}
+
+- (void)_alarmTimerExpired:(NSNotification *)notification;
+{
+    PSAlarm *alarm = [notification object];
+    NSLog(@"timer expired: %@ retainCount %d", alarm, [alarm retainCount]);
+    [expiredAlarms addObject: alarm];
+    NSLog(@"expired alarms: %@", [expiredAlarms description]);
+    [alarms removeObject: alarm];
+    [self _changed];
+}
+
+- (void)_alarmTimerSet:(NSNotification *)notification;
+{
+    PSAlarm *alarm = [notification object];
+    NSLog(@"timer set: %@ retainCount %d", alarm, [alarm retainCount]);
+    [alarms addObject: alarm];
+    [expiredAlarms removeObject: alarm];
+    [self _changed];
+}
+
+- (void)_alarmDied:(NSNotification *)notification;
+{
+    PSAlarm *alarm = [notification object];
+    NSLog(@"alarm died: %@ retainCount %d", alarm, [alarm retainCount]);
+    [alarms removeObject: alarm];
+    [expiredAlarms removeObject: alarm];
+    [self _changed];
 }
 
@@ -59,24 +115,19 @@
 }
 
+- (void)_setUpNotifications;
+{
+    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(_alarmTimerSet:) name: PSAlarmTimerSetNotification object: nil];
+    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(_alarmTimerExpired:) name: PSAlarmTimerExpiredNotification object: nil];
+    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(_alarmDied:) name: PSAlarmDiedNotification object: nil];
+}
+
+#pragma mark initialize-release
+
 - (id)init;
 {
     if ( (self = [super init]) != nil) {
         alarms = [[NSMutableArray alloc] init];
-        NS_DURING
-            NSArray *alarmsData = [[NSUserDefaults standardUserDefaults] arrayForKey: PSPendingAlarms];
-            NSEnumerator *e = [alarmsData objectEnumerator];
-            NSData *alarmData;
-            PSAlarm *alarm;
-            while ( (alarmData = [e nextObject]) != nil) {
-                alarm = [NSUnarchiver unarchiveObjectWithData: alarmData];
-                if (alarm != nil)
-                    [alarms addObject: alarm];
-            }
-        NS_HANDLER
-            // XXX need better error handling here, don't stomp on data
-            NSLog(@"An error occurred while attempting to restore the alarm list: %@", localException);
-        NS_ENDHANDLER
-        [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(_alarmTimerSet:) name: PSAlarmTimerSetNotification object: nil];
-        [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(_alarmTimerExpired:) name: PSAlarmTimerExpiredNotification object: nil];
+        expiredAlarms = [[NSMutableSet alloc] init];
+        [self _setUpNotifications];
     }
     return self;
@@ -86,37 +137,14 @@
 {
     [alarms release];
+    [expiredAlarms release];
     [[NSNotificationCenter defaultCenter] removeObserver: self];
     [super dealloc];
 }
 
-- (void)_changed;
-{
-    NSMutableArray *alarmsData = [[NSMutableArray alloc] init];
-    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
-    NSEnumerator *e;
-    PSAlarm *alarm;
-    [self _updateNextAlarm];
-    // NSLog(@"PSAlarms _changed:\n%@", alarms);
-    // archive
-    e = [alarms objectEnumerator];
-    while ( (alarm = [e nextObject]) != nil) {
-        [alarmsData addObject: [NSArchiver archivedDataWithRootObject: alarm]];
-    }
-    [defaults setObject: alarmsData forKey: PSPendingAlarms];
-    [defaults synchronize];
-    [alarmsData release];
-    [[NSNotificationCenter defaultCenter] postNotificationName: PSAlarmsDidChangeNotification object: self];
-}
-
-- (void)_alarmTimerExpired:(NSNotification *)notification;
-{
-    [alarms removeObject: [notification object]];
-    [self _changed];
-}
-
-- (void)_alarmTimerSet:(NSNotification *)notification;
-{
-    [alarms addObject: [notification object]];
-    [self _changed];
+#pragma mark accessing
+
+- (NSArray *)alarms;
+{
+    return alarms;
 }
 
@@ -124,9 +152,4 @@
 {
     return nextAlarm;
-}
-
-- (NSArray *)alarms;
-{
-    return alarms;
 }
 
@@ -185,3 +208,95 @@
 }
 
+#pragma mark property list serialization (Pester 1.1)
+
+- (NSDictionary *)propertyListRepresentation;
+{
+    NSMutableArray *plPendingAlarms = [[NSMutableArray alloc] initWithCapacity: [alarms count]];
+    NSMutableArray *plExpiredAlarms = [[NSMutableArray alloc] initWithCapacity: [expiredAlarms count]];
+    NSDictionary *plAllAlarms, *plAlarm;
+    NSEnumerator *e;
+    PSAlarm *alarm;
+
+    e = [alarms objectEnumerator];
+    while ( (alarm = [e nextObject]) != nil) {
+        plAlarm = [alarm propertyListRepresentation];
+        if (plAlarm != nil)
+            [plPendingAlarms addObject: plAlarm];
+    }
+
+    e = [expiredAlarms objectEnumerator];
+    while ( (alarm = [e nextObject]) != nil) {
+        plAlarm = [alarm propertyListRepresentation];
+        if (plAlarm != nil)
+            [plExpiredAlarms addObject: plAlarm];
+    }
+    
+    plAllAlarms = [NSDictionary dictionaryWithObjectsAndKeys:
+        plPendingAlarms, PLAlarmsPending, plExpiredAlarms, PLAlarmsExpired, nil];
+    [plPendingAlarms release];
+    [plExpiredAlarms release];
+    
+    return plAllAlarms;
+}
+
+- (id)initWithPropertyList:(NSDictionary *)dict;
+{
+    if ( (self = [super init]) != nil) {
+        NSArray *plPendingAlarms = [dict objectForRequiredKey: PLAlarmsPending];
+        NSArray *plExpiredAlarms = [dict objectForRequiredKey: PLAlarmsExpired];
+        NSEnumerator *e;
+        NSDictionary *plAlarm;
+        PSAlarm *alarm;
+
+        alarms = [[NSMutableArray alloc] initWithCapacity: [plPendingAlarms count]];
+        e = [plPendingAlarms objectEnumerator];
+        while ( (plAlarm = [e nextObject]) != nil) {
+            [alarms addObject: [[PSAlarm alloc] initWithPropertyList: plAlarm]];
+        }
+
+        e = [plExpiredAlarms objectEnumerator];
+        while ( (plAlarm = [e nextObject]) != nil) {
+            // expired alarms may be just that, or they may have outstanding repeats - if the latter, PSAlarm will reschedule the alarm.
+            if ( (alarm = [[PSAlarm alloc] initWithPropertyList: plAlarm]) != nil)
+                [alarms addObject: alarm];
+        }
+        expiredAlarms = [[NSMutableSet alloc] init];
+        
+        [self _setUpNotifications];
+    }
+    return self;
+}
+
+#pragma mark archiving (Pester 1.0)
+
+- (unsigned)countOfVersion1Alarms;
+{
+    return [[[NSUserDefaults standardUserDefaults] objectForKey: PSPendingAlarms] count];
+}
+
+- (void)discardVersion1Alarms;
+{
+    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+    [defaults removeObjectForKey: PSPendingAlarms];
+    [defaults synchronize];
+}
+
+- (void)importVersion1Alarms;
+{
+    NSArray *alarmsData = [[NSUserDefaults standardUserDefaults] arrayForKey: PSPendingAlarms];
+    NSEnumerator *e = [alarmsData objectEnumerator];
+    NSData *alarmData;
+    PSAlarm *alarm;
+    while ( (alarmData = [e nextObject]) != nil) {
+        NS_DURING
+            alarm = [NSUnarchiver unarchiveObjectWithData: alarmData];
+        NS_HANDLER
+            alarm = nil;
+            // XXX
+        NS_ENDHANDLER
+        if (alarm != nil)
+            [alarms addObject: alarm];
+    }
+}
+
 @end
Index: /trunk/Cocoa/Pester/Source/PSAlarmsController.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSAlarmsController.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSAlarmsController.m	(revision 53)
@@ -9,4 +9,5 @@
 #import "PSAlarmsController.h"
 #import "PSAlarm.h"
+#import "PSAlerts.h"
 #import "NSTableView-NJRExtensions.h"
 #import "NJRTableView.h"
@@ -82,4 +83,11 @@
 }
 
+- (NSString *)tableView:(NSTableView *)aTableView toolTipForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex;
+{
+    PSAlarm *alarm = [reorderedAlarms objectAtIndex: rowIndex];
+
+    return [[alarm prettyDescription] string];
+}
+
 @end
 
Index: /trunk/Cocoa/Pester/Source/PSAlert.h
===================================================================
--- /trunk/Cocoa/Pester/Source/PSAlert.h	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSAlert.h	(revision 53)
@@ -9,14 +9,24 @@
 #import <Foundation/Foundation.h>
 #import "PSAlarm.h"
+#import "PSPropertyListSerialization.h"
+#import "NSString-NJRExtensions.h"
 
-@interface PSAlert : NSObject {
+extern NSString * const PSAlertCreationException;
 
+extern NSString * const PSAlarmAlertCompletedNotification; // userInfo key: "alert" -> PSAlert
+
+@interface PSAlert : NSObject <PSPropertyListSerialization> {
+    
 }
-
-// XXX need archiving support
 
 // subclasses should implement these methods
 + (PSAlert *)alert;
 - (void)triggerForAlarm:(PSAlarm *)alarm;
+- (BOOL)requiresPesterFrontmost;
+
+- (NSAttributedString *)actionDescription;
+
+// after alert completes, invoke method of superclass
+- (void)completedForAlarm:(PSAlarm *)alarm;
 
 @end
Index: /trunk/Cocoa/Pester/Source/PSAlert.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSAlert.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSAlert.m	(revision 53)
@@ -8,5 +8,12 @@
 
 #import "PSAlert.h"
+#import "NSDictionary-NJRExtensions.h"
 
+NSString * const PSAlertCreationException = @"PSAlertCreationException";
+
+NSString * const PSAlarmAlertCompletedNotification = @"PSAlarmAlertCompletedNotification";
+
+// property list keys
+static NSString * const PLAlertClass = @"class"; // NSString
 
 @implementation PSAlert
@@ -23,3 +30,44 @@
 }
 
+- (BOOL)requiresPesterFrontmost;
+{
+    return NO;
+}
+
+- (void)completedForAlarm:(PSAlarm *)alarm;
+{
+    [[NSNotificationCenter defaultCenter] postNotificationName: PSAlarmAlertCompletedNotification object: alarm userInfo: [NSDictionary dictionaryWithObject: self forKey: @"alert"]];
+}
+
+- (NSAttributedString *)actionDescription;
+{
+    NSAssert(NO, @"Class is abstract");
+    return nil;
+}
+
+#pragma mark property list serialization (Pester 1.1)
+
+- (NSDictionary *)propertyListRepresentation;
+{
+    return [NSDictionary dictionaryWithObject: NSStringFromClass([self class]) forKey: PLAlertClass];
+}
+
+- (id)initWithPropertyList:(NSDictionary *)dict;
+{
+    if ( (self = [self init]) != nil) {
+        IMP myImp = [self methodForSelector: _cmd];
+        NSString *clsString = [dict objectForRequiredKey: PLAlertClass];
+        Class cls = NSClassFromString(clsString);
+        NSAssert1(cls != nil, @"Alert class %@ is not available", clsString);
+        [super release];
+        self = [cls alloc];
+        if (self != nil) {
+            IMP subImp = [self methodForSelector: @selector(initWithPropertyList:)];
+            NSAssert1(subImp != myImp, @"No implementation of initWithPropertyList: for alert class %@", clsString);
+            self = [self initWithPropertyList: dict];
+        }
+    }
+    return self;
+}
+
 @end
Index: /trunk/Cocoa/Pester/Source/PSAlerts.h
===================================================================
--- /trunk/Cocoa/Pester/Source/PSAlerts.h	(revision 53)
+++ /trunk/Cocoa/Pester/Source/PSAlerts.h	(revision 53)
@@ -0,0 +1,34 @@
+//
+//  PSAlerts.h
+//  Pester
+//
+//  Created by Nicholas Riley on Sat Dec 21 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import <AppKit/AppKit.h>
+#import "PSPropertyListSerialization.h"
+
+@class PSAlert, PSAlarm;
+
+@interface PSAlerts : NSObject <PSPropertyListSerialization>
+{
+    NSMutableArray *alerts;
+    BOOL requirePesterFrontmost;
+}
+
+- (id)init;
+- (id)initWithPesterVersion1Alerts;
+
+- (void)addAlert:(PSAlert *)alert;
+- (void)removeAlerts;
+
+- (NSArray *)allAlerts;
+- (NSEnumerator *)alertEnumerator;
+- (BOOL)requirePesterFrontmost; // do any alerts require Pester be in front?
+
+- (void)triggerForAlarm:(PSAlarm *)alarm;
+
+- (NSAttributedString *)prettyList;
+
+@end
Index: /trunk/Cocoa/Pester/Source/PSAlerts.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSAlerts.m	(revision 53)
+++ /trunk/Cocoa/Pester/Source/PSAlerts.m	(revision 53)
@@ -0,0 +1,134 @@
+//
+//  PSAlerts.m
+//  Pester
+//
+//  Created by Nicholas Riley on Sat Dec 21 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import "PSAlerts.h"
+#import "PSAlert.h"
+#import "PSDockBounceAlert.h"
+#import "PSNotifierAlert.h"
+#import "PSBeepAlert.h"
+
+// property list keys
+static NSString * const PLAlerts = @"alerts"; // NSString
+
+@implementation PSAlerts
+
+#pragma mark initialize-release
+
+- (id)init;
+{
+    if ( (self = [super init]) != nil) {
+        alerts = [[NSMutableArray alloc] initWithCapacity: 4];
+    }
+    return self;
+}
+
+- (id)initWithPesterVersion1Alerts;
+{
+    if ( (self = [self init]) != nil) {
+        [self addAlert: [PSDockBounceAlert alert]];
+        [self addAlert: [PSNotifierAlert alert]];
+        [self addAlert: [PSBeepAlert alertWithRepetitions: 1]];
+    }
+    return self;
+}
+
+- (void)dealloc;
+{
+    [alerts release]; alerts = nil;
+}
+
+#pragma mark accessing
+
+- (void)addAlert:(PSAlert *)alert;
+{
+    [alerts addObject: alert];
+    if ([alert requiresPesterFrontmost])
+        requirePesterFrontmost = YES;
+}
+
+- (void)removeAlerts;
+{
+    [alerts removeAllObjects];
+    requirePesterFrontmost = NO;
+}
+
+- (NSEnumerator *)alertEnumerator;
+{
+    return [alerts objectEnumerator];
+}
+
+- (NSArray *)allAlerts;
+{
+    return [[alerts copy] autorelease];
+}
+
+- (BOOL)requirePesterFrontmost;
+{
+    return requirePesterFrontmost;
+}
+
+#pragma mark actions
+
+- (void)triggerForAlarm:(PSAlarm *)alarm;
+{
+    [alerts makeObjectsPerformSelector: @selector(triggerForAlarm:) withObject: alarm];
+}
+
+#pragma mark printing
+
+- (NSAttributedString *)prettyList;
+{
+    NSMutableAttributedString *string = [[NSMutableAttributedString alloc] init];
+    NSEnumerator *e = [self alertEnumerator];
+    PSAlert *alert;
+    unsigned int length;
+    while ( (alert = [e nextObject]) != nil) {
+        [string appendAttributedString: [@"¥ " small]];
+        [string appendAttributedString: [alert actionDescription]];
+        [string appendAttributedString: [@"\n" small]];
+    }
+    if ( (length = [string length]) == 0) {
+        [string release];
+        return nil;
+    } else {
+        NSMutableParagraphStyle *paraStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
+        [string deleteCharactersInRange: NSMakeRange(length - 1, 1)]; // remove trailing newline
+        [paraStyle setHeadIndent: [[string attribute: NSFontAttributeName atIndex: 0 effectiveRange: NULL] widthOfString: @"¥ "]];
+        [string addAttribute: NSParagraphStyleAttributeName value: paraStyle range: NSMakeRange(0, length - 1)];
+        [paraStyle release]; paraStyle = nil;
+        return [string autorelease];
+    }
+}
+
+#pragma mark property list serialization (Pester 1.1)
+
+- (NSDictionary *)propertyListRepresentation;
+{
+    NSMutableArray *plAlerts = [[NSMutableArray alloc] initWithCapacity: [alerts count]];
+    NSEnumerator *e = [self alertEnumerator];
+    PSAlert *alert;
+    while ( (alert = [e nextObject]) != nil) {
+        [plAlerts addObject: [alert propertyListRepresentation]];
+    }
+    return [NSDictionary dictionaryWithObject: plAlerts forKey: PLAlerts];
+}
+
+- (id)initWithPropertyList:(NSDictionary *)dict;
+{
+    if ( (self = [self init]) != nil) {
+        NSArray *plAlerts = [dict objectForKey: PLAlerts];
+        NSEnumerator *e = [plAlerts objectEnumerator];
+        NSDictionary *alertDict;
+        while ( (alertDict = [e nextObject]) != nil) {
+            [self addAlert: [[PSAlert alloc] initWithPropertyList: alertDict]];
+        }
+    }
+    return self;
+}
+
+@end
Index: /trunk/Cocoa/Pester/Source/PSApplication.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSApplication.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSApplication.m	(revision 53)
@@ -21,4 +21,5 @@
     [[NSNotificationCenter defaultCenter] addObserver: [PSAlarmAlertController class] selector: @selector(controllerWithTimerExpiredNotification:) name: PSAlarmTimerExpiredNotification object: nil];
     [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(nextAlarmDidChange:) name: PSAlarmsNextAlarmDidChangeNotification object: nil];
+    // XXX exception handling
     [PSAlarms setUp];
     [self setDelegate: self];
@@ -71,9 +72,10 @@
 {
     PSAlarm *alarm = [timer userInfo];
-    NSTimeInterval alarmInterval;
+    NSTimeInterval timeRemaining;
     NSString *tileString;
     if (timer == nil) alarm = [[PSAlarms allAlarms] nextAlarm];
     if (alarm == nil) return;
     tileString = [alarm timeRemainingString];
+    timeRemaining = [alarm timeRemaining]; // want to err on the side of timeRemaining being smaller, otherwise ÇexpiredÈ can appear
     {
         NSMutableDictionary *atts = [NSMutableDictionary dictionary];
@@ -117,8 +119,7 @@
         [tile release];
     }
-    alarmInterval = [alarm interval];
-    // NSLog(@"_updateDockTile > time remaining %@ (%.0lf), last time interval %.0lf", tileString, alarmInterval, dockUpdateInterval);
-    if (alarmInterval > 61) {
-        NSTimeInterval nextUpdate = ((unsigned long long)alarmInterval) % 60;
+    // NSLog(@"_updateDockTile > time remaining %@ (%.6lf), last time interval %.6lf", tileString, timeRemaining, dockUpdateInterval);
+    if (timeRemaining > 61) {
+        NSTimeInterval nextUpdate = ((unsigned long long)timeRemaining) % 60;
         if (nextUpdate <= 1) nextUpdate = 60;
         [self _resetUpdateTimer];
@@ -126,8 +127,8 @@
         // NSLog(@"_updateDockTile > set timer for %.0lf seconds", nextUpdate);
     } else if (timer == nil || dockUpdateInterval > 1) {
-        [self _resetUpdateTimer];
+        [self _resetUpdateTimer]; 
         [self _setUpdateTimerForInterval: 1 alarm: alarm repeats: YES];
         // NSLog(@"_updateDockTile > set timer for 1 second");
-    } else if (alarmInterval < 2) {
+    } else if (timeRemaining <= 1) {
         [self _resetUpdateTimer];
     }
@@ -182,4 +183,32 @@
 @implementation PSApplication (NSApplicationNotifications)
 
+- (void)applicationDidFinishLaunching:(NSNotification *)notification;
+{
+    // XXX import panel will not be frontmost window if you switch to another app while Pester is launching; Mac OS X bug?
+    PSAlarms *allAlarms = [PSAlarms allAlarms];
+    unsigned version1AlarmCount = [allAlarms countOfVersion1Alarms];
+    if (version1AlarmCount > 0) {
+        int answer = NSRunAlertPanel(@"Import alarms from older Pester version?", @"Pester found %u alarm%@ created with an older version. These alarms must be converted for use with this version of Pester, and will be unavailable in previous versions after conversion. New alarms created with this version of Pester will not appear in Pester version 1.1a3 or earlier.",
+                                     @"Import", @"Discard", @"DonÕt Import",
+                                     version1AlarmCount, version1AlarmCount == 1 ? @"" : @"s");
+        switch (answer) {
+            case NSAlertDefaultReturn:
+                NS_DURING
+                    [allAlarms importVersion1Alarms];
+                NS_HANDLER
+                    NSRunAlertPanel(@"Error occurred importing alarms", @"Pester was unable to convert some alarms created with an older version. Those alarms which could be read have been converted. The previous-format alarms have been retained; try using an older version of Pester to read them.\n\n%@", nil, nil, nil, [localException reason]);
+                    NS_VOIDRETURN;
+                NS_ENDHANDLER
+            case NSAlertAlternateReturn:
+                NSLog(@"discard");
+                // [allAlarms discardVersion1Alarms];
+                break;
+            case NSAlertOtherReturn:
+                NSLog(@"donÕt import");
+                break;
+        }
+    }
+}
+
 - (void)applicationWillTerminate:(NSNotification *)notification;
 {
Index: /trunk/Cocoa/Pester/Source/PSBeepAlert.h
===================================================================
--- /trunk/Cocoa/Pester/Source/PSBeepAlert.h	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSBeepAlert.h	(revision 53)
@@ -9,8 +9,8 @@
 #import "PSAlert.h"
 
-
 @interface PSBeepAlert : PSAlert {
+    PSAlarm *alarm;
     unsigned short repetitions;
-    unsigned short repetitionsRemaining;    
+    unsigned short repetitionsRemaining;
 }
 
@@ -18,3 +18,5 @@
 - (id)initWithRepetitions:(unsigned short)numReps;
 
+- (unsigned short)repetitions;
+
 @end
Index: /trunk/Cocoa/Pester/Source/PSBeepAlert.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSBeepAlert.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSBeepAlert.m	(revision 53)
@@ -10,4 +10,8 @@
 #import "PSBeepAlert.h"
 #import "PSAlarmAlertController.h"
+#import "NSDictionary-NJRExtensions.h"
+
+// property list keys
+static NSString * const PLAlertRepetitions = @"times"; // NSNumber
 
 @implementation PSBeepAlert
@@ -32,4 +36,9 @@
 }
 
+- (unsigned short)repetitions;
+{
+    return repetitions;
+}
+
 - (void)beep;
 {
@@ -37,4 +46,5 @@
     repetitionsRemaining--;
     if (repetitionsRemaining == 0) {
+        [self completedForAlarm: alarm];
         [self release];
         return;
@@ -48,6 +58,7 @@
 }
 
-- (void)triggerForAlarm:(PSAlarm *)alarm;
+- (void)triggerForAlarm:(PSAlarm *)anAlarm;
 {
+    alarm = anAlarm;
     repetitionsRemaining = repetitions;
     [self retain];
@@ -56,3 +67,23 @@
 }
 
+- (NSAttributedString *)actionDescription;
+{
+    return [[@"Play the system alert sound" stringByAppendingString:
+                                            repetitions == 1 ? @"" : [NSString stringWithFormat: @" %hu times", repetitions]] small];
+}
+
+#pragma mark property list serialization (Pester 1.1)
+
+- (NSDictionary *)propertyListRepresentation;
+{
+    NSMutableDictionary *plAlert = [[super propertyListRepresentation] mutableCopy];
+    [plAlert setObject: [NSNumber numberWithUnsignedShort: repetitions] forKey: PLAlertRepetitions];
+    return [plAlert autorelease];
+}
+
+- (id)initWithPropertyList:(NSDictionary *)dict;
+{
+    return [self initWithRepetitions: [[dict objectForRequiredKey: PLAlertRepetitions] unsignedShortValue]];
+}
+
 @end
Index: /trunk/Cocoa/Pester/Source/PSDockBounceAlert.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSDockBounceAlert.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSDockBounceAlert.m	(revision 53)
@@ -30,5 +30,19 @@
     [NSApp requestUserAttention: NSInformationalRequest];
     [[self class] performSelector: @selector(stopBouncing) withObject: nil afterDelay: 1 inModes: [NSArray arrayWithObject: NSDefaultRunLoopMode]];
+    [self completedForAlarm: alarm];
 }
 
+- (NSAttributedString *)actionDescription;
+{
+    return [@"Bounce dock icon" small];
+}
+
+#pragma mark property list serialization (Pester 1.1)
+
+- (id)initWithPropertyList:(NSDictionary *)dict;
+{
+    [self release];
+    return [[PSDockBounceAlert alert] retain];
+}
+        
 @end
Index: /trunk/Cocoa/Pester/Source/PSError.h
===================================================================
--- /trunk/Cocoa/Pester/Source/PSError.h	(revision 53)
+++ /trunk/Cocoa/Pester/Source/PSError.h	(revision 53)
@@ -0,0 +1,24 @@
+//
+//  PSError.h
+//  Pester
+//
+//  Created by Nicholas Riley on Sun Dec 29 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+@interface PSError : NSObject {
+    NSCountedSet *reasons;
+    NSString *operation;
+    unsigned count;
+}
+
+// create an error object
++ (PSError *)error;
+
+// raise exception, invalidates error object
+- (void)raiseIfNeededForOperation:(NSString *)anOperation count:(unsigned)aCount;
+
+@end
Index: /trunk/Cocoa/Pester/Source/PSError.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSError.m	(revision 53)
+++ /trunk/Cocoa/Pester/Source/PSError.m	(revision 53)
@@ -0,0 +1,60 @@
+//
+//  PSError.m
+//  Pester
+//
+//  Created by Nicholas Riley on Sun Dec 29 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import "PSError.h"
+
+static NSString * const PSErrorException = @"PSErrorException";
+
+@implementation PSError
+
++ (PSError *)error;
+{
+    return [[self alloc] init];
+}
+
+- (void)dealloc;
+{
+    [reasons release]; reasons = nil;
+    [operation release]; operation = nil;
+    [super dealloc];
+}
+
+- (NSCountedSet *)reasons;
+{
+    if (reasons == nil)
+        reasons = [[NSCountedSet alloc] initWithCapacity: 2];
+    return reasons;
+}
+
+- (void)addException:(NSException *)exception;
+{
+
+}
+
+- (void)raiseIfNeededForOperation:(NSString *)anOperation count:(unsigned)aCount;
+{
+    if (reasons != nil && [reasons count] > 0) {
+        // NSMutableString *
+        [self autorelease];
+        [NSException raise: PSErrorException
+                    format: @"Pester encountered errors while %@ %@."];
+    } else {
+        [self release];
+    }
+}
+
+@end
+
+/* Use cases:
+   - PSAlerts => can't restore one or more alerts, keep the rest
+   - 
+
+   Need to add error to initWithPropertyList: protocol, otherwise we can't get back partially-formed objects.
+   - (id)initWithPropertyList:(NSDictionary *)dict error:(PSException **)exception;
+
+ */
Index: /trunk/Cocoa/Pester/Source/PSMovieAlert.h
===================================================================
--- /trunk/Cocoa/Pester/Source/PSMovieAlert.h	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSMovieAlert.h	(revision 53)
@@ -9,6 +9,6 @@
 #import <AppKit/AppKit.h>
 #import "PSAlert.h"
-#import "BDAlias.h"
 
+@class BDAlias;
 
 @interface PSMovieAlert : PSAlert {
@@ -22,8 +22,9 @@
 + (PSMovieAlert *)alertWithMovieFileAlias:(BDAlias *)anAlias repetitions:(unsigned short)numReps;
 
-- (id)initWithAlias:(BDAlias *)anAlias repetitions:(unsigned int) numReps;
+- (id)initWithMovieFileAlias:(BDAlias *)anAlias repetitions:(unsigned int) numReps;
 
 - (BOOL)hasVideo;
 - (NSMovie *)movie;
+- (BDAlias *)movieFileAlias;
 - (unsigned short)repetitions;
 
Index: /trunk/Cocoa/Pester/Source/PSMovieAlert.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSMovieAlert.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSMovieAlert.m	(revision 53)
@@ -10,5 +10,11 @@
 #import "PSMovieAlert.h"
 #import "PSMovieAlertController.h"
+#import "NSDictionary-NJRExtensions.h"
 #import "NSMovie-NJRExtensions.h"
+#import "BDAlias.h"
+
+// property list keys
+static NSString * const PLAlertRepetitions = @"times"; // NSString
+static NSString * const PLAlertAlias = @"alias"; // NSData
 
 @implementation PSMovieAlert
@@ -16,13 +22,18 @@
 + (PSMovieAlert *)alertWithMovieFileAlias:(BDAlias *)anAlias repetitions:(unsigned short)numReps;
 {
-    return [[[self alloc] initWithAlias: anAlias repetitions: numReps] autorelease];
+    return [[[self alloc] initWithMovieFileAlias: anAlias repetitions: numReps] autorelease];
 }
 
-- (id)initWithAlias:(BDAlias *)anAlias repetitions:(unsigned int) numReps;
+- (id)initWithMovieFileAlias:(BDAlias *)anAlias repetitions:(unsigned int) numReps;
 {
     if ( (self = [super init]) != nil) {
+        NSString *path = [anAlias fullPath];
+        if (path == nil) {
+            [self release];
+            [NSException raise: PSAlertCreationException format: @"CanÕt locate media to play as alert."];
+        }
         alias = [anAlias retain];
         repetitions = numReps;
-        movie = [[NSMovie alloc] initWithURL: [NSURL fileURLWithPath: [anAlias fullPath]] byReference: YES];
+        movie = [[NSMovie alloc] initWithURL: [NSURL fileURLWithPath: path] byReference: YES];
         if (movie == nil) {
             [self release];
@@ -46,7 +57,17 @@
 }
 
+- (BOOL)requiresPesterFrontmost;
+{
+    return hasVideo;
+}
+
 - (NSMovie *)movie;
 {
     return movie;
+}
+
+- (BDAlias *)movieFileAlias;
+{
+    return alias;
 }
 
@@ -73,3 +94,33 @@
 }
 
+- (NSAttributedString *)actionDescription;
+{
+    BOOL isStatic = [movie isStatic];
+    NSMutableAttributedString *string = [[(isStatic ? @"Show " : @"Play ") small] mutableCopy];
+    NSString *kindString = nil, *name = [alias displayNameWithKindString: &kindString];
+    if (name == nil) name = @"ÇcanÕt locate media fileÈ";
+    else [string appendAttributedString: [[NSString stringWithFormat: @"%@ ", kindString] small]];
+    [string appendAttributedString: [name underlined]];
+    if (repetitions > 1 && !isStatic) {
+        [string appendAttributedString: [[NSString stringWithFormat: @" %hu times", repetitions] small]];
+    }
+    return [string autorelease];
+}
+
+#pragma mark property list serialization (Pester 1.1)
+
+- (NSDictionary *)propertyListRepresentation;
+{
+    NSMutableDictionary *plAlert = [[super propertyListRepresentation] mutableCopy];
+    [plAlert setObject: [NSNumber numberWithUnsignedShort: repetitions] forKey: PLAlertRepetitions];
+    [plAlert setObject: [alias aliasData] forKey: PLAlertAlias];
+    return [plAlert autorelease];
+}
+
+- (id)initWithPropertyList:(NSDictionary *)dict;
+{
+    return [self initWithMovieFileAlias: [BDAlias aliasWithData: [dict objectForRequiredKey: PLAlertAlias]]
+                            repetitions: [[dict objectForRequiredKey: PLAlertRepetitions] unsignedShortValue]];
+}
+
 @end
Index: /trunk/Cocoa/Pester/Source/PSMovieAlertController.h
===================================================================
--- /trunk/Cocoa/Pester/Source/PSMovieAlertController.h	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSMovieAlertController.h	(revision 53)
@@ -13,4 +13,6 @@
 
 @interface PSMovieAlertController : NSWindowController {
+    PSAlarm *alarm;
+    PSMovieAlert *alert;
     IBOutlet NSMovieView *movieView;
     void *theMovie; /* Movie */
@@ -19,7 +21,7 @@
 }
 
-+ (PSMovieAlertController *)controllerWithAlarm:(PSAlarm *)alarm movieAlert:(PSMovieAlert *)alert;
++ (PSMovieAlertController *)controllerWithAlarm:(PSAlarm *)anAlarm movieAlert:(PSMovieAlert *)anAlert;
 
-- (id)initWithAlarm:(PSAlarm *)alarm movieAlert:(PSMovieAlert *)alert;
+- (id)initWithAlarm:(PSAlarm *)anAlarm movieAlert:(PSMovieAlert *)anAlert;
 
 @end
Index: /trunk/Cocoa/Pester/Source/PSMovieAlertController.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSMovieAlertController.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSMovieAlertController.m	(revision 53)
@@ -17,7 +17,7 @@
 @implementation PSMovieAlertController
 
-+ (PSMovieAlertController *)controllerWithAlarm:(PSAlarm *)alarm movieAlert:(PSMovieAlert *)alert;
++ (PSMovieAlertController *)controllerWithAlarm:(PSAlarm *)anAlarm movieAlert:(PSMovieAlert *)anAlert;
 {
-    return [[self alloc] initWithAlarm: alarm movieAlert: alert];
+    return [[self alloc] initWithAlarm: anAlarm movieAlert: anAlert];
 }
 
@@ -39,9 +39,11 @@
 }
 
-- (id)initWithAlarm:(PSAlarm *)alarm movieAlert:(PSMovieAlert *)alert;
+- (id)initWithAlarm:(PSAlarm *)anAlarm movieAlert:(PSMovieAlert *)anAlert;
 {
     if ([self initWithWindowNibName: @"Movie alert"]) {
-        NSMovie *movie = [alert movie];
+        NSMovie *movie = [anAlert movie];
         NSWindow *window = [self window]; // connect outlets
+        alarm = anAlarm;
+        alert = anAlert;
         [movieView setMovie: movie];
         theMovie = [movie QTMovie];
@@ -67,4 +69,13 @@
             [window setFrame: frame display: NO];
             [window setTitle: [alarm message]];
+            {	// XXX workaround for (IMO) ugly appearance of Cocoa utility windows
+                NSView *miniButton = [window standardWindowButton: NSWindowMiniaturizeButton],
+                *zoomButton = [window standardWindowButton: NSWindowZoomButton];
+                // NOTE: this will not work if the window is resizable: when the frame is reset, the standard buttons reappear
+                [miniButton setFrameOrigin: NSMakePoint(-100, -100)];
+                [zoomButton setFrameOrigin: NSMakePoint(-100, -100)];
+                [[miniButton superview] setNeedsDisplay: YES];
+                [[zoomButton superview] setNeedsDisplay: YES];
+            }
             [[self window] orderFrontRegardless];
         }
@@ -91,5 +102,6 @@
     repetitions = 0;
     [movieView stop: self];
-    [self release];
+    [alert completedForAlarm: alarm];
+    [self autorelease];
     // note: there may still be a retained copy of this object until the runloop timer has let go of us at the end of the current movie playback cycle; donÕt worry about it.
 }
Index: /trunk/Cocoa/Pester/Source/PSNotifierAlert.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSNotifierAlert.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSNotifierAlert.m	(revision 53)
@@ -26,3 +26,21 @@
 }
 
+- (BOOL)requiresPesterFrontmost;
+{
+    return YES;
+}
+
+- (NSAttributedString *)actionDescription;
+{
+    return [@"Display message and time" small];
+}
+
+#pragma mark property list serialization (Pester 1.1)
+
+- (id)initWithPropertyList:(NSDictionary *)dict;
+{
+    [self release];
+    return [[PSNotifierAlert alert] retain];
+}
+
 @end
Index: /trunk/Cocoa/Pester/Source/PSPowerManager.h
===================================================================
--- /trunk/Cocoa/Pester/Source/PSPowerManager.h	(revision 53)
+++ /trunk/Cocoa/Pester/Source/PSPowerManager.h	(revision 53)
@@ -0,0 +1,33 @@
+//
+//  PSPowerManager.h
+//  Pester
+//
+//  Created by Nicholas Riley on Mon Dec 23 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <IOKit/IOKitLib.h>
+
+@interface PSPowerManager : NSObject {
+    id delegate;
+    io_connect_t root_port;
+    io_object_t notifier;
+}
+
+- (id)initWithDelegate:(id)aDelegate;
+
++ (BOOL)autoWakeSupported;
++ (NSDate *)wakeTime;
++ (void)setWakeTime:(NSDate *)time;
++ (void)clearWakeTime;
+
+@end
+
+@interface NSObject (PSPowerManagerDelegate)
+
+- (void)powerManagerWillSleep:(PSPowerManager *)powerManager;
+- (BOOL)powerManagerShouldSleep:(PSPowerManager *)powerManager;
+- (void)powerManagerDidWake:(PSPowerManager *)powerManager;
+
+@end
Index: /trunk/Cocoa/Pester/Source/PSPowerManager.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSPowerManager.m	(revision 53)
+++ /trunk/Cocoa/Pester/Source/PSPowerManager.m	(revision 53)
@@ -0,0 +1,270 @@
+//
+//  PSPowerManager.m
+//  Pester
+//
+//  Created by Nicholas Riley on Mon Dec 23 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import "PSPowerManager.h"
+
+#import <IOKit/pwr_mgt/IOPMLib.h>
+#import <IOKit/IOMessage.h>
+#import <CoreFoundation/CoreFoundation.h>
+
+/*
+ * Copyright (c) 2002 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ *
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+/* Sample code to set an automatic wakeup timer to wake machines from sleep.
+
+When a machine is asleep, most hardware (including the processor) is
+powered off. The PMU chip is one of the few things left powered on, and it's
+able to generate a wakeup event on a timer.
+This code shows how to set the wakeup timer within the PMU.
+*/
+
+// From autowake.cpp:
+
+// #define kAppleVIAUserClientMagicCookie 0x101face // or 0x101beef -- for PMU
+// #define kAppleVIAUserClientMagicCookie 0x101beef // or 0x101face  -- for PMU
+
+// The difference is 101beef is only for superusers and 101face works for
+// non-privileged users.  I have not determined which calls are only available
+// for superusers
+
+#define PMU_MAGIC_PASSWORD	0x0101FACE // BEEF
+
+/* ==========================================
+* Close a device user client
+* =========================================== */
+static kern_return_t
+closeDevice(io_connect_t con)
+{
+    kern_return_t ret = IOServiceClose(con);
+
+    NSCAssert1(ret == kIOReturnSuccess, @"closeDevice: IOServiceClose returned an error of type %08lx", (unsigned long)ret);
+
+    return ret;
+}
+
+/* ==========================================
+* Open an IORegistry device user client
+* =========================================== */
+static void
+openDevice(io_object_t obj, unsigned int type, io_connect_t * con)
+{
+    kern_return_t ret = IOServiceOpen(obj, mach_task_self(), type, con);
+
+    NSCAssert1(ret == kIOReturnSuccess, @"openDevice: IOServiceOpen returned an error of type %08lx", (unsigned long)ret);
+}
+
+/* ===========================================
+* Changes the string for a registry
+* property.
+* ===========================================  */
+void
+writeDataProperty(io_object_t handle, CFStringRef name,
+                  unsigned char * bytes, unsigned int size)
+{
+    kern_return_t kr = kIOReturnNoMemory;
+    CFDataRef data;
+    CFMutableDictionaryRef dict = 0;
+
+    data = CFDataCreate(kCFAllocatorDefault, bytes, size);
+    NSCAssert(data != NULL, @"writeDataProperty: CFDataCreate failed");
+    [(NSData *)data autorelease];
+
+    dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
+    NSCAssert(data != NULL, @"writeDataProperty: CFDictionaryCreateMutable failed");
+    [(NSMutableDictionary *)dict autorelease];
+
+    CFDictionarySetValue(dict, name, data);
+    kr = IOConnectSetCFProperties(handle, dict);
+    NSCAssert1(kr == KERN_SUCCESS, @"writeDataProperty: IOConnectSetCFProperties returned an error of type %08lx", (unsigned long)kr);
+}
+
+/* ==========================================
+* Write a data property to the PMU driver
+* Arguments
+*     pmuReference - the IORegistry device to write to
+*     propertyName - Name of the property to write to
+*     data - Data to write
+*     dataSize - Data size
+* =========================================== */
+void
+writePMUProperty(io_object_t pmuReference, CFStringRef propertyName, void *data, size_t dataSize)
+{
+    io_connect_t conObj;
+    openDevice(pmuReference, PMU_MAGIC_PASSWORD, &conObj);
+    writeDataProperty(conObj, propertyName, (unsigned char *)data, dataSize);
+    closeDevice(conObj);
+}
+
+
+/* ==========================================
+* Look through the registry and search for an
+* IONetworkInterface objects with the given
+* name.
+* If a match is found, the object is returned.
+* =========================================== */
+
+io_service_t
+getInterfaceWithName(mach_port_t masterPort, char *className)
+{
+    io_service_t obj;
+
+    obj = IOServiceGetMatchingService(masterPort, IOServiceMatching(className));
+
+    NSCAssert(obj != NULL, @"getInterfaceWithName: IOServiceGetMatchingService returned NULL");
+
+    return obj;
+}
+
+/* ==========================================
+* Find the PMU in the IORegistry
+* =========================================== */
+io_service_t
+openPMUComPort(void)
+{
+    static mach_port_t masterPort;
+    kern_return_t kr;
+
+    // Get a master port to talk with the mach_kernel
+    kr = IOMasterPort(bootstrap_port, &masterPort);
+    NSCAssert1(kr == KERN_SUCCESS, @"openPMUComPort: IOMasterPort returned an error of type %08lx", (unsigned long)kr);
+
+    return getInterfaceWithName(masterPort, "ApplePMU");
+}
+
+
+/* ==========================================
+* Release our reference to the PMU in the IORegistry
+* =========================================== */
+void
+closePMUComPort(io_object_t pmuRef)
+{
+    IOObjectRelease(pmuRef);
+}
+
+@implementation PSPowerManager
+
++ (BOOL)autoWakeSupported;
+{
+    io_service_t pmuReference = openPMUComPort();
+    if (pmuReference == NULL) return NO;
+    closePMUComPort(pmuReference);
+    return YES;
+}
+
++ (NSDate *)wakeTime;
+{
+    io_service_t pmuReference = openPMUComPort();
+    NSNumber *autoWakeTime;
+    unsigned long long rawWakeTime;
+    
+    NSAssert(pmuReference != NULL, @"Couldn’t find PMU in IORegistry. This computer may not support automatic wake from sleep.");
+    autoWakeTime = (NSNumber *)IORegistryEntryCreateCFProperty(pmuReference, CFSTR("AutoWake"), NULL, 0);
+    closePMUComPort(pmuReference);
+
+    if (autoWakeTime == nil) return nil;
+    rawWakeTime = [autoWakeTime unsignedLongLongValue];
+    if (rawWakeTime == 0) return nil;
+    // XXX no idea what the epoch is supposed to be, but this works...
+    return [NSDate dateWithTimeIntervalSinceReferenceDate: rawWakeTime - 18446744072475718320LLU];
+}
+
++ (void)setWakeTime:(NSDate *)time;
+{
+    unsigned long wakeTime;
+    io_service_t pmuReference = openPMUComPort();
+    NSAssert(pmuReference != NULL, @"Couldn’t find PMU in IORegistry. This computer may not support automatic wake from sleep.");
+
+    if (time == nil) wakeTime = 0;
+    else {
+        wakeTime = [time timeIntervalSinceNow];
+        if (wakeTime == 0) wakeTime++; // 0 will disable
+    }
+    writePMUProperty(pmuReference, CFSTR("AutoWake"), (unsigned long *)&wakeTime, sizeof(wakeTime));
+    
+    closePMUComPort(pmuReference);
+}
+
++ (void)clearWakeTime;
+{
+    [self setWakeTime: nil];
+}
+
+// modified from RegisterForSleep sample code
+
+- (void)_messageReceived:(natural_t)messageType withArgument:(void *)messageArgument;
+{
+    switch (messageType) {
+        case kIOMessageSystemWillSleep:
+            if ([delegate respondsToSelector: @selector(powerManagerWillSleep:)])
+                [delegate powerManagerWillSleep: self];
+            IOAllowPowerChange(root_port, (long)messageArgument);
+            break;
+        case kIOMessageCanSystemSleep:
+            if ([delegate respondsToSelector: @selector(powerManagerShouldSleep:)]) {
+                if ([delegate powerManagerShouldSleep: self]) {
+                    IOAllowPowerChange(root_port, (long)messageArgument);
+                } else {
+                    IOCancelPowerChange(root_port, (long)messageArgument);
+                }
+            }
+            break;
+        case kIOMessageSystemHasPoweredOn:
+            if ([delegate respondsToSelector: @selector(powerManagerDidWake:)])
+                [delegate powerManagerDidWake: self];
+            break;
+    }
+}
+
+void
+powerCallback(void *refCon, io_service_t service, natural_t messageType, void *messageArgument)
+{
+    [(PSPowerManager *)refCon _messageReceived: messageType withArgument: messageArgument];
+}
+
+- (id)initWithDelegate:(id)aDelegate;
+{
+    if ( (self = [super init]) != nil) {
+        IONotificationPortRef notificationPort;
+
+        delegate = [aDelegate retain];
+
+        root_port = IORegisterForSystemPower(self, &notificationPort, powerCallback, &notifier);
+        NSAssert(root_port != NULL, @"IORegisterForSystemPower failed");
+
+        CFRunLoopAddSource(CFRunLoopGetCurrent(), IONotificationPortGetRunLoopSource(notificationPort), kCFRunLoopDefaultMode);
+    }
+    return self;
+}
+
+- (void)dealloc;
+{
+    IODeregisterForSystemPower(&notifier);
+    [delegate release];
+    [super dealloc];
+}
+
+@end
Index: /trunk/Cocoa/Pester/Source/PSPropertyListSerialization.h
===================================================================
--- /trunk/Cocoa/Pester/Source/PSPropertyListSerialization.h	(revision 53)
+++ /trunk/Cocoa/Pester/Source/PSPropertyListSerialization.h	(revision 53)
@@ -0,0 +1,19 @@
+//
+//  PSPropertyListSerialization.h
+//  Pester
+//
+//  Created by Nicholas Riley on Sat Dec 21 2002.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+@protocol PSPropertyListSerialization
+
+// 1.1 only, deprecated when we move to keyed archiving
+- (NSDictionary *)propertyListRepresentation;
+// subclasses should NOT call [super initWithPropertyList:] - infinite recursion will result!
+- (id)initWithPropertyList:(NSDictionary *)dict;
+
+@end
Index: /trunk/Cocoa/Pester/Source/PSScriptAlert.h
===================================================================
--- /trunk/Cocoa/Pester/Source/PSScriptAlert.h	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSScriptAlert.h	(revision 53)
@@ -18,3 +18,5 @@
 - (id)initWithScriptFileAlias:(BDAlias *)anAlias;
 
+- (BDAlias *)scriptFileAlias;
+
 @end
Index: /trunk/Cocoa/Pester/Source/PSScriptAlert.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSScriptAlert.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSScriptAlert.m	(revision 53)
@@ -9,5 +9,9 @@
 #import "PSScriptAlert.h"
 #import "BDAlias.h"
-#import "NDAppleScriptObject.h"
+// XXX remove #import "NDAppleScriptObject.h"
+#import "NSDictionary-NJRExtensions.h"
+
+// property list keys
+static NSString * const PLAlertAlias = @"alias"; // NSData
 
 @implementation PSScriptAlert
@@ -26,11 +30,71 @@
 }
 
+- (BDAlias *)scriptFileAlias;
+{
+    return alias;
+}
+
 - (void)triggerForAlarm:(PSAlarm *)alarm;
 {
-    NDAppleScriptObject *as = [NDAppleScriptObject appleScriptObjectWithContentsOfFile: [alias fullPath]];
+    NSString *scriptPath = [alias fullPath];
 
-    if (as != nil) {
-        [as execute];
+    if (scriptPath == nil) {
+        NSRunAlertPanel(@"CanÕt find script", @"Pester couldnÕt find the script for the alarm Ò%@Ó.",
+                        nil, nil, nil, [alarm message]);
+    } else {
+        NSDictionary *errorInfo;
+        NSAppleScript *script = [[NSAppleScript alloc] initWithContentsOfURL: [NSURL fileURLWithPath: scriptPath] error: &errorInfo];
+        if (script == nil) {
+            NSString *errorMessage = [errorInfo objectForKey: NSAppleScriptErrorMessage];
+            NSNumber *errorNumber = [errorInfo objectForKey: NSAppleScriptErrorNumber];
+            NSString *appName = [errorInfo objectForKey: NSAppleScriptErrorAppName];
+            if (errorMessage == nil) errorMessage = [errorInfo objectForKey: NSAppleScriptErrorBriefMessage];
+            NSRunAlertPanel(@"Script loading error",
+                            @"Pester encountered an error while attempting to load Ò%@Ó%@ %@",
+                            nil, nil, nil,
+                            [[NSFileManager defaultManager] displayNameAtPath: scriptPath],
+                            errorMessage == nil ? @"" : [NSString stringWithFormat: @":\n\n%@%@", appName == nil ? @"" : @"Ò%@Ó reported an error: ", errorMessage],
+                            errorNumber == nil ? @"" : [NSString stringWithFormat: @"(%@)", errorNumber]);
+        } else {
+            NSAppleEventDescriptor *scriptResult = [script executeAndReturnError: &errorInfo];
+            if (scriptResult == nil) {
+                NSString *errorMessage = [errorInfo objectForKey: NSAppleScriptErrorMessage];
+                NSNumber *errorNumber = [errorInfo objectForKey: NSAppleScriptErrorNumber];
+                NSString *appName = [errorInfo objectForKey: NSAppleScriptErrorAppName];
+                if (errorMessage == nil) errorMessage = [errorInfo objectForKey: NSAppleScriptErrorBriefMessage];
+                NSRunAlertPanel(@"Script execution error",
+                                @"Pester encountered an error while attempting to execute the script Ò%@Ó%@ %@",
+                                nil, nil, nil,
+                                [[NSFileManager defaultManager] displayNameAtPath: scriptPath],
+                                errorMessage == nil ? @"" : [NSString stringWithFormat: @":\n\n%@%@", appName == nil ? @"" : @"Ò%@Ó reported an error: ", errorMessage],
+                                errorNumber == nil ? @"" : [NSString stringWithFormat: @"(%@)", errorNumber]);
+            }
+        }
     }
+    [self completedForAlarm: alarm];
 }
+
+- (NSAttributedString *)actionDescription;
+{
+    NSMutableAttributedString *string = [[@"Do script " small] mutableCopy];
+    NSString *scriptName = [alias displayNameWithKindString: NULL];
+    if (scriptName == nil) scriptName = @"ÇcanÕt locate scriptÈ";
+    [string appendAttributedString: [scriptName underlined]];
+    return [string autorelease];
+}
+
+#pragma mark property list serialization (Pester 1.1)
+
+- (NSDictionary *)propertyListRepresentation;
+{
+    NSMutableDictionary *plAlert = [[super propertyListRepresentation] mutableCopy];
+    [plAlert setObject: [alias aliasData] forKey: PLAlertAlias];
+    return [plAlert autorelease];
+}
+
+- (id)initWithPropertyList:(NSDictionary *)dict;
+{
+    return [self initWithScriptFileAlias: [BDAlias aliasWithData: [dict objectForRequiredKey: PLAlertAlias]]];
+}
+
 @end
Index: /trunk/Cocoa/Pester/Source/PSSpeechAlert.h
===================================================================
--- /trunk/Cocoa/Pester/Source/PSSpeechAlert.h	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSSpeechAlert.h	(revision 53)
@@ -8,9 +8,11 @@
 
 #import "PSAlert.h"
-#import "SUSpeaker.h"
+
+@class SUSpeaker;
 
 @interface PSSpeechAlert : PSAlert {
     SUSpeaker *speaker;
     NSString *voice;
+    PSAlarm *alarm;
 }
 
@@ -19,3 +21,5 @@
 - (id)initWithVoice:(NSString *)aVoice;
 
+- (NSString *)voice;
+
 @end
Index: /trunk/Cocoa/Pester/Source/PSSpeechAlert.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSSpeechAlert.m	(revision 52)
+++ /trunk/Cocoa/Pester/Source/PSSpeechAlert.m	(revision 53)
@@ -4,9 +4,14 @@
 //
 //  Created by Nicholas Riley on Sat Oct 26 2002.
-//  Copyright (c) 2002 __MyCompanyName__. All rights reserved.
+//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
 //
 
 #import "PSSpeechAlert.h"
 #import "PSAlarmAlertController.h"
+#import "NSDictionary-NJRExtensions.h"
+#import "SUSpeaker.h"
+
+// property list keys
+static NSString * const PLAlertVoice = @"voice"; // NSString
 
 @implementation PSSpeechAlert
@@ -20,5 +25,5 @@
 {
     if ( (self = [super init]) != nil) {
-        voice = aVoice;
+        voice = [aVoice retain];
     }
     return self;
@@ -33,20 +38,47 @@
 }
 
+- (NSString *)voice;
+{
+    return voice;
+}
+
 - (void)_stopSpeaking:(NSNotification *)notification;
 {
-    [speaker stopSpeaking];
-    // don't release here, we'll still get the didFinishSpeaking: message as a delegate
+    [speaker stopSpeaking]; // triggers didFinishSpeaking:
 }
 
-- (void)triggerForAlarm:(PSAlarm *)alarm;
+- (void)triggerForAlarm:(PSAlarm *)anAlarm;
 {
     [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(_stopSpeaking:) name: PSAlarmAlertStopNotification object: nil];
     
     if ( (speaker = [[SUSpeaker alloc] init]) == nil) return;
+    alarm = anAlarm;
     [speaker setDelegate: self];
     [speaker setVoice: [[SUSpeaker voiceNames] indexOfObject: voice] + 1];
     [speaker speakText: [alarm message]];
-    
-    [self retain];
+}
+
+- (NSAttributedString *)actionDescription;
+{
+    NSMutableAttributedString *string = [[@"Speak message with voice " small] mutableCopy];
+    [string appendAttributedString: [voice underlined]];
+    return [string autorelease];
+}
+
+#pragma mark property list serialization (Pester 1.1)
+
+- (NSDictionary *)propertyListRepresentation;
+{
+    NSMutableDictionary *plAlert = [[super propertyListRepresentation] mutableCopy];
+    [plAlert setObject: voice forKey: PLAlertVoice];
+    return [plAlert autorelease];
+}
+
+- (id)initWithPropertyList:(NSDictionary *)dict;
+{
+    if ( (self = [self init]) != nil) {
+        voice = [dict objectForRequiredKey: PLAlertVoice];
+    }
+    return self;
 }
 
@@ -55,7 +87,8 @@
 @implementation PSSpeechAlert (SUSpeakerDelegate)
 
-- (void)didFinishSpeaking:(SUSpeaker*)speaker;
+- (void)didFinishSpeaking:(SUSpeaker *)aSpeaker;
 {
-    [self release];
+    [self completedForAlarm: alarm];
+    [speaker release]; speaker = nil;
 }
 
Index: /trunk/Cocoa/Pester/Source/Pester.pbproj/nicholas.pbxuser
===================================================================
--- /trunk/Cocoa/Pester/Source/Pester.pbproj/nicholas.pbxuser	(revision 52)
+++ /trunk/Cocoa/Pester/Source/Pester.pbproj/nicholas.pbxuser	(revision 53)
@@ -2,5 +2,5 @@
 {
 	29B97313FDCFA39411CA2CEA = {
-		activeBuildStyle = 4A9504CDFFE6A4B311CA0CBA;
+		activeBuildStyle = 4A9504CCFFE6A4B311CA0CBA;
 		activeExecutable = F59B967103538BE201154278;
 		activeTarget = 29B97326FDCFA39411CA2CEA;
@@ -12,4 +12,9 @@
 			F500E5370359719B01AEEDB1,
 			F5B15F74037E42EB01AEEDB1,
+			E1A9DEE703BF3C110089E8B2,
+			E17AED7003C0F4D600B89ACF,
+			E1156BFA03C148E2006717DC,
+			E1156C2C03C394D6006717DC,
+			E117A4AB03C3E2FD00E10BA2,
 		);
 		executables = (
@@ -17,37 +22,39 @@
 		);
 		perUserDictionary = {
-			PBXPerProjectTemplateStateSaveDate = 59271904;
-			"PBXTemplateGeometry-F5314676015831810DCA290F" = {
-				ContentSize = "{618, 257}";
+			PBXPerProjectTemplateStateSaveDate = 63172038;
+			"PBXTemplateGeometry-F5CA7ECB015C094F0DCA290F" = {
+				ContentSize = "{668, 621}";
 				LeftSlideOut = {
 					Collapsed = NO;
-					Frame = "{{0, 23}, {618, 234}}";
+					Frame = "{{0, 0}, {668, 621}}";
 					Split0 = {
-						ActiveTab = 2;
-						Collapsed = YES;
-						Frame = "{{0, 0}, {618, 234}}";
+						Collapsed = NO;
+						Frame = "{{0, 0}, {668, 621}}";
 						Split0 = {
-							Frame = "{{1e+06, 1e+06}, {618, 0}}";
+							Frame = "{{0, 0}, {668, 621}}";
 						};
 						SplitCount = 1;
 						Tab0 = {
+							Frame = "{{0, 0}, {484, 208}}";
+						};
+						Tab1 = {
 							Debugger = {
 								Collapsed = NO;
-								Frame = "{{0, 0}, {952, 321}}";
+								Frame = "{{0, 0}, {664, 208}}";
 								Split0 = {
-									Frame = "{{0, 24}, {952, 297}}";
+									Frame = "{{0, 24}, {664, 184}}";
 									Split0 = {
-										Frame = "{{0, 0}, {468, 297}}";
+										Frame = "{{0, 0}, {325, 184}}";
 									};
 									Split1 = {
 										DebugVariablesTableConfiguration = (
 											Name,
-											126.803,
+											123,
 											Value,
-											150.074,
+											85,
 											Summary,
-											172.123,
+											96.123,
 										);
-										Frame = "{{477, 0}, {475, 297}}";
+										Frame = "{{334, 0}, {330, 184}}";
 									};
 									SplitCount = 2;
@@ -63,167 +70,24 @@
 								TabsVisible = YES;
 							};
-							Frame = "{{0, 0}, {952, 321}}";
+							Frame = "{{0, 0}, {664, 208}}";
 							LauncherConfigVersion = 7;
 						};
-						Tab1 = {
-							Frame = "{{0, 0}, {781, 452}}";
+						Tab2 = {
+							Frame = "{{0, 0}, {664, 50}}";
 							LauncherConfigVersion = 3;
 							Runner = {
-								Frame = "{{0, 0}, {781, 452}}";
+								Frame = "{{0, 0}, {664, 50}}";
 							};
 						};
-						Tab2 = {
-							BuildMessageFrame = "{{0, 0}, {620, 123}}";
-							BuildTranscriptFrame = "{{0, 132}, {620, 98}}";
-							Frame = "{{0, 0}, {618, 228}}";
-						};
 						Tab3 = {
+							BuildMessageFrame = "{{0, 0}, {614, 262}}";
+							BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
+							BuildTranscriptFrameExpanded = YES;
 							Frame = "{{0, 0}, {612, 295}}";
 						};
-						TabCount = 4;
-						TabsVisible = NO;
-					};
-					SplitCount = 1;
-					Tab0 = {
-						Frame = "{{0, 0}, {300, 533}}";
-						GroupTreeTableConfiguration = (
-							TargetStatusColumn,
-							18,
-							MainColumn,
-							267,
-						);
-					};
-					Tab1 = {
-						ClassesFrame = "{{0, 0}, {280, 398}}";
-						ClassesTreeTableConfiguration = (
-							PBXBookColumnIdentifier,
-							20,
-							PBXClassColumnIdentifier,
-							237,
-						);
-						Frame = "{{0, 0}, {278, 659}}";
-						MembersFrame = "{{0, 407}, {280, 252}}";
-						MembersTreeTableConfiguration = (
-							PBXBookColumnIdentifier,
-							20,
-							PBXMethodColumnIdentifier,
-							236,
-						);
-					};
-					Tab2 = {
-						Frame = "{{0, 0}, {200, 100}}";
-					};
-					Tab3 = {
-						Frame = "{{0, 0}, {200, 100}}";
-						Split0 = {
-							Frame = "{{0, 0}, {200, 45}}";
-							TargetTreeTableConfiguration = (
-								ActiveTarget,
-								16,
-								TargetName,
-								168,
-							);
+						Tab4 = {
+							Frame = "{{0, 0}, {612, 295}}";
 						};
-						Split1 = {
-							BuildStyleTreeTableConfiguration = (
-								IsActive,
-								16,
-								Name,
-								169,
-							);
-							Frame = "{{0, 54}, {200, 46}}";
-						};
-						SplitCount = 2;
-					};
-					Tab4 = {
-						ExecutableTreeTableConfiguration = (
-							ActiveExecutable,
-							16,
-							ExecutableName,
-							217,
-						);
-						Frame = "{{0, 0}, {250, 100}}";
-					};
-					Tab5 = {
-						BreakpointsTreeTableConfiguration = (
-							breakpointColumn,
-							197,
-							enabledColumn,
-							31,
-						);
-						Frame = "{{0, 0}, {250, 100}}";
-					};
-					TabCount = 6;
-					TabsVisible = NO;
-				};
-				StatusViewVisible = YES;
-				Template = F5314676015831810DCA290F;
-				ToolbarVisible = YES;
-				WindowLocation = "{460, 270}";
-			};
-			"PBXTemplateGeometry-F5CA7EC9015C08ED0DCA290F" = {
-				ContentSize = "{665, 594}";
-				LeftSlideOut = {
-					Collapsed = NO;
-					Frame = "{{0, 0}, {665, 594}}";
-					Split0 = {
-						ActiveTab = 3;
-						Collapsed = NO;
-						Frame = "{{0, 0}, {665, 594}}";
-						Split0 = {
-							Frame = "{{0, 304}, {665, 290}}";
-						};
-						SplitCount = 1;
-						Tab0 = {
-							Debugger = {
-								Collapsed = NO;
-								Frame = "{{0, 0}, {484, 208}}";
-								Split0 = {
-									Frame = "{{0, 24}, {484, 184}}";
-									Split0 = {
-										Frame = "{{0, 0}, {236, 184}}";
-									};
-									Split1 = {
-										DebugVariablesTableConfiguration = (
-											Name,
-											48.80299,
-											Value,
-											71.07401,
-											Summary,
-											93.123,
-										);
-										Frame = "{{245, 0}, {239, 184}}";
-									};
-									SplitCount = 2;
-								};
-								SplitCount = 1;
-								Tab0 = {
-									Frame = "{{0, 0}, {100, 50}}";
-								};
-								Tab1 = {
-									Frame = "{{0, 0}, {100, 50}}";
-								};
-								TabCount = 2;
-								TabsVisible = YES;
-							};
-							Frame = "{{0, 0}, {484, 208}}";
-							LauncherConfigVersion = 7;
-						};
-						Tab1 = {
-							Frame = "{{0, 0}, {664, 208}}";
-							LauncherConfigVersion = 3;
-							Runner = {
-								Frame = "{{0, 0}, {664, 208}}";
-							};
-						};
-						Tab2 = {
-							BuildMessageFrame = "{{0, 0}, {666, 43}}";
-							BuildTranscriptFrame = "{{0, 52}, {666, 0}}";
-							Frame = "{{0, 0}, {664, 50}}";
-						};
-						Tab3 = {
-							Frame = "{{0, 0}, {665, 298}}";
-						};
-						TabCount = 4;
+						TabCount = 5;
 						TabsVisible = NO;
 					};
@@ -260,34 +124,12 @@
 					Tab3 = {
 						Frame = "{{0, 0}, {200, 557}}";
-						Split0 = {
-							Frame = "{{0, 0}, {200, 270}}";
-							TargetTreeTableConfiguration = (
-								ActiveTarget,
-								16,
-								TargetName,
-								168,
-							);
-						};
-						Split1 = {
-							BuildStyleTreeTableConfiguration = (
-								IsActive,
-								16,
-								Name,
-								169,
-							);
-							Frame = "{{0, 279}, {200, 278}}";
-						};
-						SplitCount = 2;
+						TargetTableConfiguration = (
+							ActiveObject,
+							16,
+							ObjectNames,
+							202.296,
+						);
 					};
 					Tab4 = {
-						ExecutableTreeTableConfiguration = (
-							ActiveExecutable,
-							16,
-							ExecutableName,
-							217,
-						);
-						Frame = "{{0, 0}, {250, 100}}";
-					};
-					Tab5 = {
 						BreakpointsTreeTableConfiguration = (
 							breakpointColumn,
@@ -298,443 +140,12 @@
 						Frame = "{{0, 0}, {250, 100}}";
 					};
-					TabCount = 6;
+					TabCount = 5;
 					TabsVisible = NO;
 				};
-				StatusViewVisible = NO;
-				Template = F5CA7EC9015C08ED0DCA290F;
-				ToolbarVisible = NO;
-				WindowLocation = "{69, 216}";
-			};
-			"PBXTemplateGeometry-F5CA7ECB015C094F0DCA290F" = {
-				ContentSize = "{668, 621}";
-				LeftSlideOut = {
-					Collapsed = NO;
-					Frame = "{{0, 0}, {668, 621}}";
-					Split0 = {
-						Collapsed = NO;
-						Frame = "{{0, 0}, {668, 621}}";
-						Split0 = {
-							Frame = "{{0, 0}, {668, 621}}";
-						};
-						SplitCount = 1;
-						Tab0 = {
-							Debugger = {
-								Collapsed = NO;
-								Frame = "{{0, 0}, {484, 208}}";
-								Split0 = {
-									Frame = "{{0, 24}, {484, 184}}";
-									Split0 = {
-										Frame = "{{0, 0}, {236, 184}}";
-									};
-									Split1 = {
-										DebugVariablesTableConfiguration = (
-											Name,
-											123,
-											Value,
-											85,
-											Summary,
-											62.123,
-										);
-										Frame = "{{245, 0}, {239, 184}}";
-									};
-									SplitCount = 2;
-								};
-								SplitCount = 1;
-								Tab0 = {
-									Frame = "{{0, 0}, {100, 50}}";
-								};
-								Tab1 = {
-									Frame = "{{0, 0}, {100, 50}}";
-								};
-								TabCount = 2;
-								TabsVisible = YES;
-							};
-							Frame = "{{0, 0}, {484, 208}}";
-							LauncherConfigVersion = 7;
-						};
-						Tab1 = {
-							Frame = "{{0, 0}, {664, 208}}";
-							LauncherConfigVersion = 3;
-							Runner = {
-								Frame = "{{0, 0}, {664, 208}}";
-							};
-						};
-						Tab2 = {
-							BuildMessageFrame = "{{0, 0}, {666, 43}}";
-							BuildTranscriptFrame = "{{0, 52}, {666, 0}}";
-							Frame = "{{0, 0}, {664, 50}}";
-						};
-						Tab3 = {
-							Frame = "{{0, 0}, {612, 295}}";
-						};
-						TabCount = 4;
-						TabsVisible = NO;
-					};
-					SplitCount = 1;
-					Tab0 = {
-						Frame = "{{0, 0}, {313, 531}}";
-						GroupTreeTableConfiguration = (
-							TargetStatusColumn,
-							18,
-							MainColumn,
-							280,
-						);
-					};
-					Tab1 = {
-						ClassesFrame = "{{0, 0}, {280, 398}}";
-						ClassesTreeTableConfiguration = (
-							PBXBookColumnIdentifier,
-							20,
-							PBXClassColumnIdentifier,
-							237,
-						);
-						Frame = "{{0, 0}, {278, 659}}";
-						MembersFrame = "{{0, 407}, {280, 252}}";
-						MembersTreeTableConfiguration = (
-							PBXBookColumnIdentifier,
-							20,
-							PBXMethodColumnIdentifier,
-							236,
-						);
-					};
-					Tab2 = {
-						Frame = "{{0, 0}, {200, 100}}";
-					};
-					Tab3 = {
-						Frame = "{{0, 0}, {200, 557}}";
-						Split0 = {
-							Frame = "{{0, 0}, {200, 270}}";
-							TargetTreeTableConfiguration = (
-								ActiveTarget,
-								16,
-								TargetName,
-								168,
-							);
-						};
-						Split1 = {
-							BuildStyleTreeTableConfiguration = (
-								IsActive,
-								16,
-								Name,
-								169,
-							);
-							Frame = "{{0, 279}, {200, 278}}";
-						};
-						SplitCount = 2;
-					};
-					Tab4 = {
-						ExecutableTreeTableConfiguration = (
-							ActiveExecutable,
-							16,
-							ExecutableName,
-							217,
-						);
-						Frame = "{{0, 0}, {250, 100}}";
-					};
-					Tab5 = {
-						BreakpointsTreeTableConfiguration = (
-							breakpointColumn,
-							197,
-							enabledColumn,
-							31,
-						);
-						Frame = "{{0, 0}, {250, 100}}";
-					};
-					TabCount = 6;
-					TabsVisible = NO;
-				};
+				NavBarShownByDefault = YES;
 				StatusViewVisible = NO;
 				Template = F5CA7ECB015C094F0DCA290F;
 				ToolbarVisible = NO;
-				WindowLocation = "{361, 189}";
-			};
-			"PBXTemplateGeometry-F5CA7ECC015C09990DCA290F" = {
-				ContentSize = "{773, 558}";
-				LeftSlideOut = {
-					Collapsed = NO;
-					Frame = "{{0, 23}, {773, 535}}";
-					Split0 = {
-						ActiveTab = 0;
-						Collapsed = NO;
-						Frame = "{{24, 0}, {749, 535}}";
-						Split0 = {
-							Frame = "{{0, 337}, {749, 198}}";
-						};
-						SplitCount = 1;
-						Tab0 = {
-							Debugger = {
-								ActiveTab = 1;
-								Collapsed = NO;
-								Frame = "{{0, 0}, {749, 331}}";
-								Split0 = {
-									Frame = "{{0, 127}, {749, 204}}";
-									Split0 = {
-										Frame = "{{0, 0}, {366, 204}}";
-									};
-									Split1 = {
-										DebugVariablesTableConfiguration = (
-											Name,
-											120.803,
-											Value,
-											116.074,
-											Summary,
-											111.123,
-										);
-										Frame = "{{375, 0}, {374, 204}}";
-									};
-									SplitCount = 2;
-								};
-								SplitCount = 1;
-								Tab0 = {
-									Frame = "{{0, 0}, {100, 50}}";
-								};
-								Tab1 = {
-									Frame = "{{0, 0}, {749, 103}}";
-								};
-								TabCount = 2;
-								TabsVisible = YES;
-							};
-							Frame = "{{0, 0}, {749, 331}}";
-							LauncherConfigVersion = 7;
-						};
-						Tab1 = {
-							Frame = "{{0, 0}, {664, 208}}";
-							LauncherConfigVersion = 3;
-							Runner = {
-								Frame = "{{0, 0}, {664, 208}}";
-							};
-						};
-						Tab2 = {
-							BuildMessageFrame = "{{0, 0}, {666, 43}}";
-							BuildTranscriptFrame = "{{0, 52}, {666, 0}}";
-							Frame = "{{0, 0}, {664, 50}}";
-						};
-						Tab3 = {
-							Frame = "{{0, 0}, {612, 295}}";
-						};
-						TabCount = 4;
-						TabsVisible = NO;
-					};
-					SplitCount = 1;
-					Tab0 = {
-						Frame = "{{0, 0}, {313, 531}}";
-						GroupTreeTableConfiguration = (
-							TargetStatusColumn,
-							18,
-							MainColumn,
-							280,
-						);
-					};
-					Tab1 = {
-						ClassesFrame = "{{0, 0}, {280, 398}}";
-						ClassesTreeTableConfiguration = (
-							PBXBookColumnIdentifier,
-							20,
-							PBXClassColumnIdentifier,
-							237,
-						);
-						Frame = "{{0, 0}, {278, 659}}";
-						MembersFrame = "{{0, 407}, {280, 252}}";
-						MembersTreeTableConfiguration = (
-							PBXBookColumnIdentifier,
-							20,
-							PBXMethodColumnIdentifier,
-							236,
-						);
-					};
-					Tab2 = {
-						Frame = "{{0, 0}, {200, 100}}";
-					};
-					Tab3 = {
-						Frame = "{{0, 0}, {200, 557}}";
-						Split0 = {
-							Frame = "{{0, 0}, {200, 270}}";
-							TargetTreeTableConfiguration = (
-								ActiveTarget,
-								16,
-								TargetName,
-								168,
-							);
-						};
-						Split1 = {
-							BuildStyleTreeTableConfiguration = (
-								IsActive,
-								16,
-								Name,
-								169,
-							);
-							Frame = "{{0, 279}, {200, 278}}";
-						};
-						SplitCount = 2;
-					};
-					Tab4 = {
-						ExecutableTreeTableConfiguration = (
-							ActiveExecutable,
-							16,
-							ExecutableName,
-							217,
-						);
-						Frame = "{{0, 0}, {250, 100}}";
-					};
-					Tab5 = {
-						BreakpointsTreeTableConfiguration = (
-							breakpointColumn,
-							197,
-							enabledColumn,
-							31,
-						);
-						Frame = "{{0, 0}, {250, 100}}";
-					};
-					TabCount = 6;
-					TabsVisible = YES;
-				};
-				StatusViewVisible = YES;
-				Template = F5CA7ECC015C09990DCA290F;
-				ToolbarVisible = YES;
-				WindowLocation = "{13, 212}";
-			};
-			"PBXTemplateGeometry-F5E465990156DFB90DCA290F" = {
-				ContentSize = "{352, 553}";
-				LeftSlideOut = {
-					ActiveTab = 0;
-					Collapsed = YES;
-					Frame = "{{0, 23}, {352, 530}}";
-					Split0 = {
-						Collapsed = NO;
-						Frame = "{{1e+06, 1e+06}, {0, 530}}";
-						Split0 = {
-							Frame = "{{0, 0}, {0, 530}}";
-						};
-						SplitCount = 1;
-						Tab0 = {
-							Debugger = {
-								Collapsed = NO;
-								Frame = "{{0, 0}, {484, 208}}";
-								Split0 = {
-									Frame = "{{0, 24}, {484, 184}}";
-									Split0 = {
-										Frame = "{{0, 0}, {236, 184}}";
-									};
-									Split1 = {
-										DebugVariablesTableConfiguration = (
-											Name,
-											123,
-											Value,
-											85,
-											Summary,
-											62.123,
-										);
-										Frame = "{{245, 0}, {239, 184}}";
-									};
-									SplitCount = 2;
-								};
-								SplitCount = 1;
-								Tab0 = {
-									Frame = "{{0, 0}, {100, 50}}";
-								};
-								Tab1 = {
-									Frame = "{{0, 0}, {100, 50}}";
-								};
-								TabCount = 2;
-								TabsVisible = YES;
-							};
-							Frame = "{{0, 0}, {484, 208}}";
-							LauncherConfigVersion = 7;
-						};
-						Tab1 = {
-							Frame = "{{0, 0}, {664, 208}}";
-							LauncherConfigVersion = 3;
-							Runner = {
-								Frame = "{{0, 0}, {664, 208}}";
-							};
-						};
-						Tab2 = {
-							BuildMessageFrame = "{{0, 0}, {666, 43}}";
-							BuildTranscriptFrame = "{{0, 52}, {666, 0}}";
-							Frame = "{{0, 0}, {664, 50}}";
-						};
-						Tab3 = {
-							Frame = "{{0, 0}, {612, 295}}";
-						};
-						TabCount = 4;
-						TabsVisible = NO;
-					};
-					SplitCount = 1;
-					Tab0 = {
-						Frame = "{{0, 0}, {328, 530}}";
-						GroupTreeTableConfiguration = (
-							TargetStatusColumn,
-							18,
-							MainColumn,
-							295,
-						);
-					};
-					Tab1 = {
-						ClassesFrame = "{{0, 0}, {343, 348}}";
-						ClassesTreeTableConfiguration = (
-							PBXBookColumnIdentifier,
-							20,
-							PBXClassColumnIdentifier,
-							300,
-						);
-						Frame = "{{0, 0}, {341, 578}}";
-						MembersFrame = "{{0, 357}, {343, 221}}";
-						MembersTreeTableConfiguration = (
-							PBXBookColumnIdentifier,
-							20,
-							PBXMethodColumnIdentifier,
-							299,
-						);
-					};
-					Tab2 = {
-						Frame = "{{0, 0}, {319, 576}}";
-					};
-					Tab3 = {
-						Frame = "{{0, 0}, {341, 578}}";
-						Split0 = {
-							Frame = "{{0, 0}, {341, 281}}";
-							TargetTreeTableConfiguration = (
-								ActiveTarget,
-								16,
-								TargetName,
-								309,
-							);
-						};
-						Split1 = {
-							BuildStyleTreeTableConfiguration = (
-								IsActive,
-								16,
-								Name,
-								310,
-							);
-							Frame = "{{0, 290}, {341, 288}}";
-						};
-						SplitCount = 2;
-					};
-					Tab4 = {
-						ExecutableTreeTableConfiguration = (
-							ActiveExecutable,
-							16,
-							ExecutableName,
-							286,
-						);
-						Frame = "{{0, 0}, {319, 576}}";
-					};
-					Tab5 = {
-						BreakpointsTreeTableConfiguration = (
-							breakpointColumn,
-							197,
-							enabledColumn,
-							31,
-						);
-						Frame = "{{0, 0}, {250, 100}}";
-					};
-					TabCount = 6;
-					TabsVisible = YES;
-				};
-				StatusViewVisible = YES;
-				Template = F5E465990156DFB90DCA290F;
-				ToolbarVisible = YES;
-				WindowLocation = "{2, 217}";
+				WindowLocation = "{420, 75}";
 			};
 			PBXWorkspaceContents = (
@@ -743,12 +154,556 @@
 						Split0 = {
 							Split0 = {
+								NavContent0 = {
+									bookmark = E1096EC203C3F504009B92C1;
+									history = (
+										E1D2937503BD418200F9204E,
+										E1D2937B03BD418200F9204E,
+										E1D2937C03BD418200F9204E,
+										E1D2937E03BD418200F9204E,
+										E1D2938303BD418200F9204E,
+										E1D2938403BD418200F9204E,
+										E1D2938503BD418200F9204E,
+										E1D2938603BD418200F9204E,
+										E1D2938903BD418200F9204E,
+										E195A26303BE251F00186F9B,
+										E195A26403BE251F00186F9B,
+										E195A26503BE251F00186F9B,
+										E195A26603BE251F00186F9B,
+										E195A26703BE251F00186F9B,
+										E195A26803BE251F00186F9B,
+										E195A26C03BE251F00186F9B,
+										E195A26D03BE251F00186F9B,
+										E195A26E03BE251F00186F9B,
+										E195A26F03BE251F00186F9B,
+										E195A27603BE251F00186F9B,
+										E195A27A03BE251F00186F9B,
+										E195A27B03BE251F00186F9B,
+										E195A27D03BE251F00186F9B,
+										E195A27E03BE251F00186F9B,
+										E195A28003BE251F00186F9B,
+										E195A28F03BE251F00186F9B,
+										E19DCB6C03BE4A0A00B934BF,
+										E19DCB7803BE4A0A00B934BF,
+										E19DCB8203BE4A0A00B934BF,
+										E19DCB8303BE4A0A00B934BF,
+										E19DCC8703BE900300B934BF,
+										E19DCC8803BE900300B934BF,
+										E19DCC8903BE900300B934BF,
+										E19DCC8A03BE900300B934BF,
+										E19DCC8B03BE900300B934BF,
+										E19DCC8C03BE900300B934BF,
+										E19DCC8E03BE900300B934BF,
+										E19DCC8F03BE900300B934BF,
+										E19DCC9203BE900300B934BF,
+										E19DCC9603BE900300B934BF,
+										E19DCC9703BE900300B934BF,
+										E19DCC9C03BE900300B934BF,
+										E19DCC9E03BE900300B934BF,
+										E1A9DEEB03BF480F0089E8B2,
+										E1A9DEEE03BF480F0089E8B2,
+										E1A9DEF003BF480F0089E8B2,
+										E1A9DEF103BF480F0089E8B2,
+										E1A9DEF203BF480F0089E8B2,
+										E11CD2CA03BF9B3300C49BEF,
+										E11CD2D003BF9B3300C49BEF,
+										E11CD2D103BF9B3300C49BEF,
+										E11CD2D203BF9B3300C49BEF,
+										E11CD2D303BF9B3300C49BEF,
+										E11CD2D403BF9B3300C49BEF,
+										E11CD2D503BF9B3300C49BEF,
+										E11CD2D603BF9B3300C49BEF,
+										E11CD2D703BF9B3300C49BEF,
+										E11CD2D803BF9B3300C49BEF,
+										E11CD2E003BF9B3300C49BEF,
+										E17AED7203C0F5D300B89ACF,
+										E17AED7303C0F5D300B89ACF,
+										E17AED7403C0F5D300B89ACF,
+										E17AED7503C0F5D300B89ACF,
+										E17AED7603C0F5D300B89ACF,
+										E17AED7703C0F5D300B89ACF,
+										E17AED7803C0F5D300B89ACF,
+										E17AED7903C0F5D300B89ACF,
+										E17AED7A03C0F5D300B89ACF,
+										E17AED7B03C0F5D300B89ACF,
+										E17AED7C03C0F5D300B89ACF,
+										E17AED7D03C0F5D300B89ACF,
+										E17AED7E03C0F5D300B89ACF,
+										E17AED7F03C0F5D300B89ACF,
+										E17AED8003C0F5D300B89ACF,
+										E17AED8103C0F5D300B89ACF,
+										E17AED8203C0F5D300B89ACF,
+										E17AED8303C0F5D300B89ACF,
+										E17AED8403C0F5D300B89ACF,
+										E17AED8503C0F5D300B89ACF,
+										E17AED8603C0F5D300B89ACF,
+										E17AED8703C0F5D300B89ACF,
+										E17AED8803C0F5D300B89ACF,
+										E17AED8903C0F5D300B89ACF,
+										E117A4AC03C3E9C600E10BA2,
+										E117A4AD03C3E9C600E10BA2,
+										E117A4AE03C3E9C600E10BA2,
+										E117A4AF03C3E9C600E10BA2,
+										E117A4B003C3E9C600E10BA2,
+										E1096EB603C3EDB0009B92C1,
+										E1096EB903C3EDB0009B92C1,
+									);
+									prevStack = (
+										E1D2939103BD418200F9204E,
+										E1D2939203BD418200F9204E,
+										E1D2939303BD418200F9204E,
+										E1D2939403BD418200F9204E,
+										E1D2939503BD418200F9204E,
+										E1D2939603BD418200F9204E,
+										E1D2939703BD418200F9204E,
+										E1D2939803BD418200F9204E,
+										E1D2939903BD418200F9204E,
+										E1D2939A03BD418200F9204E,
+										E1D2939B03BD418200F9204E,
+										E1D2939C03BD418200F9204E,
+										E1D2939D03BD418200F9204E,
+										E1D2939E03BD418200F9204E,
+										E1D2939F03BD418200F9204E,
+										E1D293A003BD418200F9204E,
+										E1D293A103BD418200F9204E,
+										E1D293A203BD418200F9204E,
+										E1D293A303BD418200F9204E,
+										E1D293A403BD418200F9204E,
+										E1D293A503BD418200F9204E,
+										E1D293A603BD418200F9204E,
+										E1D293A703BD418200F9204E,
+										E1D293A803BD418200F9204E,
+										E1D293A903BD418200F9204E,
+										E1D293AA03BD418200F9204E,
+										E1D293AB03BD418200F9204E,
+										E1D293AC03BD418200F9204E,
+										E1D293AD03BD418200F9204E,
+										E1D293AE03BD418200F9204E,
+										E1D293AF03BD418200F9204E,
+										E1D293B003BD418200F9204E,
+										E1D293B203BD418200F9204E,
+										E1D293B403BD418200F9204E,
+										E1D293B503BD418200F9204E,
+										E1D293B703BD418200F9204E,
+										E1D293B903BD418200F9204E,
+										E1D293BA03BD418200F9204E,
+										E1D293BB03BD418200F9204E,
+										E1D293BC03BD418200F9204E,
+										E1D293BD03BD418200F9204E,
+										E1D293BE03BD418200F9204E,
+										E1D293BF03BD418200F9204E,
+										E1D293C003BD418200F9204E,
+										E1D293C103BD418200F9204E,
+										E1D293C203BD418200F9204E,
+										E1D293C403BD418200F9204E,
+										E1D293C503BD418200F9204E,
+										E1D293C603BD418200F9204E,
+										E1D293C703BD418200F9204E,
+										E1D293C803BD418200F9204E,
+										E1D293C903BD418200F9204E,
+										E1D293CA03BD418200F9204E,
+										E1D293CB03BD418200F9204E,
+										E1D293CC03BD418200F9204E,
+										E1D293CD03BD418200F9204E,
+										E1D293CE03BD418200F9204E,
+										E1D293CF03BD418200F9204E,
+										E1D293D003BD418200F9204E,
+										E1D293D103BD418200F9204E,
+										E1D293D203BD418200F9204E,
+										E1D293D303BD418200F9204E,
+										E1D293D403BD418200F9204E,
+										E1D293D503BD418200F9204E,
+										E1D293D603BD418200F9204E,
+										E1D293D703BD418200F9204E,
+										E1D293D803BD418200F9204E,
+										E1D293D903BD418200F9204E,
+										E1D293DA03BD418200F9204E,
+										E1D293DB03BD418200F9204E,
+										E1D293DC03BD418200F9204E,
+										E1D293DD03BD418200F9204E,
+										E1D293DE03BD418200F9204E,
+										E1D293DF03BD418200F9204E,
+										E1D293E003BD418200F9204E,
+										E1D293E103BD418200F9204E,
+										E1D293E203BD418200F9204E,
+										E1D293E303BD418200F9204E,
+										E1D293E403BD418200F9204E,
+										E1D293E503BD418200F9204E,
+										E1D293E603BD418200F9204E,
+										E1D293E703BD418200F9204E,
+										E1D293E803BD418200F9204E,
+										E1D293E903BD418200F9204E,
+										E1D293EA03BD418200F9204E,
+										E1D293EB03BD418200F9204E,
+										E1D293EC03BD418200F9204E,
+										E1D293EE03BD418200F9204E,
+										E1D293F003BD418200F9204E,
+										E1D293F103BD418200F9204E,
+										E1D293F203BD418200F9204E,
+										E1D293F303BD418200F9204E,
+										E1D293F403BD418200F9204E,
+										E1D293F503BD418200F9204E,
+										E1D293F703BD418200F9204E,
+										E1D293F803BD418200F9204E,
+										E1D293F903BD418200F9204E,
+										E1D293FB03BD418200F9204E,
+										E1D293FC03BD418200F9204E,
+										E1D293FD03BD418200F9204E,
+										E1D293FE03BD418200F9204E,
+										E1D293FF03BD418200F9204E,
+										E1D2940003BD418200F9204E,
+										E1D2940103BD418200F9204E,
+										E1D2940203BD418200F9204E,
+										E1D2940303BD418200F9204E,
+										E1D2940403BD418200F9204E,
+										E1D2940503BD418200F9204E,
+										E1D2940603BD418200F9204E,
+										E1D2940703BD418200F9204E,
+										E1D2940803BD418200F9204E,
+										E1D2940903BD418200F9204E,
+										E1D2940A03BD418200F9204E,
+										E1D2940B03BD418200F9204E,
+										E1D2940C03BD418200F9204E,
+										E1D2940D03BD418200F9204E,
+										E1D2940E03BD418200F9204E,
+										E1D2940F03BD418200F9204E,
+										E1D2941003BD418200F9204E,
+										E1D2941103BD418200F9204E,
+										E1D2941203BD418200F9204E,
+										E1D2941303BD418200F9204E,
+										E1D2941403BD418200F9204E,
+										E1D2941503BD418200F9204E,
+										E1D2941603BD418200F9204E,
+										E1D2941703BD418200F9204E,
+										E1D2941803BD418200F9204E,
+										E1D2941903BD418200F9204E,
+										E1D2941A03BD418200F9204E,
+										E1D2941B03BD418200F9204E,
+										E1D2941C03BD418200F9204E,
+										E1D2941D03BD418200F9204E,
+										E1D2941E03BD418200F9204E,
+										E1D2941F03BD418200F9204E,
+										E1D2942003BD418200F9204E,
+										E1D2942103BD418200F9204E,
+										E1D2942203BD418200F9204E,
+										E1D2942303BD418200F9204E,
+										E1D2942403BD418200F9204E,
+										E1D2942503BD418200F9204E,
+										E1D2942603BD418200F9204E,
+										E1D2942703BD418200F9204E,
+										E1D2942803BD418200F9204E,
+										E1D2942903BD418200F9204E,
+										E1D2942A03BD418200F9204E,
+										E1D2942B03BD418200F9204E,
+										E1D2942C03BD418200F9204E,
+										E1D2942D03BD418200F9204E,
+										E1D2942E03BD418200F9204E,
+										E1D2942F03BD418200F9204E,
+										E1D2943003BD418200F9204E,
+										E1D2943103BD418200F9204E,
+										E1D2943203BD418200F9204E,
+										E1D2943303BD418200F9204E,
+										E1D2943403BD418200F9204E,
+										E1D2943503BD418200F9204E,
+										E1D2943603BD418200F9204E,
+										E1D2943703BD418200F9204E,
+										E1D2943803BD418200F9204E,
+										E1D2943903BD418200F9204E,
+										E195A29103BE251F00186F9B,
+										E195A29203BE251F00186F9B,
+										E195A29503BE251F00186F9B,
+										E195A29603BE251F00186F9B,
+										E195A29703BE251F00186F9B,
+										E195A29803BE251F00186F9B,
+										E195A29903BE251F00186F9B,
+										E195A29A03BE251F00186F9B,
+										E195A29D03BE251F00186F9B,
+										E195A29E03BE251F00186F9B,
+										E195A29F03BE251F00186F9B,
+										E195A2A003BE251F00186F9B,
+										E195A2A103BE251F00186F9B,
+										E195A2A203BE251F00186F9B,
+										E195A2A303BE251F00186F9B,
+										E195A2A503BE251F00186F9B,
+										E195A2A603BE251F00186F9B,
+										E195A2A703BE251F00186F9B,
+										E195A2A803BE251F00186F9B,
+										E195A2A903BE251F00186F9B,
+										E195A2AA03BE251F00186F9B,
+										E195A2AC03BE251F00186F9B,
+										E195A2AD03BE251F00186F9B,
+										E195A2AE03BE251F00186F9B,
+										E195A2AF03BE251F00186F9B,
+										E195A2B003BE251F00186F9B,
+										E195A2B103BE251F00186F9B,
+										E195A2B203BE251F00186F9B,
+										E195A2B303BE251F00186F9B,
+										E195A2B403BE251F00186F9B,
+										E195A2B503BE251F00186F9B,
+										E195A2B603BE251F00186F9B,
+										E195A2B703BE251F00186F9B,
+										E195A2B803BE251F00186F9B,
+										E195A2B903BE251F00186F9B,
+										E195A2BA03BE251F00186F9B,
+										E195A2BB03BE251F00186F9B,
+										E195A2BC03BE251F00186F9B,
+										E195A2BD03BE251F00186F9B,
+										E195A2BE03BE251F00186F9B,
+										E195A2C103BE251F00186F9B,
+										E195A2C203BE251F00186F9B,
+										E195A2C303BE251F00186F9B,
+										E195A2C403BE251F00186F9B,
+										E195A2C503BE251F00186F9B,
+										E195A2C603BE251F00186F9B,
+										E195A2C703BE251F00186F9B,
+										E195A2C803BE251F00186F9B,
+										E195A2C903BE251F00186F9B,
+										E195A2CA03BE251F00186F9B,
+										E195A2CB03BE251F00186F9B,
+										E195A2CD03BE251F00186F9B,
+										E195A2CF03BE251F00186F9B,
+										E195A2D103BE251F00186F9B,
+										E195A2D303BE251F00186F9B,
+										E195A2D503BE251F00186F9B,
+										E195A2D703BE251F00186F9B,
+										E195A2D903BE251F00186F9B,
+										E195A2DB03BE251F00186F9B,
+										E195A2DD03BE251F00186F9B,
+										E195A2DF03BE251F00186F9B,
+										E195A2E003BE251F00186F9B,
+										E195A2E103BE251F00186F9B,
+										E195A2E203BE251F00186F9B,
+										E195A2E303BE251F00186F9B,
+										E195A2E403BE251F00186F9B,
+										E195A2E503BE251F00186F9B,
+										E195A2E603BE251F00186F9B,
+										E195A2E803BE251F00186F9B,
+										E195A2E903BE251F00186F9B,
+										E195A2EA03BE251F00186F9B,
+										E195A2EB03BE251F00186F9B,
+										E195A2EC03BE251F00186F9B,
+										E195A2ED03BE251F00186F9B,
+										E195A2EE03BE251F00186F9B,
+										E195A2F003BE251F00186F9B,
+										E195A2F103BE251F00186F9B,
+										E195A2F303BE251F00186F9B,
+										E195A2F403BE251F00186F9B,
+										E195A2F503BE251F00186F9B,
+										E195A2F603BE251F00186F9B,
+										E195A2F703BE251F00186F9B,
+										E195A2F803BE251F00186F9B,
+										E195A2F903BE251F00186F9B,
+										E195A2FA03BE251F00186F9B,
+										E195A2FC03BE251F00186F9B,
+										E195A2FE03BE251F00186F9B,
+										E19DCB8503BE4A0A00B934BF,
+										E19DCB8603BE4A0A00B934BF,
+										E19DCB8703BE4A0A00B934BF,
+										E19DCB8903BE4A0A00B934BF,
+										E19DCB8A03BE4A0A00B934BF,
+										E19DCB8B03BE4A0A00B934BF,
+										E19DCB8C03BE4A0A00B934BF,
+										E19DCB8E03BE4A0A00B934BF,
+										E19DCB9003BE4A0A00B934BF,
+										E19DCB9103BE4A0A00B934BF,
+										E19DCB9303BE4A0A00B934BF,
+										E19DCB9403BE4A0A00B934BF,
+										E19DCB9503BE4A0A00B934BF,
+										E19DCB9603BE4A0A00B934BF,
+										E19DCB9703BE4A0A00B934BF,
+										E19DCB9803BE4A0A00B934BF,
+										E19DCB9903BE4A0A00B934BF,
+										E19DCB9A03BE4A0A00B934BF,
+										E19DCB9B03BE4A0A00B934BF,
+										E19DCB9C03BE4A0A00B934BF,
+										E19DCB9D03BE4A0A00B934BF,
+										E19DCB9E03BE4A0A00B934BF,
+										E19DCB9F03BE4A0A00B934BF,
+										E19DCBA003BE4A0A00B934BF,
+										E19DCBA103BE4A0A00B934BF,
+										E19DCBA203BE4A0A00B934BF,
+										E19DCBA303BE4A0A00B934BF,
+										E19DCBA403BE4A0A00B934BF,
+										E19DCBA503BE4A0A00B934BF,
+										E19DCBA603BE4A0A00B934BF,
+										E19DCBA703BE4A0A00B934BF,
+										E19DCBA803BE4A0A00B934BF,
+										E19DCBA903BE4A0A00B934BF,
+										E19DCBAA03BE4A0A00B934BF,
+										E19DCBAB03BE4A0A00B934BF,
+										E19DCBAC03BE4A0A00B934BF,
+										E19DCBAD03BE4A0A00B934BF,
+										E19DCBAE03BE4A0A00B934BF,
+										E19DCBAF03BE4A0A00B934BF,
+										E19DCBB003BE4A0A00B934BF,
+										E19DCBB103BE4A0A00B934BF,
+										E19DCBB203BE4A0A00B934BF,
+										E19DCBB603BE4A0A00B934BF,
+										E19DCBB703BE4A0A00B934BF,
+										E19DCBB803BE4A0A00B934BF,
+										E19DCBB903BE4A0A00B934BF,
+										E19DCBBA03BE4A0A00B934BF,
+										E19DCBBB03BE4A0A00B934BF,
+										E19DCBBC03BE4A0A00B934BF,
+										E19DCBBD03BE4A0A00B934BF,
+										E19DCCA203BE900300B934BF,
+										E19DCCA303BE900300B934BF,
+										E19DCCA403BE900300B934BF,
+										E19DCCA503BE900300B934BF,
+										E19DCCA603BE900300B934BF,
+										E19DCCA703BE900300B934BF,
+										E19DCCA803BE900300B934BF,
+										E19DCCA903BE900300B934BF,
+										E19DCCAB03BE900300B934BF,
+										E19DCCAC03BE900300B934BF,
+										E19DCCAE03BE900300B934BF,
+										E19DCCAF03BE900300B934BF,
+										E19DCCB003BE900300B934BF,
+										E19DCCB103BE900300B934BF,
+										E19DCCB203BE900300B934BF,
+										E19DCCB303BE900300B934BF,
+										E19DCCB403BE900300B934BF,
+										E19DCCB503BE900300B934BF,
+										E19DCCB603BE900300B934BF,
+										E19DCCB703BE900300B934BF,
+										E19DCCB903BE900300B934BF,
+										E19DCCBA03BE900300B934BF,
+										E19DCCBB03BE900300B934BF,
+										E19DCCBC03BE900300B934BF,
+										E19DCCBD03BE900300B934BF,
+										E19DCCBE03BE900300B934BF,
+										E19DCCBF03BE900300B934BF,
+										E19DCCC003BE900300B934BF,
+										E19DCCC103BE900300B934BF,
+										E19DCCC203BE900300B934BF,
+										E19DCCC303BE900300B934BF,
+										E19DCCC403BE900300B934BF,
+										E19DCCC503BE900300B934BF,
+										E19DCCC603BE900300B934BF,
+										E19DCCC703BE900300B934BF,
+										E19DCCC803BE900300B934BF,
+										E19DCCC903BE900300B934BF,
+										E19DCCCA03BE900300B934BF,
+										E19DCCCB03BE900300B934BF,
+										E19DCCCD03BE900300B934BF,
+										E19DCCCE03BE900300B934BF,
+										E19DCCCF03BE900300B934BF,
+										E19DCCD103BE900300B934BF,
+										E19DCCD203BE900300B934BF,
+										E19DCCD403BE900300B934BF,
+										E19DCCD503BE900300B934BF,
+										E19DCCD603BE900300B934BF,
+										E19DCCD703BE900300B934BF,
+										E19DCCD803BE900300B934BF,
+										E19DCCD903BE900300B934BF,
+										E19DCCDA03BE900300B934BF,
+										E19DCCDB03BE900300B934BF,
+										E1A9DEF703BF480F0089E8B2,
+										E1A9DEF903BF480F0089E8B2,
+										E1A9DEFB03BF480F0089E8B2,
+										E1A9DEFC03BF480F0089E8B2,
+										E1A9DEFD03BF480F0089E8B2,
+										E1A9DEFE03BF480F0089E8B2,
+										E1A9DF0003BF480F0089E8B2,
+										E1A9DF0203BF480F0089E8B2,
+										E1A9DF0303BF480F0089E8B2,
+										E1A9DF0403BF480F0089E8B2,
+										E1A9DF0503BF480F0089E8B2,
+										E1A9DF0603BF480F0089E8B2,
+										E1A9DF0703BF480F0089E8B2,
+										E1A9DF0803BF480F0089E8B2,
+										E1A9DF0A03BF480F0089E8B2,
+										E11CD2E303BF9B3300C49BEF,
+										E11CD2E503BF9B3300C49BEF,
+										E11CD2E603BF9B3300C49BEF,
+										E11CD2E703BF9B3300C49BEF,
+										E11CD2E803BF9B3300C49BEF,
+										E11CD2E903BF9B3300C49BEF,
+										E11CD2EA03BF9B3300C49BEF,
+										E11CD2EB03BF9B3300C49BEF,
+										E11CD2EC03BF9B3300C49BEF,
+										E11CD2ED03BF9B3300C49BEF,
+										E11CD2EE03BF9B3300C49BEF,
+										E11CD2EF03BF9B3300C49BEF,
+										E11CD2F603BF9B3300C49BEF,
+										E11CD2F803BF9B3300C49BEF,
+										E11CD2FB03BF9B3300C49BEF,
+										E17AED8B03C0F5D300B89ACF,
+										E17AED8C03C0F5D300B89ACF,
+										E17AED8D03C0F5D300B89ACF,
+										E17AED8E03C0F5D300B89ACF,
+										E17AED8F03C0F5D300B89ACF,
+										E17AED9003C0F5D300B89ACF,
+										E17AED9103C0F5D300B89ACF,
+										E17AED9203C0F5D300B89ACF,
+										E17AED9303C0F5D300B89ACF,
+										E17AED9403C0F5D300B89ACF,
+										E17AED9503C0F5D300B89ACF,
+										E17AED9603C0F5D300B89ACF,
+										E17AED9703C0F5D300B89ACF,
+										E17AED9803C0F5D300B89ACF,
+										E17AED9903C0F5D300B89ACF,
+										E17AED9A03C0F5D300B89ACF,
+										E17AED9B03C0F5D300B89ACF,
+										E17AED9C03C0F5D300B89ACF,
+										E17AED9D03C0F5D300B89ACF,
+										E17AED9E03C0F5D300B89ACF,
+										E17AED9F03C0F5D300B89ACF,
+										E17AEDA003C0F5D300B89ACF,
+										E17AEDA103C0F5D300B89ACF,
+										E17AEDA203C0F5D300B89ACF,
+										E17AEDA303C0F5D300B89ACF,
+										E17AEDA403C0F5D300B89ACF,
+										E17AEDA503C0F5D300B89ACF,
+										E17AEDA603C0F5D300B89ACF,
+										E17AEDA703C0F5D300B89ACF,
+										E17AEDA803C0F5D300B89ACF,
+										E17AEDA903C0F5D300B89ACF,
+										E17AEDAA03C0F5D300B89ACF,
+										E17AEDAB03C0F5D300B89ACF,
+										E17AEDAC03C0F5D300B89ACF,
+										E17AEDAD03C0F5D300B89ACF,
+										E17AEDAE03C0F5D300B89ACF,
+										E17AEDAF03C0F5D300B89ACF,
+										E17AEDB003C0F5D300B89ACF,
+										E17AEDB103C0F5D300B89ACF,
+										E17AEDB203C0F5D300B89ACF,
+										E17AEDB303C0F5D300B89ACF,
+										E17AEDB403C0F5D300B89ACF,
+										E17AEDB503C0F5D300B89ACF,
+										E17AEDB603C0F5D300B89ACF,
+										E17AEDB703C0F5D300B89ACF,
+										E17AEDB803C0F5D300B89ACF,
+										E17AEDB903C0F5D300B89ACF,
+										E17AEDBA03C0F5D300B89ACF,
+										E17AEDBB03C0F5D300B89ACF,
+										E17AEDBC03C0F5D300B89ACF,
+										E17AEDBD03C0F5D300B89ACF,
+										E17AEDBE03C0F5D300B89ACF,
+										E17AEDBF03C0F5D300B89ACF,
+										E17AEDC003C0F5D300B89ACF,
+										E17AEDC103C0F5D300B89ACF,
+										E17AEDC203C0F5D300B89ACF,
+										E17AEDC303C0F5D300B89ACF,
+										E17AEDC403C0F5D300B89ACF,
+										E17AEDC503C0F5D300B89ACF,
+										E17AEDC603C0F5D300B89ACF,
+										E17AEDC703C0F5D300B89ACF,
+										E17AEDC803C0F5D300B89ACF,
+										E17AEDC903C0F5D300B89ACF,
+										E117A4B203C3E9C600E10BA2,
+										E117A4B303C3E9C600E10BA2,
+										E117A4B403C3E9C600E10BA2,
+										E1096EB803C3EDB0009B92C1,
+									);
+								};
 								NavCount = 1;
 								NavGeometry0 = {
-									Frame = "{{0, 0}, {150, 530}}";
+									Frame = "{{0, 0}, {689, 635}}";
 									NavBarVisible = YES;
 								};
+								NavSplitVertical = NO;
 							};
 							SplitCount = 1;
-							Tab0 = {
+							Tab1 = {
 								Debugger = {
 									Split0 = {
@@ -760,10 +715,46 @@
 								LauncherConfigVersion = 7;
 							};
-							Tab1 = {
+							Tab2 = {
 								LauncherConfigVersion = 3;
 								Runner = {
 								};
 							};
-							TabCount = 4;
+							TabCount = 5;
+						};
+						SplitCount = 1;
+						Tab1 = {
+							OptionsSetName = "Flat, project classes";
+						};
+						TabCount = 5;
+					};
+				},
+				{
+					LeftSlideOut = {
+						Split0 = {
+							Split0 = {
+								NavCount = 1;
+								NavGeometry0 = {
+									Frame = "{{0, 0}, {945, 150}}";
+									NavBarVisible = YES;
+								};
+								NavSplitVertical = NO;
+							};
+							SplitCount = 1;
+							Tab1 = {
+								Debugger = {
+									Split0 = {
+										SplitCount = 2;
+									};
+									SplitCount = 1;
+									TabCount = 2;
+								};
+								LauncherConfigVersion = 7;
+							};
+							Tab2 = {
+								LauncherConfigVersion = 3;
+								Runner = {
+								};
+							};
+							TabCount = 5;
 						};
 						SplitCount = 1;
@@ -780,10 +771,11 @@
 								NavCount = 1;
 								NavGeometry0 = {
-									Frame = "{{0, 0}, {973, 150}}";
+									Frame = "{{0, 0}, {769, 153}}";
 									NavBarVisible = YES;
 								};
+								NavSplitVertical = NO;
 							};
 							SplitCount = 1;
-							Tab0 = {
+							Tab1 = {
 								Debugger = {
 									Split0 = {
@@ -795,10 +787,10 @@
 								LauncherConfigVersion = 7;
 							};
-							Tab1 = {
+							Tab2 = {
 								LauncherConfigVersion = 3;
 								Runner = {
 								};
 							};
-							TabCount = 4;
+							TabCount = 5;
 						};
 						SplitCount = 1;
@@ -814,17 +806,25 @@
 							Split0 = {
 								NavContent0 = {
-									bookmark = F562F80B037E5D2101AEEDB1;
+									bookmark = E1096EC303C3F504009B92C1;
 									history = (
-										F5B163A5037E543A01AEEDB1,
+										E17AEDCC03C0F5D300B89ACF,
+										E117A4B803C3E9C600E10BA2,
+										E1096EBB03C3EDB0009B92C1,
+									);
+									prevStack = (
+										E17AEDCE03C0F5D300B89ACF,
+										E17AEDCF03C0F5D300B89ACF,
+										E117A4BA03C3E9C600E10BA2,
 									);
 								};
 								NavCount = 1;
 								NavGeometry0 = {
-									Frame = "{{0, 0}, {668, 621}}";
+									Frame = "{{0, 0}, {749, 201}}";
 									NavBarVisible = YES;
 								};
+								NavSplitVertical = NO;
 							};
 							SplitCount = 1;
-							Tab0 = {
+							Tab1 = {
 								Debugger = {
 									Split0 = {
@@ -836,10 +836,10 @@
 								LauncherConfigVersion = 7;
 							};
-							Tab1 = {
+							Tab2 = {
 								LauncherConfigVersion = 3;
 								Runner = {
 								};
 							};
-							TabCount = 4;
+							TabCount = 5;
 						};
 						SplitCount = 1;
@@ -854,12 +854,19 @@
 						Split0 = {
 							Split0 = {
+								NavContent0 = {
+									bookmark = E1096EC403C3F504009B92C1;
+									history = (
+										E1096EBC03C3EDB0009B92C1,
+									);
+								};
 								NavCount = 1;
 								NavGeometry0 = {
-									Frame = "{{0, 0}, {618, 150}}";
+									Frame = "{{0, 0}, {668, 621}}";
 									NavBarVisible = YES;
 								};
+								NavSplitVertical = NO;
 							};
 							SplitCount = 1;
-							Tab0 = {
+							Tab1 = {
 								Debugger = {
 									Split0 = {
@@ -871,10 +878,52 @@
 								LauncherConfigVersion = 7;
 							};
-							Tab1 = {
+							Tab2 = {
 								LauncherConfigVersion = 3;
 								Runner = {
 								};
 							};
-							TabCount = 4;
+							TabCount = 5;
+						};
+						SplitCount = 1;
+						Tab1 = {
+							OptionsSetName = "Hierarchy, all classes";
+						};
+						TabCount = 5;
+					};
+				},
+				{
+					LeftSlideOut = {
+						Split0 = {
+							Split0 = {
+								NavContent0 = {
+									bookmark = E1096EC503C3F504009B92C1;
+									history = (
+										E1096EBD03C3EDB0009B92C1,
+									);
+								};
+								NavCount = 1;
+								NavGeometry0 = {
+									Frame = "{{0, 0}, {668, 621}}";
+									NavBarVisible = YES;
+								};
+								NavSplitVertical = NO;
+							};
+							SplitCount = 1;
+							Tab1 = {
+								Debugger = {
+									Split0 = {
+										SplitCount = 2;
+									};
+									SplitCount = 1;
+									TabCount = 2;
+								};
+								LauncherConfigVersion = 7;
+							};
+							Tab2 = {
+								LauncherConfigVersion = 3;
+								Runner = {
+								};
+							};
+							TabCount = 5;
 						};
 						SplitCount = 1;
@@ -888,24 +937,28 @@
 			PBXWorkspaceGeometries = (
 				{
-					ContentSize = "{352, 553}";
+					ContentSize = "{968, 658}";
 					LeftSlideOut = {
 						ActiveTab = 0;
-						Collapsed = YES;
-						Frame = "{{0, 23}, {352, 530}}";
+						ActiveTabName = PBXGroupTreeModule;
+						Collapsed = NO;
+						Frame = "{{0, 23}, {968, 635}}";
 						Split0 = {
 							Collapsed = NO;
-							Frame = "{{1e+06, 1e+06}, {0, 530}}";
+							Frame = "{{279, 0}, {689, 635}}";
 							Split0 = {
-								Frame = "{{0, 0}, {0, 530}}";
+								Frame = "{{0, 0}, {689, 635}}";
 							};
 							SplitCount = 1;
 							Tab0 = {
+								Frame = "{{0, 0}, {681, 289}}";
+							};
+							Tab1 = {
 								Debugger = {
 									Collapsed = NO;
-									Frame = "{{0, 0}, {484, 208}}";
+									Frame = "{{0, 0}, {681, 150}}";
 									Split0 = {
-										Frame = "{{0, 24}, {484, 184}}";
+										Frame = "{{0, 24}, {681, 126}}";
 										Split0 = {
-											Frame = "{{0, 0}, {236, 184}}";
+											Frame = "{{0, 0}, {333, 126}}";
 										};
 										Split1 = {
@@ -916,7 +969,7 @@
 												85,
 												Summary,
-												62.123,
+												105.123,
 											);
-											Frame = "{{245, 0}, {239, 184}}";
+											Frame = "{{342, 0}, {339, 126}}";
 										};
 										SplitCount = 2;
@@ -932,62 +985,63 @@
 									TabsVisible = YES;
 								};
-								Frame = "{{0, 0}, {484, 208}}";
+								Frame = "{{0, 0}, {681, 120}}";
 								LauncherConfigVersion = 7;
 							};
-							Tab1 = {
-								Frame = "{{0, 0}, {664, 208}}";
+							Tab2 = {
+								Frame = "{{0, 0}, {681, 234}}";
 								LauncherConfigVersion = 3;
 								Runner = {
-									Frame = "{{0, 0}, {664, 208}}";
+									Frame = "{{0, 0}, {681, 234}}";
 								};
 							};
-							Tab2 = {
-								BuildMessageFrame = "{{0, 0}, {666, 43}}";
-								BuildTranscriptFrame = "{{0, 52}, {666, 0}}";
-								Frame = "{{0, 0}, {664, 50}}";
+							Tab3 = {
+								BuildMessageFrame = "{{0, 0}, {683, 205}}";
+								BuildTranscriptFrame = "{{0, 214}, {683, 2}}";
+								BuildTranscriptFrameExpanded = YES;
+								Frame = "{{0, 0}, {681, 238}}";
 							};
-							Tab3 = {
+							Tab4 = {
 								Frame = "{{0, 0}, {612, 295}}";
 							};
-							TabCount = 4;
+							TabCount = 5;
 							TabsVisible = NO;
 						};
 						SplitCount = 1;
 						Tab0 = {
-							Frame = "{{0, 0}, {328, 530}}";
+							Frame = "{{0, 0}, {255, 635}}";
 							GroupTreeTableConfiguration = (
 								TargetStatusColumn,
 								18,
 								MainColumn,
-								295,
+								222,
 							);
 						};
 						Tab1 = {
-							ClassesFrame = "{{0, 0}, {343, 348}}";
+							ClassesFrame = "{{0, 0}, {235, 381}}";
 							ClassesTreeTableConfiguration = (
 								PBXBookColumnIdentifier,
 								20,
 								PBXClassColumnIdentifier,
-								300,
+								192,
 							);
-							Frame = "{{0, 0}, {341, 578}}";
-							MembersFrame = "{{0, 357}, {343, 221}}";
+							Frame = "{{0, 0}, {233, 635}}";
+							MembersFrame = "{{0, 390}, {235, 245}}";
 							MembersTreeTableConfiguration = (
 								PBXBookColumnIdentifier,
 								20,
 								PBXMethodColumnIdentifier,
-								299,
+								191,
 							);
 						};
 						Tab2 = {
-							Frame = "{{0, 0}, {319, 576}}";
+							Frame = "{{0, 0}, {217, 635}}";
 						};
 						Tab3 = {
-							Frame = "{{0, 0}, {341, 578}}";
+							Frame = "{{0, 0}, {239, 554}}";
 							TargetTableConfiguration = (
 								ActiveObject,
 								16,
 								ObjectNames,
-								308.296,
+								206.296,
 							);
 						};
@@ -995,50 +1049,55 @@
 							BreakpointsTreeTableConfiguration = (
 								breakpointColumn,
-								266,
+								197,
 								enabledColumn,
 								31,
 							);
-							Frame = "{{0, 0}, {319, 576}}";
+							Frame = "{{0, 0}, {250, 635}}";
 						};
 						TabCount = 5;
 						TabsVisible = YES;
 					};
+					NavBarShownByDefault = YES;
 					StatusViewVisible = YES;
-					Template = F5E465990156DFB90DCA290F;
+					Template = 64ABBB4501FA494900185B06;
 					ToolbarVisible = YES;
-					WindowLocation = "{20, 551}";
+					WindowLocation = "{15, 105}";
 				},
 				{
-					ContentSize = "{973, 164}";
+					ContentSize = "{945, 158}";
 					LeftSlideOut = {
 						Collapsed = NO;
-						Frame = "{{0, 23}, {973, 141}}";
+						Frame = "{{0, 23}, {945, 135}}";
 						Split0 = {
 							ActiveTab = 1;
-							Collapsed = YES;
-							Frame = "{{0, 0}, {973, 141}}";
+							ActiveTabName = PBXRunSessionModule;
+							Collapsed = NO;
+							Frame = "{{0, 0}, {945, 135}}";
 							Split0 = {
-								Frame = "{{1e+06, 1e+06}, {973, 0}}";
+								Frame = "{{0, 133}, {945, 2}}";
 							};
 							SplitCount = 1;
 							Tab0 = {
+								Frame = "{{0, 0}, {804, 321}}";
+							};
+							Tab1 = {
 								Debugger = {
 									Collapsed = NO;
-									Frame = "{{0, 0}, {804, 321}}";
+									Frame = "{{0, 0}, {594, 274}}";
 									Split0 = {
-										Frame = "{{0, 24}, {804, 297}}";
+										Frame = "{{0, 24}, {594, 250}}";
 										Split0 = {
-											Frame = "{{0, 0}, {394, 297}}";
+											Frame = "{{0, 0}, {290, 250}}";
 										};
 										Split1 = {
 											DebugVariablesTableConfiguration = (
 												Name,
-												102.803,
+												123,
 												Value,
-												125.074,
+												85,
 												Summary,
-												147.123,
+												62.123,
 											);
-											Frame = "{{403, 0}, {401, 297}}";
+											Frame = "{{299, 0}, {295, 250}}";
 										};
 										SplitCount = 2;
@@ -1054,23 +1113,24 @@
 									TabsVisible = YES;
 								};
-								Frame = "{{0, 0}, {804, 321}}";
+								Frame = "{{0, 0}, {594, 274}}";
 								LauncherConfigVersion = 7;
 							};
-							Tab1 = {
-								Frame = "{{0, 0}, {973, 135}}";
+							Tab2 = {
+								Frame = "{{0, 0}, {945, 127}}";
 								LauncherConfigVersion = 3;
 								Runner = {
-									Frame = "{{0, 0}, {973, 135}}";
+									Frame = "{{0, 0}, {945, 127}}";
 								};
 							};
-							Tab2 = {
-								BuildMessageFrame = "{{0, 0}, {806, 237}}";
-								BuildTranscriptFrame = "{{0, 246}, {806, 3}}";
-								Frame = "{{0, 0}, {804, 247}}";
-							};
 							Tab3 = {
+								BuildMessageFrame = "{{0, 0}, {614, 262}}";
+								BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
+								BuildTranscriptFrameExpanded = YES;
 								Frame = "{{0, 0}, {612, 295}}";
 							};
-							TabCount = 4;
+							Tab4 = {
+								Frame = "{{0, 0}, {612, 295}}";
+							};
+							TabCount = 5;
 							TabsVisible = NO;
 						};
@@ -1126,8 +1186,267 @@
 						TabsVisible = NO;
 					};
+					NavBarShownByDefault = YES;
 					StatusViewVisible = YES;
 					Template = F5534CB2020F3F8A0DCA290F;
 					ToolbarVisible = YES;
-					WindowLocation = "{13, 43}";
+					WindowLocation = "{67, 57}";
+				},
+				{
+					ContentSize = "{769, 299}";
+					LeftSlideOut = {
+						Collapsed = NO;
+						Frame = "{{0, 23}, {769, 276}}";
+						Split0 = {
+							ActiveTab = 2;
+							ActiveTabName = PBXBuildResultsModule;
+							Collapsed = NO;
+							Frame = "{{0, 0}, {769, 276}}";
+							Split0 = {
+								Frame = "{{0, 123}, {769, 153}}";
+							};
+							SplitCount = 1;
+							Tab0 = {
+								Frame = "{{0, 0}, {952, 321}}";
+							};
+							Tab1 = {
+								Debugger = {
+									Collapsed = NO;
+									Frame = "{{0, 0}, {781, 452}}";
+									Split0 = {
+										Frame = "{{0, 24}, {781, 428}}";
+										Split0 = {
+											Frame = "{{0, 0}, {383, 428}}";
+										};
+										Split1 = {
+											DebugVariablesTableConfiguration = (
+												Name,
+												123,
+												Value,
+												85,
+												Summary,
+												155.123,
+											);
+											Frame = "{{392, 0}, {389, 428}}";
+										};
+										SplitCount = 2;
+									};
+									SplitCount = 1;
+									Tab0 = {
+										Frame = "{{0, 0}, {100, 50}}";
+									};
+									Tab1 = {
+										Frame = "{{0, 0}, {100, 50}}";
+									};
+									TabCount = 2;
+									TabsVisible = YES;
+								};
+								Frame = "{{0, 0}, {781, 452}}";
+								LauncherConfigVersion = 7;
+							};
+							Tab2 = {
+								Frame = "{{0, 0}, {685, 215}}";
+								LauncherConfigVersion = 3;
+								Runner = {
+									Frame = "{{0, 0}, {685, 215}}";
+								};
+							};
+							Tab3 = {
+								BuildMessageFrame = "{{0, 0}, {771, 84}}";
+								BuildTranscriptFrame = "{{0, 93}, {771, 2}}";
+								BuildTranscriptFrameExpanded = YES;
+								Frame = "{{0, 0}, {769, 117}}";
+							};
+							Tab4 = {
+								Frame = "{{0, 0}, {612, 295}}";
+							};
+							TabCount = 5;
+							TabsVisible = NO;
+						};
+						SplitCount = 1;
+						Tab0 = {
+							Frame = "{{0, 0}, {300, 533}}";
+							GroupTreeTableConfiguration = (
+								TargetStatusColumn,
+								18,
+								MainColumn,
+								267,
+							);
+						};
+						Tab1 = {
+							ClassesFrame = "{{0, 0}, {280, 398}}";
+							ClassesTreeTableConfiguration = (
+								PBXBookColumnIdentifier,
+								20,
+								PBXClassColumnIdentifier,
+								237,
+							);
+							Frame = "{{0, 0}, {278, 659}}";
+							MembersFrame = "{{0, 407}, {280, 252}}";
+							MembersTreeTableConfiguration = (
+								PBXBookColumnIdentifier,
+								20,
+								PBXMethodColumnIdentifier,
+								236,
+							);
+						};
+						Tab2 = {
+							Frame = "{{0, 0}, {200, 100}}";
+						};
+						Tab3 = {
+							Frame = "{{0, 0}, {200, 100}}";
+							TargetTableConfiguration = (
+								ActiveObject,
+								16,
+								ObjectNames,
+								202.296,
+							);
+						};
+						Tab4 = {
+							BreakpointsTreeTableConfiguration = (
+								breakpointColumn,
+								197,
+								enabledColumn,
+								31,
+							);
+							Frame = "{{0, 0}, {250, 100}}";
+						};
+						TabCount = 5;
+						TabsVisible = NO;
+					};
+					NavBarShownByDefault = YES;
+					StatusViewVisible = YES;
+					Template = F5314676015831810DCA290F;
+					ToolbarVisible = YES;
+					WindowLocation = "{490, 68}";
+				},
+				{
+					ContentSize = "{773, 558}";
+					LeftSlideOut = {
+						Collapsed = NO;
+						Frame = "{{0, 23}, {773, 535}}";
+						Split0 = {
+							ActiveTab = 0;
+							ActiveTabName = PBXDebugSessionModule;
+							Collapsed = NO;
+							Frame = "{{24, 0}, {749, 535}}";
+							Split0 = {
+								Frame = "{{0, 334}, {749, 201}}";
+							};
+							SplitCount = 1;
+							Tab0 = {
+								Frame = "{{0, 0}, {749, 267}}";
+							};
+							Tab1 = {
+								Debugger = {
+									ActiveTab = 0;
+									ActiveTabName = PBXDebugCLIModule;
+									Collapsed = NO;
+									Frame = "{{0, 0}, {749, 328}}";
+									Split0 = {
+										Frame = "{{0, 73}, {749, 255}}";
+										Split0 = {
+											Frame = "{{0, 0}, {367, 255}}";
+										};
+										Split1 = {
+											DebugVariablesTableConfiguration = (
+												Name,
+												123,
+												Value,
+												85,
+												Summary,
+												139.123,
+											);
+											Frame = "{{376, 0}, {373, 255}}";
+										};
+										SplitCount = 2;
+									};
+									SplitCount = 1;
+									Tab0 = {
+										Frame = "{{0, 0}, {749, 50}}";
+									};
+									Tab1 = {
+										Frame = "{{0, 0}, {749, 49}}";
+									};
+									TabCount = 2;
+									TabsVisible = YES;
+								};
+								Frame = "{{0, 0}, {749, 328}}";
+								LauncherConfigVersion = 7;
+							};
+							Tab2 = {
+								Frame = "{{0, 0}, {664, 50}}";
+								LauncherConfigVersion = 3;
+								Runner = {
+									Frame = "{{0, 0}, {664, 50}}";
+								};
+							};
+							Tab3 = {
+								BuildMessageFrame = "{{0, 0}, {614, 262}}";
+								BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
+								BuildTranscriptFrameExpanded = YES;
+								Frame = "{{0, 0}, {612, 295}}";
+							};
+							Tab4 = {
+								Frame = "{{0, 0}, {612, 295}}";
+							};
+							TabCount = 5;
+							TabsVisible = NO;
+						};
+						SplitCount = 1;
+						Tab0 = {
+							Frame = "{{0, 0}, {313, 531}}";
+							GroupTreeTableConfiguration = (
+								TargetStatusColumn,
+								18,
+								MainColumn,
+								280,
+							);
+						};
+						Tab1 = {
+							ClassesFrame = "{{0, 0}, {280, 398}}";
+							ClassesTreeTableConfiguration = (
+								PBXBookColumnIdentifier,
+								20,
+								PBXClassColumnIdentifier,
+								237,
+							);
+							Frame = "{{0, 0}, {278, 659}}";
+							MembersFrame = "{{0, 407}, {280, 252}}";
+							MembersTreeTableConfiguration = (
+								PBXBookColumnIdentifier,
+								20,
+								PBXMethodColumnIdentifier,
+								236,
+							);
+						};
+						Tab2 = {
+							Frame = "{{0, 0}, {200, 100}}";
+						};
+						Tab3 = {
+							Frame = "{{0, 0}, {200, 557}}";
+							TargetTableConfiguration = (
+								ActiveObject,
+								16,
+								ObjectNames,
+								202.296,
+							);
+						};
+						Tab4 = {
+							BreakpointsTreeTableConfiguration = (
+								breakpointColumn,
+								197,
+								enabledColumn,
+								31,
+							);
+							Frame = "{{0, 0}, {250, 100}}";
+						};
+						TabCount = 5;
+						TabsVisible = YES;
+					};
+					NavBarShownByDefault = YES;
+					StatusViewVisible = YES;
+					Template = F5CA7ECC015C09990DCA290F;
+					ToolbarVisible = YES;
+					WindowLocation = "{436, 82}";
 				},
 				{
@@ -1144,11 +1463,14 @@
 							SplitCount = 1;
 							Tab0 = {
+								Frame = "{{0, 0}, {484, 208}}";
+							};
+							Tab1 = {
 								Debugger = {
 									Collapsed = NO;
-									Frame = "{{0, 0}, {484, 208}}";
+									Frame = "{{0, 0}, {664, 208}}";
 									Split0 = {
-										Frame = "{{0, 24}, {484, 184}}";
+										Frame = "{{0, 24}, {664, 184}}";
 										Split0 = {
-											Frame = "{{0, 0}, {236, 184}}";
+											Frame = "{{0, 0}, {325, 184}}";
 										};
 										Split1 = {
@@ -1159,7 +1481,7 @@
 												85,
 												Summary,
-												62.123,
+												96.123,
 											);
-											Frame = "{{245, 0}, {239, 184}}";
+											Frame = "{{334, 0}, {330, 184}}";
 										};
 										SplitCount = 2;
@@ -1175,23 +1497,24 @@
 									TabsVisible = YES;
 								};
-								Frame = "{{0, 0}, {484, 208}}";
+								Frame = "{{0, 0}, {664, 208}}";
 								LauncherConfigVersion = 7;
 							};
-							Tab1 = {
-								Frame = "{{0, 0}, {664, 208}}";
+							Tab2 = {
+								Frame = "{{0, 0}, {664, 50}}";
 								LauncherConfigVersion = 3;
 								Runner = {
-									Frame = "{{0, 0}, {664, 208}}";
+									Frame = "{{0, 0}, {664, 50}}";
 								};
 							};
-							Tab2 = {
-								BuildMessageFrame = "{{0, 0}, {666, 43}}";
-								BuildTranscriptFrame = "{{0, 52}, {666, 0}}";
-								Frame = "{{0, 0}, {664, 50}}";
-							};
 							Tab3 = {
+								BuildMessageFrame = "{{0, 0}, {614, 262}}";
+								BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
+								BuildTranscriptFrameExpanded = YES;
 								Frame = "{{0, 0}, {612, 295}}";
 							};
-							TabCount = 4;
+							Tab4 = {
+								Frame = "{{0, 0}, {612, 295}}";
+							};
+							TabCount = 5;
 							TabsVisible = NO;
 						};
@@ -1247,41 +1570,44 @@
 						TabsVisible = NO;
 					};
+					NavBarShownByDefault = YES;
 					StatusViewVisible = NO;
 					Template = F5CA7ECB015C094F0DCA290F;
 					ToolbarVisible = NO;
-					WindowLocation = "{392, 503}";
+					WindowLocation = "{440, 73}";
 				},
 				{
-					ContentSize = "{618, 257}";
+					ContentSize = "{668, 621}";
 					LeftSlideOut = {
 						Collapsed = NO;
-						Frame = "{{0, 23}, {618, 234}}";
+						Frame = "{{0, 0}, {668, 621}}";
 						Split0 = {
-							ActiveTab = 2;
-							Collapsed = YES;
-							Frame = "{{0, 0}, {618, 234}}";
+							Collapsed = NO;
+							Frame = "{{0, 0}, {668, 621}}";
 							Split0 = {
-								Frame = "{{1e+06, 1e+06}, {618, 0}}";
+								Frame = "{{0, 0}, {668, 621}}";
 							};
 							SplitCount = 1;
 							Tab0 = {
+								Frame = "{{0, 0}, {484, 208}}";
+							};
+							Tab1 = {
 								Debugger = {
 									Collapsed = NO;
-									Frame = "{{0, 0}, {952, 321}}";
+									Frame = "{{0, 0}, {664, 208}}";
 									Split0 = {
-										Frame = "{{0, 24}, {952, 297}}";
+										Frame = "{{0, 24}, {664, 184}}";
 										Split0 = {
-											Frame = "{{0, 0}, {468, 297}}";
+											Frame = "{{0, 0}, {325, 184}}";
 										};
 										Split1 = {
 											DebugVariablesTableConfiguration = (
 												Name,
-												126.803,
+												123,
 												Value,
-												150.074,
+												85,
 												Summary,
-												172.123,
+												96.123,
 											);
-											Frame = "{{477, 0}, {475, 297}}";
+											Frame = "{{334, 0}, {330, 184}}";
 										};
 										SplitCount = 2;
@@ -1297,33 +1623,34 @@
 									TabsVisible = YES;
 								};
-								Frame = "{{0, 0}, {952, 321}}";
+								Frame = "{{0, 0}, {664, 208}}";
 								LauncherConfigVersion = 7;
 							};
-							Tab1 = {
-								Frame = "{{0, 0}, {781, 452}}";
+							Tab2 = {
+								Frame = "{{0, 0}, {664, 50}}";
 								LauncherConfigVersion = 3;
 								Runner = {
-									Frame = "{{0, 0}, {781, 452}}";
+									Frame = "{{0, 0}, {664, 50}}";
 								};
 							};
-							Tab2 = {
-								BuildMessageFrame = "{{0, 0}, {620, 123}}";
-								BuildTranscriptFrame = "{{0, 132}, {620, 98}}";
-								Frame = "{{0, 0}, {618, 228}}";
-							};
 							Tab3 = {
+								BuildMessageFrame = "{{0, 0}, {614, 262}}";
+								BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
+								BuildTranscriptFrameExpanded = YES;
 								Frame = "{{0, 0}, {612, 295}}";
 							};
-							TabCount = 4;
+							Tab4 = {
+								Frame = "{{0, 0}, {612, 295}}";
+							};
+							TabCount = 5;
 							TabsVisible = NO;
 						};
 						SplitCount = 1;
 						Tab0 = {
-							Frame = "{{0, 0}, {300, 533}}";
+							Frame = "{{0, 0}, {313, 531}}";
 							GroupTreeTableConfiguration = (
 								TargetStatusColumn,
 								18,
 								MainColumn,
-								267,
+								280,
 							);
 						};
@@ -1349,5 +1676,5 @@
 						};
 						Tab3 = {
-							Frame = "{{0, 0}, {200, 100}}";
+							Frame = "{{0, 0}, {200, 557}}";
 							TargetTableConfiguration = (
 								ActiveObject,
@@ -1369,19 +1696,566 @@
 						TabsVisible = NO;
 					};
-					StatusViewVisible = YES;
-					Template = F5314676015831810DCA290F;
-					ToolbarVisible = YES;
-					WindowLocation = "{427, 271}";
+					NavBarShownByDefault = YES;
+					StatusViewVisible = NO;
+					Template = F5CA7ECB015C094F0DCA290F;
+					ToolbarVisible = NO;
+					WindowLocation = "{208, 173}";
 				},
 			);
-			PBXWorkspaceStateSaveDate = 59271904;
+			PBXWorkspaceStateSaveDate = 63172038;
 		};
 		perUserProjectItems = {
-			F562F80B037E5D2101AEEDB1 = F562F80B037E5D2101AEEDB1;
-			F5B163A5037E543A01AEEDB1 = F5B163A5037E543A01AEEDB1;
+			E1096EB603C3EDB0009B92C1 = E1096EB603C3EDB0009B92C1;
+			E1096EB803C3EDB0009B92C1 = E1096EB803C3EDB0009B92C1;
+			E1096EB903C3EDB0009B92C1 = E1096EB903C3EDB0009B92C1;
+			E1096EBB03C3EDB0009B92C1 = E1096EBB03C3EDB0009B92C1;
+			E1096EBC03C3EDB0009B92C1 = E1096EBC03C3EDB0009B92C1;
+			E1096EBD03C3EDB0009B92C1 = E1096EBD03C3EDB0009B92C1;
+			E1096EC203C3F504009B92C1 = E1096EC203C3F504009B92C1;
+			E1096EC303C3F504009B92C1 = E1096EC303C3F504009B92C1;
+			E1096EC403C3F504009B92C1 = E1096EC403C3F504009B92C1;
+			E1096EC503C3F504009B92C1 = E1096EC503C3F504009B92C1;
+			E117A4AC03C3E9C600E10BA2 = E117A4AC03C3E9C600E10BA2;
+			E117A4AD03C3E9C600E10BA2 = E117A4AD03C3E9C600E10BA2;
+			E117A4AE03C3E9C600E10BA2 = E117A4AE03C3E9C600E10BA2;
+			E117A4AF03C3E9C600E10BA2 = E117A4AF03C3E9C600E10BA2;
+			E117A4B003C3E9C600E10BA2 = E117A4B003C3E9C600E10BA2;
+			E117A4B203C3E9C600E10BA2 = E117A4B203C3E9C600E10BA2;
+			E117A4B303C3E9C600E10BA2 = E117A4B303C3E9C600E10BA2;
+			E117A4B403C3E9C600E10BA2 = E117A4B403C3E9C600E10BA2;
+			E117A4B803C3E9C600E10BA2 = E117A4B803C3E9C600E10BA2;
+			E117A4BA03C3E9C600E10BA2 = E117A4BA03C3E9C600E10BA2;
+			E11CD2CA03BF9B3300C49BEF = E11CD2CA03BF9B3300C49BEF;
+			E11CD2D003BF9B3300C49BEF = E11CD2D003BF9B3300C49BEF;
+			E11CD2D103BF9B3300C49BEF = E11CD2D103BF9B3300C49BEF;
+			E11CD2D203BF9B3300C49BEF = E11CD2D203BF9B3300C49BEF;
+			E11CD2D303BF9B3300C49BEF = E11CD2D303BF9B3300C49BEF;
+			E11CD2D403BF9B3300C49BEF = E11CD2D403BF9B3300C49BEF;
+			E11CD2D503BF9B3300C49BEF = E11CD2D503BF9B3300C49BEF;
+			E11CD2D603BF9B3300C49BEF = E11CD2D603BF9B3300C49BEF;
+			E11CD2D703BF9B3300C49BEF = E11CD2D703BF9B3300C49BEF;
+			E11CD2D803BF9B3300C49BEF = E11CD2D803BF9B3300C49BEF;
+			E11CD2E003BF9B3300C49BEF = E11CD2E003BF9B3300C49BEF;
+			E11CD2E303BF9B3300C49BEF = E11CD2E303BF9B3300C49BEF;
+			E11CD2E503BF9B3300C49BEF = E11CD2E503BF9B3300C49BEF;
+			E11CD2E603BF9B3300C49BEF = E11CD2E603BF9B3300C49BEF;
+			E11CD2E703BF9B3300C49BEF = E11CD2E703BF9B3300C49BEF;
+			E11CD2E803BF9B3300C49BEF = E11CD2E803BF9B3300C49BEF;
+			E11CD2E903BF9B3300C49BEF = E11CD2E903BF9B3300C49BEF;
+			E11CD2EA03BF9B3300C49BEF = E11CD2EA03BF9B3300C49BEF;
+			E11CD2EB03BF9B3300C49BEF = E11CD2EB03BF9B3300C49BEF;
+			E11CD2EC03BF9B3300C49BEF = E11CD2EC03BF9B3300C49BEF;
+			E11CD2ED03BF9B3300C49BEF = E11CD2ED03BF9B3300C49BEF;
+			E11CD2EE03BF9B3300C49BEF = E11CD2EE03BF9B3300C49BEF;
+			E11CD2EF03BF9B3300C49BEF = E11CD2EF03BF9B3300C49BEF;
+			E11CD2F603BF9B3300C49BEF = E11CD2F603BF9B3300C49BEF;
+			E11CD2F803BF9B3300C49BEF = E11CD2F803BF9B3300C49BEF;
+			E11CD2FB03BF9B3300C49BEF = E11CD2FB03BF9B3300C49BEF;
+			E17AED7203C0F5D300B89ACF = E17AED7203C0F5D300B89ACF;
+			E17AED7303C0F5D300B89ACF = E17AED7303C0F5D300B89ACF;
+			E17AED7403C0F5D300B89ACF = E17AED7403C0F5D300B89ACF;
+			E17AED7503C0F5D300B89ACF = E17AED7503C0F5D300B89ACF;
+			E17AED7603C0F5D300B89ACF = E17AED7603C0F5D300B89ACF;
+			E17AED7703C0F5D300B89ACF = E17AED7703C0F5D300B89ACF;
+			E17AED7803C0F5D300B89ACF = E17AED7803C0F5D300B89ACF;
+			E17AED7903C0F5D300B89ACF = E17AED7903C0F5D300B89ACF;
+			E17AED7A03C0F5D300B89ACF = E17AED7A03C0F5D300B89ACF;
+			E17AED7B03C0F5D300B89ACF = E17AED7B03C0F5D300B89ACF;
+			E17AED7C03C0F5D300B89ACF = E17AED7C03C0F5D300B89ACF;
+			E17AED7D03C0F5D300B89ACF = E17AED7D03C0F5D300B89ACF;
+			E17AED7E03C0F5D300B89ACF = E17AED7E03C0F5D300B89ACF;
+			E17AED7F03C0F5D300B89ACF = E17AED7F03C0F5D300B89ACF;
+			E17AED8003C0F5D300B89ACF = E17AED8003C0F5D300B89ACF;
+			E17AED8103C0F5D300B89ACF = E17AED8103C0F5D300B89ACF;
+			E17AED8203C0F5D300B89ACF = E17AED8203C0F5D300B89ACF;
+			E17AED8303C0F5D300B89ACF = E17AED8303C0F5D300B89ACF;
+			E17AED8403C0F5D300B89ACF = E17AED8403C0F5D300B89ACF;
+			E17AED8503C0F5D300B89ACF = E17AED8503C0F5D300B89ACF;
+			E17AED8603C0F5D300B89ACF = E17AED8603C0F5D300B89ACF;
+			E17AED8703C0F5D300B89ACF = E17AED8703C0F5D300B89ACF;
+			E17AED8803C0F5D300B89ACF = E17AED8803C0F5D300B89ACF;
+			E17AED8903C0F5D300B89ACF = E17AED8903C0F5D300B89ACF;
+			E17AED8B03C0F5D300B89ACF = E17AED8B03C0F5D300B89ACF;
+			E17AED8C03C0F5D300B89ACF = E17AED8C03C0F5D300B89ACF;
+			E17AED8D03C0F5D300B89ACF = E17AED8D03C0F5D300B89ACF;
+			E17AED8E03C0F5D300B89ACF = E17AED8E03C0F5D300B89ACF;
+			E17AED8F03C0F5D300B89ACF = E17AED8F03C0F5D300B89ACF;
+			E17AED9003C0F5D300B89ACF = E17AED9003C0F5D300B89ACF;
+			E17AED9103C0F5D300B89ACF = E17AED9103C0F5D300B89ACF;
+			E17AED9203C0F5D300B89ACF = E17AED9203C0F5D300B89ACF;
+			E17AED9303C0F5D300B89ACF = E17AED9303C0F5D300B89ACF;
+			E17AED9403C0F5D300B89ACF = E17AED9403C0F5D300B89ACF;
+			E17AED9503C0F5D300B89ACF = E17AED9503C0F5D300B89ACF;
+			E17AED9603C0F5D300B89ACF = E17AED9603C0F5D300B89ACF;
+			E17AED9703C0F5D300B89ACF = E17AED9703C0F5D300B89ACF;
+			E17AED9803C0F5D300B89ACF = E17AED9803C0F5D300B89ACF;
+			E17AED9903C0F5D300B89ACF = E17AED9903C0F5D300B89ACF;
+			E17AED9A03C0F5D300B89ACF = E17AED9A03C0F5D300B89ACF;
+			E17AED9B03C0F5D300B89ACF = E17AED9B03C0F5D300B89ACF;
+			E17AED9C03C0F5D300B89ACF = E17AED9C03C0F5D300B89ACF;
+			E17AED9D03C0F5D300B89ACF = E17AED9D03C0F5D300B89ACF;
+			E17AED9E03C0F5D300B89ACF = E17AED9E03C0F5D300B89ACF;
+			E17AED9F03C0F5D300B89ACF = E17AED9F03C0F5D300B89ACF;
+			E17AEDA003C0F5D300B89ACF = E17AEDA003C0F5D300B89ACF;
+			E17AEDA103C0F5D300B89ACF = E17AEDA103C0F5D300B89ACF;
+			E17AEDA203C0F5D300B89ACF = E17AEDA203C0F5D300B89ACF;
+			E17AEDA303C0F5D300B89ACF = E17AEDA303C0F5D300B89ACF;
+			E17AEDA403C0F5D300B89ACF = E17AEDA403C0F5D300B89ACF;
+			E17AEDA503C0F5D300B89ACF = E17AEDA503C0F5D300B89ACF;
+			E17AEDA603C0F5D300B89ACF = E17AEDA603C0F5D300B89ACF;
+			E17AEDA703C0F5D300B89ACF = E17AEDA703C0F5D300B89ACF;
+			E17AEDA803C0F5D300B89ACF = E17AEDA803C0F5D300B89ACF;
+			E17AEDA903C0F5D300B89ACF = E17AEDA903C0F5D300B89ACF;
+			E17AEDAA03C0F5D300B89ACF = E17AEDAA03C0F5D300B89ACF;
+			E17AEDAB03C0F5D300B89ACF = E17AEDAB03C0F5D300B89ACF;
+			E17AEDAC03C0F5D300B89ACF = E17AEDAC03C0F5D300B89ACF;
+			E17AEDAD03C0F5D300B89ACF = E17AEDAD03C0F5D300B89ACF;
+			E17AEDAE03C0F5D300B89ACF = E17AEDAE03C0F5D300B89ACF;
+			E17AEDAF03C0F5D300B89ACF = E17AEDAF03C0F5D300B89ACF;
+			E17AEDB003C0F5D300B89ACF = E17AEDB003C0F5D300B89ACF;
+			E17AEDB103C0F5D300B89ACF = E17AEDB103C0F5D300B89ACF;
+			E17AEDB203C0F5D300B89ACF = E17AEDB203C0F5D300B89ACF;
+			E17AEDB303C0F5D300B89ACF = E17AEDB303C0F5D300B89ACF;
+			E17AEDB403C0F5D300B89ACF = E17AEDB403C0F5D300B89ACF;
+			E17AEDB503C0F5D300B89ACF = E17AEDB503C0F5D300B89ACF;
+			E17AEDB603C0F5D300B89ACF = E17AEDB603C0F5D300B89ACF;
+			E17AEDB703C0F5D300B89ACF = E17AEDB703C0F5D300B89ACF;
+			E17AEDB803C0F5D300B89ACF = E17AEDB803C0F5D300B89ACF;
+			E17AEDB903C0F5D300B89ACF = E17AEDB903C0F5D300B89ACF;
+			E17AEDBA03C0F5D300B89ACF = E17AEDBA03C0F5D300B89ACF;
+			E17AEDBB03C0F5D300B89ACF = E17AEDBB03C0F5D300B89ACF;
+			E17AEDBC03C0F5D300B89ACF = E17AEDBC03C0F5D300B89ACF;
+			E17AEDBD03C0F5D300B89ACF = E17AEDBD03C0F5D300B89ACF;
+			E17AEDBE03C0F5D300B89ACF = E17AEDBE03C0F5D300B89ACF;
+			E17AEDBF03C0F5D300B89ACF = E17AEDBF03C0F5D300B89ACF;
+			E17AEDC003C0F5D300B89ACF = E17AEDC003C0F5D300B89ACF;
+			E17AEDC103C0F5D300B89ACF = E17AEDC103C0F5D300B89ACF;
+			E17AEDC203C0F5D300B89ACF = E17AEDC203C0F5D300B89ACF;
+			E17AEDC303C0F5D300B89ACF = E17AEDC303C0F5D300B89ACF;
+			E17AEDC403C0F5D300B89ACF = E17AEDC403C0F5D300B89ACF;
+			E17AEDC503C0F5D300B89ACF = E17AEDC503C0F5D300B89ACF;
+			E17AEDC603C0F5D300B89ACF = E17AEDC603C0F5D300B89ACF;
+			E17AEDC703C0F5D300B89ACF = E17AEDC703C0F5D300B89ACF;
+			E17AEDC803C0F5D300B89ACF = E17AEDC803C0F5D300B89ACF;
+			E17AEDC903C0F5D300B89ACF = E17AEDC903C0F5D300B89ACF;
+			E17AEDCC03C0F5D300B89ACF = E17AEDCC03C0F5D300B89ACF;
+			E17AEDCE03C0F5D300B89ACF = E17AEDCE03C0F5D300B89ACF;
+			E17AEDCF03C0F5D300B89ACF = E17AEDCF03C0F5D300B89ACF;
+			E195A26303BE251F00186F9B = E195A26303BE251F00186F9B;
+			E195A26403BE251F00186F9B = E195A26403BE251F00186F9B;
+			E195A26503BE251F00186F9B = E195A26503BE251F00186F9B;
+			E195A26603BE251F00186F9B = E195A26603BE251F00186F9B;
+			E195A26703BE251F00186F9B = E195A26703BE251F00186F9B;
+			E195A26803BE251F00186F9B = E195A26803BE251F00186F9B;
+			E195A26C03BE251F00186F9B = E195A26C03BE251F00186F9B;
+			E195A26D03BE251F00186F9B = E195A26D03BE251F00186F9B;
+			E195A26E03BE251F00186F9B = E195A26E03BE251F00186F9B;
+			E195A26F03BE251F00186F9B = E195A26F03BE251F00186F9B;
+			E195A27603BE251F00186F9B = E195A27603BE251F00186F9B;
+			E195A27A03BE251F00186F9B = E195A27A03BE251F00186F9B;
+			E195A27B03BE251F00186F9B = E195A27B03BE251F00186F9B;
+			E195A27D03BE251F00186F9B = E195A27D03BE251F00186F9B;
+			E195A27E03BE251F00186F9B = E195A27E03BE251F00186F9B;
+			E195A28003BE251F00186F9B = E195A28003BE251F00186F9B;
+			E195A28F03BE251F00186F9B = E195A28F03BE251F00186F9B;
+			E195A29103BE251F00186F9B = E195A29103BE251F00186F9B;
+			E195A29203BE251F00186F9B = E195A29203BE251F00186F9B;
+			E195A29503BE251F00186F9B = E195A29503BE251F00186F9B;
+			E195A29603BE251F00186F9B = E195A29603BE251F00186F9B;
+			E195A29703BE251F00186F9B = E195A29703BE251F00186F9B;
+			E195A29803BE251F00186F9B = E195A29803BE251F00186F9B;
+			E195A29903BE251F00186F9B = E195A29903BE251F00186F9B;
+			E195A29A03BE251F00186F9B = E195A29A03BE251F00186F9B;
+			E195A29D03BE251F00186F9B = E195A29D03BE251F00186F9B;
+			E195A29E03BE251F00186F9B = E195A29E03BE251F00186F9B;
+			E195A29F03BE251F00186F9B = E195A29F03BE251F00186F9B;
+			E195A2A003BE251F00186F9B = E195A2A003BE251F00186F9B;
+			E195A2A103BE251F00186F9B = E195A2A103BE251F00186F9B;
+			E195A2A203BE251F00186F9B = E195A2A203BE251F00186F9B;
+			E195A2A303BE251F00186F9B = E195A2A303BE251F00186F9B;
+			E195A2A503BE251F00186F9B = E195A2A503BE251F00186F9B;
+			E195A2A603BE251F00186F9B = E195A2A603BE251F00186F9B;
+			E195A2A703BE251F00186F9B = E195A2A703BE251F00186F9B;
+			E195A2A803BE251F00186F9B = E195A2A803BE251F00186F9B;
+			E195A2A903BE251F00186F9B = E195A2A903BE251F00186F9B;
+			E195A2AA03BE251F00186F9B = E195A2AA03BE251F00186F9B;
+			E195A2AC03BE251F00186F9B = E195A2AC03BE251F00186F9B;
+			E195A2AD03BE251F00186F9B = E195A2AD03BE251F00186F9B;
+			E195A2AE03BE251F00186F9B = E195A2AE03BE251F00186F9B;
+			E195A2AF03BE251F00186F9B = E195A2AF03BE251F00186F9B;
+			E195A2B003BE251F00186F9B = E195A2B003BE251F00186F9B;
+			E195A2B103BE251F00186F9B = E195A2B103BE251F00186F9B;
+			E195A2B203BE251F00186F9B = E195A2B203BE251F00186F9B;
+			E195A2B303BE251F00186F9B = E195A2B303BE251F00186F9B;
+			E195A2B403BE251F00186F9B = E195A2B403BE251F00186F9B;
+			E195A2B503BE251F00186F9B = E195A2B503BE251F00186F9B;
+			E195A2B603BE251F00186F9B = E195A2B603BE251F00186F9B;
+			E195A2B703BE251F00186F9B = E195A2B703BE251F00186F9B;
+			E195A2B803BE251F00186F9B = E195A2B803BE251F00186F9B;
+			E195A2B903BE251F00186F9B = E195A2B903BE251F00186F9B;
+			E195A2BA03BE251F00186F9B = E195A2BA03BE251F00186F9B;
+			E195A2BB03BE251F00186F9B = E195A2BB03BE251F00186F9B;
+			E195A2BC03BE251F00186F9B = E195A2BC03BE251F00186F9B;
+			E195A2BD03BE251F00186F9B = E195A2BD03BE251F00186F9B;
+			E195A2BE03BE251F00186F9B = E195A2BE03BE251F00186F9B;
+			E195A2C103BE251F00186F9B = E195A2C103BE251F00186F9B;
+			E195A2C203BE251F00186F9B = E195A2C203BE251F00186F9B;
+			E195A2C303BE251F00186F9B = E195A2C303BE251F00186F9B;
+			E195A2C403BE251F00186F9B = E195A2C403BE251F00186F9B;
+			E195A2C503BE251F00186F9B = E195A2C503BE251F00186F9B;
+			E195A2C603BE251F00186F9B = E195A2C603BE251F00186F9B;
+			E195A2C703BE251F00186F9B = E195A2C703BE251F00186F9B;
+			E195A2C803BE251F00186F9B = E195A2C803BE251F00186F9B;
+			E195A2C903BE251F00186F9B = E195A2C903BE251F00186F9B;
+			E195A2CA03BE251F00186F9B = E195A2CA03BE251F00186F9B;
+			E195A2CB03BE251F00186F9B = E195A2CB03BE251F00186F9B;
+			E195A2CD03BE251F00186F9B = E195A2CD03BE251F00186F9B;
+			E195A2CF03BE251F00186F9B = E195A2CF03BE251F00186F9B;
+			E195A2D103BE251F00186F9B = E195A2D103BE251F00186F9B;
+			E195A2D303BE251F00186F9B = E195A2D303BE251F00186F9B;
+			E195A2D503BE251F00186F9B = E195A2D503BE251F00186F9B;
+			E195A2D703BE251F00186F9B = E195A2D703BE251F00186F9B;
+			E195A2D903BE251F00186F9B = E195A2D903BE251F00186F9B;
+			E195A2DB03BE251F00186F9B = E195A2DB03BE251F00186F9B;
+			E195A2DD03BE251F00186F9B = E195A2DD03BE251F00186F9B;
+			E195A2DF03BE251F00186F9B = E195A2DF03BE251F00186F9B;
+			E195A2E003BE251F00186F9B = E195A2E003BE251F00186F9B;
+			E195A2E103BE251F00186F9B = E195A2E103BE251F00186F9B;
+			E195A2E203BE251F00186F9B = E195A2E203BE251F00186F9B;
+			E195A2E303BE251F00186F9B = E195A2E303BE251F00186F9B;
+			E195A2E403BE251F00186F9B = E195A2E403BE251F00186F9B;
+			E195A2E503BE251F00186F9B = E195A2E503BE251F00186F9B;
+			E195A2E603BE251F00186F9B = E195A2E603BE251F00186F9B;
+			E195A2E803BE251F00186F9B = E195A2E803BE251F00186F9B;
+			E195A2E903BE251F00186F9B = E195A2E903BE251F00186F9B;
+			E195A2EA03BE251F00186F9B = E195A2EA03BE251F00186F9B;
+			E195A2EB03BE251F00186F9B = E195A2EB03BE251F00186F9B;
+			E195A2EC03BE251F00186F9B = E195A2EC03BE251F00186F9B;
+			E195A2ED03BE251F00186F9B = E195A2ED03BE251F00186F9B;
+			E195A2EE03BE251F00186F9B = E195A2EE03BE251F00186F9B;
+			E195A2F003BE251F00186F9B = E195A2F003BE251F00186F9B;
+			E195A2F103BE251F00186F9B = E195A2F103BE251F00186F9B;
+			E195A2F303BE251F00186F9B = E195A2F303BE251F00186F9B;
+			E195A2F403BE251F00186F9B = E195A2F403BE251F00186F9B;
+			E195A2F503BE251F00186F9B = E195A2F503BE251F00186F9B;
+			E195A2F603BE251F00186F9B = E195A2F603BE251F00186F9B;
+			E195A2F703BE251F00186F9B = E195A2F703BE251F00186F9B;
+			E195A2F803BE251F00186F9B = E195A2F803BE251F00186F9B;
+			E195A2F903BE251F00186F9B = E195A2F903BE251F00186F9B;
+			E195A2FA03BE251F00186F9B = E195A2FA03BE251F00186F9B;
+			E195A2FC03BE251F00186F9B = E195A2FC03BE251F00186F9B;
+			E195A2FE03BE251F00186F9B = E195A2FE03BE251F00186F9B;
+			E19DCB6C03BE4A0A00B934BF = E19DCB6C03BE4A0A00B934BF;
+			E19DCB7803BE4A0A00B934BF = E19DCB7803BE4A0A00B934BF;
+			E19DCB8203BE4A0A00B934BF = E19DCB8203BE4A0A00B934BF;
+			E19DCB8303BE4A0A00B934BF = E19DCB8303BE4A0A00B934BF;
+			E19DCB8503BE4A0A00B934BF = E19DCB8503BE4A0A00B934BF;
+			E19DCB8603BE4A0A00B934BF = E19DCB8603BE4A0A00B934BF;
+			E19DCB8703BE4A0A00B934BF = E19DCB8703BE4A0A00B934BF;
+			E19DCB8903BE4A0A00B934BF = E19DCB8903BE4A0A00B934BF;
+			E19DCB8A03BE4A0A00B934BF = E19DCB8A03BE4A0A00B934BF;
+			E19DCB8B03BE4A0A00B934BF = E19DCB8B03BE4A0A00B934BF;
+			E19DCB8C03BE4A0A00B934BF = E19DCB8C03BE4A0A00B934BF;
+			E19DCB8E03BE4A0A00B934BF = E19DCB8E03BE4A0A00B934BF;
+			E19DCB9003BE4A0A00B934BF = E19DCB9003BE4A0A00B934BF;
+			E19DCB9103BE4A0A00B934BF = E19DCB9103BE4A0A00B934BF;
+			E19DCB9303BE4A0A00B934BF = E19DCB9303BE4A0A00B934BF;
+			E19DCB9403BE4A0A00B934BF = E19DCB9403BE4A0A00B934BF;
+			E19DCB9503BE4A0A00B934BF = E19DCB9503BE4A0A00B934BF;
+			E19DCB9603BE4A0A00B934BF = E19DCB9603BE4A0A00B934BF;
+			E19DCB9703BE4A0A00B934BF = E19DCB9703BE4A0A00B934BF;
+			E19DCB9803BE4A0A00B934BF = E19DCB9803BE4A0A00B934BF;
+			E19DCB9903BE4A0A00B934BF = E19DCB9903BE4A0A00B934BF;
+			E19DCB9A03BE4A0A00B934BF = E19DCB9A03BE4A0A00B934BF;
+			E19DCB9B03BE4A0A00B934BF = E19DCB9B03BE4A0A00B934BF;
+			E19DCB9C03BE4A0A00B934BF = E19DCB9C03BE4A0A00B934BF;
+			E19DCB9D03BE4A0A00B934BF = E19DCB9D03BE4A0A00B934BF;
+			E19DCB9E03BE4A0A00B934BF = E19DCB9E03BE4A0A00B934BF;
+			E19DCB9F03BE4A0A00B934BF = E19DCB9F03BE4A0A00B934BF;
+			E19DCBA003BE4A0A00B934BF = E19DCBA003BE4A0A00B934BF;
+			E19DCBA103BE4A0A00B934BF = E19DCBA103BE4A0A00B934BF;
+			E19DCBA203BE4A0A00B934BF = E19DCBA203BE4A0A00B934BF;
+			E19DCBA303BE4A0A00B934BF = E19DCBA303BE4A0A00B934BF;
+			E19DCBA403BE4A0A00B934BF = E19DCBA403BE4A0A00B934BF;
+			E19DCBA503BE4A0A00B934BF = E19DCBA503BE4A0A00B934BF;
+			E19DCBA603BE4A0A00B934BF = E19DCBA603BE4A0A00B934BF;
+			E19DCBA703BE4A0A00B934BF = E19DCBA703BE4A0A00B934BF;
+			E19DCBA803BE4A0A00B934BF = E19DCBA803BE4A0A00B934BF;
+			E19DCBA903BE4A0A00B934BF = E19DCBA903BE4A0A00B934BF;
+			E19DCBAA03BE4A0A00B934BF = E19DCBAA03BE4A0A00B934BF;
+			E19DCBAB03BE4A0A00B934BF = E19DCBAB03BE4A0A00B934BF;
+			E19DCBAC03BE4A0A00B934BF = E19DCBAC03BE4A0A00B934BF;
+			E19DCBAD03BE4A0A00B934BF = E19DCBAD03BE4A0A00B934BF;
+			E19DCBAE03BE4A0A00B934BF = E19DCBAE03BE4A0A00B934BF;
+			E19DCBAF03BE4A0A00B934BF = E19DCBAF03BE4A0A00B934BF;
+			E19DCBB003BE4A0A00B934BF = E19DCBB003BE4A0A00B934BF;
+			E19DCBB103BE4A0A00B934BF = E19DCBB103BE4A0A00B934BF;
+			E19DCBB203BE4A0A00B934BF = E19DCBB203BE4A0A00B934BF;
+			E19DCBB603BE4A0A00B934BF = E19DCBB603BE4A0A00B934BF;
+			E19DCBB703BE4A0A00B934BF = E19DCBB703BE4A0A00B934BF;
+			E19DCBB803BE4A0A00B934BF = E19DCBB803BE4A0A00B934BF;
+			E19DCBB903BE4A0A00B934BF = E19DCBB903BE4A0A00B934BF;
+			E19DCBBA03BE4A0A00B934BF = E19DCBBA03BE4A0A00B934BF;
+			E19DCBBB03BE4A0A00B934BF = E19DCBBB03BE4A0A00B934BF;
+			E19DCBBC03BE4A0A00B934BF = E19DCBBC03BE4A0A00B934BF;
+			E19DCBBD03BE4A0A00B934BF = E19DCBBD03BE4A0A00B934BF;
+			E19DCC8703BE900300B934BF = E19DCC8703BE900300B934BF;
+			E19DCC8803BE900300B934BF = E19DCC8803BE900300B934BF;
+			E19DCC8903BE900300B934BF = E19DCC8903BE900300B934BF;
+			E19DCC8A03BE900300B934BF = E19DCC8A03BE900300B934BF;
+			E19DCC8B03BE900300B934BF = E19DCC8B03BE900300B934BF;
+			E19DCC8C03BE900300B934BF = E19DCC8C03BE900300B934BF;
+			E19DCC8E03BE900300B934BF = E19DCC8E03BE900300B934BF;
+			E19DCC8F03BE900300B934BF = E19DCC8F03BE900300B934BF;
+			E19DCC9203BE900300B934BF = E19DCC9203BE900300B934BF;
+			E19DCC9603BE900300B934BF = E19DCC9603BE900300B934BF;
+			E19DCC9703BE900300B934BF = E19DCC9703BE900300B934BF;
+			E19DCC9C03BE900300B934BF = E19DCC9C03BE900300B934BF;
+			E19DCC9E03BE900300B934BF = E19DCC9E03BE900300B934BF;
+			E19DCCA203BE900300B934BF = E19DCCA203BE900300B934BF;
+			E19DCCA303BE900300B934BF = E19DCCA303BE900300B934BF;
+			E19DCCA403BE900300B934BF = E19DCCA403BE900300B934BF;
+			E19DCCA503BE900300B934BF = E19DCCA503BE900300B934BF;
+			E19DCCA603BE900300B934BF = E19DCCA603BE900300B934BF;
+			E19DCCA703BE900300B934BF = E19DCCA703BE900300B934BF;
+			E19DCCA803BE900300B934BF = E19DCCA803BE900300B934BF;
+			E19DCCA903BE900300B934BF = E19DCCA903BE900300B934BF;
+			E19DCCAB03BE900300B934BF = E19DCCAB03BE900300B934BF;
+			E19DCCAC03BE900300B934BF = E19DCCAC03BE900300B934BF;
+			E19DCCAE03BE900300B934BF = E19DCCAE03BE900300B934BF;
+			E19DCCAF03BE900300B934BF = E19DCCAF03BE900300B934BF;
+			E19DCCB003BE900300B934BF = E19DCCB003BE900300B934BF;
+			E19DCCB103BE900300B934BF = E19DCCB103BE900300B934BF;
+			E19DCCB203BE900300B934BF = E19DCCB203BE900300B934BF;
+			E19DCCB303BE900300B934BF = E19DCCB303BE900300B934BF;
+			E19DCCB403BE900300B934BF = E19DCCB403BE900300B934BF;
+			E19DCCB503BE900300B934BF = E19DCCB503BE900300B934BF;
+			E19DCCB603BE900300B934BF = E19DCCB603BE900300B934BF;
+			E19DCCB703BE900300B934BF = E19DCCB703BE900300B934BF;
+			E19DCCB903BE900300B934BF = E19DCCB903BE900300B934BF;
+			E19DCCBA03BE900300B934BF = E19DCCBA03BE900300B934BF;
+			E19DCCBB03BE900300B934BF = E19DCCBB03BE900300B934BF;
+			E19DCCBC03BE900300B934BF = E19DCCBC03BE900300B934BF;
+			E19DCCBD03BE900300B934BF = E19DCCBD03BE900300B934BF;
+			E19DCCBE03BE900300B934BF = E19DCCBE03BE900300B934BF;
+			E19DCCBF03BE900300B934BF = E19DCCBF03BE900300B934BF;
+			E19DCCC003BE900300B934BF = E19DCCC003BE900300B934BF;
+			E19DCCC103BE900300B934BF = E19DCCC103BE900300B934BF;
+			E19DCCC203BE900300B934BF = E19DCCC203BE900300B934BF;
+			E19DCCC303BE900300B934BF = E19DCCC303BE900300B934BF;
+			E19DCCC403BE900300B934BF = E19DCCC403BE900300B934BF;
+			E19DCCC503BE900300B934BF = E19DCCC503BE900300B934BF;
+			E19DCCC603BE900300B934BF = E19DCCC603BE900300B934BF;
+			E19DCCC703BE900300B934BF = E19DCCC703BE900300B934BF;
+			E19DCCC803BE900300B934BF = E19DCCC803BE900300B934BF;
+			E19DCCC903BE900300B934BF = E19DCCC903BE900300B934BF;
+			E19DCCCA03BE900300B934BF = E19DCCCA03BE900300B934BF;
+			E19DCCCB03BE900300B934BF = E19DCCCB03BE900300B934BF;
+			E19DCCCD03BE900300B934BF = E19DCCCD03BE900300B934BF;
+			E19DCCCE03BE900300B934BF = E19DCCCE03BE900300B934BF;
+			E19DCCCF03BE900300B934BF = E19DCCCF03BE900300B934BF;
+			E19DCCD103BE900300B934BF = E19DCCD103BE900300B934BF;
+			E19DCCD203BE900300B934BF = E19DCCD203BE900300B934BF;
+			E19DCCD403BE900300B934BF = E19DCCD403BE900300B934BF;
+			E19DCCD503BE900300B934BF = E19DCCD503BE900300B934BF;
+			E19DCCD603BE900300B934BF = E19DCCD603BE900300B934BF;
+			E19DCCD703BE900300B934BF = E19DCCD703BE900300B934BF;
+			E19DCCD803BE900300B934BF = E19DCCD803BE900300B934BF;
+			E19DCCD903BE900300B934BF = E19DCCD903BE900300B934BF;
+			E19DCCDA03BE900300B934BF = E19DCCDA03BE900300B934BF;
+			E19DCCDB03BE900300B934BF = E19DCCDB03BE900300B934BF;
+			E1A9DEEB03BF480F0089E8B2 = E1A9DEEB03BF480F0089E8B2;
+			E1A9DEEE03BF480F0089E8B2 = E1A9DEEE03BF480F0089E8B2;
+			E1A9DEF003BF480F0089E8B2 = E1A9DEF003BF480F0089E8B2;
+			E1A9DEF103BF480F0089E8B2 = E1A9DEF103BF480F0089E8B2;
+			E1A9DEF203BF480F0089E8B2 = E1A9DEF203BF480F0089E8B2;
+			E1A9DEF703BF480F0089E8B2 = E1A9DEF703BF480F0089E8B2;
+			E1A9DEF903BF480F0089E8B2 = E1A9DEF903BF480F0089E8B2;
+			E1A9DEFB03BF480F0089E8B2 = E1A9DEFB03BF480F0089E8B2;
+			E1A9DEFC03BF480F0089E8B2 = E1A9DEFC03BF480F0089E8B2;
+			E1A9DEFD03BF480F0089E8B2 = E1A9DEFD03BF480F0089E8B2;
+			E1A9DEFE03BF480F0089E8B2 = E1A9DEFE03BF480F0089E8B2;
+			E1A9DF0003BF480F0089E8B2 = E1A9DF0003BF480F0089E8B2;
+			E1A9DF0203BF480F0089E8B2 = E1A9DF0203BF480F0089E8B2;
+			E1A9DF0303BF480F0089E8B2 = E1A9DF0303BF480F0089E8B2;
+			E1A9DF0403BF480F0089E8B2 = E1A9DF0403BF480F0089E8B2;
+			E1A9DF0503BF480F0089E8B2 = E1A9DF0503BF480F0089E8B2;
+			E1A9DF0603BF480F0089E8B2 = E1A9DF0603BF480F0089E8B2;
+			E1A9DF0703BF480F0089E8B2 = E1A9DF0703BF480F0089E8B2;
+			E1A9DF0803BF480F0089E8B2 = E1A9DF0803BF480F0089E8B2;
+			E1A9DF0A03BF480F0089E8B2 = E1A9DF0A03BF480F0089E8B2;
+			E1D2937503BD418200F9204E = E1D2937503BD418200F9204E;
+			E1D2937B03BD418200F9204E = E1D2937B03BD418200F9204E;
+			E1D2937C03BD418200F9204E = E1D2937C03BD418200F9204E;
+			E1D2937E03BD418200F9204E = E1D2937E03BD418200F9204E;
+			E1D2938303BD418200F9204E = E1D2938303BD418200F9204E;
+			E1D2938403BD418200F9204E = E1D2938403BD418200F9204E;
+			E1D2938503BD418200F9204E = E1D2938503BD418200F9204E;
+			E1D2938603BD418200F9204E = E1D2938603BD418200F9204E;
+			E1D2938903BD418200F9204E = E1D2938903BD418200F9204E;
+			E1D2939103BD418200F9204E = E1D2939103BD418200F9204E;
+			E1D2939203BD418200F9204E = E1D2939203BD418200F9204E;
+			E1D2939303BD418200F9204E = E1D2939303BD418200F9204E;
+			E1D2939403BD418200F9204E = E1D2939403BD418200F9204E;
+			E1D2939503BD418200F9204E = E1D2939503BD418200F9204E;
+			E1D2939603BD418200F9204E = E1D2939603BD418200F9204E;
+			E1D2939703BD418200F9204E = E1D2939703BD418200F9204E;
+			E1D2939803BD418200F9204E = E1D2939803BD418200F9204E;
+			E1D2939903BD418200F9204E = E1D2939903BD418200F9204E;
+			E1D2939A03BD418200F9204E = E1D2939A03BD418200F9204E;
+			E1D2939B03BD418200F9204E = E1D2939B03BD418200F9204E;
+			E1D2939C03BD418200F9204E = E1D2939C03BD418200F9204E;
+			E1D2939D03BD418200F9204E = E1D2939D03BD418200F9204E;
+			E1D2939E03BD418200F9204E = E1D2939E03BD418200F9204E;
+			E1D2939F03BD418200F9204E = E1D2939F03BD418200F9204E;
+			E1D293A003BD418200F9204E = E1D293A003BD418200F9204E;
+			E1D293A103BD418200F9204E = E1D293A103BD418200F9204E;
+			E1D293A203BD418200F9204E = E1D293A203BD418200F9204E;
+			E1D293A303BD418200F9204E = E1D293A303BD418200F9204E;
+			E1D293A403BD418200F9204E = E1D293A403BD418200F9204E;
+			E1D293A503BD418200F9204E = E1D293A503BD418200F9204E;
+			E1D293A603BD418200F9204E = E1D293A603BD418200F9204E;
+			E1D293A703BD418200F9204E = E1D293A703BD418200F9204E;
+			E1D293A803BD418200F9204E = E1D293A803BD418200F9204E;
+			E1D293A903BD418200F9204E = E1D293A903BD418200F9204E;
+			E1D293AA03BD418200F9204E = E1D293AA03BD418200F9204E;
+			E1D293AB03BD418200F9204E = E1D293AB03BD418200F9204E;
+			E1D293AC03BD418200F9204E = E1D293AC03BD418200F9204E;
+			E1D293AD03BD418200F9204E = E1D293AD03BD418200F9204E;
+			E1D293AE03BD418200F9204E = E1D293AE03BD418200F9204E;
+			E1D293AF03BD418200F9204E = E1D293AF03BD418200F9204E;
+			E1D293B003BD418200F9204E = E1D293B003BD418200F9204E;
+			E1D293B203BD418200F9204E = E1D293B203BD418200F9204E;
+			E1D293B403BD418200F9204E = E1D293B403BD418200F9204E;
+			E1D293B503BD418200F9204E = E1D293B503BD418200F9204E;
+			E1D293B703BD418200F9204E = E1D293B703BD418200F9204E;
+			E1D293B903BD418200F9204E = E1D293B903BD418200F9204E;
+			E1D293BA03BD418200F9204E = E1D293BA03BD418200F9204E;
+			E1D293BB03BD418200F9204E = E1D293BB03BD418200F9204E;
+			E1D293BC03BD418200F9204E = E1D293BC03BD418200F9204E;
+			E1D293BD03BD418200F9204E = E1D293BD03BD418200F9204E;
+			E1D293BE03BD418200F9204E = E1D293BE03BD418200F9204E;
+			E1D293BF03BD418200F9204E = E1D293BF03BD418200F9204E;
+			E1D293C003BD418200F9204E = E1D293C003BD418200F9204E;
+			E1D293C103BD418200F9204E = E1D293C103BD418200F9204E;
+			E1D293C203BD418200F9204E = E1D293C203BD418200F9204E;
+			E1D293C403BD418200F9204E = E1D293C403BD418200F9204E;
+			E1D293C503BD418200F9204E = E1D293C503BD418200F9204E;
+			E1D293C603BD418200F9204E = E1D293C603BD418200F9204E;
+			E1D293C703BD418200F9204E = E1D293C703BD418200F9204E;
+			E1D293C803BD418200F9204E = E1D293C803BD418200F9204E;
+			E1D293C903BD418200F9204E = E1D293C903BD418200F9204E;
+			E1D293CA03BD418200F9204E = E1D293CA03BD418200F9204E;
+			E1D293CB03BD418200F9204E = E1D293CB03BD418200F9204E;
+			E1D293CC03BD418200F9204E = E1D293CC03BD418200F9204E;
+			E1D293CD03BD418200F9204E = E1D293CD03BD418200F9204E;
+			E1D293CE03BD418200F9204E = E1D293CE03BD418200F9204E;
+			E1D293CF03BD418200F9204E = E1D293CF03BD418200F9204E;
+			E1D293D003BD418200F9204E = E1D293D003BD418200F9204E;
+			E1D293D103BD418200F9204E = E1D293D103BD418200F9204E;
+			E1D293D203BD418200F9204E = E1D293D203BD418200F9204E;
+			E1D293D303BD418200F9204E = E1D293D303BD418200F9204E;
+			E1D293D403BD418200F9204E = E1D293D403BD418200F9204E;
+			E1D293D503BD418200F9204E = E1D293D503BD418200F9204E;
+			E1D293D603BD418200F9204E = E1D293D603BD418200F9204E;
+			E1D293D703BD418200F9204E = E1D293D703BD418200F9204E;
+			E1D293D803BD418200F9204E = E1D293D803BD418200F9204E;
+			E1D293D903BD418200F9204E = E1D293D903BD418200F9204E;
+			E1D293DA03BD418200F9204E = E1D293DA03BD418200F9204E;
+			E1D293DB03BD418200F9204E = E1D293DB03BD418200F9204E;
+			E1D293DC03BD418200F9204E = E1D293DC03BD418200F9204E;
+			E1D293DD03BD418200F9204E = E1D293DD03BD418200F9204E;
+			E1D293DE03BD418200F9204E = E1D293DE03BD418200F9204E;
+			E1D293DF03BD418200F9204E = E1D293DF03BD418200F9204E;
+			E1D293E003BD418200F9204E = E1D293E003BD418200F9204E;
+			E1D293E103BD418200F9204E = E1D293E103BD418200F9204E;
+			E1D293E203BD418200F9204E = E1D293E203BD418200F9204E;
+			E1D293E303BD418200F9204E = E1D293E303BD418200F9204E;
+			E1D293E403BD418200F9204E = E1D293E403BD418200F9204E;
+			E1D293E503BD418200F9204E = E1D293E503BD418200F9204E;
+			E1D293E603BD418200F9204E = E1D293E603BD418200F9204E;
+			E1D293E703BD418200F9204E = E1D293E703BD418200F9204E;
+			E1D293E803BD418200F9204E = E1D293E803BD418200F9204E;
+			E1D293E903BD418200F9204E = E1D293E903BD418200F9204E;
+			E1D293EA03BD418200F9204E = E1D293EA03BD418200F9204E;
+			E1D293EB03BD418200F9204E = E1D293EB03BD418200F9204E;
+			E1D293EC03BD418200F9204E = E1D293EC03BD418200F9204E;
+			E1D293EE03BD418200F9204E = E1D293EE03BD418200F9204E;
+			E1D293F003BD418200F9204E = E1D293F003BD418200F9204E;
+			E1D293F103BD418200F9204E = E1D293F103BD418200F9204E;
+			E1D293F203BD418200F9204E = E1D293F203BD418200F9204E;
+			E1D293F303BD418200F9204E = E1D293F303BD418200F9204E;
+			E1D293F403BD418200F9204E = E1D293F403BD418200F9204E;
+			E1D293F503BD418200F9204E = E1D293F503BD418200F9204E;
+			E1D293F703BD418200F9204E = E1D293F703BD418200F9204E;
+			E1D293F803BD418200F9204E = E1D293F803BD418200F9204E;
+			E1D293F903BD418200F9204E = E1D293F903BD418200F9204E;
+			E1D293FB03BD418200F9204E = E1D293FB03BD418200F9204E;
+			E1D293FC03BD418200F9204E = E1D293FC03BD418200F9204E;
+			E1D293FD03BD418200F9204E = E1D293FD03BD418200F9204E;
+			E1D293FE03BD418200F9204E = E1D293FE03BD418200F9204E;
+			E1D293FF03BD418200F9204E = E1D293FF03BD418200F9204E;
+			E1D2940003BD418200F9204E = E1D2940003BD418200F9204E;
+			E1D2940103BD418200F9204E = E1D2940103BD418200F9204E;
+			E1D2940203BD418200F9204E = E1D2940203BD418200F9204E;
+			E1D2940303BD418200F9204E = E1D2940303BD418200F9204E;
+			E1D2940403BD418200F9204E = E1D2940403BD418200F9204E;
+			E1D2940503BD418200F9204E = E1D2940503BD418200F9204E;
+			E1D2940603BD418200F9204E = E1D2940603BD418200F9204E;
+			E1D2940703BD418200F9204E = E1D2940703BD418200F9204E;
+			E1D2940803BD418200F9204E = E1D2940803BD418200F9204E;
+			E1D2940903BD418200F9204E = E1D2940903BD418200F9204E;
+			E1D2940A03BD418200F9204E = E1D2940A03BD418200F9204E;
+			E1D2940B03BD418200F9204E = E1D2940B03BD418200F9204E;
+			E1D2940C03BD418200F9204E = E1D2940C03BD418200F9204E;
+			E1D2940D03BD418200F9204E = E1D2940D03BD418200F9204E;
+			E1D2940E03BD418200F9204E = E1D2940E03BD418200F9204E;
+			E1D2940F03BD418200F9204E = E1D2940F03BD418200F9204E;
+			E1D2941003BD418200F9204E = E1D2941003BD418200F9204E;
+			E1D2941103BD418200F9204E = E1D2941103BD418200F9204E;
+			E1D2941203BD418200F9204E = E1D2941203BD418200F9204E;
+			E1D2941303BD418200F9204E = E1D2941303BD418200F9204E;
+			E1D2941403BD418200F9204E = E1D2941403BD418200F9204E;
+			E1D2941503BD418200F9204E = E1D2941503BD418200F9204E;
+			E1D2941603BD418200F9204E = E1D2941603BD418200F9204E;
+			E1D2941703BD418200F9204E = E1D2941703BD418200F9204E;
+			E1D2941803BD418200F9204E = E1D2941803BD418200F9204E;
+			E1D2941903BD418200F9204E = E1D2941903BD418200F9204E;
+			E1D2941A03BD418200F9204E = E1D2941A03BD418200F9204E;
+			E1D2941B03BD418200F9204E = E1D2941B03BD418200F9204E;
+			E1D2941C03BD418200F9204E = E1D2941C03BD418200F9204E;
+			E1D2941D03BD418200F9204E = E1D2941D03BD418200F9204E;
+			E1D2941E03BD418200F9204E = E1D2941E03BD418200F9204E;
+			E1D2941F03BD418200F9204E = E1D2941F03BD418200F9204E;
+			E1D2942003BD418200F9204E = E1D2942003BD418200F9204E;
+			E1D2942103BD418200F9204E = E1D2942103BD418200F9204E;
+			E1D2942203BD418200F9204E = E1D2942203BD418200F9204E;
+			E1D2942303BD418200F9204E = E1D2942303BD418200F9204E;
+			E1D2942403BD418200F9204E = E1D2942403BD418200F9204E;
+			E1D2942503BD418200F9204E = E1D2942503BD418200F9204E;
+			E1D2942603BD418200F9204E = E1D2942603BD418200F9204E;
+			E1D2942703BD418200F9204E = E1D2942703BD418200F9204E;
+			E1D2942803BD418200F9204E = E1D2942803BD418200F9204E;
+			E1D2942903BD418200F9204E = E1D2942903BD418200F9204E;
+			E1D2942A03BD418200F9204E = E1D2942A03BD418200F9204E;
+			E1D2942B03BD418200F9204E = E1D2942B03BD418200F9204E;
+			E1D2942C03BD418200F9204E = E1D2942C03BD418200F9204E;
+			E1D2942D03BD418200F9204E = E1D2942D03BD418200F9204E;
+			E1D2942E03BD418200F9204E = E1D2942E03BD418200F9204E;
+			E1D2942F03BD418200F9204E = E1D2942F03BD418200F9204E;
+			E1D2943003BD418200F9204E = E1D2943003BD418200F9204E;
+			E1D2943103BD418200F9204E = E1D2943103BD418200F9204E;
+			E1D2943203BD418200F9204E = E1D2943203BD418200F9204E;
+			E1D2943303BD418200F9204E = E1D2943303BD418200F9204E;
+			E1D2943403BD418200F9204E = E1D2943403BD418200F9204E;
+			E1D2943503BD418200F9204E = E1D2943503BD418200F9204E;
+			E1D2943603BD418200F9204E = E1D2943603BD418200F9204E;
+			E1D2943703BD418200F9204E = E1D2943703BD418200F9204E;
+			E1D2943803BD418200F9204E = E1D2943803BD418200F9204E;
+			E1D2943903BD418200F9204E = E1D2943903BD418200F9204E;
 		};
 		projectwideBuildSettings = {
 		};
-		userBookmarkGroup = F59DC6D20353C43201AEEDB1;
+		userBookmarkGroup = E130B91603B69C6300000028;
 		wantsIndex = 1;
 		wantsSCM = -1;
@@ -1393,4 +2267,5886 @@
 		);
 	};
+	E1096EB603C3EDB0009B92C1 = {
+		fRef = F589C9C6035AA12B0155F4B2;
+		isa = PBXTextBookmark;
+		name = "Read Me.rtfd: 77";
+		rLen = 0;
+		rLoc = 4965;
+		rType = 0;
+		vrLen = 2641;
+		vrLoc = 6972;
+	};
+	E1096EB803C3EDB0009B92C1 = {
+		fRef = F589C9C6035AA12B0155F4B2;
+		isa = PBXTextBookmark;
+		name = "Read Me.rtfd: 77";
+		rLen = 0;
+		rLoc = 4965;
+		rType = 0;
+		vrLen = 2641;
+		vrLoc = 6972;
+	};
+	E1096EB903C3EDB0009B92C1 = {
+		isa = PBXTargetBookmark;
+		trg = 29B97326FDCFA39411CA2CEA;
+	};
+	E1096EBB03C3EDB0009B92C1 = {
+		fRef = F59DC6D40353C9E601AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmSetController.m: 505";
+		rLen = 0;
+		rLoc = 22304;
+		rType = 0;
+		vrLen = 301;
+		vrLoc = 22122;
+	};
+	E1096EBC03C3EDB0009B92C1 = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 45";
+		rLen = 0;
+		rLoc = 1694;
+		rType = 0;
+		vrLen = 1555;
+		vrLoc = 3251;
+	};
+	E1096EBD03C3EDB0009B92C1 = {
+		fRef = F59DC6D40353C9E601AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmSetController.m: 489";
+		rLen = 0;
+		rLoc = 21925;
+		rType = 0;
+		vrLen = 1118;
+		vrLoc = 21572;
+	};
+	E1096EC203C3F504009B92C1 = {
+		isa = PBXTargetBookmark;
+		trg = 29B97326FDCFA39411CA2CEA;
+		uiCtxt = {
+			TOCViewDetailVisibleRect = "{{0, 0}, {467, 233}}";
+			TOCViewExpandedItems = (
+				"com.apple.target-editor-pane.settings",
+				"com.apple.target-editor-pane.settings.simple",
+				"com.apple.target-editor-pane.info-plist",
+				"com.apple.target-editor-pane.info-plist.simple",
+				"com.apple.target-editor-pane.buildphases",
+			);
+			TOCViewMasterVisibleRect = "{{0, 0}, {183, 581}}";
+			TOCViewSelectedItems = (
+				PBXTargetSummarySettingsModule,
+			);
+		};
+	};
+	E1096EC303C3F504009B92C1 = {
+		fRef = F59DC6D40353C9E601AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmSetController.m: 505";
+		rLen = 0;
+		rLoc = 22304;
+		rType = 0;
+		vrLen = 301;
+		vrLoc = 22122;
+	};
+	E1096EC403C3F504009B92C1 = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 45";
+		rLen = 0;
+		rLoc = 1694;
+		rType = 0;
+		vrLen = 1555;
+		vrLoc = 3251;
+	};
+	E1096EC503C3F504009B92C1 = {
+		fRef = F59DC6D40353C9E601AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmSetController.m: 489";
+		rLen = 0;
+		rLoc = 21925;
+		rType = 0;
+		vrLen = 1144;
+		vrLoc = 21278;
+	};
+	E1156BFA03C148E2006717DC = {
+		fileReference = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXFileBreakpoint;
+		lineNumber = 485;
+		state = 1;
+	};
+	E1156C2C03C394D6006717DC = {
+		fileReference = F59DC6D40353C9E601AEEDB1;
+		isa = PBXFileBreakpoint;
+		lineNumber = 477;
+		state = 1;
+	};
+	E1156C2D03C39718006717DC = {
+		fRef = E13919E303B9E4E100000028;
+		isa = PBXTextBookmark;
+		name = "NJRIntervalField.m: 71";
+		rLen = 115;
+		rLoc = 2331;
+		rType = 0;
+		vrLen = 1900;
+		vrLoc = 1587;
+	};
+	E117A4AB03C3E2FD00E10BA2 = {
+		fileReference = F59DC6D40353C9E601AEEDB1;
+		isa = PBXFileBreakpoint;
+		lineNumber = 502;
+		state = 1;
+	};
+	E117A4AC03C3E9C600E10BA2 = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: 94";
+		rLen = 0;
+		rLoc = 2296;
+		rType = 0;
+		vrLen = 877;
+		vrLoc = 0;
+	};
+	E117A4AD03C3E9C600E10BA2 = {
+		fRef = E117A4C003C3E9C600E10BA2;
+		isa = PBXTextBookmark;
+		name = "NSObject.h: 23";
+		rLen = 0;
+		rLoc = 456;
+		rType = 0;
+		vrLen = 928;
+		vrLoc = 0;
+	};
+	E117A4AE03C3E9C600E10BA2 = {
+		fRef = E117A4C103C3E9C600E10BA2;
+		glyphRangeLength = 1836;
+		glyphRangeLocation = 27611;
+		isa = PBXDocBookmark;
+		name = "NSControl.html: controlTextD...";
+	};
+	E117A4AF03C3E9C600E10BA2 = {
+		fRef = E117A4C203C3E9C600E10BA2;
+		isa = PBXTextBookmark;
+		name = "NSControl.h: 121";
+		rLen = 81;
+		rLoc = 3801;
+		rType = 0;
+		vrLen = 1658;
+		vrLoc = 2392;
+	};
+	E117A4B003C3E9C600E10BA2 = {
+		fRef = E13919E303B9E4E100000028;
+		isa = PBXTextBookmark;
+		name = "NJRIntervalField.m: 137";
+		rLen = 0;
+		rLoc = 6239;
+		rType = 0;
+		vrLen = 2083;
+		vrLoc = 4886;
+	};
+	E117A4B203C3E9C600E10BA2 = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: 94";
+		rLen = 0;
+		rLoc = 2296;
+		rType = 0;
+		vrLen = 877;
+		vrLoc = 0;
+	};
+	E117A4B303C3E9C600E10BA2 = {
+		fRef = F589C9C6035AA12B0155F4B2;
+		isa = PBXTextBookmark;
+		name = "Read Me.rtfd: 131";
+		rLen = 0;
+		rLoc = 11177;
+		rType = 0;
+		vrLen = 2754;
+		vrLoc = 7422;
+	};
+	E117A4B403C3E9C600E10BA2 = {
+		fRef = E13919E303B9E4E100000028;
+		isa = PBXTextBookmark;
+		name = "NJRIntervalField.m: 137";
+		rLen = 0;
+		rLoc = 6239;
+		rType = 0;
+		vrLen = 2083;
+		vrLoc = 4886;
+	};
+	E117A4B803C3E9C600E10BA2 = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: 47";
+		rLen = 0;
+		rLoc = 933;
+		rType = 0;
+		vrLen = 332;
+		vrLoc = 854;
+	};
+	E117A4BA03C3E9C600E10BA2 = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: 47";
+		rLen = 0;
+		rLoc = 933;
+		rType = 0;
+		vrLen = 332;
+		vrLoc = 854;
+	};
+	E117A4C003C3E9C600E10BA2 = {
+		isa = PBXFileReference;
+		name = NSObject.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSObject.h;
+		refType = 0;
+	};
+	E117A4C103C3E9C600E10BA2 = {
+		isa = PBXFileReference;
+		name = NSControl.html;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Resources/English.lproj/Documentation/Reference/ObjC_classic/Classes/NSControl.html;
+		refType = 0;
+	};
+	E117A4C203C3E9C600E10BA2 = {
+		isa = PBXFileReference;
+		name = NSControl.h;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSControl.h;
+		refType = 0;
+	};
+	E11CD2CA03BF9B3300C49BEF = {
+		fRef = F517D6430356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.h: 19";
+		rLen = 0;
+		rLoc = 455;
+		rType = 0;
+		vrLen = 814;
+		vrLoc = 0;
+	};
+	E11CD2D003BF9B3300C49BEF = {
+		fRef = E11CD30D03BF9B3300C49BEF;
+		isa = PBXTextBookmark;
+		name = "NSURL.h: 28";
+		rLen = 0;
+		rLoc = 948;
+		rType = 0;
+		vrLen = 1648;
+		vrLoc = 0;
+	};
+	E11CD2D103BF9B3300C49BEF = {
+		fRef = E11CD30E03BF9B3300C49BEF;
+		isa = PBXTextBookmark;
+		name = "NSAppleScript.h: 17";
+		rLen = 392;
+		rLoc = 671;
+		rType = 0;
+		vrLen = 1925;
+		vrLoc = 0;
+	};
+	E11CD2D203BF9B3300C49BEF = {
+		fRef = E11CD30F03BF9B3300C49BEF;
+		glyphRangeLength = 1212;
+		glyphRangeLocation = 96;
+		isa = PBXDocBookmark;
+		name = "NSAppleScript.html: Declared in ...";
+	};
+	E11CD2D303BF9B3300C49BEF = {
+		fRef = F5F240B9036A867901FE7503;
+		isa = PBXTextBookmark;
+		name = "BDAlias.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1240;
+		vrLoc = 1630;
+	};
+	E11CD2D403BF9B3300C49BEF = {
+		fRef = E11CD31003BF9B3300C49BEF;
+		isa = PBXTextBookmark;
+		name = "NSFileManager.h: 32";
+		rLen = 7;
+		rLoc = 1066;
+		rType = 0;
+		vrLen = 1624;
+		vrLoc = 0;
+	};
+	E11CD2D503BF9B3300C49BEF = {
+		fRef = E11CD31103BF9B3300C49BEF;
+		isa = PBXTextBookmark;
+		name = "NSString.h: 158";
+		rLen = 48;
+		rLoc = 6048;
+		rType = 0;
+		vrLen = 2149;
+		vrLoc = 5042;
+	};
+	E11CD2D603BF9B3300C49BEF = {
+		fRef = E1A18CB203B439CF00000028;
+		isa = PBXTextBookmark;
+		name = "PSPropertyListSerialization.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 491;
+		vrLoc = 0;
+	};
+	E11CD2D703BF9B3300C49BEF = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: message";
+		rLen = 23;
+		rLoc = 6867;
+		rType = 0;
+		vrLen = 1147;
+		vrLoc = 6189;
+	};
+	E11CD2D803BF9B3300C49BEF = {
+		fRef = F5F240CA036A869401FE7503;
+		isa = PBXTextBookmark;
+		name = "BDAlias.m: displayNameWithKindString:";
+		rLen = 0;
+		rLoc = 6212;
+		rType = 0;
+		vrLen = 987;
+		vrLoc = 5329;
+	};
+	E11CD2E003BF9B3300C49BEF = {
+		fRef = E11CD31203BF9B3300C49BEF;
+		isa = PBXTextBookmark;
+		name = "NSException.h: 95";
+		rLen = 60;
+		rLoc = 2920;
+		rType = 0;
+		vrLen = 1659;
+		vrLoc = 2172;
+	};
+	E11CD2E303BF9B3300C49BEF = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: ";
+		rLen = 0;
+		rLoc = 509;
+		rType = 0;
+		vrLen = 1021;
+		vrLoc = 1280;
+	};
+	E11CD2E503BF9B3300C49BEF = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: 72";
+		rLen = 0;
+		rLoc = 1694;
+		rType = 0;
+		vrLen = 1218;
+		vrLoc = 1083;
+	};
+	E11CD2E603BF9B3300C49BEF = {
+		fRef = F517D6430356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.h: 19";
+		rLen = 0;
+		rLoc = 455;
+		rType = 0;
+		vrLen = 814;
+		vrLoc = 0;
+	};
+	E11CD2E703BF9B3300C49BEF = {
+		fRef = F517D6420356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.m: ";
+		rLen = 0;
+		rLoc = 4424;
+		rType = 0;
+		vrLen = 1348;
+		vrLoc = 3368;
+	};
+	E11CD2E803BF9B3300C49BEF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: alert";
+		rLen = 0;
+		rLoc = 1130;
+		rType = 0;
+		vrLen = 1623;
+		vrLoc = 319;
+	};
+	E11CD2E903BF9B3300C49BEF = {
+		fRef = F59E47B5036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.h: PSAlarmAlertStopNotification";
+		rLen = 54;
+		rLoc = 207;
+		rType = 0;
+		vrLen = 525;
+		vrLoc = 0;
+	};
+	E11CD2EA03BF9B3300C49BEF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: 38";
+		rLen = 0;
+		rLoc = 1552;
+		rType = 0;
+		vrLen = 1672;
+		vrLoc = 319;
+	};
+	E11CD2EB03BF9B3300C49BEF = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: 48";
+		rLen = 0;
+		rLoc = 1784;
+		rType = 0;
+		vrLen = 1488;
+		vrLoc = 729;
+	};
+	E11CD2EC03BF9B3300C49BEF = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: ";
+		rLen = 0;
+		rLoc = 993;
+		rType = 0;
+		vrLen = 1075;
+		vrLoc = 508;
+	};
+	E11CD2ED03BF9B3300C49BEF = {
+		fRef = F517D6420356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.m: 244";
+		rLen = 0;
+		rLoc = 7594;
+		rType = 0;
+		vrLen = 1412;
+		vrLoc = 6161;
+	};
+	E11CD2EE03BF9B3300C49BEF = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: 48";
+		rLen = 0;
+		rLoc = 1784;
+		rType = 0;
+		vrLen = 1490;
+		vrLoc = 729;
+	};
+	E11CD2EF03BF9B3300C49BEF = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: 34";
+		rLen = 0;
+		rLoc = 672;
+		rType = 0;
+		vrLen = 1066;
+		vrLoc = 177;
+	};
+	E11CD2F603BF9B3300C49BEF = {
+		fRef = E1A18CAC03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.m: 45";
+		rLen = 0;
+		rLoc = 947;
+		rType = 0;
+		vrLen = 913;
+		vrLoc = 217;
+	};
+	E11CD2F803BF9B3300C49BEF = {
+		fRef = E1A18CAC03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.m: 45";
+		rLen = 0;
+		rLoc = 947;
+		rType = 0;
+		vrLen = 893;
+		vrLoc = 217;
+	};
+	E11CD2FB03BF9B3300C49BEF = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: PSAlarmAlertCompletedNotification";
+		rLen = 73;
+		rLoc = 205;
+		rType = 0;
+		vrLen = 1038;
+		vrLoc = 0;
+	};
+	E11CD30D03BF9B3300C49BEF = {
+		isa = PBXFileReference;
+		name = NSURL.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSURL.h;
+		refType = 0;
+	};
+	E11CD30E03BF9B3300C49BEF = {
+		isa = PBXFileReference;
+		name = NSAppleScript.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSAppleScript.h;
+		refType = 0;
+	};
+	E11CD30F03BF9B3300C49BEF = {
+		isa = PBXFileReference;
+		name = NSAppleScript.html;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Resources/English.lproj/Documentation/Reference/ObjC_classic/Classes/NSAppleScript.html;
+		refType = 0;
+	};
+	E11CD31003BF9B3300C49BEF = {
+		isa = PBXFileReference;
+		name = NSFileManager.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSFileManager.h;
+		refType = 0;
+	};
+	E11CD31103BF9B3300C49BEF = {
+		isa = PBXFileReference;
+		name = NSString.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSString.h;
+		refType = 0;
+	};
+	E11CD31203BF9B3300C49BEF = {
+		isa = PBXFileReference;
+		name = NSException.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSException.h;
+		refType = 0;
+	};
+	E12725EC03B8FE2300000028 = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: propertyListRepresentation";
+		rLen = 0;
+		rLoc = 1154;
+		rType = 0;
+		vrLen = 1316;
+		vrLoc = 227;
+	};
+	E130B91603B69C6300000028 = {
+		children = (
+			E130B91703B6A98E00000028,
+			E130B91803B6C81D00000028,
+			E12725EC03B8FE2300000028,
+			E1D2936E03BD2A2700F9204E,
+			E1ECA00A03C003C300F54C66,
+			E1ECA00B03C0056B00F54C66,
+			E1156C2D03C39718006717DC,
+		);
+		isa = PBXBookmarkGroup;
+		name = Root;
+	};
+	E130B91703B6A98E00000028 = {
+		fRef = F5F240B9036A867901FE7503;
+		isa = PBXTextBookmark;
+		name = "BDAlias.h: aliasWithData:";
+		rLen = 43;
+		rLoc = 2576;
+		rType = 0;
+		vrLen = 1579;
+		vrLoc = 1291;
+	};
+	E130B91803B6C81D00000028 = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXBookmark;
+	};
+	E17AED7003C0F4D600B89ACF = {
+		fileReference = F5F1986C036B813101EB0372;
+		isa = PBXFileBreakpoint;
+		lineNumber = 91;
+		state = 1;
+	};
+	E17AED7203C0F5D300B89ACF = {
+		fRef = F59DC6D30353C9E601AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmSetController.h: 37";
+		rLen = 7;
+		rLoc = 1322;
+		rType = 0;
+		vrLen = 1567;
+		vrLoc = 462;
+	};
+	E17AED7303C0F5D300B89ACF = {
+		fRef = E17AEDD203C0F5D300B89ACF;
+		glyphRangeLength = 782;
+		glyphRangeLocation = 22457;
+		isa = PBXDocBookmark;
+		name = "NSApplication.html: isActive  - ...";
+	};
+	E17AED7403C0F5D300B89ACF = {
+		fRef = E17AEDD303C0F5D300B89ACF;
+		glyphRangeLength = 1214;
+		glyphRangeLocation = 6436;
+		isa = PBXDocBookmark;
+		name = "Getting_Proc__Information.html: Sets the fro...";
+	};
+	E17AED7503C0F5D300B89ACF = {
+		fRef = E17AEDD403C0F5D300B89ACF;
+		glyphRangeLength = 468;
+		glyphRangeLocation = 901;
+		isa = PBXDocBookmark;
+		name = "NSWorkspace.html: The constant...";
+	};
+	E17AED7603C0F5D300B89ACF = {
+		fRef = E17AEDD103C0F5D300B89ACF;
+		isa = PBXTextBookmark;
+		name = "Processes.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 932;
+		vrLoc = 0;
+	};
+	E17AED7703C0F5D300B89ACF = {
+		fRef = E17AEDD503C0F5D300B89ACF;
+		isa = PBXTextBookmark;
+		name = "NSWorkspace.h: 80";
+		rLen = 36;
+		rLoc = 2996;
+		rType = 0;
+		vrLen = 2064;
+		vrLoc = 2420;
+	};
+	E17AED7803C0F5D300B89ACF = {
+		fRef = F59E47B0036AACD1016B311C;
+		isa = PBXTextBookmark;
+		name = "PSNotifierAlert.m: actionDescription";
+		rLen = 0;
+		rLoc = 620;
+		rType = 0;
+		vrLen = 894;
+		vrLoc = 0;
+	};
+	E17AED7903C0F5D300B89ACF = {
+		fRef = F59E47BC036AB228016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlert.m: 61";
+		rLen = 0;
+		rLoc = 1644;
+		rType = 0;
+		vrLen = 1158;
+		vrLoc = 511;
+	};
+	E17AED7A03C0F5D300B89ACF = {
+		fRef = F59E47C0036B1ADD016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlertController.m: delay";
+		rLen = 0;
+		rLoc = 664;
+		rType = 0;
+		vrLen = 1660;
+		vrLoc = 319;
+	};
+	E17AED7B03C0F5D300B89ACF = {
+		fRef = E17AEDD603C0F5D300B89ACF;
+		isa = PBXTextBookmark;
+		name = "NSApplication.h: 96";
+		rLen = 25;
+		rLoc = 3085;
+		rType = 0;
+		vrLen = 1433;
+		vrLoc = 2268;
+	};
+	E17AED7C03C0F5D300B89ACF = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: 41";
+		rLen = 0;
+		rLoc = 932;
+		rType = 0;
+		vrLen = 1060;
+		vrLoc = 31;
+	};
+	E17AED7D03C0F5D300B89ACF = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 25";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 804;
+		vrLoc = 0;
+	};
+	E17AED7E03C0F5D300B89ACF = {
+		fRef = E1A18CAB03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.h: requirePesterFrontmost";
+		rLen = 77;
+		rLoc = 532;
+		rType = 0;
+		vrLen = 0;
+		vrLoc = 0;
+	};
+	E17AED7F03C0F5D300B89ACF = {
+		fRef = F517D6420356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.m: 205";
+		rLen = 0;
+		rLoc = 5996;
+		rType = 0;
+		vrLen = 1441;
+		vrLoc = 2048;
+	};
+	E17AED8003C0F5D300B89ACF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 47";
+		rLen = 0;
+		rLoc = 1751;
+		rType = 0;
+		vrLen = 1652;
+		vrLoc = 284;
+	};
+	E17AED8103C0F5D300B89ACF = {
+		fRef = F517D63E0356B80C016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarmsController.m: __GNUC__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1665;
+		vrLoc = 0;
+	};
+	E17AED8203C0F5D300B89ACF = {
+		fRef = F59DC6D40353C9E601AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmSetController.m: 513";
+		rLen = 0;
+		rLoc = 22685;
+		rType = 0;
+		vrLen = 1154;
+		vrLoc = 21333;
+	};
+	E17AED8303C0F5D300B89ACF = {
+		fRef = F59E47A8036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.h: requiresPesterFrontmost";
+		rLen = 33;
+		rLoc = 599;
+		rType = 0;
+		vrLen = 781;
+		vrLoc = 0;
+	};
+	E17AED8403C0F5D300B89ACF = {
+		fRef = F59E47B5036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.h: 17";
+		rLen = 23;
+		rLoc = 380;
+		rType = 0;
+		vrLen = 586;
+		vrLoc = 0;
+	};
+	E17AED8503C0F5D300B89ACF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: 62";
+		rLen = 14;
+		rLoc = 2149;
+		rType = 0;
+		vrLen = 1536;
+		vrLoc = 1552;
+	};
+	E17AED8603C0F5D300B89ACF = {
+		fRef = E1A18CAC03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.m: addAlert:";
+		rLen = 0;
+		rLoc = 920;
+		rType = 0;
+		vrLen = 741;
+		vrLoc = 843;
+	};
+	E17AED8703C0F5D300B89ACF = {
+		fRef = F5F19867036B80AF01EB0372;
+		isa = PBXTextBookmark;
+		name = "SUSpeaker.m: handleMessage:";
+		rLen = 17;
+		rLoc = 5621;
+		rType = 0;
+		vrLen = 1014;
+		vrLoc = 5080;
+	};
+	E17AED8803C0F5D300B89ACF = {
+		fRef = F5F19866036B80AF01EB0372;
+		isa = PBXTextBookmark;
+		name = "SUSpeaker.h: didFinishSpeaking:";
+		rLen = 47;
+		rLoc = 660;
+		rType = 0;
+		vrLen = 787;
+		vrLoc = 0;
+	};
+	E17AED8903C0F5D300B89ACF = {
+		fRef = F5F1986D036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.h: 16";
+		rLen = 0;
+		rLoc = 295;
+		rType = 0;
+		vrLen = 422;
+		vrLoc = 0;
+	};
+	E17AED8B03C0F5D300B89ACF = {
+		fRef = F59DC6D40353C9E601AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmSetController.m: 510";
+		rLen = 0;
+		rLoc = 22661;
+		rType = 0;
+		vrLen = 1204;
+		vrLoc = 21245;
+	};
+	E17AED8C03C0F5D300B89ACF = {
+		fRef = F59DC6D30353C9E601AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmSetController.h: 37";
+		rLen = 7;
+		rLoc = 1322;
+		rType = 0;
+		vrLen = 1567;
+		vrLoc = 462;
+	};
+	E17AED8D03C0F5D300B89ACF = {
+		fRef = F59DC6D40353C9E601AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmSetController.m: 513";
+		rLen = 0;
+		rLoc = 22685;
+		rType = 0;
+		vrLen = 1154;
+		vrLoc = 21333;
+	};
+	E17AED8E03C0F5D300B89ACF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: 38";
+		rLen = 0;
+		rLoc = 1552;
+		rType = 0;
+		vrLen = 1406;
+		vrLoc = 96;
+	};
+	E17AED8F03C0F5D300B89ACF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 50";
+		rLen = 0;
+		rLoc = 1827;
+		rType = 0;
+		vrLen = 1564;
+		vrLoc = 493;
+	};
+	E17AED9003C0F5D300B89ACF = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 25";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 804;
+		vrLoc = 0;
+	};
+	E17AED9103C0F5D300B89ACF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 159";
+		rLen = 0;
+		rLoc = 5636;
+		rType = 0;
+		vrLen = 1391;
+		vrLoc = 3831;
+	};
+	E17AED9203C0F5D300B89ACF = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 25";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 804;
+		vrLoc = 0;
+	};
+	E17AED9303C0F5D300B89ACF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 52";
+		rLen = 0;
+		rLoc = 1827;
+		rType = 0;
+		vrLen = 1385;
+		vrLoc = 1429;
+	};
+	E17AED9403C0F5D300B89ACF = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 25";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 804;
+		vrLoc = 0;
+	};
+	E17AED9503C0F5D300B89ACF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 50";
+		rLen = 0;
+		rLoc = 1827;
+		rType = 0;
+		vrLen = 1485;
+		vrLoc = 1429;
+	};
+	E17AED9603C0F5D300B89ACF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: 29";
+		rLen = 0;
+		rLoc = 757;
+		rType = 0;
+		vrLen = 1496;
+		vrLoc = 729;
+	};
+	E17AED9703C0F5D300B89ACF = {
+		fRef = E1A18CAC03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.m: 89";
+		rLen = 0;
+		rLoc = 2071;
+		rType = 0;
+		vrLen = 1425;
+		vrLoc = 1072;
+	};
+	E17AED9803C0F5D300B89ACF = {
+		fRef = E1A18CAB03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.h: allAlerts";
+		rLen = 77;
+		rLoc = 532;
+		rType = 0;
+		vrLen = 663;
+		vrLoc = 0;
+	};
+	E17AED9903C0F5D300B89ACF = {
+		fRef = E1A18CAC03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.m: triggerForAlarm:";
+		rLen = 22;
+		rLoc = 1339;
+		rType = 0;
+		vrLen = 815;
+		vrLoc = 879;
+	};
+	E17AED9A03C0F5D300B89ACF = {
+		fRef = E1A18CAB03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.h: triggerForAlarm:";
+		rLen = 77;
+		rLoc = 532;
+		rType = 0;
+		vrLen = 697;
+		vrLoc = 0;
+	};
+	E17AED9B03C0F5D300B89ACF = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: 34";
+		rLen = 0;
+		rLoc = 871;
+		rType = 0;
+		vrLen = 1038;
+		vrLoc = 0;
+	};
+	E17AED9C03C0F5D300B89ACF = {
+		fRef = F59E47A8036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.h: 25";
+		rLen = 33;
+		rLoc = 599;
+		rType = 0;
+		vrLen = 781;
+		vrLoc = 0;
+	};
+	E17AED9D03C0F5D300B89ACF = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: actionDescription";
+		rLen = 0;
+		rLoc = 975;
+		rType = 0;
+		vrLen = 1038;
+		vrLoc = 0;
+	};
+	E17AED9E03C0F5D300B89ACF = {
+		fRef = F59E47A8036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.h: 25";
+		rLen = 33;
+		rLoc = 599;
+		rType = 0;
+		vrLen = 781;
+		vrLoc = 0;
+	};
+	E17AED9F03C0F5D300B89ACF = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: completedForAlarm:";
+		rLen = 52;
+		rLoc = 648;
+		rType = 0;
+		vrLen = 978;
+		vrLoc = 0;
+	};
+	E17AEDA003C0F5D300B89ACF = {
+		fRef = F59E47B0036AACD1016B311C;
+		isa = PBXTextBookmark;
+		name = "PSNotifierAlert.m: actionDescription";
+		rLen = 0;
+		rLoc = 620;
+		rType = 0;
+		vrLen = 894;
+		vrLoc = 0;
+	};
+	E17AEDA103C0F5D300B89ACF = {
+		fRef = F59E47BC036AB228016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlert.m: 61";
+		rLen = 0;
+		rLoc = 1644;
+		rType = 0;
+		vrLen = 1158;
+		vrLoc = 511;
+	};
+	E17AEDA203C0F5D300B89ACF = {
+		fRef = E1A18CAC03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.m: 64";
+		rLen = 0;
+		rLoc = 1248;
+		rType = 0;
+		vrLen = 821;
+		vrLoc = 881;
+	};
+	E17AEDA303C0F5D300B89ACF = {
+		fRef = F59E47A8036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.h: 25";
+		rLen = 33;
+		rLoc = 599;
+		rType = 0;
+		vrLen = 781;
+		vrLoc = 0;
+	};
+	E17AEDA403C0F5D300B89ACF = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 25";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 804;
+		vrLoc = 0;
+	};
+	E17AEDA503C0F5D300B89ACF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: 29";
+		rLen = 0;
+		rLoc = 757;
+		rType = 0;
+		vrLen = 1491;
+		vrLoc = 729;
+	};
+	E17AEDA603C0F5D300B89ACF = {
+		fRef = F59E47B5036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.h: 16";
+		rLen = 0;
+		rLoc = 402;
+		rType = 0;
+		vrLen = 563;
+		vrLoc = 0;
+	};
+	E17AEDA703C0F5D300B89ACF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: __GNUC__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1568;
+		vrLoc = 0;
+	};
+	E17AEDA803C0F5D300B89ACF = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 25";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 804;
+		vrLoc = 0;
+	};
+	E17AEDA903C0F5D300B89ACF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 50";
+		rLen = 0;
+		rLoc = 1827;
+		rType = 0;
+		vrLen = 1333;
+		vrLoc = 1429;
+	};
+	E17AEDAA03C0F5D300B89ACF = {
+		fRef = F59E47C0036B1ADD016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlertController.m: delay";
+		rLen = 0;
+		rLoc = 664;
+		rType = 0;
+		vrLen = 1660;
+		vrLoc = 319;
+	};
+	E17AEDAB03C0F5D300B89ACF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 49";
+		rLen = 0;
+		rLoc = 1821;
+		rType = 0;
+		vrLen = 1331;
+		vrLoc = 1429;
+	};
+	E17AEDAC03C0F5D300B89ACF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: ";
+		rLen = 0;
+		rLoc = 2744;
+		rType = 0;
+		vrLen = 1857;
+		vrLoc = 727;
+	};
+	E17AEDAD03C0F5D300B89ACF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 149";
+		rLen = 0;
+		rLoc = 5300;
+		rType = 0;
+		vrLen = 1627;
+		vrLoc = 3595;
+	};
+	E17AEDAE03C0F5D300B89ACF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: 60";
+		rLen = 0;
+		rLoc = 2426;
+		rType = 0;
+		vrLen = 1856;
+		vrLoc = 727;
+	};
+	E17AEDAF03C0F5D300B89ACF = {
+		fRef = F59E47B5036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.h: 17";
+		rLen = 23;
+		rLoc = 380;
+		rType = 0;
+		vrLen = 586;
+		vrLoc = 0;
+	};
+	E17AEDB003C0F5D300B89ACF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: _alertCompleted:";
+		rLen = 0;
+		rLoc = 1045;
+		rType = 0;
+		vrLen = 1704;
+		vrLoc = 359;
+	};
+	E17AEDB103C0F5D300B89ACF = {
+		fRef = F59E47B5036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.h: 17";
+		rLen = 23;
+		rLoc = 380;
+		rType = 0;
+		vrLen = 586;
+		vrLoc = 0;
+	};
+	E17AEDB203C0F5D300B89ACF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: 32";
+		rLen = 0;
+		rLoc = 985;
+		rType = 0;
+		vrLen = 1642;
+		vrLoc = 359;
+	};
+	E17AEDB303C0F5D300B89ACF = {
+		fRef = E1A18CAC03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.m: requirePesterFrontmost";
+		rLen = 0;
+		rLoc = 1325;
+		rType = 0;
+		vrLen = 823;
+		vrLoc = 843;
+	};
+	E17AEDB403C0F5D300B89ACF = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: 41";
+		rLen = 0;
+		rLoc = 932;
+		rType = 0;
+		vrLen = 1060;
+		vrLoc = 31;
+	};
+	E17AEDB503C0F5D300B89ACF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: 29";
+		rLen = 142;
+		rLoc = 785;
+		rType = 0;
+		vrLen = 1425;
+		vrLoc = 0;
+	};
+	E17AEDB603C0F5D300B89ACF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 149";
+		rLen = 0;
+		rLoc = 5300;
+		rType = 0;
+		vrLen = 1568;
+		vrLoc = 0;
+	};
+	E17AEDB703C0F5D300B89ACF = {
+		fRef = F59DC6D40353C9E601AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmSetController.m: 513";
+		rLen = 0;
+		rLoc = 22685;
+		rType = 0;
+		vrLen = 1154;
+		vrLoc = 21333;
+	};
+	E17AEDB803C0F5D300B89ACF = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 25";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 804;
+		vrLoc = 0;
+	};
+	E17AEDB903C0F5D300B89ACF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: 67";
+		rLen = 0;
+		rLoc = 2592;
+		rType = 0;
+		vrLen = 1800;
+		vrLoc = 1111;
+	};
+	E17AEDBA03C0F5D300B89ACF = {
+		fRef = E1A18CAB03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.h: requirePesterFrontmost";
+		rLen = 77;
+		rLoc = 532;
+		rType = 0;
+		vrLen = 0;
+		vrLoc = 0;
+	};
+	E17AEDBB03C0F5D300B89ACF = {
+		fRef = F517D6420356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.m: 205";
+		rLen = 0;
+		rLoc = 5996;
+		rType = 0;
+		vrLen = 1441;
+		vrLoc = 2048;
+	};
+	E17AEDBC03C0F5D300B89ACF = {
+		fRef = F5F1986D036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.h: 10";
+		rLen = 0;
+		rLoc = 174;
+		rType = 0;
+		vrLen = 422;
+		vrLoc = 0;
+	};
+	E17AEDBD03C0F5D300B89ACF = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: 12";
+		rLen = 0;
+		rLoc = 272;
+		rType = 0;
+		vrLen = 877;
+		vrLoc = 0;
+	};
+	E17AEDBE03C0F5D300B89ACF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 47";
+		rLen = 0;
+		rLoc = 1751;
+		rType = 0;
+		vrLen = 1652;
+		vrLoc = 284;
+	};
+	E17AEDBF03C0F5D300B89ACF = {
+		fRef = E1A18CAC03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.m: addAlert:";
+		rLen = 0;
+		rLoc = 920;
+		rType = 0;
+		vrLen = 741;
+		vrLoc = 843;
+	};
+	E17AEDC003C0F5D300B89ACF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: 78";
+		rLen = 0;
+		rLoc = 3026;
+		rType = 0;
+		vrLen = 1532;
+		vrLoc = 1387;
+	};
+	E17AEDC103C0F5D300B89ACF = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: 27";
+		rLen = 0;
+		rLoc = 611;
+		rType = 0;
+		vrLen = 1116;
+		vrLoc = 389;
+	};
+	E17AEDC203C0F5D300B89ACF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: 78";
+		rLen = 32;
+		rLoc = 2998;
+		rType = 0;
+		vrLen = 1636;
+		vrLoc = 1287;
+	};
+	E17AEDC303C0F5D300B89ACF = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: 19";
+		rLen = 0;
+		rLoc = 398;
+		rType = 0;
+		vrLen = 1067;
+		vrLoc = 296;
+	};
+	E17AEDC403C0F5D300B89ACF = {
+		fRef = F517D63E0356B80C016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarmsController.m: __GNUC__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1665;
+		vrLoc = 0;
+	};
+	E17AEDC503C0F5D300B89ACF = {
+		fRef = F59DC6D40353C9E601AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmSetController.m: 513";
+		rLen = 0;
+		rLoc = 22685;
+		rType = 0;
+		vrLen = 1154;
+		vrLoc = 21333;
+	};
+	E17AEDC603C0F5D300B89ACF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: 62";
+		rLen = 14;
+		rLoc = 2149;
+		rType = 0;
+		vrLen = 1536;
+		vrLoc = 1552;
+	};
+	E17AEDC703C0F5D300B89ACF = {
+		fRef = E1A18CAC03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.m: addAlert:";
+		rLen = 0;
+		rLoc = 920;
+		rType = 0;
+		vrLen = 741;
+		vrLoc = 843;
+	};
+	E17AEDC803C0F5D300B89ACF = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: 93";
+		rLen = 0;
+		rLoc = 2219;
+		rType = 0;
+		vrLen = 1069;
+		vrLoc = 1232;
+	};
+	E17AEDC903C0F5D300B89ACF = {
+		fRef = F5F1986D036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.h: 16";
+		rLen = 0;
+		rLoc = 295;
+		rType = 0;
+		vrLen = 422;
+		vrLoc = 0;
+	};
+	E17AEDCC03C0F5D300B89ACF = {
+		fRef = F5F19867036B80AF01EB0372;
+		isa = PBXTextBookmark;
+		name = "SUSpeaker.m: handleMessage:";
+		rLen = 0;
+		rLoc = 5653;
+		rType = 0;
+		vrLen = 278;
+		vrLoc = 5524;
+	};
+	E17AEDCE03C0F5D300B89ACF = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: 93";
+		rLen = 0;
+		rLoc = 2219;
+		rType = 0;
+		vrLen = 104;
+		vrLoc = 2197;
+	};
+	E17AEDCF03C0F5D300B89ACF = {
+		fRef = F5F19867036B80AF01EB0372;
+		isa = PBXTextBookmark;
+		name = "SUSpeaker.m: handleMessage:";
+		rLen = 0;
+		rLoc = 5653;
+		rType = 0;
+		vrLen = 278;
+		vrLoc = 5524;
+	};
+	E17AEDD103C0F5D300B89ACF = {
+		isa = PBXFileReference;
+		name = Processes.h;
+		path = /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/Headers/Processes.h;
+		refType = 0;
+	};
+	E17AEDD203C0F5D300B89ACF = {
+		isa = PBXFileReference;
+		name = NSApplication.html;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Resources/English.lproj/Documentation/Reference/ObjC_classic/Classes/NSApplication.html;
+		refType = 0;
+	};
+	E17AEDD303C0F5D300B89ACF = {
+		isa = PBXFileReference;
+		name = Getting_Proc__Information.html;
+		path = /Developer/Documentation/Carbon/oss/ProcessManager/Process_Manager/Functions/Getting_Proc__Information.html;
+		refType = 0;
+	};
+	E17AEDD403C0F5D300B89ACF = {
+		isa = PBXFileReference;
+		name = NSWorkspace.html;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Resources/English.lproj/Documentation/Reference/ObjC_classic/Classes/NSWorkspace.html;
+		refType = 0;
+	};
+	E17AEDD503C0F5D300B89ACF = {
+		isa = PBXFileReference;
+		name = NSWorkspace.h;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSWorkspace.h;
+		refType = 0;
+	};
+	E17AEDD603C0F5D300B89ACF = {
+		isa = PBXFileReference;
+		name = NSApplication.h;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSApplication.h;
+		refType = 0;
+	};
+	E195A26303BE251F00186F9B = {
+		fRef = F560E2F20357506401A4E466;
+		isa = PBXTextBookmark;
+		name = "PSApplication.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 609;
+		vrLoc = 0;
+	};
+	E195A26403BE251F00186F9B = {
+		fRef = F5F198D0036BE57401EB0372;
+		isa = PBXTextBookmark;
+		name = "NJRTableDelegate.m: __VERSION__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1350;
+		vrLoc = 0;
+	};
+	E195A26503BE251F00186F9B = {
+		fRef = F5F198D1036BE57401EB0372;
+		isa = PBXTextBookmark;
+		name = "NJRTableDelegate.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 546;
+		vrLoc = 0;
+	};
+	E195A26603BE251F00186F9B = {
+		fRef = E195A32003BE251F00186F9B;
+		isa = PBXTextBookmark;
+		name = "fp.h: 2178";
+		rLen = 39;
+		rLoc = 68209;
+		rType = 0;
+		vrLen = 1340;
+		vrLoc = 67559;
+	};
+	E195A26703BE251F00186F9B = {
+		fRef = E195A32103BE251F00186F9B;
+		isa = PBXTextBookmark;
+		name = "float.h: 241";
+		rLen = 5;
+		rLoc = 8672;
+		rType = 0;
+		vrLen = 1576;
+		vrLoc = 0;
+	};
+	E195A26803BE251F00186F9B = {
+		fRef = E195A31403BE251F00186F9B;
+		isa = PBXTextBookmark;
+		name = "stdlib.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 2595;
+		vrLoc = 0;
+	};
+	E195A26C03BE251F00186F9B = {
+		fRef = E1F0B14E03ADBE3800AEFBE0;
+		isa = PBXTextBookmark;
+		name = "NSString-NJRExtensions.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 598;
+		vrLoc = 0;
+	};
+	E195A26D03BE251F00186F9B = {
+		fRef = E1F0B14F03ADBE3800AEFBE0;
+		isa = PBXTextBookmark;
+		name = "NSString-NJRExtensions.m: __STDC__";
+		rLen = 35;
+		rLoc = 160;
+		rType = 0;
+		vrLen = 1309;
+		vrLoc = 0;
+	};
+	E195A26E03BE251F00186F9B = {
+		fRef = E195A31603BE251F00186F9B;
+		glyphRangeLength = 1300;
+		glyphRangeLocation = 3099;
+		isa = PBXDocBookmark;
+		name = "NSHelpManager.html: See Also - r...";
+	};
+	E195A26F03BE251F00186F9B = {
+		fRef = E195A30F03BE251F00186F9B;
+		isa = PBXTextBookmark;
+		name = "NSHelpManager.h: 65";
+		rLen = 0;
+		rLoc = 1677;
+		rType = 0;
+		vrLen = 1330;
+		vrLoc = 347;
+	};
+	E195A27603BE251F00186F9B = {
+		fRef = E195A31003BE251F00186F9B;
+		isa = PBXTextBookmark;
+		name = "NSSet.h: 63";
+		rLen = 19;
+		rLoc = 1498;
+		rType = 0;
+		vrLen = 1023;
+		vrLoc = 1199;
+	};
+	E195A27A03BE251F00186F9B = {
+		fRef = E195A31103BE251F00186F9B;
+		isa = PBXTextBookmark;
+		name = "NSNumberFormatter.h: 77";
+		rLen = 0;
+		rLoc = 2579;
+		rType = 0;
+		vrLen = 1547;
+		vrLoc = 1034;
+	};
+	E195A27B03BE251F00186F9B = {
+		fRef = E195A31203BE251F00186F9B;
+		isa = PBXTextBookmark;
+		name = "NSDecimalNumber.h: 35";
+		rLen = 8;
+		rLoc = 1139;
+		rType = 0;
+		vrLen = 1562;
+		vrLoc = 0;
+	};
+	E195A27D03BE251F00186F9B = {
+		fRef = E195A31703BE251F00186F9B;
+		isa = PBXTextBookmark;
+		name = "NSFormatter.h: 18";
+		rLen = 27;
+		rLoc = 431;
+		rType = 0;
+		vrLen = 1230;
+		vrLoc = 0;
+	};
+	E195A27E03BE251F00186F9B = {
+		fRef = E195A31803BE251F00186F9B;
+		glyphRangeLength = 1826;
+		glyphRangeLocation = 1689;
+		isa = PBXDocBookmark;
+		name = "NSFormatter.html: Textual repr...";
+	};
+	E195A28003BE251F00186F9B = {
+		fRef = E1F0B14A03AD8CEF00AEFBE0;
+		isa = PBXTextBookmark;
+		name = "NJRUnfocusableMovieView.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 249;
+		vrLoc = 0;
+	};
+	E195A28F03BE251F00186F9B = {
+		fRef = F59E47BD036AB228016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlert.h: 12";
+		rLen = 0;
+		rLoc = 212;
+		rType = 0;
+		vrLen = 651;
+		vrLoc = 0;
+	};
+	E195A29103BE251F00186F9B = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: timeRemainingString";
+		rLen = 0;
+		rLoc = 10969;
+		rType = 0;
+		vrLen = 1851;
+		vrLoc = 9894;
+	};
+	E195A29203BE251F00186F9B = {
+		fRef = F59E47B5036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 493;
+		vrLoc = 0;
+	};
+	E195A29503BE251F00186F9B = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: stopAlerts:";
+		rLen = 0;
+		rLoc = 1675;
+		rType = 0;
+		vrLen = 945;
+		vrLoc = 0;
+	};
+	E195A29603BE251F00186F9B = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 78";
+		rLen = 0;
+		rLoc = 2730;
+		rType = 0;
+		vrLen = 1220;
+		vrLoc = 2049;
+	};
+	E195A29703BE251F00186F9B = {
+		fRef = F59E47C1036B1ADD016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlertController.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 608;
+		vrLoc = 0;
+	};
+	E195A29803BE251F00186F9B = {
+		fRef = F59E47C0036B1ADD016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlertController.m: __VERSION__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1553;
+		vrLoc = 0;
+	};
+	E195A29903BE251F00186F9B = {
+		fRef = F5F198D1036BE57401EB0372;
+		isa = PBXTextBookmark;
+		name = "NJRTableDelegate.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 546;
+		vrLoc = 0;
+	};
+	E195A29A03BE251F00186F9B = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: setTimer";
+		rLen = 0;
+		rLoc = 12678;
+		rType = 0;
+		vrLen = 1475;
+		vrLoc = 10588;
+	};
+	E195A29D03BE251F00186F9B = {
+		fRef = E1A18CAC03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.m: prettyList";
+		rLen = 36;
+		rLoc = 1546;
+		rType = 0;
+		vrLen = 1676;
+		vrLoc = 1022;
+	};
+	E195A29E03BE251F00186F9B = {
+		fRef = E1A18CAB03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 585;
+		vrLoc = 0;
+	};
+	E195A29F03BE251F00186F9B = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: setTimer";
+		rLen = 0;
+		rLoc = 12678;
+		rType = 0;
+		vrLen = 1475;
+		vrLoc = 10588;
+	};
+	E195A2A003BE251F00186F9B = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: compareDate:";
+		rLen = 43;
+		rLoc = 2123;
+		rType = 0;
+		vrLen = 1407;
+		vrLoc = 742;
+	};
+	E195A2A103BE251F00186F9B = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: setTimer";
+		rLen = 0;
+		rLoc = 11448;
+		rType = 0;
+		vrLen = 1542;
+		vrLoc = 10588;
+	};
+	E195A2A203BE251F00186F9B = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: compareDate:";
+		rLen = 43;
+		rLoc = 2123;
+		rType = 0;
+		vrLen = 1407;
+		vrLoc = 742;
+	};
+	E195A2A303BE251F00186F9B = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: prettyDescription";
+		rLen = 0;
+		rLoc = 11440;
+		rType = 0;
+		vrLen = 1820;
+		vrLoc = 10658;
+	};
+	E195A2A503BE251F00186F9B = {
+		fRef = E1A18CAB03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 585;
+		vrLoc = 0;
+	};
+	E195A2A603BE251F00186F9B = {
+		fRef = E1A18CAC03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.m: prettyList";
+		rLen = 0;
+		rLoc = 1582;
+		rType = 0;
+		vrLen = 1703;
+		vrLoc = 1022;
+	};
+	E195A2A703BE251F00186F9B = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: __VERSION__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1191;
+		vrLoc = 0;
+	};
+	E195A2A803BE251F00186F9B = {
+		fRef = E1A18CAC03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.m: prettyList";
+		rLen = 0;
+		rLoc = 1989;
+		rType = 0;
+		vrLen = 944;
+		vrLoc = 0;
+	};
+	E195A2A903BE251F00186F9B = {
+		fRef = E1A18CAB03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 585;
+		vrLoc = 0;
+	};
+	E195A2AA03BE251F00186F9B = {
+		fRef = E1A18CAC03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.m: __OBJC__";
+		rLen = 0;
+		rLoc = 186;
+		rType = 0;
+		vrLen = 944;
+		vrLoc = 0;
+	};
+	E195A2AC03BE251F00186F9B = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 78";
+		rLen = 0;
+		rLoc = 2730;
+		rType = 0;
+		vrLen = 1220;
+		vrLoc = 2049;
+	};
+	E195A2AD03BE251F00186F9B = {
+		fRef = F59E47C0036B1ADD016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlertController.m: __VERSION__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1553;
+		vrLoc = 0;
+	};
+	E195A2AE03BE251F00186F9B = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 1693;
+		rType = 0;
+		vrLen = 945;
+		vrLoc = 0;
+	};
+	E195A2AF03BE251F00186F9B = {
+		fRef = E1A18CAC03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.m: triggerForAlarm:";
+		rLen = 0;
+		rLoc = 1147;
+		rType = 0;
+		vrLen = 1141;
+		vrLoc = 557;
+	};
+	E195A2B003BE251F00186F9B = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 1942;
+		rType = 0;
+		vrLen = 945;
+		vrLoc = 0;
+	};
+	E195A2B103BE251F00186F9B = {
+		fRef = F59E47B5036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.h: 15";
+		rLen = 0;
+		rLoc = 341;
+		rType = 0;
+		vrLen = 504;
+		vrLoc = 0;
+	};
+	E195A2B203BE251F00186F9B = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: 19";
+		rLen = 0;
+		rLoc = 585;
+		rType = 0;
+		vrLen = 1764;
+		vrLoc = 0;
+	};
+	E195A2B303BE251F00186F9B = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: 18";
+		rLen = 0;
+		rLoc = 717;
+		rType = 0;
+		vrLen = 1400;
+		vrLoc = 0;
+	};
+	E195A2B403BE251F00186F9B = {
+		fRef = F517D6420356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.m: 19";
+		rLen = 0;
+		rLoc = 655;
+		rType = 0;
+		vrLen = 1371;
+		vrLoc = 0;
+	};
+	E195A2B503BE251F00186F9B = {
+		fRef = F517D6430356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.h: 19";
+		rLen = 0;
+		rLoc = 465;
+		rType = 0;
+		vrLen = 814;
+		vrLoc = 0;
+	};
+	E195A2B603BE251F00186F9B = {
+		fRef = F517D6420356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.m: allAlarms";
+		rLen = 0;
+		rLoc = 4424;
+		rType = 0;
+		vrLen = 1234;
+		vrLoc = 2975;
+	};
+	E195A2B703BE251F00186F9B = {
+		fRef = F59E47B5036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.h: 15";
+		rLen = 0;
+		rLoc = 341;
+		rType = 0;
+		vrLen = 518;
+		vrLoc = 0;
+	};
+	E195A2B803BE251F00186F9B = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 2953;
+		rType = 0;
+		vrLen = 954;
+		vrLoc = 0;
+	};
+	E195A2B903BE251F00186F9B = {
+		fRef = F59E47B5036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.h: 15";
+		rLen = 0;
+		rLoc = 341;
+		rType = 0;
+		vrLen = 518;
+		vrLoc = 0;
+	};
+	E195A2BA03BE251F00186F9B = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 2346;
+		rType = 0;
+		vrLen = 1005;
+		vrLoc = 0;
+	};
+	E195A2BB03BE251F00186F9B = {
+		fRef = F59E47B5036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.h: 15";
+		rLen = 0;
+		rLoc = 322;
+		rType = 0;
+		vrLen = 525;
+		vrLoc = 0;
+	};
+	E195A2BC03BE251F00186F9B = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 2027;
+		rType = 0;
+		vrLen = 1025;
+		vrLoc = 0;
+	};
+	E195A2BD03BE251F00186F9B = {
+		fRef = F59E47B5036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.h: 15";
+		rLen = 0;
+		rLoc = 322;
+		rType = 0;
+		vrLen = 525;
+		vrLoc = 0;
+	};
+	E195A2BE03BE251F00186F9B = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: dealloc";
+		rLen = 0;
+		rLoc = 3027;
+		rType = 0;
+		vrLen = 1202;
+		vrLoc = 0;
+	};
+	E195A2C103BE251F00186F9B = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 1752;
+		rType = 0;
+		vrLen = 1633;
+		vrLoc = 201;
+	};
+	E195A2C203BE251F00186F9B = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 12";
+		rLen = 0;
+		rLoc = 215;
+		rType = 0;
+		vrLen = 746;
+		vrLoc = 0;
+	};
+	E195A2C303BE251F00186F9B = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 1752;
+		rType = 0;
+		vrLen = 1196;
+		vrLoc = 2247;
+	};
+	E195A2C403BE251F00186F9B = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 2979;
+		rType = 0;
+		vrLen = 1202;
+		vrLoc = 0;
+	};
+	E195A2C503BE251F00186F9B = {
+		fRef = E195A31B03BE251F00186F9B;
+		isa = PBXTextBookmark;
+		name = "NSFormatter.h: 14";
+		rLen = 20;
+		rLoc = 277;
+		rType = 0;
+		vrLen = 1230;
+		vrLoc = 0;
+	};
+	E195A2C603BE251F00186F9B = {
+		fRef = E195A31C03BE251F00186F9B;
+		isa = PBXTextBookmark;
+		name = "NSDecimalNumber.h: 35";
+		rLen = 8;
+		rLoc = 1139;
+		rType = 0;
+		vrLen = 1562;
+		vrLoc = 0;
+	};
+	E195A2C703BE251F00186F9B = {
+		fRef = E195A31D03BE251F00186F9B;
+		isa = PBXTextBookmark;
+		name = "NSValue.h: 59";
+		rLen = 0;
+		rLoc = 1356;
+		rType = 0;
+		vrLen = 1649;
+		vrLoc = 937;
+	};
+	E195A2C803BE251F00186F9B = {
+		fRef = E195A31E03BE251F00186F9B;
+		isa = PBXTextBookmark;
+		name = "NSFormatter.h: 18";
+		rLen = 27;
+		rLoc = 431;
+		rType = 0;
+		vrLen = 1230;
+		vrLoc = 0;
+	};
+	E195A2C903BE251F00186F9B = {
+		fRef = E195A31F03BE251F00186F9B;
+		glyphRangeLength = 1826;
+		glyphRangeLocation = 1689;
+		isa = PBXDocBookmark;
+		name = "NSFormatter.html: Textual repr...";
+	};
+	E195A2CA03BE251F00186F9B = {
+		fRef = F589C9C6035AA12B0155F4B2;
+		isa = PBXTextBookmark;
+		name = "Read Me.rtfd: 107";
+		rLen = 1;
+		rLoc = 8766;
+		rType = 0;
+		vrLen = 2613;
+		vrLoc = 7027;
+	};
+	E195A2CB03BE251F00186F9B = {
+		fRef = E1F0B14A03AD8CEF00AEFBE0;
+		isa = PBXTextBookmark;
+		name = "NJRUnfocusableMovieView.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 249;
+		vrLoc = 0;
+	};
+	E195A2CD03BE251F00186F9B = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: stopAlerts:";
+		rLen = 0;
+		rLoc = 686;
+		rType = 0;
+		vrLen = 1202;
+		vrLoc = 0;
+	};
+	E195A2CF03BE251F00186F9B = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: __VERSION__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1219;
+		vrLoc = 0;
+	};
+	E195A2D103BE251F00186F9B = {
+		fRef = E1A18CAC03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.m: triggerForAlarm:";
+		rLen = 0;
+		rLoc = 1147;
+		rType = 0;
+		vrLen = 1141;
+		vrLoc = 557;
+	};
+	E195A2D303BE251F00186F9B = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: actionDescription";
+		rLen = 0;
+		rLoc = 929;
+		rType = 0;
+		vrLen = 994;
+		vrLoc = 0;
+	};
+	E195A2D503BE251F00186F9B = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: actionDescription";
+		rLen = 0;
+		rLoc = 929;
+		rType = 0;
+		vrLen = 1004;
+		vrLoc = 0;
+	};
+	E195A2D703BE251F00186F9B = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: actionDescription";
+		rLen = 0;
+		rLoc = 929;
+		rType = 0;
+		vrLen = 1029;
+		vrLoc = 0;
+	};
+	E195A2D903BE251F00186F9B = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: actionDescription";
+		rLen = 0;
+		rLoc = 929;
+		rType = 0;
+		vrLen = 1140;
+		vrLoc = 0;
+	};
+	E195A2DB03BE251F00186F9B = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: 12";
+		rLen = 91;
+		rLoc = 279;
+		rType = 0;
+		vrLen = 1140;
+		vrLoc = 0;
+	};
+	E195A2DD03BE251F00186F9B = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: 12";
+		rLen = 91;
+		rLoc = 279;
+		rType = 0;
+		vrLen = 1140;
+		vrLoc = 0;
+	};
+	E195A2DF03BE251F00186F9B = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: actionDescription";
+		rLen = 44;
+		rLoc = 701;
+		rType = 0;
+		vrLen = 1167;
+		vrLoc = 0;
+	};
+	E195A2E003BE251F00186F9B = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: stopAlerts:";
+		rLen = 0;
+		rLoc = 684;
+		rType = 0;
+		vrLen = 1159;
+		vrLoc = 0;
+	};
+	E195A2E103BE251F00186F9B = {
+		fRef = F59E47B5036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.h: PSAlarmAlertStopNotification";
+		rLen = 54;
+		rLoc = 207;
+		rType = 0;
+		vrLen = 525;
+		vrLoc = 0;
+	};
+	E195A2E203BE251F00186F9B = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: stopAlerts:";
+		rLen = 0;
+		rLoc = 1675;
+		rType = 0;
+		vrLen = 1238;
+		vrLoc = 0;
+	};
+	E195A2E303BE251F00186F9B = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: 12";
+		rLen = 33;
+		rLoc = 296;
+		rType = 0;
+		vrLen = 1167;
+		vrLoc = 0;
+	};
+	E195A2E403BE251F00186F9B = {
+		fRef = F59E47B8036AB217016B311C;
+		isa = PBXTextBookmark;
+		name = "PSDockBounceAlert.m: triggerForAlarm:";
+		rLen = 0;
+		rLoc = 845;
+		rType = 0;
+		vrLen = 1051;
+		vrLoc = 0;
+	};
+	E195A2E503BE251F00186F9B = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: 12";
+		rLen = 33;
+		rLoc = 296;
+		rType = 0;
+		vrLen = 1167;
+		vrLoc = 0;
+	};
+	E195A2E603BE251F00186F9B = {
+		fRef = F59E47B8036AB217016B311C;
+		isa = PBXTextBookmark;
+		name = "PSDockBounceAlert.m: triggerForAlarm:";
+		rLen = 37;
+		rLoc = 809;
+		rType = 0;
+		vrLen = 1083;
+		vrLoc = 0;
+	};
+	E195A2E803BE251F00186F9B = {
+		fRef = F59E47B0036AACD1016B311C;
+		isa = PBXTextBookmark;
+		name = "PSNotifierAlert.m: __VERSION__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 805;
+		vrLoc = 0;
+	};
+	E195A2E903BE251F00186F9B = {
+		fRef = F59E47AC036AAC1E016B311C;
+		isa = PBXTextBookmark;
+		name = "PSBeepAlert.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 434;
+		vrLoc = 0;
+	};
+	E195A2EA03BE251F00186F9B = {
+		fRef = F59E47AB036AAC1E016B311C;
+		isa = PBXTextBookmark;
+		name = "PSBeepAlert.m: triggerForAlarm:";
+		rLen = 0;
+		rLoc = 1531;
+		rType = 0;
+		vrLen = 1443;
+		vrLoc = 836;
+	};
+	E195A2EB03BE251F00186F9B = {
+		fRef = F59E47AC036AAC1E016B311C;
+		isa = PBXTextBookmark;
+		name = "PSBeepAlert.h: 12";
+		rLen = 0;
+		rLoc = 224;
+		rType = 0;
+		vrLen = 434;
+		vrLoc = 0;
+	};
+	E195A2EC03BE251F00186F9B = {
+		fRef = F59E47AB036AAC1E016B311C;
+		isa = PBXTextBookmark;
+		name = "PSBeepAlert.m: dealloc";
+		rLen = 107;
+		rLoc = 668;
+		rType = 0;
+		vrLen = 1194;
+		vrLoc = 648;
+	};
+	E195A2ED03BE251F00186F9B = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: _alertCompleted:";
+		rLen = 0;
+		rLoc = 1605;
+		rType = 0;
+		vrLen = 1435;
+		vrLoc = 538;
+	};
+	E195A2EE03BE251F00186F9B = {
+		fRef = F59E47B8036AB217016B311C;
+		isa = PBXTextBookmark;
+		name = "PSDockBounceAlert.m: triggerForAlarm:";
+		rLen = 37;
+		rLoc = 809;
+		rType = 0;
+		vrLen = 1083;
+		vrLoc = 0;
+	};
+	E195A2F003BE251F00186F9B = {
+		fRef = F59E47B0036AACD1016B311C;
+		isa = PBXTextBookmark;
+		name = "PSNotifierAlert.m: __VERSION__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 805;
+		vrLoc = 0;
+	};
+	E195A2F103BE251F00186F9B = {
+		fRef = F59E47AB036AAC1E016B311C;
+		isa = PBXTextBookmark;
+		name = "PSBeepAlert.m: dealloc";
+		rLen = 107;
+		rLoc = 668;
+		rType = 0;
+		vrLen = 1194;
+		vrLoc = 648;
+	};
+	E195A2F303BE251F00186F9B = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: didFinishSpeaking:";
+		rLen = 0;
+		rLoc = 2205;
+		rType = 0;
+		vrLen = 1254;
+		vrLoc = 1027;
+	};
+	E195A2F403BE251F00186F9B = {
+		fRef = F5F1986D036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.h: 10";
+		rLen = 0;
+		rLoc = 174;
+		rType = 0;
+		vrLen = 422;
+		vrLoc = 0;
+	};
+	E195A2F503BE251F00186F9B = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: 13";
+		rLen = 0;
+		rLoc = 273;
+		rType = 0;
+		vrLen = 1051;
+		vrLoc = 0;
+	};
+	E195A2F603BE251F00186F9B = {
+		fRef = F5F1986D036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.h: 10";
+		rLen = 0;
+		rLoc = 174;
+		rType = 0;
+		vrLen = 422;
+		vrLoc = 0;
+	};
+	E195A2F703BE251F00186F9B = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: triggerForAlarm:";
+		rLen = 0;
+		rLoc = 1033;
+		rType = 0;
+		vrLen = 1252;
+		vrLoc = 1049;
+	};
+	E195A2F803BE251F00186F9B = {
+		fRef = F5F1986D036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.h: 10";
+		rLen = 0;
+		rLoc = 174;
+		rType = 0;
+		vrLen = 422;
+		vrLoc = 0;
+	};
+	E195A2F903BE251F00186F9B = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: initWithPropertyList:";
+		rLen = 0;
+		rLoc = 2016;
+		rType = 0;
+		vrLen = 1249;
+		vrLoc = 1052;
+	};
+	E195A2FA03BE251F00186F9B = {
+		fRef = F5F1986D036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.h: 10";
+		rLen = 0;
+		rLoc = 174;
+		rType = 0;
+		vrLen = 422;
+		vrLoc = 0;
+	};
+	E195A2FC03BE251F00186F9B = {
+		fRef = F59E47BD036AB228016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlert.h: 12";
+		rLen = 0;
+		rLoc = 212;
+		rType = 0;
+		vrLen = 651;
+		vrLoc = 0;
+	};
+	E195A2FE03BE251F00186F9B = {
+		fRef = F59E47BD036AB228016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlert.h: 12";
+		rLen = 0;
+		rLoc = 212;
+		rType = 0;
+		vrLen = 651;
+		vrLoc = 0;
+	};
+	E195A30F03BE251F00186F9B = {
+		isa = PBXFileReference;
+		name = NSHelpManager.h;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSHelpManager.h;
+		refType = 0;
+	};
+	E195A31003BE251F00186F9B = {
+		isa = PBXFileReference;
+		name = NSSet.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSSet.h;
+		refType = 0;
+	};
+	E195A31103BE251F00186F9B = {
+		isa = PBXFileReference;
+		name = NSNumberFormatter.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSNumberFormatter.h;
+		refType = 0;
+	};
+	E195A31203BE251F00186F9B = {
+		isa = PBXFileReference;
+		name = NSDecimalNumber.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSDecimalNumber.h;
+		refType = 0;
+	};
+	E195A31403BE251F00186F9B = {
+		isa = PBXFileReference;
+		name = stdlib.h;
+		path = /usr/include/stdlib.h;
+		refType = 0;
+	};
+	E195A31603BE251F00186F9B = {
+		isa = PBXFileReference;
+		name = NSHelpManager.html;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Resources/English.lproj/Documentation/Reference/ObjC_classic/Classes/NSHelpManager.html;
+		refType = 0;
+	};
+	E195A31703BE251F00186F9B = {
+		isa = PBXFileReference;
+		name = NSFormatter.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSFormatter.h;
+		refType = 0;
+	};
+	E195A31803BE251F00186F9B = {
+		isa = PBXFileReference;
+		name = NSFormatter.html;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Resources/English.lproj/Documentation/Reference/ObjC_classic/Classes/NSFormatter.html;
+		refType = 0;
+	};
+	E195A31B03BE251F00186F9B = {
+		isa = PBXFileReference;
+		name = NSFormatter.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSFormatter.h;
+		refType = 0;
+	};
+	E195A31C03BE251F00186F9B = {
+		isa = PBXFileReference;
+		name = NSDecimalNumber.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSDecimalNumber.h;
+		refType = 0;
+	};
+	E195A31D03BE251F00186F9B = {
+		isa = PBXFileReference;
+		name = NSValue.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSValue.h;
+		refType = 0;
+	};
+	E195A31E03BE251F00186F9B = {
+		isa = PBXFileReference;
+		name = NSFormatter.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSFormatter.h;
+		refType = 0;
+	};
+	E195A31F03BE251F00186F9B = {
+		isa = PBXFileReference;
+		name = NSFormatter.html;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Resources/English.lproj/Documentation/Reference/ObjC_classic/Classes/NSFormatter.html;
+		refType = 0;
+	};
+	E195A32003BE251F00186F9B = {
+		isa = PBXFileReference;
+		name = fp.h;
+		path = /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers/fp.h;
+		refType = 0;
+	};
+	E195A32103BE251F00186F9B = {
+		isa = PBXFileReference;
+		name = float.h;
+		path = /usr/include/gcc/darwin/3.1/float.h;
+		refType = 0;
+	};
+	E19DCB6C03BE4A0A00B934BF = {
+		fRef = F59E47B8036AB217016B311C;
+		isa = PBXTextBookmark;
+		name = "PSDockBounceAlert.m: 44";
+		rLen = 67;
+		rLoc = 1043;
+		rType = 0;
+		vrLen = 1126;
+		vrLoc = 0;
+	};
+	E19DCB7803BE4A0A00B934BF = {
+		fRef = E19DCBC203BE4A0A00B934BF;
+		isa = PBXTextBookmark;
+		name = "NSNotification.h: 34";
+		rLen = 13;
+		rLoc = 765;
+		rType = 0;
+		vrLen = 1240;
+		vrLoc = 0;
+	};
+	E19DCB8203BE4A0A00B934BF = {
+		fRef = E19DCBC303BE4A0A00B934BF;
+		isa = PBXTextBookmark;
+		name = "Movies.h: 1269";
+		rLen = 10;
+		rLoc = 55658;
+		rType = 0;
+		vrLen = 1395;
+		vrLoc = 55000;
+	};
+	E19DCB8303BE4A0A00B934BF = {
+		fRef = E19DCBC403BE4A0A00B934BF;
+		isa = PBXTextBookmark;
+		name = "NSSound.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1487;
+		vrLoc = 0;
+	};
+	E19DCB8503BE4A0A00B934BF = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: 71";
+		rLen = 0;
+		rLoc = 1687;
+		rType = 0;
+		vrLen = 1249;
+		vrLoc = 1052;
+	};
+	E19DCB8603BE4A0A00B934BF = {
+		fRef = E1A18CAC03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.m: 119";
+		rLen = 0;
+		rLoc = 3497;
+		rType = 0;
+		vrLen = 1785;
+		vrLoc = 1426;
+	};
+	E19DCB8703BE4A0A00B934BF = {
+		fRef = F59E47A7036AAA6D016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlert.m: 45";
+		rLen = 0;
+		rLoc = 1178;
+		rType = 0;
+		vrLen = 1167;
+		vrLoc = 0;
+	};
+	E19DCB8903BE4A0A00B934BF = {
+		fRef = F59E47B0036AACD1016B311C;
+		isa = PBXTextBookmark;
+		name = "PSNotifierAlert.m: 37";
+		rLen = 65;
+		rLoc = 827;
+		rType = 0;
+		vrLen = 846;
+		vrLoc = 0;
+	};
+	E19DCB8A03BE4A0A00B934BF = {
+		fRef = F59E47B8036AB217016B311C;
+		isa = PBXTextBookmark;
+		name = "PSDockBounceAlert.m: 44";
+		rLen = 67;
+		rLoc = 1043;
+		rType = 0;
+		vrLen = 1126;
+		vrLoc = 0;
+	};
+	E19DCB8B03BE4A0A00B934BF = {
+		fRef = F59E47B0036AACD1016B311C;
+		isa = PBXTextBookmark;
+		name = "PSNotifierAlert.m: 37";
+		rLen = 65;
+		rLoc = 827;
+		rType = 0;
+		vrLen = 846;
+		vrLoc = 0;
+	};
+	E19DCB8C03BE4A0A00B934BF = {
+		fRef = F59E47AB036AAC1E016B311C;
+		isa = PBXTextBookmark;
+		name = "PSBeepAlert.m: 85";
+		rLen = 0;
+		rLoc = 2192;
+		rType = 0;
+		vrLen = 1429;
+		vrLoc = 850;
+	};
+	E19DCB8E03BE4A0A00B934BF = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: 97";
+		rLen = 0;
+		rLoc = 2296;
+		rType = 0;
+		vrLen = 1249;
+		vrLoc = 1052;
+	};
+	E19DCB9003BE4A0A00B934BF = {
+		fRef = F59E47B0036AACD1016B311C;
+		isa = PBXTextBookmark;
+		name = "PSNotifierAlert.m: 14";
+		rLen = 15;
+		rLoc = 284;
+		rType = 0;
+		vrLen = 846;
+		vrLoc = 0;
+	};
+	E19DCB9103BE4A0A00B934BF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 12";
+		rLen = 0;
+		rLoc = 283;
+		rType = 0;
+		vrLen = 1785;
+		vrLoc = 0;
+	};
+	E19DCB9303BE4A0A00B934BF = {
+		fRef = F59E47C0036B1ADD016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlertController.m: windowWillClose:";
+		rLen = 0;
+		rLoc = 4368;
+		rType = 0;
+		vrLen = 1986;
+		vrLoc = 2295;
+	};
+	E19DCB9403BE4A0A00B934BF = {
+		fRef = F59E47C1036B1ADD016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlertController.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 608;
+		vrLoc = 0;
+	};
+	E19DCB9503BE4A0A00B934BF = {
+		fRef = F59E47C0036B1ADD016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlertController.m: windowWillClose:";
+		rLen = 0;
+		rLoc = 4181;
+		rType = 0;
+		vrLen = 1994;
+		vrLoc = 2295;
+	};
+	E19DCB9603BE4A0A00B934BF = {
+		fRef = F59E47C1036B1ADD016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlertController.h: 25";
+		rLen = 0;
+		rLoc = 649;
+		rType = 0;
+		vrLen = 661;
+		vrLoc = 0;
+	};
+	E19DCB9703BE4A0A00B934BF = {
+		fRef = F59E47C0036B1ADD016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlertController.m: dealloc";
+		rLen = 0;
+		rLoc = 3878;
+		rType = 0;
+		vrLen = 2014;
+		vrLoc = 2373;
+	};
+	E19DCB9803BE4A0A00B934BF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 2958;
+		rType = 0;
+		vrLen = 1561;
+		vrLoc = 460;
+	};
+	E19DCB9903BE4A0A00B934BF = {
+		fRef = F59E47AB036AAC1E016B311C;
+		isa = PBXTextBookmark;
+		name = "PSBeepAlert.m: triggerForAlarm:";
+		rLen = 0;
+		rLoc = 1531;
+		rType = 0;
+		vrLen = 1443;
+		vrLoc = 836;
+	};
+	E19DCB9A03BE4A0A00B934BF = {
+		fRef = F59E47AC036AAC1E016B311C;
+		isa = PBXTextBookmark;
+		name = "PSBeepAlert.h: 11";
+		rLen = 0;
+		rLoc = 170;
+		rType = 0;
+		vrLen = 453;
+		vrLoc = 0;
+	};
+	E19DCB9B03BE4A0A00B934BF = {
+		fRef = F59E47AB036AAC1E016B311C;
+		isa = PBXTextBookmark;
+		name = "PSBeepAlert.m: __OBJC__";
+		rLen = 0;
+		rLoc = 175;
+		rType = 0;
+		vrLen = 975;
+		vrLoc = 0;
+	};
+	E19DCB9C03BE4A0A00B934BF = {
+		fRef = F59E47AC036AAC1E016B311C;
+		isa = PBXTextBookmark;
+		name = "PSBeepAlert.h: 11";
+		rLen = 0;
+		rLoc = 170;
+		rType = 0;
+		vrLen = 453;
+		vrLoc = 0;
+	};
+	E19DCB9D03BE4A0A00B934BF = {
+		fRef = F59E47AB036AAC1E016B311C;
+		isa = PBXTextBookmark;
+		name = "PSBeepAlert.m: dealloc";
+		rLen = 0;
+		rLoc = 687;
+		rType = 0;
+		vrLen = 1060;
+		vrLoc = 514;
+	};
+	E19DCB9E03BE4A0A00B934BF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 2336;
+		rType = 0;
+		vrLen = 1622;
+		vrLoc = 460;
+	};
+	E19DCB9F03BE4A0A00B934BF = {
+		fRef = F59E47AB036AAC1E016B311C;
+		isa = PBXTextBookmark;
+		name = "PSBeepAlert.m: __OBJC__";
+		rLen = 0;
+		rLoc = 198;
+		rType = 0;
+		vrLen = 996;
+		vrLoc = 0;
+	};
+	E19DCBA003BE4A0A00B934BF = {
+		fRef = E1A18CAC03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.m: 119";
+		rLen = 0;
+		rLoc = 3497;
+		rType = 0;
+		vrLen = 1831;
+		vrLoc = 1380;
+	};
+	E19DCBA103BE4A0A00B934BF = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 12";
+		rLen = 0;
+		rLoc = 215;
+		rType = 0;
+		vrLen = 746;
+		vrLoc = 0;
+	};
+	E19DCBA203BE4A0A00B934BF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: _alertCompleted:";
+		rLen = 0;
+		rLoc = 1552;
+		rType = 0;
+		vrLen = 1440;
+		vrLoc = 0;
+	};
+	E19DCBA303BE4A0A00B934BF = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: setTimer";
+		rLen = 0;
+		rLoc = 12003;
+		rType = 0;
+		vrLen = 1866;
+		vrLoc = 10887;
+	};
+	E19DCBA403BE4A0A00B934BF = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: PSAlarmDiedNotification";
+		rLen = 0;
+		rLoc = 717;
+		rType = 0;
+		vrLen = 1400;
+		vrLoc = 0;
+	};
+	E19DCBA503BE4A0A00B934BF = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: setTimer";
+		rLen = 0;
+		rLoc = 12003;
+		rType = 0;
+		vrLen = 1866;
+		vrLoc = 10887;
+	};
+	E19DCBA603BE4A0A00B934BF = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: PSAlarmDiedNotification";
+		rLen = 0;
+		rLoc = 717;
+		rType = 0;
+		vrLen = 1400;
+		vrLoc = 0;
+	};
+	E19DCBA703BE4A0A00B934BF = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: setTimer";
+		rLen = 0;
+		rLoc = 11902;
+		rType = 0;
+		vrLen = 1867;
+		vrLoc = 10887;
+	};
+	E19DCBA803BE4A0A00B934BF = {
+		fRef = F517D6420356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.m: alarm";
+		rLen = 0;
+		rLoc = 4424;
+		rType = 0;
+		vrLen = 1292;
+		vrLoc = 2939;
+	};
+	E19DCBA903BE4A0A00B934BF = {
+		fRef = F517D6430356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.h: 19";
+		rLen = 0;
+		rLoc = 465;
+		rType = 0;
+		vrLen = 814;
+		vrLoc = 0;
+	};
+	E19DCBAA03BE4A0A00B934BF = {
+		fRef = F517D6420356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.m: init";
+		rLen = 0;
+		rLoc = 4151;
+		rType = 0;
+		vrLen = 1554;
+		vrLoc = 2504;
+	};
+	E19DCBAB03BE4A0A00B934BF = {
+		fRef = F517D6430356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.h: 19";
+		rLen = 0;
+		rLoc = 455;
+		rType = 0;
+		vrLen = 814;
+		vrLoc = 0;
+	};
+	E19DCBAC03BE4A0A00B934BF = {
+		fRef = F517D6420356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.m: init";
+		rLen = 0;
+		rLoc = 4151;
+		rType = 0;
+		vrLen = 1554;
+		vrLoc = 2504;
+	};
+	E19DCBAD03BE4A0A00B934BF = {
+		fRef = F517D6430356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.h: 19";
+		rLen = 0;
+		rLoc = 455;
+		rType = 0;
+		vrLen = 814;
+		vrLoc = 0;
+	};
+	E19DCBAE03BE4A0A00B934BF = {
+		fRef = F517D6420356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.m: dealloc";
+		rLen = 0;
+		rLoc = 4335;
+		rType = 0;
+		vrLen = 1581;
+		vrLoc = 2504;
+	};
+	E19DCBAF03BE4A0A00B934BF = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: _timerExpired:";
+		rLen = 0;
+		rLoc = 5331;
+		rType = 0;
+		vrLen = 1894;
+		vrLoc = 3917;
+	};
+	E19DCBB003BE4A0A00B934BF = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: PSAlarmDiedNotification";
+		rLen = 0;
+		rLoc = 717;
+		rType = 0;
+		vrLen = 1400;
+		vrLoc = 0;
+	};
+	E19DCBB103BE4A0A00B934BF = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: _timerExpired:";
+		rLen = 0;
+		rLoc = 5331;
+		rType = 0;
+		vrLen = 1970;
+		vrLoc = 3868;
+	};
+	E19DCBB203BE4A0A00B934BF = {
+		fRef = F589C9C6035AA12B0155F4B2;
+		isa = PBXTextBookmark;
+		name = "Read Me.rtfd: 103";
+		rLen = 0;
+		rLoc = 8906;
+		rType = 0;
+		vrLen = 3512;
+		vrLoc = 4668;
+	};
+	E19DCBB603BE4A0A00B934BF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: _alertCompleted:";
+		rLen = 0;
+		rLoc = 1552;
+		rType = 0;
+		vrLen = 1440;
+		vrLoc = 0;
+	};
+	E19DCBB703BE4A0A00B934BF = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: setTimer";
+		rLen = 18;
+		rLoc = 11703;
+		rType = 0;
+		vrLen = 1867;
+		vrLoc = 10919;
+	};
+	E19DCBB803BE4A0A00B934BF = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: setTimer";
+		rLen = 0;
+		rLoc = 2345;
+		rType = 0;
+		vrLen = 1450;
+		vrLoc = 791;
+	};
+	E19DCBB903BE4A0A00B934BF = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: setTimer";
+		rLen = 0;
+		rLoc = 11722;
+		rType = 0;
+		vrLen = 1867;
+		vrLoc = 10919;
+	};
+	E19DCBBA03BE4A0A00B934BF = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: PSAlarmSnooze";
+		rLen = 0;
+		rLoc = 498;
+		rType = 0;
+		vrLen = 1400;
+		vrLoc = 0;
+	};
+	E19DCBBB03BE4A0A00B934BF = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: isValid";
+		rLen = 17;
+		rLoc = 7204;
+		rType = 0;
+		vrLen = 1154;
+		vrLoc = 6661;
+	};
+	E19DCBBC03BE4A0A00B934BF = {
+		fRef = F517D6420356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.m: _alarmDied:";
+		rLen = 0;
+		rLoc = 4424;
+		rType = 0;
+		vrLen = 1278;
+		vrLoc = 3171;
+	};
+	E19DCBBD03BE4A0A00B934BF = {
+		fRef = E19DCBC103BE4A0A00B934BF;
+		isa = PBXTextBookmark;
+		name = "NSSound.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1487;
+		vrLoc = 0;
+	};
+	E19DCBC103BE4A0A00B934BF = {
+		isa = PBXFileReference;
+		name = NSSound.h;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSSound.h;
+		refType = 0;
+	};
+	E19DCBC203BE4A0A00B934BF = {
+		isa = PBXFileReference;
+		name = NSNotification.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSNotification.h;
+		refType = 0;
+	};
+	E19DCBC303BE4A0A00B934BF = {
+		isa = PBXFileReference;
+		name = Movies.h;
+		path = /System/Library/Frameworks/QuickTime.framework/Versions/A/Headers/Movies.h;
+		refType = 0;
+	};
+	E19DCBC403BE4A0A00B934BF = {
+		isa = PBXFileReference;
+		name = NSSound.h;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSSound.h;
+		refType = 0;
+	};
+	E19DCC8703BE900300B934BF = {
+		fRef = 29B97316FDCFA39411CA2CEA;
+		isa = PBXTextBookmark;
+		name = "main.m: __VERSION__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 252;
+		vrLoc = 0;
+	};
+	E19DCC8803BE900300B934BF = {
+		fRef = E19DCBD203BE4AA200B934BF;
+		isa = PBXTextBookmark;
+		name = "Pester_Prefix.h: __USER_LABEL_PREFIX__";
+		rLen = 0;
+		rLoc = 78;
+		rType = 0;
+		vrLen = 143;
+		vrLoc = 0;
+	};
+	E19DCC8903BE900300B934BF = {
+		fRef = E19DCCE403BE900300B934BF;
+		isa = PBXTextBookmark;
+		name = "math.h: 225";
+		rLen = 4;
+		rLoc = 9556;
+		rType = 0;
+		vrLen = 1314;
+		vrLoc = 8899;
+	};
+	E19DCC8A03BE900300B934BF = {
+		fRef = E19DCCE203BE900300B934BF;
+		isa = PBXTextBookmark;
+		name = "math.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1095;
+		vrLoc = 0;
+	};
+	E19DCC8B03BE900300B934BF = {
+		fRef = E19DCCE303BE900300B934BF;
+		isa = PBXTextBookmark;
+		name = "NSDate.h: 9";
+		rLen = 31;
+		rLoc = 122;
+		rType = 0;
+		vrLen = 1049;
+		vrLoc = 0;
+	};
+	E19DCC8C03BE900300B934BF = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: PSAlarmSnooze";
+		rLen = 0;
+		rLoc = 498;
+		rType = 0;
+		vrLen = 1273;
+		vrLoc = 0;
+	};
+	E19DCC8E03BE900300B934BF = {
+		fRef = E19DCCE503BE900300B934BF;
+		isa = PBXTextBookmark;
+		name = "NSValue.h: 88";
+		rLen = 46;
+		rLoc = 2491;
+		rType = 0;
+		vrLen = 1443;
+		vrLoc = 1143;
+	};
+	E19DCC8F03BE900300B934BF = {
+		fRef = E19DCCE603BE900300B934BF;
+		isa = PBXTextBookmark;
+		name = "NSUserDefaults.h: 66";
+		rLen = 0;
+		rLoc = 2244;
+		rType = 0;
+		vrLen = 1698;
+		vrLoc = 610;
+	};
+	E19DCC9203BE900300B934BF = {
+		fRef = E19DCCDF03BE900300B934BF;
+		isa = PBXTextBookmark;
+		name = "NSTextField.h: 11";
+		rLen = 9;
+		rLoc = 198;
+		rType = 0;
+		vrLen = 1244;
+		vrLoc = 0;
+	};
+	E19DCC9603BE900300B934BF = {
+		fRef = E19DCCE103BE900300B934BF;
+		glyphRangeLength = 1784;
+		glyphRangeLocation = 24666;
+		isa = PBXDocBookmark;
+		name = "NSWindow.html: display  - (...";
+	};
+	E19DCC9703BE900300B934BF = {
+		fRef = F560E2F10357506401A4E466;
+		isa = PBXTextBookmark;
+		name = "PSApplication.m: ";
+		rLen = 0;
+		rLoc = 5496;
+		rType = 0;
+		vrLen = 1840;
+		vrLoc = 3628;
+	};
+	E19DCC9C03BE900300B934BF = {
+		fRef = F560E3160357895001A4E466;
+		isa = PBXTextBookmark;
+		name = "NJRHistoryTrackingComboBox.m: 62";
+		rLen = 0;
+		rLoc = 1883;
+		rType = 0;
+		vrLen = 1252;
+		vrLoc = 1028;
+	};
+	E19DCC9E03BE900300B934BF = {
+		fRef = F59E47C1036B1ADD016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlertController.h: initWithAlarm:movieAlert:";
+		rLen = 0;
+		rLoc = 649;
+		rType = 0;
+		vrLen = 661;
+		vrLoc = 0;
+	};
+	E19DCCA203BE900300B934BF = {
+		fRef = F59E47C0036B1ADD016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlertController.m: controllerWithAlarm:movieAlert:";
+		rLen = 0;
+		rLoc = 621;
+		rType = 0;
+		vrLen = 1544;
+		vrLoc = 0;
+	};
+	E19DCCA303BE900300B934BF = {
+		isa = PBXTargetBookmark;
+		trg = 29B97326FDCFA39411CA2CEA;
+	};
+	E19DCCA403BE900300B934BF = {
+		fRef = 29B97316FDCFA39411CA2CEA;
+		isa = PBXTextBookmark;
+		name = "main.m: __VERSION__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 252;
+		vrLoc = 0;
+	};
+	E19DCCA503BE900300B934BF = {
+		fRef = E19DCBD203BE4AA200B934BF;
+		isa = PBXTextBookmark;
+		name = "Pester_Prefix.h: 2";
+		rLen = 0;
+		rLoc = 78;
+		rType = 0;
+		vrLen = 143;
+		vrLoc = 0;
+	};
+	E19DCCA603BE900300B934BF = {
+		isa = PBXTargetBookmark;
+		trg = 29B97326FDCFA39411CA2CEA;
+	};
+	E19DCCA703BE900300B934BF = {
+		fRef = 29B97316FDCFA39411CA2CEA;
+		isa = PBXTextBookmark;
+		name = "main.m: __VERSION__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 252;
+		vrLoc = 0;
+	};
+	E19DCCA803BE900300B934BF = {
+		fRef = E19DCBD203BE4AA200B934BF;
+		isa = PBXTextBookmark;
+		name = "Pester_Prefix.h: __USER_LABEL_PREFIX__";
+		rLen = 0;
+		rLoc = 78;
+		rType = 0;
+		vrLen = 143;
+		vrLoc = 0;
+	};
+	E19DCCA903BE900300B934BF = {
+		fRef = F517D6420356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.m: alarm";
+		rLen = 0;
+		rLoc = 4424;
+		rType = 0;
+		vrLen = 1228;
+		vrLoc = 3171;
+	};
+	E19DCCAB03BE900300B934BF = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: 475";
+		rLen = 0;
+		rLoc = 16423;
+		rType = 0;
+		vrLen = 1810;
+		vrLoc = 14347;
+	};
+	E19DCCAC03BE900300B934BF = {
+		fRef = F589C9C6035AA12B0155F4B2;
+		isa = PBXTextBookmark;
+		name = "Read Me.rtfd: 103";
+		rLen = 0;
+		rLoc = 8980;
+		rType = 0;
+		vrLen = 2645;
+		vrLoc = 7550;
+	};
+	E19DCCAE03BE900300B934BF = {
+		fRef = F517D6420356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.m: 169";
+		rLen = 11;
+		rLoc = 4768;
+		rType = 0;
+		vrLen = 1022;
+		vrLoc = 4420;
+	};
+	E19DCCAF03BE900300B934BF = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: cancelTimer";
+		rLen = 21;
+		rLoc = 12827;
+		rType = 0;
+		vrLen = 1401;
+		vrLoc = 11494;
+	};
+	E19DCCB003BE900300B934BF = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: PSAlarmSnooze";
+		rLen = 0;
+		rLoc = 498;
+		rType = 0;
+		vrLen = 1273;
+		vrLoc = 0;
+	};
+	E19DCCB103BE900300B934BF = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: 395";
+		rLen = 0;
+		rLoc = 12932;
+		rType = 0;
+		vrLen = 1430;
+		vrLoc = 11999;
+	};
+	E19DCCB203BE900300B934BF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 24";
+		rLen = 0;
+		rLoc = 619;
+		rType = 0;
+		vrLen = 1465;
+		vrLoc = 0;
+	};
+	E19DCCB303BE900300B934BF = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 30";
+		rLen = 46;
+		rLoc = 752;
+		rType = 0;
+		vrLen = 792;
+		vrLoc = 0;
+	};
+	E19DCCB403BE900300B934BF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: ";
+		rLen = 0;
+		rLoc = 3587;
+		rType = 0;
+		vrLen = 1145;
+		vrLoc = 2540;
+	};
+	E19DCCB503BE900300B934BF = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 20";
+		rLen = 0;
+		rLoc = 535;
+		rType = 0;
+		vrLen = 792;
+		vrLoc = 0;
+	};
+	E19DCCB603BE900300B934BF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 45";
+		rLen = 0;
+		rLoc = 1752;
+		rType = 0;
+		vrLen = 1566;
+		vrLoc = 465;
+	};
+	E19DCCB703BE900300B934BF = {
+		fRef = F59E47B5036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.h: PSAlarmAlertStopNotification";
+		rLen = 54;
+		rLoc = 207;
+		rType = 0;
+		vrLen = 525;
+		vrLoc = 0;
+	};
+	E19DCCB903BE900300B934BF = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: _alertCompleted:";
+		rLen = 0;
+		rLoc = 1552;
+		rType = 0;
+		vrLen = 1267;
+		vrLoc = 0;
+	};
+	E19DCCBA03BE900300B934BF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 39";
+		rLen = 0;
+		rLoc = 1250;
+		rType = 0;
+		vrLen = 1641;
+		vrLoc = 314;
+	};
+	E19DCCBB03BE900300B934BF = {
+		fRef = F589C9C6035AA12B0155F4B2;
+		isa = PBXTextBookmark;
+		name = "Read Me.rtfd: 90";
+		rLen = 0;
+		rLoc = 6597;
+		rType = 0;
+		vrLen = 2581;
+		vrLoc = 4602;
+	};
+	E19DCCBC03BE900300B934BF = {
+		fRef = E19DCCE903BE900300B934BF;
+		isa = PBXTextBookmark;
+		name = "NSTextField.h: 11";
+		rLen = 9;
+		rLoc = 198;
+		rType = 0;
+		vrLen = 1244;
+		vrLoc = 0;
+	};
+	E19DCCBD03BE900300B934BF = {
+		fRef = E19DCCE803BE900300B934BF;
+		isa = PBXTextBookmark;
+		name = "NSControl.h: 115";
+		rLen = 111;
+		rLoc = 3488;
+		rType = 0;
+		vrLen = 1658;
+		vrLoc = 2392;
+	};
+	E19DCCBE03BE900300B934BF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 120";
+		rLen = 0;
+		rLoc = 4586;
+		rType = 0;
+		vrLen = 1470;
+		vrLoc = 2746;
+	};
+	E19DCCBF03BE900300B934BF = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 20";
+		rLen = 0;
+		rLoc = 535;
+		rType = 0;
+		vrLen = 792;
+		vrLoc = 0;
+	};
+	E19DCCC003BE900300B934BF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 120";
+		rLen = 0;
+		rLoc = 4586;
+		rType = 0;
+		vrLen = 1469;
+		vrLoc = 2746;
+	};
+	E19DCCC103BE900300B934BF = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: close:";
+		rLen = 0;
+		rLoc = 704;
+		rType = 0;
+		vrLen = 784;
+		vrLoc = 0;
+	};
+	E19DCCC203BE900300B934BF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 126";
+		rLen = 0;
+		rLoc = 4870;
+		rType = 0;
+		vrLen = 1609;
+		vrLoc = 2804;
+	};
+	E19DCCC303BE900300B934BF = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: 376";
+		rLen = 0;
+		rLoc = 12290;
+		rType = 0;
+		vrLen = 1806;
+		vrLoc = 10936;
+	};
+	E19DCCC403BE900300B934BF = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: close:";
+		rLen = 0;
+		rLoc = 704;
+		rType = 0;
+		vrLen = 784;
+		vrLoc = 0;
+	};
+	E19DCCC503BE900300B934BF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: canSnooze";
+		rLen = 9;
+		rLoc = 2436;
+		rType = 0;
+		vrLen = 1209;
+		vrLoc = 1910;
+	};
+	E19DCCC603BE900300B934BF = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 24";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 804;
+		vrLoc = 0;
+	};
+	E19DCCC703BE900300B934BF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 78";
+		rLen = 0;
+		rLoc = 2484;
+		rType = 0;
+		vrLen = 1209;
+		vrLoc = 1695;
+	};
+	E19DCCC803BE900300B934BF = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 25";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 804;
+		vrLoc = 0;
+	};
+	E19DCCC903BE900300B934BF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 78";
+		rLen = 0;
+		rLoc = 2484;
+		rType = 0;
+		vrLen = 1207;
+		vrLoc = 1695;
+	};
+	E19DCCCA03BE900300B934BF = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 25";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 804;
+		vrLoc = 0;
+	};
+	E19DCCCB03BE900300B934BF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 79";
+		rLen = 0;
+		rLoc = 2525;
+		rType = 0;
+		vrLen = 1296;
+		vrLoc = 1987;
+	};
+	E19DCCCD03BE900300B934BF = {
+		fRef = F560E2F10357506401A4E466;
+		isa = PBXTextBookmark;
+		name = "PSApplication.m: ";
+		rLen = 0;
+		rLoc = 5496;
+		rType = 0;
+		vrLen = 1840;
+		vrLoc = 3628;
+	};
+	E19DCCCE03BE900300B934BF = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: 383";
+		rLen = 0;
+		rLoc = 12563;
+		rType = 0;
+		vrLen = 1405;
+		vrLoc = 11532;
+	};
+	E19DCCCF03BE900300B934BF = {
+		fRef = F589C9C6035AA12B0155F4B2;
+		isa = PBXTextBookmark;
+		name = "Read Me.rtfd: 90";
+		rLen = 0;
+		rLoc = 6597;
+		rType = 0;
+		vrLen = 2581;
+		vrLoc = 4602;
+	};
+	E19DCCD103BE900300B934BF = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 145";
+		rLen = 0;
+		rLoc = 5133;
+		rType = 0;
+		vrLen = 1524;
+		vrLoc = 3698;
+	};
+	E19DCCD203BE900300B934BF = {
+		fRef = F589C9C6035AA12B0155F4B2;
+		isa = PBXTextBookmark;
+		name = "Read Me.rtfd: 113";
+		rLen = 0;
+		rLoc = 10205;
+		rType = 0;
+		vrLen = 2830;
+		vrLoc = 7613;
+	};
+	E19DCCD403BE900300B934BF = {
+		fRef = F5F240CC036A877301FE7503;
+		isa = PBXTextBookmark;
+		name = "NJRQTMediaPopUpButton.m: 181";
+		rLen = 0;
+		rLoc = 6701;
+		rType = 0;
+		vrLen = 952;
+		vrLoc = 6028;
+	};
+	E19DCCD503BE900300B934BF = {
+		fRef = F560E3160357895001A4E466;
+		isa = PBXTextBookmark;
+		name = "NJRHistoryTrackingComboBox.m: 62";
+		rLen = 0;
+		rLoc = 1883;
+		rType = 0;
+		vrLen = 1252;
+		vrLoc = 1028;
+	};
+	E19DCCD603BE900300B934BF = {
+		fRef = F517D6420356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.m: 169";
+		rLen = 11;
+		rLoc = 4768;
+		rType = 0;
+		vrLen = 1007;
+		vrLoc = 4420;
+	};
+	E19DCCD703BE900300B934BF = {
+		fRef = F589C9C6035AA12B0155F4B2;
+		isa = PBXTextBookmark;
+		name = "Read Me.rtfd: 86";
+		rLen = 0;
+		rLoc = 6155;
+		rType = 0;
+		vrLen = 2751;
+		vrLoc = 4838;
+	};
+	E19DCCD803BE900300B934BF = {
+		fRef = F59E47C0036B1ADD016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlertController.m: 92";
+		rLen = 0;
+		rLoc = 3878;
+		rType = 0;
+		vrLen = 1703;
+		vrLoc = 2680;
+	};
+	E19DCCD903BE900300B934BF = {
+		fRef = F59E47C1036B1ADD016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlertController.h: initWithAlarm:movieAlert:";
+		rLen = 0;
+		rLoc = 649;
+		rType = 0;
+		vrLen = 661;
+		vrLoc = 0;
+	};
+	E19DCCDA03BE900300B934BF = {
+		fRef = F59E47C0036B1ADD016B311C;
+		isa = PBXTextBookmark;
+		name = "PSMovieAlertController.m: 105";
+		rLen = 0;
+		rLoc = 4196;
+		rType = 0;
+		vrLen = 1707;
+		vrLoc = 2680;
+	};
+	E19DCCDB03BE900300B934BF = {
+		fRef = F5F240CC036A877301FE7503;
+		isa = PBXTextBookmark;
+		name = "NJRQTMediaPopUpButton.m: ";
+		rLen = 0;
+		rLoc = 4123;
+		rType = 0;
+		vrLen = 1323;
+		vrLoc = 0;
+	};
+	E19DCCDF03BE900300B934BF = {
+		isa = PBXFileReference;
+		name = NSTextField.h;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSTextField.h;
+		refType = 0;
+	};
+	E19DCCE103BE900300B934BF = {
+		isa = PBXFileReference;
+		name = NSWindow.html;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Resources/English.lproj/Documentation/Reference/ObjC_classic/Classes/NSWindow.html;
+		refType = 0;
+	};
+	E19DCCE203BE900300B934BF = {
+		isa = PBXFileReference;
+		name = math.h;
+		path = /usr/include/math.h;
+		refType = 0;
+	};
+	E19DCCE303BE900300B934BF = {
+		isa = PBXFileReference;
+		name = NSDate.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSDate.h;
+		refType = 0;
+	};
+	E19DCCE403BE900300B934BF = {
+		isa = PBXFileReference;
+		name = math.h;
+		path = /usr/include/architecture/ppc/math.h;
+		refType = 0;
+	};
+	E19DCCE503BE900300B934BF = {
+		isa = PBXFileReference;
+		name = NSValue.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSValue.h;
+		refType = 0;
+	};
+	E19DCCE603BE900300B934BF = {
+		isa = PBXFileReference;
+		name = NSUserDefaults.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSUserDefaults.h;
+		refType = 0;
+	};
+	E19DCCE803BE900300B934BF = {
+		isa = PBXFileReference;
+		name = NSControl.h;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSControl.h;
+		refType = 0;
+	};
+	E19DCCE903BE900300B934BF = {
+		isa = PBXFileReference;
+		name = NSTextField.h;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSTextField.h;
+		refType = 0;
+	};
+	E1A9DEE703BF3C110089E8B2 = {
+		isa = PBXSymbolicBreakpoint;
+		state = 1;
+		symbolName = "-[_NSZombie release]";
+	};
+	E1A9DEEB03BF480F0089E8B2 = {
+		fRef = E1A9DF1103BF480F0089E8B2;
+		isa = PBXTextBookmark;
+		name = "NSPopUpButton.h: 23";
+		rLen = 0;
+		rLoc = 546;
+		rType = 0;
+		vrLen = 1222;
+		vrLoc = 1166;
+	};
+	E1A9DEEE03BF480F0089E8B2 = {
+		fRef = E1A9DF1303BF480F0089E8B2;
+		isa = PBXTextBookmark;
+		name = "NSStepper.h: 10";
+		rLen = 9;
+		rLoc = 187;
+		rType = 0;
+		vrLen = 636;
+		vrLoc = 0;
+	};
+	E1A9DEF003BF480F0089E8B2 = {
+		fRef = F5F240CC036A877301FE7503;
+		isa = PBXTextBookmark;
+		name = "NJRQTMediaPopUpButton.m: ";
+		rLen = 0;
+		rLoc = 6837;
+		rType = 0;
+		vrLen = 1590;
+		vrLoc = 6840;
+	};
+	E1A9DEF103BF480F0089E8B2 = {
+		fRef = F59E47AC036AAC1E016B311C;
+		isa = PBXTextBookmark;
+		name = "PSBeepAlert.h: 11";
+		rLen = 0;
+		rLoc = 170;
+		rType = 0;
+		vrLen = 453;
+		vrLoc = 0;
+	};
+	E1A9DEF203BF480F0089E8B2 = {
+		fRef = F59E47AB036AAC1E016B311C;
+		isa = PBXTextBookmark;
+		name = "PSBeepAlert.m: __STDC__";
+		rLen = 0;
+		rLoc = 163;
+		rType = 0;
+		vrLen = 852;
+		vrLoc = 0;
+	};
+	E1A9DEF703BF480F0089E8B2 = {
+		fRef = F589C9C6035AA12B0155F4B2;
+		isa = PBXTextBookmark;
+		name = "Read Me.rtfd: 167";
+		rLen = 0;
+		rLoc = 12371;
+		rType = 0;
+		vrLen = 2647;
+		vrLoc = 8836;
+	};
+	E1A9DEF903BF480F0089E8B2 = {
+		fRef = F59DC6D30353C9E601AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmSetController.h: 16";
+		rLen = 0;
+		rLoc = 371;
+		rType = 0;
+		vrLen = 1530;
+		vrLoc = 0;
+	};
+	E1A9DEFB03BF480F0089E8B2 = {
+		fRef = F5F240CC036A877301FE7503;
+		isa = PBXTextBookmark;
+		name = "NJRQTMediaPopUpButton.m: 259";
+		rLen = 0;
+		rLoc = 9493;
+		rType = 0;
+		vrLen = 1353;
+		vrLoc = 8714;
+	};
+	E1A9DEFC03BF480F0089E8B2 = {
+		fRef = F5F240CA036A869401FE7503;
+		isa = PBXTextBookmark;
+		name = "BDAlias.m: __VERSION__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 920;
+		vrLoc = 1697;
+	};
+	E1A9DEFD03BF480F0089E8B2 = {
+		fRef = F5F240CC036A877301FE7503;
+		isa = PBXTextBookmark;
+		name = "NJRQTMediaPopUpButton.m: ";
+		rLen = 0;
+		rLoc = 6312;
+		rType = 0;
+		vrLen = 960;
+		vrLoc = 6020;
+	};
+	E1A9DEFE03BF480F0089E8B2 = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: _alertCompleted:";
+		rLen = 0;
+		rLoc = 1552;
+		rType = 0;
+		vrLen = 1267;
+		vrLoc = 0;
+	};
+	E1A9DF0003BF480F0089E8B2 = {
+		fRef = F59DC6D30353C9E601AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmSetController.h: 33";
+		rLen = 9;
+		rLoc = 1132;
+		rType = 0;
+		vrLen = 1530;
+		vrLoc = 0;
+	};
+	E1A9DF0203BF480F0089E8B2 = {
+		fRef = F5F240CC036A877301FE7503;
+		isa = PBXTextBookmark;
+		name = "NJRQTMediaPopUpButton.m: ";
+		rLen = 0;
+		rLoc = 6837;
+		rType = 0;
+		vrLen = 1590;
+		vrLoc = 6840;
+	};
+	E1A9DF0303BF480F0089E8B2 = {
+		fRef = F59E47AB036AAC1E016B311C;
+		isa = PBXTextBookmark;
+		name = "PSBeepAlert.m: 18";
+		rLen = 0;
+		rLoc = 392;
+		rType = 0;
+		vrLen = 852;
+		vrLoc = 0;
+	};
+	E1A9DF0403BF480F0089E8B2 = {
+		fRef = F59E47AC036AAC1E016B311C;
+		isa = PBXTextBookmark;
+		name = "PSBeepAlert.h: 11";
+		rLen = 0;
+		rLoc = 170;
+		rType = 0;
+		vrLen = 453;
+		vrLoc = 0;
+	};
+	E1A9DF0503BF480F0089E8B2 = {
+		fRef = F59E47AB036AAC1E016B311C;
+		isa = PBXTextBookmark;
+		name = "PSBeepAlert.m: __STDC__";
+		rLen = 0;
+		rLoc = 163;
+		rType = 0;
+		vrLen = 852;
+		vrLoc = 0;
+	};
+	E1A9DF0603BF480F0089E8B2 = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: voice";
+		rLen = 0;
+		rLoc = 853;
+		rType = 0;
+		vrLen = 908;
+		vrLoc = 0;
+	};
+	E1A9DF0703BF480F0089E8B2 = {
+		fRef = F589C9C6035AA12B0155F4B2;
+		isa = PBXTextBookmark;
+		name = "Read Me.rtfd: 103";
+		rLen = 0;
+		rLoc = 8933;
+		rType = 0;
+		vrLen = 2871;
+		vrLoc = 6954;
+	};
+	E1A9DF0803BF480F0089E8B2 = {
+		fRef = F5F1986C036B813101EB0372;
+		isa = PBXTextBookmark;
+		name = "PSSpeechAlert.m: ";
+		rLen = 0;
+		rLoc = 2109;
+		rType = 0;
+		vrLen = 1218;
+		vrLoc = 1083;
+	};
+	E1A9DF0A03BF480F0089E8B2 = {
+		fRef = F59DC6D30353C9E601AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmSetController.h: 37";
+		rLen = 7;
+		rLoc = 1322;
+		rType = 0;
+		vrLen = 1520;
+		vrLoc = 509;
+	};
+	E1A9DF1103BF480F0089E8B2 = {
+		isa = PBXFileReference;
+		name = NSPopUpButton.h;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSPopUpButton.h;
+		refType = 0;
+	};
+	E1A9DF1303BF480F0089E8B2 = {
+		isa = PBXFileReference;
+		name = NSStepper.h;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSStepper.h;
+		refType = 0;
+	};
+	E1D2936E03BD2A2700F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: initWithAlarm:";
+		rLen = 40;
+		rLoc = 637;
+		rType = 0;
+		vrLen = 1672;
+		vrLoc = 380;
+	};
+	E1D2937503BD418200F9204E = {
+		fRef = E1D2945A03BD418200F9204E;
+		isa = PBXTextBookmark;
+		name = "NSButton.h: 13";
+		rLen = 9;
+		rLoc = 206;
+		rType = 0;
+		vrLen = 1162;
+		vrLoc = 0;
+	};
+	E1D2937B03BD418200F9204E = {
+		fRef = E1D2945C03BD418200F9204E;
+		glyphRangeLength = 0;
+		glyphRangeLocation = 0;
+		isa = PBXDocBookmark;
+	};
+	E1D2937C03BD418200F9204E = {
+		fRef = E1D2945D03BD418200F9204E;
+		glyphRangeLength = 770;
+		glyphRangeLocation = 7269;
+		isa = PBXDocBookmark;
+		name = "NSTimer.html: isValid  - (...";
+	};
+	E1D2937E03BD418200F9204E = {
+		fRef = E13919E203B9E4E100000028;
+		isa = PBXTextBookmark;
+		name = "NJRIntervalField.h: 17";
+		rLen = 0;
+		rLoc = 378;
+		rType = 0;
+		vrLen = 385;
+		vrLoc = 0;
+	};
+	E1D2938303BD418200F9204E = {
+		fRef = E1D2945F03BD418200F9204E;
+		isa = PBXTextBookmark;
+		name = "NSWindowController.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1770;
+		vrLoc = 0;
+	};
+	E1D2938403BD418200F9204E = {
+		fRef = E1D2946003BD418200F9204E;
+		isa = PBXTextBookmark;
+		name = "NSWindow.h: 442";
+		rLen = 56;
+		rLoc = 15678;
+		rType = 0;
+		vrLen = 2148;
+		vrLoc = 14728;
+	};
+	E1D2938503BD418200F9204E = {
+		fRef = E1D2946103BD418200F9204E;
+		glyphRangeLength = 0;
+		glyphRangeLocation = 0;
+		isa = PBXDocBookmark;
+	};
+	E1D2938603BD418200F9204E = {
+		fRef = E1D2946203BD418200F9204E;
+		glyphRangeLength = 1683;
+		glyphRangeLocation = 0;
+		isa = PBXDocBookmark;
+		name = "HowWindowIsDisplayed.html: Show Topic  ...";
+	};
+	E1D2938903BD418200F9204E = {
+		fRef = E1D2946303BD418200F9204E;
+		isa = PBXTextBookmark;
+		name = "NSTimer.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1129;
+		vrLoc = 0;
+	};
+	E1D2939103BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 1827;
+		rType = 0;
+		vrLen = 645;
+		vrLoc = 299;
+	};
+	E1D2939203BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 7";
+		rLen = 0;
+		rLoc = 161;
+		rType = 0;
+		vrLen = 506;
+		vrLoc = 0;
+	};
+	E1D2939303BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: isRepeating";
+		rLen = 0;
+		rLoc = 8803;
+		rType = 0;
+		vrLen = 320;
+		vrLoc = 7792;
+	};
+	E1D2939403BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1106;
+		vrLoc = 814;
+	};
+	E1D2939503BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: close:";
+		rLen = 0;
+		rLoc = 1752;
+		rType = 0;
+		vrLen = 1339;
+		vrLoc = 0;
+	};
+	E1D2939603BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: _stringForInterval:";
+		rLen = 0;
+		rLoc = 4351;
+		rType = 0;
+		vrLen = 1632;
+		vrLoc = 3423;
+	};
+	E1D2939703BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: initWithAlarm:";
+		rLen = 14;
+		rLoc = 1393;
+		rType = 0;
+		vrLen = 1462;
+		vrLoc = 0;
+	};
+	E1D2939803BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: _timerExpired:";
+		rLen = 41;
+		rLoc = 5160;
+		rType = 0;
+		vrLen = 1626;
+		vrLoc = 3591;
+	};
+	E1D2939903BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1126;
+		vrLoc = 794;
+	};
+	E1D2939A03BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: setTimer";
+		rLen = 0;
+		rLoc = 11727;
+		rType = 0;
+		vrLen = 1583;
+		vrLoc = 8439;
+	};
+	E1D2939B03BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: 2";
+		rLen = 0;
+		rLoc = 3;
+		rType = 0;
+		vrLen = 1140;
+		vrLoc = 0;
+	};
+	E1D2939C03BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: _beValidWithType:";
+		rLen = 0;
+		rLoc = 2637;
+		rType = 0;
+		vrLen = 1538;
+		vrLoc = 141;
+	};
+	E1D2939D03BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: 19";
+		rLen = 0;
+		rLoc = 732;
+		rType = 0;
+		vrLen = 1184;
+		vrLoc = 450;
+	};
+	E1D2939E03BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: timeRemainingString";
+		rLen = 0;
+		rLoc = 10743;
+		rType = 0;
+		vrLen = 1441;
+		vrLoc = 8086;
+	};
+	E1D2939F03BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: 19";
+		rLen = 0;
+		rLoc = 732;
+		rType = 0;
+		vrLen = 1184;
+		vrLoc = 450;
+	};
+	E1D293A003BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: _beValidWithType:";
+		rLen = 0;
+		rLoc = 2831;
+		rType = 0;
+		vrLen = 1215;
+		vrLoc = 2336;
+	};
+	E1D293A103BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: 19";
+		rLen = 0;
+		rLoc = 732;
+		rType = 0;
+		vrLen = 1139;
+		vrLoc = 0;
+	};
+	E1D293A203BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: setTimer";
+		rLen = 0;
+		rLoc = 11727;
+		rType = 0;
+		vrLen = 1063;
+		vrLoc = 9535;
+	};
+	E1D293A303BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: 19";
+		rLen = 0;
+		rLoc = 732;
+		rType = 0;
+		vrLen = 1139;
+		vrLoc = 0;
+	};
+	E1D293A403BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: 25";
+		rLen = 0;
+		rLoc = 1076;
+		rType = 0;
+		vrLen = 1568;
+		vrLoc = 0;
+	};
+	E1D293A503BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: 19";
+		rLen = 0;
+		rLoc = 732;
+		rType = 0;
+		vrLen = 1139;
+		vrLoc = 0;
+	};
+	E1D293A603BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: nextDateTimeString";
+		rLen = 0;
+		rLoc = 10743;
+		rType = 0;
+		vrLen = 1484;
+		vrLoc = 7975;
+	};
+	E1D293A703BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: 19";
+		rLen = 0;
+		rLoc = 732;
+		rType = 0;
+		vrLen = 1139;
+		vrLoc = 0;
+	};
+	E1D293A803BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: dateTimeString";
+		rLen = 30;
+		rLoc = 9181;
+		rType = 0;
+		vrLen = 989;
+		vrLoc = 7753;
+	};
+	E1D293A903BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: timeRemainingString";
+		rLen = 0;
+		rLoc = 2009;
+		rType = 0;
+		vrLen = 1197;
+		vrLoc = 449;
+	};
+	E1D293AA03BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: nextDateTimeString";
+		rLen = 0;
+		rLoc = 10743;
+		rType = 0;
+		vrLen = 1702;
+		vrLoc = 8612;
+	};
+	E1D293AB03BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: 55";
+		rLen = 0;
+		rLoc = 2009;
+		rType = 0;
+		vrLen = 1170;
+		vrLoc = 449;
+	};
+	E1D293AC03BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: initialize";
+		rLen = 0;
+		rLoc = 9306;
+		rType = 0;
+		vrLen = 1775;
+		vrLoc = 8244;
+	};
+	E1D293AD03BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: timeRemainingString";
+		rLen = 0;
+		rLoc = 2008;
+		rType = 0;
+		vrLen = 1170;
+		vrLoc = 449;
+	};
+	E1D293AE03BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: hour";
+		rLen = 0;
+		rLoc = 9370;
+		rType = 0;
+		vrLen = 1770;
+		vrLoc = 8244;
+	};
+	E1D293AF03BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: nextDateTimeString";
+		rLen = 0;
+		rLoc = 2008;
+		rType = 0;
+		vrLen = 1219;
+		vrLoc = 449;
+	};
+	E1D293B003BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 1476;
+		rType = 0;
+		vrLen = 1397;
+		vrLoc = 0;
+	};
+	E1D293B203BD418200F9204E = {
+		fRef = F59DC6D30353C9E601AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmSetController.h: 21";
+		rLen = 19;
+		rLoc = 562;
+		rType = 0;
+		vrLen = 1459;
+		vrLoc = 0;
+	};
+	E1D293B403BD418200F9204E = {
+		fRef = E1D2946703BD418200F9204E;
+		isa = PBXTextBookmark;
+		name = "NSButton.h: 13";
+		rLen = 9;
+		rLoc = 206;
+		rType = 0;
+		vrLen = 1162;
+		vrLoc = 0;
+	};
+	E1D293B503BD418200F9204E = {
+		fRef = E1D2946803BD418200F9204E;
+		isa = PBXTextBookmark;
+		name = "NSControl.h: 14";
+		rLen = 2;
+		rLoc = 274;
+		rType = 0;
+		vrLen = 1658;
+		vrLoc = 2392;
+	};
+	E1D293B703BD418200F9204E = {
+		fRef = E1D2946903BD418200F9204E;
+		isa = PBXTextBookmark;
+		name = "NSControl.h: 30";
+		rLen = 0;
+		rLoc = 721;
+		rType = 0;
+		vrLen = 1246;
+		vrLoc = 477;
+	};
+	E1D293B903BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 50";
+		rLen = 0;
+		rLoc = 2727;
+		rType = 0;
+		vrLen = 1312;
+		vrLoc = 382;
+	};
+	E1D293BA03BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 7";
+		rLen = 0;
+		rLoc = 161;
+		rType = 0;
+		vrLen = 671;
+		vrLoc = 0;
+	};
+	E1D293BB03BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 50";
+		rLen = 0;
+		rLoc = 2727;
+		rType = 0;
+		vrLen = 1060;
+		vrLoc = 1295;
+	};
+	E1D293BC03BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 7";
+		rLen = 0;
+		rLoc = 161;
+		rType = 0;
+		vrLen = 671;
+		vrLoc = 0;
+	};
+	E1D293BD03BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: update:";
+		rLen = 0;
+		rLoc = 2661;
+		rType = 0;
+		vrLen = 958;
+		vrLoc = 1295;
+	};
+	E1D293BE03BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 7";
+		rLen = 0;
+		rLoc = 161;
+		rType = 0;
+		vrLen = 671;
+		vrLoc = 0;
+	};
+	E1D293BF03BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: update:";
+		rLen = 0;
+		rLoc = 2627;
+		rType = 0;
+		vrLen = 1009;
+		vrLoc = 1295;
+	};
+	E1D293C003BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 7";
+		rLen = 0;
+		rLoc = 161;
+		rType = 0;
+		vrLen = 671;
+		vrLoc = 0;
+	};
+	E1D293C103BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 1932;
+		rType = 0;
+		vrLen = 1562;
+		vrLoc = 474;
+	};
+	E1D293C203BD418200F9204E = {
+		fRef = F5F240CA036A869401FE7503;
+		isa = PBXTextBookmark;
+		name = "BDAlias.m: ret";
+		rLen = 0;
+		rLoc = 3776;
+		rType = 0;
+		vrLen = 779;
+		vrLoc = 3292;
+	};
+	E1D293C403BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 22";
+		rLen = 0;
+		rLoc = 636;
+		rType = 0;
+		vrLen = 1506;
+		vrLoc = 0;
+	};
+	E1D293C503BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 21";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 697;
+		vrLoc = 0;
+	};
+	E1D293C603BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: update:";
+		rLen = 0;
+		rLoc = 2401;
+		rType = 0;
+		vrLen = 1514;
+		vrLoc = 527;
+	};
+	E1D293C703BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 21";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 697;
+		vrLoc = 0;
+	};
+	E1D293C803BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: close:";
+		rLen = 0;
+		rLoc = 2400;
+		rType = 0;
+		vrLen = 1891;
+		vrLoc = 474;
+	};
+	E1D293C903BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 21";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 697;
+		vrLoc = 0;
+	};
+	E1D293CA03BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: control:didFailToValidatePartialString:errorDescription:";
+		rLen = 1;
+		rLoc = 2759;
+		rType = 0;
+		vrLen = 1498;
+		vrLoc = 831;
+	};
+	E1D293CB03BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 27";
+		rLen = 85;
+		rLoc = 713;
+		rType = 0;
+		vrLen = 694;
+		vrLoc = 0;
+	};
+	E1D293CC03BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: updateNextDateDisplay:";
+		rLen = 0;
+		rLoc = 2381;
+		rType = 0;
+		vrLen = 1625;
+		vrLoc = 0;
+	};
+	E1D293CD03BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 22";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 714;
+		vrLoc = 0;
+	};
+	E1D293CE03BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: updateNextDateDisplay:";
+		rLen = 0;
+		rLoc = 2381;
+		rType = 0;
+		vrLen = 1625;
+		vrLoc = 0;
+	};
+	E1D293CF03BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 22";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 714;
+		vrLoc = 0;
+	};
+	E1D293D003BD418200F9204E = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: __VERSION__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 877;
+		vrLoc = 0;
+	};
+	E1D293D103BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: updateNextDateDisplay:";
+		rLen = 0;
+		rLoc = 2381;
+		rType = 0;
+		vrLen = 1625;
+		vrLoc = 0;
+	};
+	E1D293D203BD418200F9204E = {
+		fRef = F59E47B5036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 493;
+		vrLoc = 0;
+	};
+	E1D293D303BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 22";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 714;
+		vrLoc = 0;
+	};
+	E1D293D403BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 647;
+		rType = 0;
+		vrLen = 1625;
+		vrLoc = 0;
+	};
+	E1D293D503BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 22";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 714;
+		vrLoc = 0;
+	};
+	E1D293D603BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 647;
+		rType = 0;
+		vrLen = 1625;
+		vrLoc = 0;
+	};
+	E1D293D703BD418200F9204E = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: __VERSION__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 877;
+		vrLoc = 0;
+	};
+	E1D293D803BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 23";
+		rLen = 0;
+		rLoc = 636;
+		rType = 0;
+		vrLen = 1625;
+		vrLoc = 0;
+	};
+	E1D293D903BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 22";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 714;
+		vrLoc = 0;
+	};
+	E1D293DA03BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 23";
+		rLen = 0;
+		rLoc = 636;
+		rType = 0;
+		vrLen = 1670;
+		vrLoc = 380;
+	};
+	E1D293DB03BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 22";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 694;
+		vrLoc = 0;
+	};
+	E1D293DC03BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: initWithAlarm:";
+		rLen = 7;
+		rLoc = 668;
+		rType = 0;
+		vrLen = 1672;
+		vrLoc = 380;
+	};
+	E1D293DD03BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: initWithAlarm:";
+		rLen = 40;
+		rLoc = 642;
+		rType = 0;
+		vrLen = 694;
+		vrLoc = 0;
+	};
+	E1D293DE03BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: initWithAlarm:";
+		rLen = 40;
+		rLoc = 637;
+		rType = 0;
+		vrLen = 1672;
+		vrLoc = 380;
+	};
+	E1D293DF03BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 25";
+		rLen = 0;
+		rLoc = 682;
+		rType = 0;
+		vrLen = 696;
+		vrLoc = 0;
+	};
+	E1D293E003BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: initWithAlarm:";
+		rLen = 40;
+		rLoc = 637;
+		rType = 0;
+		vrLen = 1672;
+		vrLoc = 380;
+	};
+	E1D293E103BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 22";
+		rLen = 0;
+		rLoc = 639;
+		rType = 0;
+		vrLen = 716;
+		vrLoc = 0;
+	};
+	E1D293E203BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 1639;
+		rType = 0;
+		vrLen = 1613;
+		vrLoc = 380;
+	};
+	E1D293E303BD418200F9204E = {
+		fRef = E13919E303B9E4E100000028;
+		isa = PBXTextBookmark;
+		name = "PSIntervalField.m: __VERSION__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 912;
+		vrLoc = 0;
+	};
+	E1D293E403BD418200F9204E = {
+		fRef = E13919E203B9E4E100000028;
+		isa = PBXTextBookmark;
+		name = "NJRIntervalField.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 275;
+		vrLoc = 0;
+	};
+	E1D293E503BD418200F9204E = {
+		fRef = E13919E303B9E4E100000028;
+		isa = PBXTextBookmark;
+		name = "NJRIntervalField.m: 12";
+		rLen = 0;
+		rLoc = 348;
+		rType = 0;
+		vrLen = 915;
+		vrLoc = 0;
+	};
+	E1D293E603BD418200F9204E = {
+		fRef = E13919E203B9E4E100000028;
+		isa = PBXTextBookmark;
+		name = "NJRIntervalField.h: 12";
+		rLen = 0;
+		rLoc = 196;
+		rType = 0;
+		vrLen = 277;
+		vrLoc = 0;
+	};
+	E1D293E703BD418200F9204E = {
+		fRef = E13919E303B9E4E100000028;
+		isa = PBXTextBookmark;
+		name = "NJRIntervalField.m: c";
+		rLen = 0;
+		rLoc = 765;
+		rType = 0;
+		vrLen = 1456;
+		vrLoc = 0;
+	};
+	E1D293E803BD418200F9204E = {
+		fRef = E13919E203B9E4E100000028;
+		isa = PBXTextBookmark;
+		name = "NJRIntervalField.h: 12";
+		rLen = 0;
+		rLoc = 196;
+		rType = 0;
+		vrLen = 277;
+		vrLoc = 0;
+	};
+	E1D293E903BD418200F9204E = {
+		fRef = E13919E303B9E4E100000028;
+		isa = PBXTextBookmark;
+		name = "NJRIntervalField.m: textView:shouldChangeTextInRange:replacementString:";
+		rLen = 0;
+		rLoc = 763;
+		rType = 0;
+		vrLen = 1481;
+		vrLoc = 0;
+	};
+	E1D293EA03BD418200F9204E = {
+		fRef = E13919E203B9E4E100000028;
+		isa = PBXTextBookmark;
+		name = "NJRIntervalField.h: 13";
+		rLen = 13;
+		rLoc = 254;
+		rType = 0;
+		vrLen = 277;
+		vrLoc = 0;
+	};
+	E1D293EB03BD418200F9204E = {
+		fRef = E13919E303B9E4E100000028;
+		isa = PBXTextBookmark;
+		name = "NJRIntervalField.m: 32";
+		rLen = 0;
+		rLoc = 1597;
+		rType = 0;
+		vrLen = 1417;
+		vrLoc = 0;
+	};
+	E1D293EC03BD418200F9204E = {
+		fRef = F589C9C6035AA12B0155F4B2;
+		isa = PBXTextBookmark;
+		name = "Read Me.rtfd: 114";
+		rLen = 0;
+		rLoc = 9144;
+		rType = 0;
+		vrLen = 2457;
+		vrLoc = 7261;
+	};
+	E1D293EE03BD418200F9204E = {
+		fRef = F59DC6D30353C9E601AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmSetController.h: 21";
+		rLen = 19;
+		rLoc = 562;
+		rType = 0;
+		vrLen = 1621;
+		vrLoc = 0;
+	};
+	E1D293F003BD418200F9204E = {
+		fRef = F59DC6D30353C9E601AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmSetController.h: 13";
+		rLen = 0;
+		rLoc = 258;
+		rType = 0;
+		vrLen = 1649;
+		vrLoc = 0;
+	};
+	E1D293F103BD418200F9204E = {
+		fRef = E13919E303B9E4E100000028;
+		isa = PBXTextBookmark;
+		name = "NJRIntervalField.m: 53";
+		rLen = 0;
+		rLoc = 2231;
+		rType = 0;
+		vrLen = 1396;
+		vrLoc = 281;
+	};
+	E1D293F203BD418200F9204E = {
+		fRef = E13919E203B9E4E100000028;
+		isa = PBXTextBookmark;
+		name = "NJRIntervalField.h: 17";
+		rLen = 0;
+		rLoc = 378;
+		rType = 0;
+		vrLen = 385;
+		vrLoc = 0;
+	};
+	E1D293F303BD418200F9204E = {
+		fRef = E13919E303B9E4E100000028;
+		isa = PBXTextBookmark;
+		name = "NJRIntervalField.m: 35";
+		rLen = 0;
+		rLoc = 1640;
+		rType = 0;
+		vrLen = 1494;
+		vrLoc = 183;
+	};
+	E1D293F403BD418200F9204E = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: __VERSION__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 877;
+		vrLoc = 0;
+	};
+	E1D293F503BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 1639;
+		rType = 0;
+		vrLen = 1613;
+		vrLoc = 380;
+	};
+	E1D293F703BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 13";
+		rLen = 0;
+		rLoc = 417;
+		rType = 0;
+		vrLen = 1662;
+		vrLoc = 0;
+	};
+	E1D293F803BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 12";
+		rLen = 0;
+		rLoc = 215;
+		rType = 0;
+		vrLen = 746;
+		vrLoc = 0;
+	};
+	E1D293F903BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 13";
+		rLen = 0;
+		rLoc = 417;
+		rType = 0;
+		vrLen = 1135;
+		vrLoc = 1824;
+	};
+	E1D293FB03BD418200F9204E = {
+		fRef = F59DC6D30353C9E601AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmSetController.h: 16";
+		rLen = 0;
+		rLoc = 371;
+		rType = 0;
+		vrLen = 1621;
+		vrLoc = 0;
+	};
+	E1D293FC03BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 1284;
+		rType = 0;
+		vrLen = 1671;
+		vrLoc = 410;
+	};
+	E1D293FD03BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 12";
+		rLen = 0;
+		rLoc = 215;
+		rType = 0;
+		vrLen = 746;
+		vrLoc = 0;
+	};
+	E1D293FE03BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 1284;
+		rType = 0;
+		vrLen = 1648;
+		vrLoc = 403;
+	};
+	E1D293FF03BD418200F9204E = {
+		fRef = E1D2945803BD418200F9204E;
+		isa = PBXTextBookmark;
+		name = "NSWindow.h: 2";
+		rLen = 8;
+		rLoc = 4;
+		rType = 0;
+		vrLen = 1408;
+		vrLoc = 0;
+	};
+	E1D2940003BD418200F9204E = {
+		fRef = E1D2946503BD418200F9204E;
+		glyphRangeLength = 1683;
+		glyphRangeLocation = 0;
+		isa = PBXDocBookmark;
+		name = "HowWindowIsDisplayed.html: Show Topic  ...";
+	};
+	E1D2940103BD418200F9204E = {
+		fRef = E1D2946603BD418200F9204E;
+		glyphRangeLength = 0;
+		glyphRangeLocation = 0;
+		isa = PBXDocBookmark;
+	};
+	E1D2940203BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: initWithAlarm:";
+		rLen = 0;
+		rLoc = 869;
+		rType = 0;
+		vrLen = 1661;
+		vrLoc = 163;
+	};
+	E1D2940303BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 12";
+		rLen = 0;
+		rLoc = 215;
+		rType = 0;
+		vrLen = 746;
+		vrLoc = 0;
+	};
+	E1D2940403BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: snooze:";
+		rLen = 0;
+		rLoc = 3174;
+		rType = 0;
+		vrLen = 1134;
+		vrLoc = 1773;
+	};
+	E1D2940503BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 12";
+		rLen = 0;
+		rLoc = 215;
+		rType = 0;
+		vrLen = 746;
+		vrLoc = 0;
+	};
+	E1D2940603BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: snooze:";
+		rLen = 0;
+		rLoc = 3174;
+		rType = 0;
+		vrLen = 1135;
+		vrLoc = 1773;
+	};
+	E1D2940703BD418200F9204E = {
+		fRef = F517D6420356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.m: setUp";
+		rLen = 0;
+		rLoc = 1170;
+		rType = 0;
+		vrLen = 1371;
+		vrLoc = 0;
+	};
+	E1D2940803BD418200F9204E = {
+		fRef = F517D6430356B8CC016D68B9;
+		isa = PBXTextBookmark;
+		name = "PSAlarms.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 781;
+		vrLoc = 0;
+	};
+	E1D2940903BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: isRepeating";
+		rLen = 0;
+		rLoc = 8825;
+		rType = 0;
+		vrLen = 928;
+		vrLoc = 7402;
+	};
+	E1D2940A03BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: dateString";
+		rLen = 0;
+		rLoc = 1812;
+		rType = 0;
+		vrLen = 1400;
+		vrLoc = 580;
+	};
+	E1D2940B03BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: snoozeForInterval:";
+		rLen = 0;
+		rLoc = 12935;
+		rType = 0;
+		vrLen = 1445;
+		vrLoc = 10153;
+	};
+	E1D2940C03BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: dateString";
+		rLen = 0;
+		rLoc = 1812;
+		rType = 0;
+		vrLen = 1400;
+		vrLoc = 580;
+	};
+	E1D2940D03BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: setMessage:";
+		rLen = 0;
+		rLoc = 6630;
+		rType = 0;
+		vrLen = 1257;
+		vrLoc = 5434;
+	};
+	E1D2940E03BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: dateString";
+		rLen = 0;
+		rLoc = 1812;
+		rType = 0;
+		vrLen = 1400;
+		vrLoc = 580;
+	};
+	E1D2940F03BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: setTimer";
+		rLen = 0;
+		rLoc = 11702;
+		rType = 0;
+		vrLen = 1685;
+		vrLoc = 9245;
+	};
+	E1D2941003BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: dateString";
+		rLen = 0;
+		rLoc = 1812;
+		rType = 0;
+		vrLen = 1400;
+		vrLoc = 580;
+	};
+	E1D2941103BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: setTimer";
+		rLen = 0;
+		rLoc = 11702;
+		rType = 0;
+		vrLen = 1291;
+		vrLoc = 10021;
+	};
+	E1D2941203BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: 49";
+		rLen = 0;
+		rLoc = 1703;
+		rType = 0;
+		vrLen = 1400;
+		vrLoc = 580;
+	};
+	E1D2941303BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: setTimer";
+		rLen = 0;
+		rLoc = 11702;
+		rType = 0;
+		vrLen = 1291;
+		vrLoc = 10021;
+	};
+	E1D2941403BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: PSAlarmDate";
+		rLen = 0;
+		rLoc = 555;
+		rType = 0;
+		vrLen = 1385;
+		vrLoc = 0;
+	};
+	E1D2941503BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: initialize";
+		rLen = 0;
+		rLoc = 6839;
+		rType = 0;
+		vrLen = 1236;
+		vrLoc = 5472;
+	};
+	E1D2941603BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: PSAlarmDate";
+		rLen = 0;
+		rLoc = 555;
+		rType = 0;
+		vrLen = 1385;
+		vrLoc = 0;
+	};
+	E1D2941703BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: initialize";
+		rLen = 0;
+		rLoc = 6808;
+		rType = 0;
+		vrLen = 1232;
+		vrLoc = 5472;
+	};
+	E1D2941803BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: PSAlarmDate";
+		rLen = 0;
+		rLoc = 555;
+		rType = 0;
+		vrLen = 1385;
+		vrLoc = 0;
+	};
+	E1D2941903BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: _beValidWithType:";
+		rLen = 0;
+		rLoc = 2669;
+		rType = 0;
+		vrLen = 1299;
+		vrLoc = 1589;
+	};
+	E1D2941A03BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: PSAlarmDate";
+		rLen = 0;
+		rLoc = 555;
+		rType = 0;
+		vrLen = 1385;
+		vrLoc = 0;
+	};
+	E1D2941B03BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: _beValidWithType:";
+		rLen = 0;
+		rLoc = 2669;
+		rType = 0;
+		vrLen = 1282;
+		vrLoc = 1589;
+	};
+	E1D2941C03BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: PSAlarmDate";
+		rLen = 0;
+		rLoc = 555;
+		rType = 0;
+		vrLen = 1385;
+		vrLoc = 0;
+	};
+	E1D2941D03BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: _beValidWithType:";
+		rLen = 0;
+		rLoc = 2696;
+		rType = 0;
+		vrLen = 1262;
+		vrLoc = 1589;
+	};
+	E1D2941E03BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: PSAlarmDate";
+		rLen = 0;
+		rLoc = 555;
+		rType = 0;
+		vrLen = 1385;
+		vrLoc = 0;
+	};
+	E1D2941F03BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: _alarmTypeForString:";
+		rLen = 0;
+		rLoc = 3761;
+		rType = 0;
+		vrLen = 1651;
+		vrLoc = 2403;
+	};
+	E1D2942003BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: PSAlarmDate";
+		rLen = 0;
+		rLoc = 555;
+		rType = 0;
+		vrLen = 1385;
+		vrLoc = 0;
+	};
+	E1D2942103BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: _stringForInterval:";
+		rLen = 0;
+		rLoc = 4295;
+		rType = 0;
+		vrLen = 1261;
+		vrLoc = 5809;
+	};
+	E1D2942203BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: PSAlarmDate";
+		rLen = 0;
+		rLoc = 555;
+		rType = 0;
+		vrLen = 1385;
+		vrLoc = 0;
+	};
+	E1D2942303BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: setRepeating:";
+		rLen = 0;
+		rLoc = 8558;
+		rType = 0;
+		vrLen = 1196;
+		vrLoc = 7297;
+	};
+	E1D2942403BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: 49";
+		rLen = 0;
+		rLoc = 1810;
+		rType = 0;
+		vrLen = 1506;
+		vrLoc = 31;
+	};
+	E1D2942503BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: setRepeating:";
+		rLen = 0;
+		rLoc = 8558;
+		rType = 0;
+		vrLen = 1196;
+		vrLoc = 7297;
+	};
+	E1D2942603BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: 49";
+		rLen = 0;
+		rLoc = 1810;
+		rType = 0;
+		vrLen = 1506;
+		vrLoc = 31;
+	};
+	E1D2942703BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: setRepeating:";
+		rLen = 0;
+		rLoc = 8557;
+		rType = 0;
+		vrLen = 1197;
+		vrLoc = 7297;
+	};
+	E1D2942803BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: 49";
+		rLen = 0;
+		rLoc = 1810;
+		rType = 0;
+		vrLen = 1506;
+		vrLoc = 31;
+	};
+	E1D2942903BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: setTimer";
+		rLen = 0;
+		rLoc = 11727;
+		rType = 0;
+		vrLen = 1586;
+		vrLoc = 9868;
+	};
+	E1D2942A03BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: snoozeInterval";
+		rLen = 0;
+		rLoc = 1810;
+		rType = 0;
+		vrLen = 1506;
+		vrLoc = 31;
+	};
+	E1D2942B03BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: timeRemaining";
+		rLen = 0;
+		rLoc = 8524;
+		rType = 0;
+		vrLen = 1213;
+		vrLoc = 7392;
+	};
+	E1D2942C03BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: snooze:";
+		rLen = 0;
+		rLoc = 3041;
+		rType = 0;
+		vrLen = 1191;
+		vrLoc = 2049;
+	};
+	E1D2942D03BD418200F9204E = {
+		fRef = F59DC6DB0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.h: 12";
+		rLen = 0;
+		rLoc = 215;
+		rType = 0;
+		vrLen = 746;
+		vrLoc = 0;
+	};
+	E1D2942E03BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: snooze:";
+		rLen = 0;
+		rLoc = 3199;
+		rType = 0;
+		vrLen = 1220;
+		vrLoc = 2049;
+	};
+	E1D2942F03BD418200F9204E = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: __VERSION__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 877;
+		vrLoc = 0;
+	};
+	E1D2943003BD418200F9204E = {
+		fRef = E1A18CAC03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.m: __WCHAR_TYPE__";
+		rLen = 0;
+		rLoc = 144;
+		rType = 0;
+		vrLen = 944;
+		vrLoc = 0;
+	};
+	E1D2943103BD418200F9204E = {
+		fRef = F59E47B4036AAD55016B311C;
+		isa = PBXTextBookmark;
+		name = "PSAlarmAlertController.m: stopAlerts:";
+		rLen = 0;
+		rLoc = 1675;
+		rType = 0;
+		vrLen = 945;
+		vrLoc = 0;
+	};
+	E1D2943203BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: isValid";
+		rLen = 0;
+		rLoc = 7385;
+		rType = 0;
+		vrLen = 1118;
+		vrLoc = 6426;
+	};
+	E1D2943303BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: snoozeInterval";
+		rLen = 0;
+		rLoc = 1810;
+		rType = 0;
+		vrLen = 1506;
+		vrLoc = 31;
+	};
+	E1D2943403BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: isValid";
+		rLen = 0;
+		rLoc = 7385;
+		rType = 0;
+		vrLen = 1134;
+		vrLoc = 6426;
+	};
+	E1D2943503BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: snoozeInterval";
+		rLen = 0;
+		rLoc = 1810;
+		rType = 0;
+		vrLen = 1506;
+		vrLoc = 31;
+	};
+	E1D2943603BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: isValid";
+		rLen = 0;
+		rLoc = 7385;
+		rType = 0;
+		vrLen = 1134;
+		vrLoc = 6426;
+	};
+	E1D2943703BD418200F9204E = {
+		fRef = F59F6CB40354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.h: snoozeInterval";
+		rLen = 0;
+		rLoc = 1810;
+		rType = 0;
+		vrLen = 1506;
+		vrLoc = 31;
+	};
+	E1D2943803BD418200F9204E = {
+		fRef = F59F6CB50354E7DA01AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarm.m: initWithPropertyList:";
+		rLen = 0;
+		rLoc = 16506;
+		rType = 0;
+		vrLen = 1655;
+		vrLoc = 13846;
+	};
+	E1D2943903BD418200F9204E = {
+		fRef = F59DC6DC0353DE5101AEEDB1;
+		isa = PBXTextBookmark;
+		name = "PSAlarmNotifierController.m: 78";
+		rLen = 0;
+		rLoc = 2730;
+		rType = 0;
+		vrLen = 1220;
+		vrLoc = 2049;
+	};
+	E1D2945803BD418200F9204E = {
+		isa = PBXFileReference;
+		name = NSWindow.h;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSWindow.h;
+		refType = 0;
+	};
+	E1D2945A03BD418200F9204E = {
+		isa = PBXFileReference;
+		name = NSButton.h;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSButton.h;
+		refType = 0;
+	};
+	E1D2945C03BD418200F9204E = {
+		isa = PBXFileReference;
+		name = index.html;
+		path = /Developer/Documentation/Cocoa/TasksAndConcepts/ProgrammingTopics/Timers/index.html;
+		refType = 0;
+	};
+	E1D2945D03BD418200F9204E = {
+		isa = PBXFileReference;
+		name = NSTimer.html;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Resources/English.lproj/Documentation/Reference/ObjC_classic/Classes/NSTimer.html;
+		refType = 0;
+	};
+	E1D2945F03BD418200F9204E = {
+		isa = PBXFileReference;
+		name = NSWindowController.h;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSWindowController.h;
+		refType = 0;
+	};
+	E1D2946003BD418200F9204E = {
+		isa = PBXFileReference;
+		name = NSWindow.h;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSWindow.h;
+		refType = 0;
+	};
+	E1D2946103BD418200F9204E = {
+		isa = PBXFileReference;
+		name = iHowWindowIsDisplayed.html;
+		path = /Developer/Documentation/Cocoa/TasksAndConcepts/ProgrammingTopics/WinPanel/iHowWindowIsDisplayed.html;
+		refType = 0;
+	};
+	E1D2946203BD418200F9204E = {
+		isa = PBXFileReference;
+		name = HowWindowIsDisplayed.html;
+		path = /Developer/Documentation/Cocoa/TasksAndConcepts/ProgrammingTopics/WinPanel/Concepts/HowWindowIsDisplayed.html;
+		refType = 0;
+	};
+	E1D2946303BD418200F9204E = {
+		isa = PBXFileReference;
+		name = NSTimer.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSTimer.h;
+		refType = 0;
+	};
+	E1D2946503BD418200F9204E = {
+		isa = PBXFileReference;
+		name = HowWindowIsDisplayed.html;
+		path = /Developer/Documentation/Cocoa/TasksAndConcepts/ProgrammingTopics/WinPanel/Concepts/HowWindowIsDisplayed.html;
+		refType = 0;
+	};
+	E1D2946603BD418200F9204E = {
+		isa = PBXFileReference;
+		name = iHowWindowIsDisplayed.html;
+		path = /Developer/Documentation/Cocoa/TasksAndConcepts/ProgrammingTopics/WinPanel/iHowWindowIsDisplayed.html;
+		refType = 0;
+	};
+	E1D2946703BD418200F9204E = {
+		isa = PBXFileReference;
+		name = NSButton.h;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSButton.h;
+		refType = 0;
+	};
+	E1D2946803BD418200F9204E = {
+		isa = PBXFileReference;
+		name = NSControl.h;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSControl.h;
+		refType = 0;
+	};
+	E1D2946903BD418200F9204E = {
+		isa = PBXFileReference;
+		name = NSControl.h;
+		path = /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSControl.h;
+		refType = 0;
+	};
+	E1ECA00A03C003C300F54C66 = {
+		fRef = E1ECA00603C002B300F54C66;
+		isa = PBXTextBookmark;
+		name = "PSException.h: 15";
+		rLen = 0;
+		rLoc = 379;
+		rType = 0;
+		vrLen = 254;
+		vrLoc = 0;
+	};
+	E1ECA00B03C0056B00F54C66 = {
+		fRef = E1A18CAB03B4344C00000028;
+		isa = PBXTextBookmark;
+		name = "PSAlerts.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 585;
+		vrLoc = 0;
+	};
 	F500E5370359719B01AEEDB1 = {
 		isa = PBXSymbolicBreakpoint;
@@ -1398,74 +8154,4 @@
 		symbolName = szone_error;
 	};
-	F515C769037DFB63018DB5B3 = {
-		fRef = F5F240B6036A862101FE7503;
-		isa = PBXTextBookmark;
-		name = "NJRFSObjectSelector.h: 13";
-		rLen = 0;
-		rLoc = 247;
-		rType = 0;
-		vrLen = 653;
-		vrLoc = 0;
-	};
-	F515C76A037E01E1018DB5B3 = {
-		fRef = F59DC6D40353C9E601AEEDB1;
-		isa = PBXTextBookmark;
-		name = "PSAlarmSetController.m: inAtChanged:";
-		rLen = 0;
-		rLoc = 8686;
-		rType = 0;
-		vrLen = 1674;
-		vrLoc = 7871;
-	};
-	F517D63D0356AC88016D68B9 = {
-		fRef = F59F6CB50354E7DA01AEEDB1;
-		isa = PBXTextBookmark;
-		name = "PSAlarm.m: scheduledTimerWithTarget:selector:";
-		rLen = 0;
-		rLoc = 8289;
-		rType = 0;
-		vrLen = 822;
-		vrLoc = 4232;
-	};
-	F560E2F5035750C101A4E466 = {
-		fRef = F560E2F10357506401A4E466;
-		isa = PBXTextBookmark;
-		name = "PSApplication.m: 16";
-		rLen = 0;
-		rLoc = 1510;
-		rType = 0;
-		vrLen = 296;
-		vrLoc = 0;
-	};
-	F560E2F80357779E01A4E466 = {
-		fRef = F517D6420356B8CC016D68B9;
-		isa = PBXTextBookmark;
-		name = "PSAlarms.m: allAlarms";
-		rLen = 0;
-		rLoc = 943;
-		rType = 0;
-		vrLen = 916;
-		vrLoc = 0;
-	};
-	F560E2FB035786FE01A4E466 = {
-		fRef = F517D63E0356B80C016D68B9;
-		isa = PBXTextBookmark;
-		name = "PSAlarmsController.m: numberOfRowsInTableView:";
-		rLen = 0;
-		rLoc = 1925;
-		rType = 0;
-		vrLen = 1085;
-		vrLoc = 0;
-	};
-	F562F80B037E5D2101AEEDB1 = {
-		fRef = F59DC6FD0354188F01AEEDB1;
-		isa = PBXTextBookmark;
-		name = "NJRDateFormatter.m: initWithDateFormat:allowNaturalLanguage:";
-		rLen = 0;
-		rLoc = 6368;
-		rType = 0;
-		vrLen = 2132;
-		vrLoc = 5663;
-	};
 	F596730D0355CFA301407038 = {
 		isa = PBXSymbolicBreakpoint;
@@ -1475,6 +8161,10 @@
 	F59B967103538BE201154278 = {
 		activeArgIndex = 2147483647;
+		activeArgIndices = (
+		);
 		argumentStrings = (
 		);
+		configStateDict = {
+		};
 		debuggerPlugin = GDBDebugging;
 		dylibVariantSuffix = "";
@@ -1494,64 +8184,4 @@
 		);
 	};
-	F59DC6D20353C43201AEEDB1 = {
-		children = (
-			F59DC6D70353CA6401AEEDB1,
-			F59DC6D90353D35201AEEDB1,
-			F59DC6DA0353D72901AEEDB1,
-			F59DC6E20353E0EB01AEEDB1,
-			F517D63D0356AC88016D68B9,
-			F560E2F5035750C101A4E466,
-			F560E2F80357779E01A4E466,
-			F560E2FB035786FE01A4E466,
-			F5F19881036B90CD01EB0372,
-			F5F19882036B930001EB0372,
-			F515C769037DFB63018DB5B3,
-			F515C76A037E01E1018DB5B3,
-			F5B79835035F3A180136A8DD,
-			F5B7983A035F65070136A8DD,
-		);
-		isa = PBXBookmarkGroup;
-		name = Root;
-	};
-	F59DC6D70353CA6401AEEDB1 = {
-		fRef = F59DC6D40353C9E601AEEDB1;
-		isa = PBXTextBookmark;
-		name = "PSAlarmSetController.m: 16";
-		rLen = 0;
-		rLoc = 4984;
-		rType = 0;
-		vrLen = 291;
-		vrLoc = 0;
-	};
-	F59DC6D90353D35201AEEDB1 = {
-		fRef = F59DC6D40353C9E601AEEDB1;
-		isa = PBXTextBookmark;
-		name = "PSAlarmSetController.m: inAtChanged:";
-		rLen = 36;
-		rLoc = 8591;
-		rType = 0;
-		vrLen = 478;
-		vrLoc = 416;
-	};
-	F59DC6DA0353D72901AEEDB1 = {
-		fRef = F59DC6D30353C9E601AEEDB1;
-		isa = PBXTextBookmark;
-		name = "PSAlarmSetController.h: 25";
-		rLen = 0;
-		rLoc = 1439;
-		rType = 0;
-		vrLen = 758;
-		vrLoc = 0;
-	};
-	F59DC6E20353E0EB01AEEDB1 = {
-		fRef = F59DC6D30353C9E601AEEDB1;
-		isa = PBXTextBookmark;
-		name = "PSAlarmSetController.h: 31";
-		rLen = 0;
-		rLoc = 1800;
-		rType = 0;
-		vrLen = 826;
-		vrLoc = 0;
-	};
 	F5B15F74037E42EB01AEEDB1 = {
 		isa = PBXSymbolicBreakpoint;
@@ -1559,53 +8189,3 @@
 		symbolName = "-[NSException raise]";
 	};
-	F5B163A5037E543A01AEEDB1 = {
-		fRef = F59DC6FD0354188F01AEEDB1;
-		isa = PBXTextBookmark;
-		name = "NJRDateFormatter.m: format:withoutComponent:";
-		rLen = 0;
-		rLoc = 829;
-		rType = 0;
-		vrLen = 2132;
-		vrLoc = 5663;
-	};
-	F5B79835035F3A180136A8DD = {
-		fRef = F517D63E0356B80C016D68B9;
-		isa = PBXTextBookmark;
-		name = "PSAlarmsController.m: alarmsChanged";
-		rLen = 0;
-		rLoc = 384;
-		rType = 0;
-		vrLen = 989;
-		vrLoc = 1167;
-	};
-	F5B7983A035F65070136A8DD = {
-		fRef = F5B79836035F64F80136A8DD;
-		isa = PBXTextBookmark;
-		name = "NJRTableView.m: 1";
-		rLen = 0;
-		rLoc = 0;
-		rType = 0;
-		vrLen = 215;
-		vrLoc = 0;
-	};
-	F5F19881036B90CD01EB0372 = {
-		fRef = F59DC6D40353C9E601AEEDB1;
-		isa = PBXTextBookmark;
-		name = "PSAlarmSetController.m: setAlarm:";
-		rLen = 0;
-		rLoc = 12184;
-		rType = 0;
-		vrLen = 1431;
-		vrLoc = 8406;
-	};
-	F5F19882036B930001EB0372 = {
-		fRef = F59DC6D30353C9E601AEEDB1;
-		isa = PBXTextBookmark;
-		name = "PSAlarmSetController.h: 14";
-		rLen = 0;
-		rLoc = 278;
-		rType = 0;
-		vrLen = 1330;
-		vrLoc = 385;
-	};
 }
Index: /trunk/Cocoa/Pester/Source/Pester.pbproj/project.pbxproj
===================================================================
--- /trunk/Cocoa/Pester/Source/Pester.pbproj/project.pbxproj	(revision 52)
+++ /trunk/Cocoa/Pester/Source/Pester.pbproj/project.pbxproj	(revision 53)
@@ -15,4 +15,5 @@
 				F560E312035787E001A4E466,
 				F560E313035787ED01A4E466,
+				E162698703B6189D00000028,
 			);
 			isa = PBXGroup;
@@ -51,4 +52,5 @@
 				F5F24187036A90D901FE7503,
 				F59E4BEA036B33EC016B311C,
+				E14DB31203B8038300000028,
 			);
 			isa = PBXGroup;
@@ -105,4 +107,5 @@
 			children = (
 				17587328FF379C6511CA2CBB,
+				F562F809037E5D0101AEEDB1,
 			);
 			isa = PBXGroup;
@@ -125,4 +128,5 @@
 				4A9504CDFFE6A4B311CA0CBA,
 			);
+			hasScannedForEncodings = 1;
 			isa = PBXProject;
 			mainGroup = 29B97314FDCFA39411CA2CEA;
@@ -136,4 +140,5 @@
 				080E96DDFE201D6D7F000001,
 				29B97315FDCFA39411CA2CEA,
+				E19DCBE503BE516000B934BF,
 				29B97317FDCFA39411CA2CEA,
 				29B97323FDCFA39411CA2CEA,
@@ -147,4 +152,5 @@
 		29B97315FDCFA39411CA2CEA = {
 			children = (
+				E19DCBD203BE4AA200B934BF,
 				29B97316FDCFA39411CA2CEA,
 			);
@@ -155,4 +161,5 @@
 		};
 		29B97316FDCFA39411CA2CEA = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = main.m;
@@ -168,7 +175,5 @@
 				089C165CFE840E0CC02AAC07,
 				F59DD44F0358ABF4017318D0,
-				F589C9C6035AA12B0155F4B2,
 				F59DC6E30353ED1201AEEDB1,
-				F562F809037E5D0101AEEDB1,
 			);
 			isa = PBXGroup;
@@ -196,4 +201,5 @@
 				1058C7A0FEA54F0111CA2CBB,
 				1058C7A2FEA54F0111CA2CBB,
+				E162698803B618BD00000028,
 			);
 			isa = PBXGroup;
@@ -220,14 +226,21 @@
 				29B9732BFDCFA39411CA2CEA,
 				29B9732DFDCFA39411CA2CEA,
+				E130B9A903B7AEED00000028,
 			);
 			buildSettings = {
+				CURRENT_PROJECT_VERSION = 5;
 				FRAMEWORK_SEARCH_PATHS = "\"$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\"";
 				HEADER_SEARCH_PATHS = "";
 				INSTALL_PATH = /;
+				JAVA_COMPILER_DEBUGGING_SYMBOLS = NO;
 				LIBRARY_SEARCH_PATHS = "";
 				OTHER_CFLAGS = "";
+				PRECOMPILE_PREFIX_HEADER = YES;
+				PREFIX_HEADER = Pester_Prefix.h;
 				PRODUCT_NAME = Pester;
+				PRODUCT_VERSION = 1.1a4;
 				SECTORDER_FLAGS = "";
 				USE_GCC3_PFE_SUPPORT = YES;
+				VERSIONING_SYSTEM = "apple-generic";
 				WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
 				WRAPPER_EXTENSION = app;
@@ -241,6 +254,6 @@
 			productReference = 17587328FF379C6511CA2CBB;
 			productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
-<!DOCTYPE plist SYSTEM \"file://localhost/System/Library/DTDs/PropertyList.dtd\">
-<plist version=\"0.9\">
+<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
+<plist version=\"1.0\">
 <dict>
 	<key>CFBundleDevelopmentRegion</key>
@@ -249,5 +262,5 @@
 	<string>Pester</string>
 	<key>CFBundleGetInfoString</key>
-	<string>Pester 1.1a3, © 2002 Nicholas Riley</string>
+	<string>Pester 1.1a5, © 2002 Nicholas Riley</string>
 	<key>CFBundleIconFile</key>
 	<string>Application icon</string>
@@ -261,9 +274,9 @@
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>1.1a3</string>
+	<string>1.1a5</string>
 	<key>CFBundleSignature</key>
 	<string>Pstr</string>
 	<key>CFBundleVersion</key>
-	<string>1.1a3</string>
+	<string>5</string>
 	<key>NSMainNibFile</key>
 	<string>MainMenu</string>
@@ -273,47 +286,54 @@
 </plist>
 ";
-			shouldUseHeadermap = 1;
 		};
 		29B97327FDCFA39411CA2CEA = {
 			buildActionMask = 2147483647;
 			files = (
+				E19DCBD303BE4AA200B934BF,
+				F5F240BA036A867901FE7503,
+				F59DC6FE0354188F01AEEDB1,
+				F5F240B7036A862301FE7503,
+				F560E3170357895001A4E466,
+				F59DC6EB0353F58B01AEEDB1,
+				F515C768037DFB56018DB5B3,
+				F552A8AD0358E8B201AEEDB1,
+				F5F198D3036BE57401EB0372,
+				F5B79839035F64F80136A8DD,
+				E1F0B14C03AD8CEF00AEFBE0,
+				F5F19873036B822E01EB0372,
+				E1F0B26A03AEDE8600AEFBE0,
+				E162698B03B6190B00000028,
+				F5B79868038865B30136A8DD,
+				F5EE8DBC038A76AC0134BEAC,
+				E191700C03AD24A700AEFBE0,
+				F5F19910036D3B3101EB0372,
+				F59E4C10036B43D2016B311C,
+				E1F0B15003ADBE3800AEFBE0,
+				E162698603B6189000000028,
+				F59F6CB60354E7DA01AEEDB1,
+				F59E47B7036AAD55016B311C,
+				F59DC6DD0353DE5101AEEDB1,
 				F59DC6D50353C9E601AEEDB1,
-				F59DC6DD0353DE5101AEEDB1,
-				F59DC6EB0353F58B01AEEDB1,
-				F59DC6FE0354188F01AEEDB1,
-				F59F6CB60354E7DA01AEEDB1,
+				F517D6450356B8CC016D68B9,
 				F517D6410356B80C016D68B9,
-				F517D6450356B8CC016D68B9,
+				F59E47AA036AAA6D016B311C,
+				E1A18CAD03B4344C00000028,
 				F560E2F40357506501A4E466,
-				F560E310035787BC01A4E466,
-				F560E3170357895001A4E466,
-				F552A8AD0358E8B201AEEDB1,
-				F5F240B7036A862301FE7503,
-				F5F240BA036A867901FE7503,
-				F5F2418B036A910B01FE7503,
-				F59E479E036AA5E9016B311C,
-				F59E47A1036AA5E9016B311C,
-				F59E47A2036AA5E9016B311C,
-				F59E47A3036AA5E9016B311C,
-				F59E47A4036AA5E9016B311C,
-				F59E47AA036AAA6D016B311C,
 				F59E47AE036AAC1E016B311C,
-				F59E47B3036AACD1016B311C,
-				F59E47B7036AAD55016B311C,
 				F59E47BB036AB217016B311C,
 				F59E47BF036AB228016B311C,
 				F59E47C3036B1ADD016B311C,
+				F59E47B3036AACD1016B311C,
+				E1A18CB403B439CF00000028,
 				F59E4BE9036B2E5E016B311C,
-				F59E4C10036B43D2016B311C,
+				F5F1986F036B813101EB0372,
 				F5F19868036B80AF01EB0372,
-				F5F1986F036B813101EB0372,
-				F5F19873036B822E01EB0372,
-				F5F198D3036BE57401EB0372,
-				F5F19910036D3B3101EB0372,
-				F515C768037DFB56018DB5B3,
-				F5B79839035F64F80136A8DD,
-				F5B79868038865B30136A8DD,
+				F5F2418B036A910B01FE7503,
+				E130B9AE03B7C59700000028,
+				E13919E403B9E4E100000028,
+				E1ECA00803C002B300F54C66,
 			);
 			isa = PBXHeadersBuildPhase;
+			runOnlyForDeploymentPostprocessing = 0;
 		};
 		29B97328FDCFA39411CA2CEA = {
@@ -331,46 +351,52 @@
 			);
 			isa = PBXResourcesBuildPhase;
+			runOnlyForDeploymentPostprocessing = 0;
 		};
 		29B9732BFDCFA39411CA2CEA = {
 			buildActionMask = 2147483647;
 			files = (
-				29B9732CFDCFA39411CA2CEA,
+				F5F240CB036A869401FE7503,
+				F59DC6FF0354188F01AEEDB1,
+				F5F240B8036A862301FE7503,
+				F560E3180357895001A4E466,
+				F59DC6EA0353F58B01AEEDB1,
+				F5F240CE036A877301FE7503,
+				F552A8AE0358E8B201AEEDB1,
+				F5F198D2036BE57401EB0372,
+				F5B79838035F64F80136A8DD,
+				E1F0B14D03AD8CEF00AEFBE0,
+				F5F19872036B822E01EB0372,
+				E1F0B26B03AEDE8600AEFBE0,
+				E14AFB7703B620FE00000028,
+				F5B79867038865B30136A8DD,
+				F5EE8DBB038A76AC0134BEAC,
+				F5F1990F036D3B3101EB0372,
+				F59E4C0F036B43D2016B311C,
+				E1F0B15103ADBE3800AEFBE0,
+				E162698503B6189000000028,
+				F59F6CB70354E7DA01AEEDB1,
+				F59E47B6036AAD55016B311C,
+				F59DC6DE0353DE5101AEEDB1,
 				F59DC6D60353C9E601AEEDB1,
-				F59DC6DE0353DE5101AEEDB1,
-				F59DC6EA0353F58B01AEEDB1,
-				F59DC6FF0354188F01AEEDB1,
-				F59F6CB70354E7DA01AEEDB1,
+				F517D6440356B8CC016D68B9,
 				F517D6400356B80C016D68B9,
-				F517D6440356B8CC016D68B9,
+				F59E47A9036AAA6D016B311C,
+				E1A18CAE03B4344C00000028,
 				F560E2F30357506401A4E466,
-				F560E30F035787BC01A4E466,
-				F560E3180357895001A4E466,
-				F552A8AE0358E8B201AEEDB1,
-				F5F240B8036A862301FE7503,
-				F5F240CB036A869401FE7503,
-				F5F240CE036A877301FE7503,
-				F59E479C036AA5E9016B311C,
-				F59E479D036AA5E9016B311C,
-				F59E479F036AA5E9016B311C,
-				F59E47A0036AA5E9016B311C,
-				F59E47A9036AAA6D016B311C,
 				F59E47AD036AAC1E016B311C,
-				F59E47B2036AACD1016B311C,
-				F59E47B6036AAD55016B311C,
 				F59E47BA036AB217016B311C,
 				F59E47BE036AB228016B311C,
 				F59E47C2036B1ADD016B311C,
+				F59E47B2036AACD1016B311C,
+				E1271F040000012300000028,
 				F59E4BE8036B2E5E016B311C,
-				F59E4C0F036B43D2016B311C,
+				E1A18CB103B439AD00000028,
 				F5F19869036B80AF01EB0372,
-				F5F1986E036B813101EB0372,
-				F5F19872036B822E01EB0372,
-				F5F198D2036BE57401EB0372,
-				F5F198DB036BE75E01EB0372,
-				F5F1990F036D3B3101EB0372,
-				F5B79838035F64F80136A8DD,
-				F5B79867038865B30136A8DD,
+				29B9732CFDCFA39411CA2CEA,
+				E13919E503B9E4E100000028,
+				E1ECA00903C002B300F54C66,
 			);
 			isa = PBXSourcesBuildPhase;
+			runOnlyForDeploymentPostprocessing = 0;
 		};
 		29B9732CFDCFA39411CA2CEA = {
@@ -389,6 +415,8 @@
 				F5F24189036A90D901FE7503,
 				F59E4C0C036B33EC016B311C,
+				E14DB31303B8038300000028,
 			);
 			isa = PBXFrameworksBuildPhase;
+			runOnlyForDeploymentPostprocessing = 0;
 		};
 //290
@@ -426,4 +454,340 @@
 //4A3
 //4A4
+//E10
+//E11
+//E12
+//E13
+//E14
+		E1271F040000012300000028 = {
+			fileRef = E130B9AD03B7C59700000028;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E130B9A903B7AEED00000028 = {
+			buildActionMask = 2147483647;
+			files = (
+			);
+			generatedFileNames = (
+			);
+			isa = PBXShellScriptBuildPhase;
+			neededFileNames = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "/Developer/Tools/agvtool mvers -terse >| ${SRCROOT}/VERSION";
+		};
+		E130B9AC03B7C59700000028 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = PSPowerManager.h;
+			refType = 4;
+		};
+		E130B9AD03B7C59700000028 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = PSPowerManager.m;
+			refType = 4;
+		};
+		E130B9AE03B7C59700000028 = {
+			fileRef = E130B9AC03B7C59700000028;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E13919E203B9E4E100000028 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = NJRIntervalField.h;
+			refType = 4;
+		};
+		E13919E303B9E4E100000028 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = NJRIntervalField.m;
+			refType = 4;
+		};
+		E13919E403B9E4E100000028 = {
+			fileRef = E13919E203B9E4E100000028;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E13919E503B9E4E100000028 = {
+			fileRef = E13919E303B9E4E100000028;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E14AFB7703B620FE00000028 = {
+			fileRef = E162698A03B6190B00000028;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E14DB31203B8038300000028 = {
+			isa = PBXFrameworkReference;
+			name = IOKit.framework;
+			path = /System/Library/Frameworks/IOKit.framework;
+			refType = 0;
+		};
+		E14DB31303B8038300000028 = {
+			fileRef = E14DB31203B8038300000028;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E162698303B6189000000028 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = "NSTableView-NJRExtensions.m";
+			refType = 4;
+		};
+		E162698403B6189000000028 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = "NSTableView-NJRExtensions.h";
+			refType = 4;
+		};
+		E162698503B6189000000028 = {
+			fileRef = E162698303B6189000000028;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E162698603B6189000000028 = {
+			fileRef = E162698403B6189000000028;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E162698703B6189D00000028 = {
+			children = (
+				E1F0B26803AEDE8600AEFBE0,
+				E1F0B26903AEDE8600AEFBE0,
+				E162698903B6190B00000028,
+				E162698A03B6190B00000028,
+				F5B79866038865B30136A8DD,
+				F5B79865038865B30136A8DD,
+				F5EE8DBA038A76AC0134BEAC,
+				F5EE8DB9038A76AC0134BEAC,
+				F5F1990E036D3B3101EB0372,
+				F5F1990D036D3B3101EB0372,
+				F59E4C0E036B43D2016B311C,
+				F59E4C0D036B43D2016B311C,
+				E1F0B14E03ADBE3800AEFBE0,
+				E1F0B14F03ADBE3800AEFBE0,
+				E162698303B6189000000028,
+				E162698403B6189000000028,
+			);
+			isa = PBXGroup;
+			name = Categories;
+			path = "";
+			refType = 4;
+		};
+		E162698803B618BD00000028 = {
+			children = (
+				F5F2418A036A910B01FE7503,
+				E191700B03AD24A600AEFBE0,
+			);
+			isa = PBXGroup;
+			name = "Private Headers";
+			path = "";
+			refType = 4;
+		};
+		E162698903B6190B00000028 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = "NSCalendarDate-NJRExtensions.h";
+			refType = 4;
+		};
+		E162698A03B6190B00000028 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = "NSCalendarDate-NJRExtensions.m";
+			refType = 4;
+		};
+		E162698B03B6190B00000028 = {
+			fileRef = E162698903B6190B00000028;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E191700B03AD24A600AEFBE0 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = NSDisclosureButtonCell.h;
+			refType = 4;
+		};
+		E191700C03AD24A700AEFBE0 = {
+			fileRef = E191700B03AD24A600AEFBE0;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E19DCBD203BE4AA200B934BF = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = Pester_Prefix.h;
+			refType = 4;
+		};
+		E19DCBD303BE4AA200B934BF = {
+			fileRef = E19DCBD203BE4AA200B934BF;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E19DCBE503BE516000B934BF = {
+			children = (
+				F589C9C6035AA12B0155F4B2,
+			);
+			isa = PBXGroup;
+			name = Documentation;
+			path = "";
+			refType = 4;
+		};
+		E1A18CAB03B4344C00000028 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = PSAlerts.h;
+			refType = 4;
+		};
+		E1A18CAC03B4344C00000028 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = PSAlerts.m;
+			refType = 4;
+		};
+		E1A18CAD03B4344C00000028 = {
+			fileRef = E1A18CAB03B4344C00000028;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E1A18CAE03B4344C00000028 = {
+			fileRef = E1A18CAC03B4344C00000028;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E1A18CB103B439AD00000028 = {
+			fileRef = F5F1986C036B813101EB0372;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E1A18CB203B439CF00000028 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = PSPropertyListSerialization.h;
+			refType = 2;
+		};
+		E1A18CB403B439CF00000028 = {
+			fileRef = E1A18CB203B439CF00000028;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E1ECA00603C002B300F54C66 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = PSError.h;
+			refType = 2;
+		};
+		E1ECA00703C002B300F54C66 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = PSError.m;
+			refType = 2;
+		};
+		E1ECA00803C002B300F54C66 = {
+			fileRef = E1ECA00603C002B300F54C66;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E1ECA00903C002B300F54C66 = {
+			fileRef = E1ECA00703C002B300F54C66;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E1F0B14A03AD8CEF00AEFBE0 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = NJRUnfocusableMovieView.h;
+			refType = 4;
+		};
+		E1F0B14B03AD8CEF00AEFBE0 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = NJRUnfocusableMovieView.m;
+			refType = 4;
+		};
+		E1F0B14C03AD8CEF00AEFBE0 = {
+			fileRef = E1F0B14A03AD8CEF00AEFBE0;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E1F0B14D03AD8CEF00AEFBE0 = {
+			fileRef = E1F0B14B03AD8CEF00AEFBE0;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E1F0B14E03ADBE3800AEFBE0 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = "NSString-NJRExtensions.h";
+			refType = 4;
+		};
+		E1F0B14F03ADBE3800AEFBE0 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = "NSString-NJRExtensions.m";
+			refType = 4;
+		};
+		E1F0B15003ADBE3800AEFBE0 = {
+			fileRef = E1F0B14E03ADBE3800AEFBE0;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E1F0B15103ADBE3800AEFBE0 = {
+			fileRef = E1F0B14F03ADBE3800AEFBE0;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E1F0B26803AEDE8600AEFBE0 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = "NSAttributedString-NJRExtensions.h";
+			refType = 4;
+		};
+		E1F0B26903AEDE8600AEFBE0 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = "NSAttributedString-NJRExtensions.m";
+			refType = 4;
+		};
+		E1F0B26A03AEDE8600AEFBE0 = {
+			fileRef = E1F0B26803AEDE8600AEFBE0;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E1F0B26B03AEDE8600AEFBE0 = {
+			fileRef = E1F0B26903AEDE8600AEFBE0;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+//E10
+//E11
+//E12
+//E13
+//E14
 //F50
 //F51
@@ -438,4 +802,5 @@
 		};
 		F517D63E0356B80C016D68B9 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSAlarmsController.m;
@@ -443,4 +808,5 @@
 		};
 		F517D63F0356B80C016D68B9 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSAlarmsController.h;
@@ -460,4 +826,5 @@
 		};
 		F517D6420356B8CC016D68B9 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSAlarms.m;
@@ -465,4 +832,5 @@
 		};
 		F517D6430356B8CC016D68B9 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSAlarms.h;
@@ -493,4 +861,5 @@
 		};
 		F552A8AB0358E8B201AEEDB1 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = NJRScrollView.h;
@@ -498,4 +867,5 @@
 		};
 		F552A8AC0358E8B201AEEDB1 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = NJRScrollView.m;
@@ -536,4 +906,5 @@
 		};
 		F560E2F10357506401A4E466 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSApplication.m;
@@ -541,4 +912,5 @@
 		};
 		F560E2F20357506401A4E466 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSApplication.h;
@@ -565,26 +937,4 @@
 		F560E2F7035766F201A4E466 = {
 			fileRef = 089C165CFE840E0CC02AAC07;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		F560E30D035787BB01A4E466 = {
-			isa = PBXFileReference;
-			path = "NSTableView-NJRExtensions.m";
-			refType = 4;
-		};
-		F560E30E035787BC01A4E466 = {
-			isa = PBXFileReference;
-			path = "NSTableView-NJRExtensions.h";
-			refType = 4;
-		};
-		F560E30F035787BC01A4E466 = {
-			fileRef = F560E30D035787BB01A4E466;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		F560E310035787BC01A4E466 = {
-			fileRef = F560E30E035787BC01A4E466;
 			isa = PBXBuildFile;
 			settings = {
@@ -612,11 +962,11 @@
 		F560E312035787E001A4E466 = {
 			children = (
+				F517D6430356B8CC016D68B9,
+				F517D6420356B8CC016D68B9,
 				F59F6CB40354E7DA01AEEDB1,
 				F59F6CB50354E7DA01AEEDB1,
-				F517D6430356B8CC016D68B9,
-				F517D6420356B8CC016D68B9,
 			);
 			isa = PBXGroup;
-			name = Models;
+			name = Alarms;
 			refType = 4;
 		};
@@ -625,20 +975,13 @@
 				F5F19865036B806201EB0372,
 				F59E47A6036AA5FC016B311C,
-				F59E47A5036AA5F2016B311C,
+				E1ECA00603C002B300F54C66,
+				E1ECA00703C002B300F54C66,
+				E1A18CB203B439CF00000028,
+				E130B9AC03B7C59700000028,
+				E130B9AD03B7C59700000028,
 				F59DC6E90353F58B01AEEDB1,
 				F59DC6E80353F58B01AEEDB1,
 				F59DC6FC0354188F01AEEDB1,
 				F59DC6FD0354188F01AEEDB1,
-				F5F2418A036A910B01FE7503,
-				F5B79866038865B30136A8DD,
-				F5B79865038865B30136A8DD,
-				F5F1990E036D3B3101EB0372,
-				F5F1990D036D3B3101EB0372,
-				F59E4C0E036B43D2016B311C,
-				F59E4C0D036B43D2016B311C,
-				F560E30E035787BC01A4E466,
-				F560E30D035787BB01A4E466,
-				F5F198DA036BE75E01EB0372,
-				F5F198D9036BE75E01EB0372,
 			);
 			isa = PBXGroup;
@@ -648,4 +991,6 @@
 		F560E314035787F901A4E466 = {
 			children = (
+				E1F0B14A03AD8CEF00AEFBE0,
+				E1F0B14B03AD8CEF00AEFBE0,
 				F5B79837035F64F80136A8DD,
 				F5B79836035F64F80136A8DD,
@@ -654,4 +999,6 @@
 				F560E3150357895001A4E466,
 				F560E3160357895001A4E466,
+				E13919E203B9E4E100000028,
+				E13919E303B9E4E100000028,
 				F5F240B6036A862101FE7503,
 				F5F240B5036A862101FE7503,
@@ -667,4 +1014,5 @@
 		};
 		F560E3150357895001A4E466 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = NJRHistoryTrackingComboBox.h;
@@ -672,4 +1020,5 @@
 		};
 		F560E3160357895001A4E466 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = NJRHistoryTrackingComboBox.m;
@@ -689,4 +1038,5 @@
 		};
 		F562F809037E5D0101AEEDB1 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = VERSION;
@@ -705,4 +1055,5 @@
 		};
 		F59DC6D30353C9E601AEEDB1 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSAlarmSetController.h;
@@ -710,4 +1061,5 @@
 		};
 		F59DC6D40353C9E601AEEDB1 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSAlarmSetController.m;
@@ -727,4 +1079,5 @@
 		};
 		F59DC6DB0353DE5101AEEDB1 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSAlarmNotifierController.h;
@@ -732,4 +1085,5 @@
 		};
 		F59DC6DC0353DE5101AEEDB1 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSAlarmNotifierController.m;
@@ -781,4 +1135,5 @@
 		};
 		F59DC6E80353F58B01AEEDB1 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = NJRIntegerFilter.m;
@@ -786,4 +1141,5 @@
 		};
 		F59DC6E90353F58B01AEEDB1 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = NJRIntegerFilter.h;
@@ -803,4 +1159,5 @@
 		};
 		F59DC6FC0354188F01AEEDB1 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = NJRDateFormatter.h;
@@ -808,4 +1165,5 @@
 		};
 		F59DC6FD0354188F01AEEDB1 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = NJRDateFormatter.m;
@@ -834,4 +1192,5 @@
 		};
 		F59DD4500358ABF4017318D0 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			name = English;
@@ -844,119 +1203,4 @@
 			settings = {
 			};
-		};
-		F59E4793036AA5E9016B311C = {
-			isa = PBXFileReference;
-			path = NDResourceFork.m;
-			refType = 4;
-		};
-		F59E4794036AA5E9016B311C = {
-			isa = PBXFileReference;
-			path = "NSURL+NDCarbonUtilities.m";
-			refType = 4;
-		};
-		F59E4795036AA5E9016B311C = {
-			isa = PBXFileReference;
-			path = NDAppleScriptObject.h;
-			refType = 4;
-		};
-		F59E4796036AA5E9016B311C = {
-			isa = PBXFileReference;
-			path = "NSAppleEventDescriptor+NDAppleScriptObject.m";
-			refType = 4;
-		};
-		F59E4797036AA5E9016B311C = {
-			isa = PBXFileReference;
-			path = NDAppleScriptObject.m;
-			refType = 4;
-		};
-		F59E4798036AA5E9016B311C = {
-			isa = PBXFileReference;
-			path = "NSAppleEventDescriptor+NDAppleScriptObject.h";
-			refType = 4;
-		};
-		F59E4799036AA5E9016B311C = {
-			isa = PBXFileReference;
-			path = NDResourceFork.h;
-			refType = 4;
-		};
-		F59E479A036AA5E9016B311C = {
-			isa = PBXFileReference;
-			path = NDAppleScriptObject_Protocols.h;
-			refType = 4;
-		};
-		F59E479B036AA5E9016B311C = {
-			isa = PBXFileReference;
-			path = "NSURL+NDCarbonUtilities.h";
-			refType = 4;
-		};
-		F59E479C036AA5E9016B311C = {
-			fileRef = F59E4793036AA5E9016B311C;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		F59E479D036AA5E9016B311C = {
-			fileRef = F59E4794036AA5E9016B311C;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		F59E479E036AA5E9016B311C = {
-			fileRef = F59E4795036AA5E9016B311C;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		F59E479F036AA5E9016B311C = {
-			fileRef = F59E4796036AA5E9016B311C;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		F59E47A0036AA5E9016B311C = {
-			fileRef = F59E4797036AA5E9016B311C;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		F59E47A1036AA5E9016B311C = {
-			fileRef = F59E4798036AA5E9016B311C;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		F59E47A2036AA5E9016B311C = {
-			fileRef = F59E4799036AA5E9016B311C;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		F59E47A3036AA5E9016B311C = {
-			fileRef = F59E479A036AA5E9016B311C;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		F59E47A4036AA5E9016B311C = {
-			fileRef = F59E479B036AA5E9016B311C;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		F59E47A5036AA5F2016B311C = {
-			children = (
-				F59E4799036AA5E9016B311C,
-				F59E4793036AA5E9016B311C,
-				F59E479B036AA5E9016B311C,
-				F59E4794036AA5E9016B311C,
-				F59E4798036AA5E9016B311C,
-				F59E4796036AA5E9016B311C,
-				F59E4795036AA5E9016B311C,
-				F59E479A036AA5E9016B311C,
-				F59E4797036AA5E9016B311C,
-			);
-			isa = PBXGroup;
-			path = NDAppleScript;
-			refType = 4;
 		};
 		F59E47A6036AA5FC016B311C = {
@@ -971,4 +1215,5 @@
 		};
 		F59E47A7036AAA6D016B311C = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSAlert.m;
@@ -976,4 +1221,5 @@
 		};
 		F59E47A8036AAA6D016B311C = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSAlert.h;
@@ -993,4 +1239,5 @@
 		};
 		F59E47AB036AAC1E016B311C = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSBeepAlert.m;
@@ -998,4 +1245,5 @@
 		};
 		F59E47AC036AAC1E016B311C = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSBeepAlert.h;
@@ -1016,4 +1264,6 @@
 		F59E47AF036AAC31016B311C = {
 			children = (
+				E1A18CAB03B4344C00000028,
+				E1A18CAC03B4344C00000028,
 				F59E47A8036AAA6D016B311C,
 				F59E47A7036AAA6D016B311C,
@@ -1037,4 +1287,5 @@
 		};
 		F59E47B0036AACD1016B311C = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSNotifierAlert.m;
@@ -1042,4 +1293,5 @@
 		};
 		F59E47B1036AACD1016B311C = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSNotifierAlert.h;
@@ -1059,4 +1311,5 @@
 		};
 		F59E47B4036AAD55016B311C = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSAlarmAlertController.m;
@@ -1064,4 +1317,5 @@
 		};
 		F59E47B5036AAD55016B311C = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSAlarmAlertController.h;
@@ -1081,4 +1335,5 @@
 		};
 		F59E47B8036AB217016B311C = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSDockBounceAlert.m;
@@ -1086,4 +1341,5 @@
 		};
 		F59E47B9036AB217016B311C = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSDockBounceAlert.h;
@@ -1103,4 +1359,5 @@
 		};
 		F59E47BC036AB228016B311C = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSMovieAlert.m;
@@ -1108,4 +1365,5 @@
 		};
 		F59E47BD036AB228016B311C = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSMovieAlert.h;
@@ -1125,4 +1383,5 @@
 		};
 		F59E47C0036B1ADD016B311C = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSMovieAlertController.m;
@@ -1130,4 +1389,5 @@
 		};
 		F59E47C1036B1ADD016B311C = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSMovieAlertController.h;
@@ -1168,4 +1428,5 @@
 		};
 		F59E4BE6036B2E5E016B311C = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSScriptAlert.m;
@@ -1173,4 +1434,5 @@
 		};
 		F59E4BE7036B2E5E016B311C = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSScriptAlert.h;
@@ -1202,4 +1464,5 @@
 		};
 		F59E4C0D036B43D2016B311C = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = "NSMovie-NJRExtensions.m";
@@ -1207,4 +1470,5 @@
 		};
 		F59E4C0E036B43D2016B311C = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = "NSMovie-NJRExtensions.h";
@@ -1224,4 +1488,5 @@
 		};
 		F59F6CB40354E7DA01AEEDB1 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSAlarm.h;
@@ -1229,4 +1494,5 @@
 		};
 		F59F6CB50354E7DA01AEEDB1 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSAlarm.m;
@@ -1246,4 +1512,5 @@
 		};
 		F5B79836035F64F80136A8DD = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = NJRTableView.m;
@@ -1251,4 +1518,5 @@
 		};
 		F5B79837035F64F80136A8DD = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = NJRTableView.h;
@@ -1268,4 +1536,5 @@
 		};
 		F5B79865038865B30136A8DD = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = "NSCharacterSet-NJRExtensions.m";
@@ -1273,4 +1542,5 @@
 		};
 		F5B79866038865B30136A8DD = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = "NSCharacterSet-NJRExtensions.h";
@@ -1285,4 +1555,28 @@
 		F5B79868038865B30136A8DD = {
 			fileRef = F5B79866038865B30136A8DD;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		F5EE8DB9038A76AC0134BEAC = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = "NSDictionary-NJRExtensions.m";
+			refType = 4;
+		};
+		F5EE8DBA038A76AC0134BEAC = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = "NSDictionary-NJRExtensions.h";
+			refType = 4;
+		};
+		F5EE8DBB038A76AC0134BEAC = {
+			fileRef = F5EE8DB9038A76AC0134BEAC;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		F5EE8DBC038A76AC0134BEAC = {
+			fileRef = F5EE8DBA038A76AC0134BEAC;
 			isa = PBXBuildFile;
 			settings = {
@@ -1300,4 +1594,5 @@
 		};
 		F5F19866036B80AF01EB0372 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = SUSpeaker.h;
@@ -1305,4 +1600,5 @@
 		};
 		F5F19867036B80AF01EB0372 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = SUSpeaker.m;
@@ -1322,4 +1618,5 @@
 		};
 		F5F1986C036B813101EB0372 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSSpeechAlert.m;
@@ -1327,13 +1624,8 @@
 		};
 		F5F1986D036B813101EB0372 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = PSSpeechAlert.h;
 			refType = 4;
-		};
-		F5F1986E036B813101EB0372 = {
-			fileRef = F5F1986C036B813101EB0372;
-			isa = PBXBuildFile;
-			settings = {
-			};
 		};
 		F5F1986F036B813101EB0372 = {
@@ -1344,4 +1636,5 @@
 		};
 		F5F19870036B822E01EB0372 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = NJRVoicePopUpButton.m;
@@ -1349,4 +1642,5 @@
 		};
 		F5F19871036B822E01EB0372 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = NJRVoicePopUpButton.h;
@@ -1366,4 +1660,5 @@
 		};
 		F5F198D0036BE57401EB0372 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = NJRTableDelegate.m;
@@ -1371,4 +1666,5 @@
 		};
 		F5F198D1036BE57401EB0372 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = NJRTableDelegate.h;
@@ -1387,21 +1683,6 @@
 			};
 		};
-		F5F198D9036BE75E01EB0372 = {
-			isa = PBXFileReference;
-			path = "NSTableView-NJRExtensions.m";
-			refType = 4;
-		};
-		F5F198DA036BE75E01EB0372 = {
-			isa = PBXFileReference;
-			path = "NSTableView-NJRExtensions.h";
-			refType = 4;
-		};
-		F5F198DB036BE75E01EB0372 = {
-			fileRef = F5F198D9036BE75E01EB0372;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
 		F5F1990D036D3B3101EB0372 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = "NSImage-NJRExtensions.m";
@@ -1409,4 +1690,5 @@
 		};
 		F5F1990E036D3B3101EB0372 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = "NSImage-NJRExtensions.h";
@@ -1426,4 +1708,5 @@
 		};
 		F5F240B5036A862101FE7503 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = NJRFSObjectSelector.m;
@@ -1431,4 +1714,5 @@
 		};
 		F5F240B6036A862101FE7503 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = NJRFSObjectSelector.h;
@@ -1448,4 +1732,5 @@
 		};
 		F5F240B9036A867901FE7503 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = BDAlias.h;
@@ -1459,4 +1744,5 @@
 		};
 		F5F240CA036A869401FE7503 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = BDAlias.m;
@@ -1470,4 +1756,5 @@
 		};
 		F5F240CC036A877301FE7503 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = NJRQTMediaPopUpButton.m;
@@ -1475,4 +1762,5 @@
 		};
 		F5F240CD036A877301FE7503 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = NJRQTMediaPopUpButton.h;
@@ -1510,4 +1798,5 @@
 		};
 		F5F2418A036A910B01FE7503 = {
+			fileEncoding = 30;
 			isa = PBXFileReference;
 			path = SoundFileManager.h;
Index: /trunk/Cocoa/Pester/Source/Pester_Prefix.h
===================================================================
--- /trunk/Cocoa/Pester/Source/Pester_Prefix.h	(revision 53)
+++ /trunk/Cocoa/Pester/Source/Pester_Prefix.h	(revision 53)
@@ -0,0 +1,7 @@
+//
+// Prefix header for all source files of the 'Pester' target in the 'Pester' project
+//
+
+#ifdef __OBJC__
+    #import <Cocoa/Cocoa.h>
+#endif
Index: /trunk/Cocoa/Pester/Source/VERSION
===================================================================
--- /trunk/Cocoa/Pester/Source/VERSION	(revision 52)
+++ /trunk/Cocoa/Pester/Source/VERSION	(revision 53)
@@ -1,1 +1,1 @@
-1.1a3
+1.1a5
