--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
+ <data>
+ <int key="IBDocument.SystemTarget">1050</int>
+ <string key="IBDocument.SystemVersion">12F45</string>
+ <string key="IBDocument.InterfaceBuilderVersion">851</string>
+ <string key="IBDocument.AppKitVersion">1187.40</string>
+ <string key="IBDocument.HIToolboxVersion">626.00</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="NS.object.0">851</string>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSArray" key="IBDocument.PluginDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.Metadata">
+ <string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+ <integer value="1" key="NS.object.0"/>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="557403926">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSCustomObject" id="265051856">
+ <string key="NSClassName">BWQuincyUI</string>
+ </object>
+ <object class="NSCustomObject" id="827796767">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="582831428">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSWindowTemplate" id="802234099">
+ <int key="NSWindowStyleMask">1</int>
+ <int key="NSWindowBacking">2</int>
+ <string key="NSWindowRect">{{602, 592}, {571, 587}}</string>
+ <int key="NSWTFlags">1886912512</int>
+ <string key="NSWindowTitle">Crash Reporter</string>
+ <string key="NSWindowClass">NSWindow</string>
+ <object class="NSMutableString" key="NSViewClass">
+ <characters key="NS.bytes">View</characters>
+ </object>
+ <nil key="NSUserInterfaceItemIdentifier"/>
+ <string key="NSWindowContentMaxSize">{1.7976931348623157e+308, 1.7976931348623157e+308}</string>
+ <string key="NSWindowContentMinSize">{213, 107}</string>
+ <object class="NSView" key="NSWindowView" id="346017069">
+ <nil key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSBox" id="204457754">
+ <reference key="NSNextResponder" ref="346017069"/>
+ <int key="NSvFlags">288</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSView" id="511659880">
+ <reference key="NSNextResponder" ref="204457754"/>
+ <int key="NSvFlags">274</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTextField" id="696397380">
+ <reference key="NSNextResponder" ref="511659880"/>
+ <int key="NSvFlags">290</int>
+ <string key="NSFrame">{{0, 263}, {442, 24}}</string>
+ <reference key="NSSuperview" ref="511659880"/>
+ <reference key="NSNextKeyView" ref="217112912"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="922202055">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">272629760</int>
+ <string key="NSContents">Problem details and system configuration</string>
+ <object class="NSFont" key="NSSupport" id="113673234">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">13</double>
+ <int key="NSfFlags">1040</int>
+ </object>
+ <reference key="NSControlView" ref="696397380"/>
+ <object class="NSColor" key="NSBackgroundColor" id="370662603">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlColor</string>
+ <object class="NSColor" key="NSColor" id="536097992">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="140564637">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlTextColor</string>
+ <object class="NSColor" key="NSColor" id="824514053">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MAA</bytes>
+ </object>
+ </object>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSScrollView" id="217112912">
+ <reference key="NSNextResponder" ref="511659880"/>
+ <int key="NSvFlags">290</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSClipView" id="238729313">
+ <reference key="NSNextResponder" ref="217112912"/>
+ <int key="NSvFlags">2304</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTextView" id="436407902">
+ <reference key="NSNextResponder" ref="238729313"/>
+ <int key="NSvFlags">2322</int>
+ <object class="NSMutableSet" key="NSDragTypes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="set.sortedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>Apple HTML pasteboard type</string>
+ <string>Apple PDF pasteboard type</string>
+ <string>Apple PICT pasteboard type</string>
+ <string>Apple PNG pasteboard type</string>
+ <string>Apple URL pasteboard type</string>
+ <string>CorePasteboardFlavorType 0x6D6F6F76</string>
+ <string>NSColor pasteboard type</string>
+ <string>NSFilenamesPboardType</string>
+ <string>NSStringPboardType</string>
+ <string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>
+ <string>NeXT RTFD pasteboard type</string>
+ <string>NeXT Rich Text Format v1.0 pasteboard type</string>
+ <string>NeXT TIFF v4.0 pasteboard type</string>
+ <string>NeXT font pasteboard type</string>
+ <string>NeXT ruler pasteboard type</string>
+ <string>WebURLsWithTitlesPboardType</string>
+ <string>public.url</string>
+ </object>
+ </object>
+ <string key="NSFrame">{{0, -14}, {437, 253}}</string>
+ <reference key="NSSuperview" ref="238729313"/>
+ <reference key="NSNextKeyView" ref="321879571"/>
+ <object class="NSTextContainer" key="NSTextContainer" id="567359698">
+ <object class="NSLayoutManager" key="NSLayoutManager">
+ <object class="NSTextStorage" key="NSTextStorage">
+ <object class="NSMutableString" key="NSString">
+ <characters key="NS.bytes"/>
+ </object>
+ <nil key="NSDelegate"/>
+ </object>
+ <object class="NSMutableArray" key="NSTextContainers">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="567359698"/>
+ </object>
+ <int key="NSLMFlags">6</int>
+ <nil key="NSDelegate"/>
+ </object>
+ <reference key="NSTextView" ref="436407902"/>
+ <double key="NSWidth">437</double>
+ <int key="NSTCFlags">1</int>
+ </object>
+ <object class="NSTextViewSharedData" key="NSSharedData">
+ <int key="NSFlags">100667363</int>
+ <int key="NSTextCheckingTypes">0</int>
+ <nil key="NSMarkedAttributes"/>
+ <object class="NSColor" key="NSBackgroundColor" id="295167230">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MQA</bytes>
+ </object>
+ <object class="NSDictionary" key="NSSelectedAttributes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSBackgroundColor</string>
+ <string>NSColor</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">selectedTextBackgroundColor</string>
+ <reference key="NSColor" ref="536097992"/>
+ </object>
+ <object class="NSColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">selectedTextColor</string>
+ <reference key="NSColor" ref="824514053"/>
+ </object>
+ </object>
+ </object>
+ <reference key="NSInsertionColor" ref="824514053"/>
+ <object class="NSDictionary" key="NSLinkAttributes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSColor</string>
+ <string>NSUnderline</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSColor">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MCAwIDEAA</bytes>
+ </object>
+ <integer value="1"/>
+ </object>
+ </object>
+ <nil key="NSDefaultParagraphStyle"/>
+ <nil key="NSTextFinder"/>
+ <int key="NSPreferredTextFinderStyle">0</int>
+ </object>
+ <int key="NSTVFlags">6</int>
+ <string key="NSMaxSize">{876, 10000000}</string>
+ <nil key="NSDelegate"/>
+ </object>
+ </object>
+ <string key="NSFrame">{{1, 1}, {437, 253}}</string>
+ <reference key="NSSuperview" ref="217112912"/>
+ <reference key="NSNextKeyView" ref="436407902"/>
+ <reference key="NSDocView" ref="436407902"/>
+ <reference key="NSBGColor" ref="295167230"/>
+ <object class="NSCursor" key="NSCursor">
+ <string key="NSHotSpot">{4, 5}</string>
+ <object class="NSImage" key="NSImage">
+ <int key="NSImageFlags">12582912</int>
+ <object class="NSMutableArray" key="NSReps">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="0"/>
+ <object class="NSBitmapImageRep">
+ <object class="NSData" key="NSTIFFRepresentation">
+ <bytes key="NS.bytes">TU0AKgAAAHCAFUqgBVKsAAAAwdVQUqwaEQeIRGJRGFlYqwWLQ+JxuOQpVRmEx2RROKwOQyOUQSPyaUym
+SxqWyKXyeYxyZzWbSuJTScRCbz2Nz+gRKhUOfTqeUai0OSxiWTiBQSHSGFquGwekxyAgAAAOAQAAAwAA
+AAEAEAAAAQEAAwAAAAEAEAAAAQIAAwAAAAIACAAIAQMAAwAAAAEABQAAAQYAAwAAAAEAAQAAAREABAAA
+AAEAAAAIARIAAwAAAAEAAQAAARUAAwAAAAEAAgAAARYAAwAAAAEAEAAAARcABAAAAAEAAABnARwAAwAA
+AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MCAwAA</bytes>
+ </object>
+ </object>
+ </object>
+ <int key="NScvFlags">4</int>
+ </object>
+ <object class="NSScroller" id="194183608">
+ <reference key="NSNextResponder" ref="217112912"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{-30, 1}, {15, 90}}</string>
+ <reference key="NSSuperview" ref="217112912"/>
+ <reference key="NSNextKeyView" ref="238729313"/>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <reference key="NSTarget" ref="217112912"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSCurValue">1</double>
+ </object>
+ <object class="NSScroller" id="321879571">
+ <reference key="NSNextResponder" ref="217112912"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{-100, -100}, {87, 18}}</string>
+ <reference key="NSSuperview" ref="217112912"/>
+ <reference key="NSNextKeyView" ref="194183608"/>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSsFlags">1</int>
+ <reference key="NSTarget" ref="217112912"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSCurValue">1</double>
+ <double key="NSPercent">0.94565220000000005</double>
+ </object>
+ </object>
+ <string key="NSFrame">{{0, 8}, {439, 255}}</string>
+ <reference key="NSSuperview" ref="511659880"/>
+ <reference key="NSNextKeyView" ref="238729313"/>
+ <int key="NSsFlags">133650</int>
+ <reference key="NSVScroller" ref="194183608"/>
+ <reference key="NSHScroller" ref="321879571"/>
+ <reference key="NSContentView" ref="238729313"/>
+ <double key="NSMinMagnification">0.25</double>
+ <double key="NSMaxMagnification">4</double>
+ <double key="NSMagnification">1</double>
+ </object>
+ </object>
+ <string key="NSFrameSize">{439, 285}</string>
+ <reference key="NSSuperview" ref="204457754"/>
+ <reference key="NSNextKeyView" ref="696397380"/>
+ </object>
+ </object>
+ <string key="NSFrame">{{112, 75}, {439, 285}}</string>
+ <reference key="NSSuperview" ref="346017069"/>
+ <reference key="NSNextKeyView" ref="511659880"/>
+ <string key="NSOffsets">{0, 0}</string>
+ <object class="NSTextFieldCell" key="NSTitleCell">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Title</string>
+ <object class="NSFont" key="NSSupport">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">11</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <object class="NSColor" key="NSBackgroundColor" id="697590463">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textBackgroundColor</string>
+ <reference key="NSColor" ref="295167230"/>
+ </object>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+ </object>
+ </object>
+ <reference key="NSContentView" ref="511659880"/>
+ <int key="NSBorderType">0</int>
+ <int key="NSBoxType">3</int>
+ <int key="NSTitlePosition">0</int>
+ <bool key="NSTransparent">NO</bool>
+ </object>
+ <object class="NSTextField" id="494776998">
+ <reference key="NSNextResponder" ref="346017069"/>
+ <int key="NSvFlags">264</int>
+ <string key="NSFrame">{{112, 368}, {439, 105}}</string>
+ <reference key="NSSuperview" ref="346017069"/>
+ <reference key="NSNextKeyView" ref="69401596"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="794055832">
+ <int key="NSCellFlags">-1805647871</int>
+ <int key="NSCellFlags2">272629760</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="113673234"/>
+ <string key="NSPlaceholderString">Placeholder</string>
+ <reference key="NSControlView" ref="494776998"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="697590463"/>
+ <object class="NSColor" key="NSTextColor" id="301634927">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textColor</string>
+ <reference key="NSColor" ref="824514053"/>
+ </object>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSTextField" id="654062154">
+ <reference key="NSNextResponder" ref="346017069"/>
+ <int key="NSvFlags">264</int>
+ <string key="NSFrame">{{109, 508}, {445, 59}}</string>
+ <reference key="NSSuperview" ref="346017069"/>
+ <reference key="NSNextKeyView" ref="182606009"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="154211884">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">272629760</int>
+ <string key="NSContents">%@ unexpectedly quit the last time it was run. Would you like to send a crash report to %@?</string>
+ <reference key="NSSupport" ref="113673234"/>
+ <reference key="NSControlView" ref="654062154"/>
+ <reference key="NSBackgroundColor" ref="370662603"/>
+ <reference key="NSTextColor" ref="140564637"/>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSButton" id="69401596">
+ <reference key="NSNextResponder" ref="346017069"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{106, 35}, {119, 32}}</string>
+ <reference key="NSSuperview" ref="346017069"/>
+ <reference key="NSNextKeyView" ref="483277688"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="371323797">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents">Show Details</string>
+ <reference key="NSSupport" ref="113673234"/>
+ <reference key="NSControlView" ref="69401596"/>
+ <int key="NSButtonFlags">-2038284288</int>
+ <int key="NSButtonFlags2">1</int>
+ <reference key="NSAlternateImage" ref="113673234"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSButton" id="483277688">
+ <reference key="NSNextResponder" ref="346017069"/>
+ <int key="NSvFlags">-2147483356</int>
+ <string key="NSFrame">{{106, 35}, {119, 32}}</string>
+ <reference key="NSSuperview" ref="346017069"/>
+ <reference key="NSNextKeyView" ref="204457754"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="87187545">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents">Hide Details</string>
+ <reference key="NSSupport" ref="113673234"/>
+ <reference key="NSControlView" ref="483277688"/>
+ <int key="NSButtonFlags">-2038284288</int>
+ <int key="NSButtonFlags2">1</int>
+ <reference key="NSAlternateImage" ref="113673234"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSButton" id="640734563">
+ <reference key="NSNextResponder" ref="346017069"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{393, 35}, {82, 32}}</string>
+ <reference key="NSSuperview" ref="346017069"/>
+ <reference key="NSNextKeyView" ref="154373665"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="151764572">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents">Cancel</string>
+ <reference key="NSSupport" ref="113673234"/>
+ <reference key="NSControlView" ref="640734563"/>
+ <int key="NSButtonFlags">-2038284288</int>
+ <int key="NSButtonFlags2">1</int>
+ <reference key="NSAlternateImage" ref="113673234"/>
+ <string key="NSAlternateContents"/>
+ <string type="base64-UTF8" key="NSKeyEquivalent">Gw</string>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSButton" id="154373665">
+ <reference key="NSNextResponder" ref="346017069"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{475, 35}, {82, 32}}</string>
+ <reference key="NSSuperview" ref="346017069"/>
+ <reference key="NSNextKeyView" ref="54059672"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="713846517">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents">Send</string>
+ <reference key="NSSupport" ref="113673234"/>
+ <reference key="NSControlView" ref="154373665"/>
+ <int key="NSButtonFlags">-2038284288</int>
+ <int key="NSButtonFlags2">1</int>
+ <reference key="NSAlternateImage" ref="113673234"/>
+ <string key="NSAlternateContents"/>
+ <string type="base64-UTF8" key="NSKeyEquivalent">DQ</string>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSButton" id="182606009">
+ <reference key="NSNextResponder" ref="346017069"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{112, 481}, {13, 13}}</string>
+ <reference key="NSSuperview" ref="346017069"/>
+ <reference key="NSNextKeyView" ref="101270370"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="717745301">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="113673234"/>
+ <reference key="NSControlView" ref="182606009"/>
+ <int key="NSButtonFlags">-1198637056</int>
+ <int key="NSButtonFlags2">5</int>
+ <reference key="NSAlternateImage" ref="113673234"/>
+ <string key="NSAlternateContents"/>
+ <object class="NSMutableString" key="NSKeyEquivalent">
+ <characters key="NS.bytes"/>
+ </object>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSTextField" id="101270370">
+ <reference key="NSNextResponder" ref="346017069"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{130, 479}, {115, 18}}</string>
+ <reference key="NSSuperview" ref="346017069"/>
+ <reference key="NSNextKeyView" ref="494776998"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="881936640">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">272629760</int>
+ <string key="NSContents">Comments</string>
+ <reference key="NSSupport" ref="113673234"/>
+ <reference key="NSControlView" ref="101270370"/>
+ <reference key="NSBackgroundColor" ref="370662603"/>
+ <reference key="NSTextColor" ref="140564637"/>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSImageView" id="828078923">
+ <reference key="NSNextResponder" ref="346017069"/>
+ <int key="NSvFlags">268</int>
+ <object class="NSMutableSet" key="NSDragTypes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="set.sortedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>Apple PDF pasteboard type</string>
+ <string>Apple PICT pasteboard type</string>
+ <string>Apple PNG pasteboard type</string>
+ <string>NSFilenamesPboardType</string>
+ <string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>
+ <string>NeXT TIFF v4.0 pasteboard type</string>
+ </object>
+ </object>
+ <string key="NSFrame">{{20, 503}, {64, 64}}</string>
+ <reference key="NSSuperview" ref="346017069"/>
+ <reference key="NSNextKeyView" ref="654062154"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSImageCell" key="NSCell" id="670809899">
+ <int key="NSCellFlags">0</int>
+ <int key="NSCellFlags2">33554432</int>
+ <object class="NSCustomResource" key="NSContents">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSApplicationIcon</string>
+ </object>
+ <int key="NSAlign">0</int>
+ <int key="NSScale">0</int>
+ <int key="NSStyle">0</int>
+ <bool key="NSAnimates">NO</bool>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <bool key="NSEditable">YES</bool>
+ </object>
+ <object class="NSTextField" id="54059672">
+ <reference key="NSNextResponder" ref="346017069"/>
+ <int key="NSvFlags">290</int>
+ <string key="NSFrame">{{109, 20}, {445, 11}}</string>
+ <reference key="NSSuperview" ref="346017069"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="131703194">
+ <int key="NSCellFlags">-1541406719</int>
+ <int key="NSCellFlags2">272629760</int>
+ <string key="NSContents"/>
+ <object class="NSFont" key="NSSupport">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">9</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <string key="NSPlaceholderString">Note</string>
+ <reference key="NSControlView" ref="54059672"/>
+ <object class="NSColor" key="NSBackgroundColor">
+ <int key="NSColorSpace">4</int>
+ <bytes key="NSWhite">MQA</bytes>
+ </object>
+ <reference key="NSTextColor" ref="301634927"/>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ </object>
+ <string key="NSFrameSize">{571, 587}</string>
+ <reference key="NSNextKeyView" ref="828078923"/>
+ </object>
+ <string key="NSScreenRect">{{0, 0}, {2560, 1418}}</string>
+ <string key="NSMinSize">{213, 129}</string>
+ <string key="NSMaxSize">{1.7976931348623157e+308, 1.7976931348623157e+308}</string>
+ <bool key="NSWindowIsRestorable">YES</bool>
+ </object>
+ <object class="NSUserDefaultsController" id="561136420">
+ <bool key="NSSharedInstance">YES</bool>
+ </object>
+ </object>
+ <object class="IBObjectContainer" key="IBDocument.Objects">
+ <object class="NSMutableArray" key="connectionRecords">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">initialFirstResponder</string>
+ <reference key="source" ref="802234099"/>
+ <reference key="destination" ref="154373665"/>
+ </object>
+ <int key="connectionID">395</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">submitReport:</string>
+ <reference key="source" ref="265051856"/>
+ <reference key="destination" ref="154373665"/>
+ </object>
+ <int key="connectionID">398</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">delegate</string>
+ <reference key="source" ref="802234099"/>
+ <reference key="destination" ref="265051856"/>
+ </object>
+ <int key="connectionID">399</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">window</string>
+ <reference key="source" ref="265051856"/>
+ <reference key="destination" ref="802234099"/>
+ </object>
+ <int key="connectionID">401</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">submitButton</string>
+ <reference key="source" ref="265051856"/>
+ <reference key="destination" ref="154373665"/>
+ </object>
+ <int key="connectionID">402</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">cancelButton</string>
+ <reference key="source" ref="265051856"/>
+ <reference key="destination" ref="640734563"/>
+ </object>
+ <int key="connectionID">406</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">crashLogTextView</string>
+ <reference key="source" ref="265051856"/>
+ <reference key="destination" ref="436407902"/>
+ </object>
+ <int key="connectionID">408</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">hideButton</string>
+ <reference key="source" ref="265051856"/>
+ <reference key="destination" ref="483277688"/>
+ </object>
+ <int key="connectionID">413</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">showButton</string>
+ <reference key="source" ref="265051856"/>
+ <reference key="destination" ref="69401596"/>
+ </object>
+ <int key="connectionID">414</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">hideDetails:</string>
+ <reference key="source" ref="265051856"/>
+ <reference key="destination" ref="483277688"/>
+ </object>
+ <int key="connectionID">415</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">showDetails:</string>
+ <reference key="source" ref="265051856"/>
+ <reference key="destination" ref="69401596"/>
+ </object>
+ <int key="connectionID">416</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">showComments:</string>
+ <reference key="source" ref="265051856"/>
+ <reference key="destination" ref="182606009"/>
+ </object>
+ <int key="connectionID">417</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">value: self</string>
+ <reference key="source" ref="436407902"/>
+ <reference key="destination" ref="265051856"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="436407902"/>
+ <reference key="NSDestination" ref="265051856"/>
+ <string key="NSLabel">value: self</string>
+ <string key="NSBinding">value</string>
+ <string key="NSKeyPath">self</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">419</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">value: showComments</string>
+ <reference key="source" ref="182606009"/>
+ <reference key="destination" ref="265051856"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="182606009"/>
+ <reference key="NSDestination" ref="265051856"/>
+ <string key="NSLabel">value: showComments</string>
+ <string key="NSBinding">value</string>
+ <string key="NSKeyPath">showComments</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">438</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">hidden: showDetails</string>
+ <reference key="source" ref="204457754"/>
+ <reference key="destination" ref="265051856"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="204457754"/>
+ <reference key="NSDestination" ref="265051856"/>
+ <string key="NSLabel">hidden: showDetails</string>
+ <string key="NSBinding">hidden</string>
+ <string key="NSKeyPath">showDetails</string>
+ <object class="NSDictionary" key="NSOptions">
+ <string key="NS.key.0">NSValueTransformerName</string>
+ <string key="NS.object.0">NSNegateBoolean</string>
+ </object>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">444</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">hidden: showDetails</string>
+ <reference key="source" ref="483277688"/>
+ <reference key="destination" ref="265051856"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="483277688"/>
+ <reference key="NSDestination" ref="265051856"/>
+ <string key="NSLabel">hidden: showDetails</string>
+ <string key="NSBinding">hidden</string>
+ <string key="NSKeyPath">showDetails</string>
+ <object class="NSDictionary" key="NSOptions">
+ <string key="NS.key.0">NSValueTransformerName</string>
+ <string key="NS.object.0">NSNegateBoolean</string>
+ </object>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">452</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">hidden: showDetails</string>
+ <reference key="source" ref="69401596"/>
+ <reference key="destination" ref="265051856"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="69401596"/>
+ <reference key="NSDestination" ref="265051856"/>
+ <string key="NSLabel">hidden: showDetails</string>
+ <string key="NSBinding">hidden</string>
+ <string key="NSKeyPath">showDetails</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">453</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">cancelReport:</string>
+ <reference key="source" ref="265051856"/>
+ <reference key="destination" ref="640734563"/>
+ </object>
+ <int key="connectionID">454</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">descriptionTextField</string>
+ <reference key="source" ref="265051856"/>
+ <reference key="destination" ref="494776998"/>
+ </object>
+ <int key="connectionID">458</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">noteText</string>
+ <reference key="source" ref="265051856"/>
+ <reference key="destination" ref="54059672"/>
+ </object>
+ <int key="connectionID">479</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">displayPatternValue1: applicationName</string>
+ <reference key="source" ref="654062154"/>
+ <reference key="destination" ref="265051856"/>
+ <object class="NSNibBindingConnector" key="connector" id="485960292">
+ <reference key="NSSource" ref="654062154"/>
+ <reference key="NSDestination" ref="265051856"/>
+ <string key="NSLabel">displayPatternValue1: applicationName</string>
+ <string key="NSBinding">displayPatternValue1</string>
+ <string key="NSKeyPath">applicationName</string>
+ <object class="NSDictionary" key="NSOptions">
+ <string key="NS.key.0">NSDisplayPattern</string>
+ <string key="NS.object.0">%{value1}@ has unexpectedly quit last time it was run. Would you like to send a crash report to %{value2}@?</string>
+ </object>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">480</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">displayPatternValue2: companyName</string>
+ <reference key="source" ref="654062154"/>
+ <reference key="destination" ref="265051856"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="654062154"/>
+ <reference key="NSDestination" ref="265051856"/>
+ <string key="NSLabel">displayPatternValue2: companyName</string>
+ <string key="NSBinding">displayPatternValue2</string>
+ <string key="NSKeyPath">companyName</string>
+ <object class="NSDictionary" key="NSOptions">
+ <string key="NS.key.0">NSDisplayPattern</string>
+ <string key="NS.object.0">%{value1}@ has unexpectedly quit last time it was run. Would you like to send a crash report to %{value2}@?</string>
+ </object>
+ <reference key="NSPreviousConnector" ref="485960292"/>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">481</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">hidden: showComments</string>
+ <reference key="source" ref="494776998"/>
+ <reference key="destination" ref="265051856"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="494776998"/>
+ <reference key="NSDestination" ref="265051856"/>
+ <string key="NSLabel">hidden: showComments</string>
+ <string key="NSBinding">hidden</string>
+ <string key="NSKeyPath">showComments</string>
+ <object class="NSDictionary" key="NSOptions">
+ <string key="NS.key.0">NSValueTransformerName</string>
+ <string key="NS.object.0">NSNegateBoolean</string>
+ </object>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">485</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">delegate</string>
+ <reference key="source" ref="494776998"/>
+ <reference key="destination" ref="265051856"/>
+ </object>
+ <int key="connectionID">486</int>
+ </object>
+ </object>
+ <object class="IBMutableOrderedSet" key="objectRecords">
+ <object class="NSArray" key="orderedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBObjectRecord">
+ <int key="objectID">0</int>
+ <object class="NSArray" key="object" id="0">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <reference key="children" ref="557403926"/>
+ <nil key="parent"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-2</int>
+ <reference key="object" ref="265051856"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">File's Owner</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-1</int>
+ <reference key="object" ref="827796767"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">First Responder</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-3</int>
+ <reference key="object" ref="582831428"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Application</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">361</int>
+ <reference key="object" ref="802234099"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="346017069"/>
+ </object>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Window</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">362</int>
+ <reference key="object" ref="346017069"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="828078923"/>
+ <reference ref="101270370"/>
+ <reference ref="182606009"/>
+ <reference ref="154373665"/>
+ <reference ref="654062154"/>
+ <reference ref="483277688"/>
+ <reference ref="494776998"/>
+ <reference ref="54059672"/>
+ <reference ref="640734563"/>
+ <reference ref="204457754"/>
+ <reference ref="69401596"/>
+ </object>
+ <reference key="parent" ref="802234099"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">364</int>
+ <reference key="object" ref="204457754"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="696397380"/>
+ <reference ref="217112912"/>
+ </object>
+ <reference key="parent" ref="346017069"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">365</int>
+ <reference key="object" ref="828078923"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="670809899"/>
+ </object>
+ <reference key="parent" ref="346017069"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">366</int>
+ <reference key="object" ref="101270370"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="881936640"/>
+ </object>
+ <reference key="parent" ref="346017069"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">367</int>
+ <reference key="object" ref="182606009"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="717745301"/>
+ </object>
+ <reference key="parent" ref="346017069"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">369</int>
+ <reference key="object" ref="154373665"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="713846517"/>
+ </object>
+ <reference key="parent" ref="346017069"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">370</int>
+ <reference key="object" ref="654062154"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="154211884"/>
+ </object>
+ <reference key="parent" ref="346017069"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">371</int>
+ <reference key="object" ref="154211884"/>
+ <reference key="parent" ref="654062154"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">372</int>
+ <reference key="object" ref="713846517"/>
+ <reference key="parent" ref="154373665"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">374</int>
+ <reference key="object" ref="717745301"/>
+ <reference key="parent" ref="182606009"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">375</int>
+ <reference key="object" ref="881936640"/>
+ <reference key="parent" ref="101270370"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">376</int>
+ <reference key="object" ref="670809899"/>
+ <reference key="parent" ref="828078923"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">396</int>
+ <reference key="object" ref="69401596"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="371323797"/>
+ </object>
+ <reference key="parent" ref="346017069"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">397</int>
+ <reference key="object" ref="371323797"/>
+ <reference key="parent" ref="69401596"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">411</int>
+ <reference key="object" ref="483277688"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="87187545"/>
+ </object>
+ <reference key="parent" ref="346017069"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">412</int>
+ <reference key="object" ref="87187545"/>
+ <reference key="parent" ref="483277688"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">440</int>
+ <reference key="object" ref="561136420"/>
+ <reference key="parent" ref="0"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">455</int>
+ <reference key="object" ref="494776998"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="794055832"/>
+ </object>
+ <reference key="parent" ref="346017069"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">456</int>
+ <reference key="object" ref="794055832"/>
+ <reference key="parent" ref="494776998"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">477</int>
+ <reference key="object" ref="54059672"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="131703194"/>
+ </object>
+ <reference key="parent" ref="346017069"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">478</int>
+ <reference key="object" ref="131703194"/>
+ <reference key="parent" ref="54059672"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">368</int>
+ <reference key="object" ref="640734563"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="151764572"/>
+ </object>
+ <reference key="parent" ref="346017069"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">373</int>
+ <reference key="object" ref="151764572"/>
+ <reference key="parent" ref="640734563"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">377</int>
+ <reference key="object" ref="696397380"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="922202055"/>
+ </object>
+ <reference key="parent" ref="204457754"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">394</int>
+ <reference key="object" ref="922202055"/>
+ <reference key="parent" ref="696397380"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">378</int>
+ <reference key="object" ref="217112912"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="321879571"/>
+ <reference ref="194183608"/>
+ <reference ref="436407902"/>
+ </object>
+ <reference key="parent" ref="204457754"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">393</int>
+ <reference key="object" ref="321879571"/>
+ <reference key="parent" ref="217112912"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">392</int>
+ <reference key="object" ref="194183608"/>
+ <reference key="parent" ref="217112912"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">391</int>
+ <reference key="object" ref="436407902"/>
+ <reference key="parent" ref="217112912"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="flattenedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>-1.IBPluginDependency</string>
+ <string>-2.IBPluginDependency</string>
+ <string>-3.IBPluginDependency</string>
+ <string>361.IBPluginDependency</string>
+ <string>361.IBWindowTemplateEditedContentRect</string>
+ <string>361.windowTemplate.hasMinSize</string>
+ <string>361.windowTemplate.minSize</string>
+ <string>362.IBPluginDependency</string>
+ <string>364.IBPluginDependency</string>
+ <string>365.IBPluginDependency</string>
+ <string>366.IBPluginDependency</string>
+ <string>367.IBPluginDependency</string>
+ <string>368.IBPluginDependency</string>
+ <string>369.IBPluginDependency</string>
+ <string>370.IBPluginDependency</string>
+ <string>371.IBPluginDependency</string>
+ <string>372.IBPluginDependency</string>
+ <string>373.IBPluginDependency</string>
+ <string>374.IBPluginDependency</string>
+ <string>375.IBPluginDependency</string>
+ <string>376.IBPluginDependency</string>
+ <string>377.IBPluginDependency</string>
+ <string>378.IBPluginDependency</string>
+ <string>391.IBAttributePlaceholdersKey</string>
+ <string>391.IBPluginDependency</string>
+ <string>392.IBPluginDependency</string>
+ <string>392.IBShouldRemoveOnLegacySave</string>
+ <string>393.IBPluginDependency</string>
+ <string>393.IBShouldRemoveOnLegacySave</string>
+ <string>394.IBPluginDependency</string>
+ <string>396.IBPluginDependency</string>
+ <string>397.IBPluginDependency</string>
+ <string>411.IBPluginDependency</string>
+ <string>412.IBPluginDependency</string>
+ <string>440.IBPluginDependency</string>
+ <string>455.IBPluginDependency</string>
+ <string>456.IBPluginDependency</string>
+ <string>477.IBPluginDependency</string>
+ <string>478.IBPluginDependency</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{406, 702}, {571, 294}}</string>
+ <boolean value="YES"/>
+ <string>{213, 107}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <object class="NSMutableDictionary">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>AccessibilityDescription</string>
+ <string>AccessibilityHelp</string>
+ <string>ToolTip</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBAccessibilityAttribute">
+ <string key="name">AccessibilityDescription</string>
+ <reference key="object" ref="436407902"/>
+ <string key="accessibilityValue">Please describe any steps needed to trigger the problem</string>
+ </object>
+ <object class="IBAccessibilityAttribute">
+ <string key="name">AccessibilityHelp</string>
+ <reference key="object" ref="436407902"/>
+ <string key="accessibilityValue">Please describe any steps needed to trigger the problem</string>
+ </object>
+ <object class="IBToolTipAttribute">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="436407902"/>
+ <string key="toolTip">Please describe any steps needed to trigger the problem</string>
+ </object>
+ </object>
+ </object>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="YES"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="YES"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="unlocalizedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="activeLocalization"/>
+ <object class="NSMutableDictionary" key="localizations">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="sourceID"/>
+ <int key="maxID">486</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">BWQuincyUI</string>
+ <string key="superclassName">NSWindowController</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>cancelReport:</string>
+ <string>hideDetails:</string>
+ <string>showComments:</string>
+ <string>showDetails:</string>
+ <string>submitReport:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="actionInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>cancelReport:</string>
+ <string>hideDetails:</string>
+ <string>showComments:</string>
+ <string>showDetails:</string>
+ <string>submitReport:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBActionInfo">
+ <string key="name">cancelReport:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">hideDetails:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">showComments:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">showDetails:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">submitReport:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>cancelButton</string>
+ <string>crashLogTextView</string>
+ <string>descriptionTextField</string>
+ <string>hideButton</string>
+ <string>noteText</string>
+ <string>showButton</string>
+ <string>submitButton</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSButton</string>
+ <string>NSTextView</string>
+ <string>NSTextField</string>
+ <string>NSButton</string>
+ <string>NSTextField</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="toOneOutletInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>cancelButton</string>
+ <string>crashLogTextView</string>
+ <string>descriptionTextField</string>
+ <string>hideButton</string>
+ <string>noteText</string>
+ <string>showButton</string>
+ <string>submitButton</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBToOneOutletInfo">
+ <string key="name">cancelButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">crashLogTextView</string>
+ <string key="candidateClassName">NSTextView</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">descriptionTextField</string>
+ <string key="candidateClassName">NSTextField</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">hideButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">noteText</string>
+ <string key="candidateClassName">NSTextField</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">showButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">submitButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">./Classes/BWQuincyUI.h</string>
+ </object>
+ </object>
+ </object>
+ </object>
+ <int key="IBDocument.localizationMode">0</int>
+ <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+ <real value="1050" key="NS.object.0"/>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+ <integer value="3000" key="NS.object.0"/>
+ </object>
+ <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+ <nil key="IBDocument.LastKnownRelativeProjectPath"/>
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
+ <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
+ <string key="NS.key.0">NSApplicationIcon</string>
+ <string key="NS.object.0">{128, 128}</string>
+ </object>
+ </data>
+</archive>
--- /dev/null
+/*
+ * Author: Andreas Linde <mail@andreaslinde.de>
+ * Kent Sutherland
+ *
+ * Copyright (c) 2011 Andreas Linde & Kent Sutherland.
+ * All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#import "BWQuincyManager.h"
+#import "BWQuincyUI.h"
+#import <sys/sysctl.h>
+
+#define SDK_NAME @"Quincy"
+#define SDK_VERSION @"2.1.6"
+
+@interface BWQuincyManager(private)
+- (void) startManager;
+
+- (void) _postXML:(NSString*)xml toURL:(NSURL*)url;
+- (void) searchCrashLogFile:(NSString *)path;
+- (BOOL) hasPendingCrashReport;
+- (void) returnToMainApplication;
+@end
+
+
+@implementation BWQuincyManager
+
+@synthesize delegate = _delegate;
+@synthesize submissionURL = _submissionURL;
+@synthesize companyName = _companyName;
+@synthesize appIdentifier = _appIdentifier;
+@synthesize autoSubmitCrashReport = _autoSubmitCrashReport;
+
++ (BWQuincyManager *)sharedQuincyManager {
+ static BWQuincyManager *quincyManager = nil;
+
+ if (quincyManager == nil) {
+ quincyManager = [[BWQuincyManager alloc] init];
+ }
+
+ return quincyManager;
+}
+
+- (id) init {
+ if ((self = [super init])) {
+ _serverResult = CrashReportStatusFailureDatabaseNotAvailable;
+ _quincyUI = nil;
+
+ _submissionURL = nil;
+ _appIdentifier = nil;
+
+ _crashFile = nil;
+
+ self.delegate = nil;
+ self.companyName = @"";
+ }
+ return self;
+}
+
+- (void)dealloc {
+ _companyName = nil;
+ _delegate = nil;
+ _submissionURL = nil;
+ _appIdentifier = nil;
+
+ [_crashFile release];
+ [_quincyUI release];
+
+ [super dealloc];
+}
+
+- (void) searchCrashLogFile:(NSString *)path {
+ NSFileManager* fman = [NSFileManager defaultManager];
+
+ NSError* error;
+ NSMutableArray* filesWithModificationDate = [NSMutableArray array];
+ NSArray* crashLogFiles = [fman contentsOfDirectoryAtPath:path error:&error];
+ NSEnumerator* filesEnumerator = [crashLogFiles objectEnumerator];
+ NSString* crashFile;
+ while((crashFile = [filesEnumerator nextObject])) {
+ NSString* crashLogPath = [path stringByAppendingPathComponent:crashFile];
+ NSDate* modDate = [[[NSFileManager defaultManager] attributesOfItemAtPath:crashLogPath error:&error] fileModificationDate];
+ [filesWithModificationDate addObject:[NSDictionary dictionaryWithObjectsAndKeys:crashFile,@"name",crashLogPath,@"path",modDate,@"modDate",nil]];
+ }
+
+ NSSortDescriptor* dateSortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"modDate" ascending:YES] autorelease];
+ NSArray* sortedFiles = [filesWithModificationDate sortedArrayUsingDescriptors:[NSArray arrayWithObject:dateSortDescriptor]];
+
+ NSPredicate* filterPredicate = [NSPredicate predicateWithFormat:@"name BEGINSWITH %@", [self applicationName]];
+ NSArray* filteredFiles = [sortedFiles filteredArrayUsingPredicate:filterPredicate];
+
+ _crashFile = [[[filteredFiles valueForKeyPath:@"path"] lastObject] copy];
+}
+
+#pragma mark -
+#pragma mark setter
+- (void)setSubmissionURL:(NSString *)anSubmissionURL {
+ if (_submissionURL != anSubmissionURL) {
+ [_submissionURL release];
+ _submissionURL = [anSubmissionURL copy];
+ }
+
+ [self performSelector:@selector(startManager) withObject:nil afterDelay:0.1f];
+}
+
+- (void)setAppIdentifier:(NSString *)anAppIdentifier {
+ if (_appIdentifier != anAppIdentifier) {
+ [_appIdentifier release];
+ _appIdentifier = [anAppIdentifier copy];
+ }
+
+ [self setSubmissionURL:@"https://rink.hockeyapp.net/"];
+}
+
+- (void)storeLastCrashDate:(NSDate *) date {
+ [[NSUserDefaults standardUserDefaults] setValue:date forKey:@"CrashReportSender.lastCrashDate"];
+ [[NSUserDefaults standardUserDefaults] synchronize];
+}
+
+- (NSDate *)loadLastCrashDate {
+ NSDate *date = [[NSUserDefaults standardUserDefaults] valueForKey:@"CrashReportSender.lastCrashDate"];
+ return date ?: [NSDate distantPast];
+}
+
+- (void)storeAppVersion:(NSString *) version {
+ [[NSUserDefaults standardUserDefaults] setValue:version forKey:@"CrashReportSender.appVersion"];
+ [[NSUserDefaults standardUserDefaults] synchronize];
+}
+
+- (NSString *)loadAppVersion {
+ NSString *appVersion = [[NSUserDefaults standardUserDefaults] valueForKey:@"CrashReportSender.appVersion"];
+ return appVersion ?: nil;
+}
+
+#pragma mark -
+#pragma mark GetCrashData
+
+- (BOOL) hasPendingCrashReport {
+ BOOL returnValue = NO;
+
+ NSString *appVersion = [self loadAppVersion];
+ NSDate *lastCrashDate = [self loadLastCrashDate];
+
+ if (!appVersion || ![appVersion isEqualToString:[self applicationVersion]] || [lastCrashDate isEqualToDate:[NSDate distantPast]]) {
+ [self storeAppVersion:[self applicationVersion]];
+ [self storeLastCrashDate:[NSDate date]];
+ return NO;
+ }
+
+ NSArray* libraryDirectories = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, TRUE);
+ // Snow Leopard is having the log files in another location
+ [self searchCrashLogFile:[[libraryDirectories lastObject] stringByAppendingPathComponent:@"Logs/DiagnosticReports"]];
+ if (_crashFile == nil) {
+ [self searchCrashLogFile:[[libraryDirectories lastObject] stringByAppendingPathComponent:@"Logs/CrashReporter"]];
+ if (_crashFile == nil) {
+ NSString *sandboxFolder = [NSString stringWithFormat:@"/Containers/%@/Data/Library", [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIdentifier"]];
+ if ([[libraryDirectories lastObject] rangeOfString:sandboxFolder].location != NSNotFound) {
+ NSString *libFolderName = [[libraryDirectories lastObject] stringByReplacingOccurrencesOfString:sandboxFolder withString:@""];
+ [self searchCrashLogFile:[libFolderName stringByAppendingPathComponent:@"Logs/DiagnosticReports"]];
+ }
+ }
+ // Search machine diagnostic reports directory
+ if (_crashFile == nil) {
+ NSArray* libraryDirectories = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSLocalDomainMask, TRUE);
+ [self searchCrashLogFile:[[libraryDirectories lastObject] stringByAppendingPathComponent:@"Logs/DiagnosticReports"]];
+ if (_crashFile == nil) {
+ [self searchCrashLogFile:[[libraryDirectories lastObject] stringByAppendingPathComponent:@"Logs/CrashReporter"]];
+ }
+ }
+ }
+
+ if (_crashFile) {
+ NSError* error;
+
+ NSDate *crashLogModificationDate = [[[NSFileManager defaultManager] attributesOfItemAtPath:_crashFile error:&error] fileModificationDate];
+ unsigned long long crashLogFileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:_crashFile error:&error] fileSize];
+ if ([crashLogModificationDate compare: lastCrashDate] == NSOrderedDescending && crashLogFileSize > 0) {
+ [self storeLastCrashDate:crashLogModificationDate];
+ returnValue = YES;
+ }
+ }
+
+ return returnValue;
+}
+
+- (void) returnToMainApplication {
+ if ( self.delegate != nil && [self.delegate respondsToSelector:@selector(showMainApplicationWindow)])
+ [self.delegate showMainApplicationWindow];
+}
+
+- (void) startManager {
+ if ([self hasPendingCrashReport]) {
+ if (!self.autoSubmitCrashReport) {
+ _quincyUI = [[BWQuincyUI alloc] initWithManager:self crashFile:_crashFile companyName:_companyName applicationName:[self applicationName]];
+ [_quincyUI askCrashReportDetails];
+ } else {
+ NSError* error = nil;
+ NSString *crashLogs = [NSString stringWithContentsOfFile:_crashFile encoding:NSUTF8StringEncoding error:&error];
+ if (!error) {
+ NSString *lastCrash = [[crashLogs componentsSeparatedByString: @"**********\n\n"] lastObject];
+
+ NSString* description = @"";
+
+ if (_delegate && [_delegate respondsToSelector:@selector(crashReportDescription)]) {
+ description = [_delegate crashReportDescription];
+ }
+
+ [self sendReportCrash:lastCrash description:description];
+ } else {
+ [self returnToMainApplication];
+ }
+ }
+ } else {
+ [self returnToMainApplication];
+ }
+}
+
+- (NSString*) modelVersion {
+ NSString * modelString = nil;
+ int modelInfo[2] = { CTL_HW, HW_MODEL };
+ size_t modelSize;
+
+ if (sysctl(modelInfo,
+ 2,
+ NULL,
+ &modelSize,
+ NULL, 0) == 0) {
+ void * modelData = malloc(modelSize);
+
+ if (modelData) {
+ if (sysctl(modelInfo,
+ 2,
+ modelData,
+ &modelSize,
+ NULL, 0) == 0) {
+ modelString = [NSString stringWithUTF8String:modelData];
+ }
+
+ free(modelData);
+ }
+ }
+
+ return modelString;
+}
+
+
+
+- (void) cancelReport {
+ [self returnToMainApplication];
+}
+
+
+- (void) sendReportCrash:(NSString*)crashContent
+ description:(NSString*)notes
+{
+ NSString *userid = @"";
+ NSString *contact = @"";
+
+ SInt32 versionMajor, versionMinor, versionBugFix;
+ if (Gestalt(gestaltSystemVersionMajor, &versionMajor) != noErr) versionMajor = 0;
+ if (Gestalt(gestaltSystemVersionMinor, &versionMinor) != noErr) versionMinor= 0;
+ if (Gestalt(gestaltSystemVersionBugFix, &versionBugFix) != noErr) versionBugFix = 0;
+
+ NSString* xml = [NSString stringWithFormat:@"<crash><applicationname>%s</applicationname><bundleidentifier>%s</bundleidentifier><systemversion>%@</systemversion><senderversion>%@</senderversion><version>%@</version><platform>%@</platform><userid>%@</userid><contact>%@</contact><description><![CDATA[%@]]></description><log><![CDATA[%@]]></log></crash>",
+ [[self applicationName] UTF8String],
+ [[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIdentifier"] UTF8String],
+ [NSString stringWithFormat:@"%i.%i.%i", versionMajor, versionMinor, versionBugFix],
+ [self applicationVersion],
+ [self applicationVersion],
+ [self modelVersion],
+ userid,
+ contact,
+ notes,
+ crashContent
+ ];
+
+
+ [self returnToMainApplication];
+
+ [self _postXML:[NSString stringWithFormat:@"<crashes>%@</crashes>", xml] toURL:[NSURL URLWithString:self.submissionURL]];
+}
+
+- (void)_postXML:(NSString*)xml toURL:(NSURL*)url {
+ NSMutableURLRequest *request = nil;
+ NSString *boundary = @"----FOO";
+
+ if (self.appIdentifier) {
+ request = [NSMutableURLRequest requestWithURL:
+ [NSURL URLWithString:[NSString stringWithFormat:@"%@api/2/apps/%@/crashes?sdk=%@&sdk_version=%@",
+ self.submissionURL,
+ [self.appIdentifier stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
+ SDK_NAME,
+ SDK_VERSION
+ ]
+ ]];
+ } else {
+ request = [NSMutableURLRequest requestWithURL:url];
+ }
+
+ [request setValue:@"Quincy/Mac" forHTTPHeaderField:@"User-Agent"];
+ [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
+ [request setTimeoutInterval: 15];
+ [request setHTTPMethod:@"POST"];
+ NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
+ [request setValue:contentType forHTTPHeaderField:@"Content-type"];
+
+ NSMutableData *postBody = [NSMutableData data];
+ [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
+ if (self.appIdentifier) {
+ [postBody appendData:[@"Content-Disposition: form-data; name=\"xml\"; filename=\"crash.xml\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
+ [postBody appendData:[[NSString stringWithFormat:@"Content-Type: text/xml\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
+ } else {
+ [postBody appendData:[@"Content-Disposition: form-data; name=\"xmlstring\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
+ }
+ [postBody appendData:[xml dataUsingEncoding:NSUTF8StringEncoding]];
+ [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
+ [request setHTTPBody:postBody];
+
+ _serverResult = CrashReportStatusUnknown;
+ _statusCode = 200;
+
+ NSHTTPURLResponse *response = nil;
+ NSError *error = nil;
+
+ NSData *responseData = nil;
+ responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
+ _statusCode = [response statusCode];
+
+ if (responseData != nil) {
+ if (_statusCode >= 200 && _statusCode < 400) {
+ NSXMLParser *parser = [[NSXMLParser alloc] initWithData:responseData];
+ // Set self as the delegate of the parser so that it will receive the parser delegate methods callbacks.
+ [parser setDelegate:self];
+ // Depending on the XML document you're parsing, you may want to enable these features of NSXMLParser.
+ [parser setShouldProcessNamespaces:NO];
+ [parser setShouldReportNamespacePrefixes:NO];
+ [parser setShouldResolveExternalEntities:NO];
+
+ [parser parse];
+
+ [parser release];
+ }
+ }
+}
+
+
+#pragma mark NSXMLParser
+
+- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
+ if (qName) {
+ elementName = qName;
+ }
+
+ if ([elementName isEqualToString:@"result"]) {
+ _contentOfProperty = [NSMutableString string];
+ }
+}
+
+- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
+ if (qName) {
+ elementName = qName;
+ }
+
+ if ([elementName isEqualToString:@"result"]) {
+ if ([_contentOfProperty intValue] > _serverResult) {
+ _serverResult = [_contentOfProperty intValue];
+ }
+ }
+}
+
+
+- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
+ if (_contentOfProperty) {
+ // If the current element is one whose content we care about, append 'string'
+ // to the property that holds the content of the current element.
+ if (string != nil) {
+ [_contentOfProperty appendString:string];
+ }
+ }
+}
+
+
+#pragma mark GetterSetter
+
+- (NSString *) applicationName {
+ NSString *applicationName = [[[NSBundle mainBundle] localizedInfoDictionary] valueForKey: @"CFBundleExecutable"];
+
+ if (!applicationName)
+ applicationName = [[[NSBundle mainBundle] infoDictionary] valueForKey: @"CFBundleExecutable"];
+
+ return applicationName;
+}
+
+
+- (NSString*) applicationVersionString {
+ NSString* string = [[[NSBundle mainBundle] localizedInfoDictionary] valueForKey: @"CFBundleShortVersionString"];
+
+ if (!string)
+ string = [[[NSBundle mainBundle] infoDictionary] valueForKey: @"CFBundleShortVersionString"];
+
+ return string;
+}
+
+- (NSString *) applicationVersion {
+ NSString* string = [[[NSBundle mainBundle] localizedInfoDictionary] valueForKey: @"CFBundleVersion"];
+
+ if (!string)
+ string = [[[NSBundle mainBundle] infoDictionary] valueForKey: @"CFBundleVersion"];
+
+ return string;
+}
+
+@end