Rixstep
 About | ACP | Buy | Industry Watch | Learning Curve | News | Products | Search | Substack
Home » Learning Curve

The Key to Gatekeeper

The key to Gatekeeper is in Cupertino.


Get It

Try It

Macworld published a first look at OS X 10.8 16 February. So did Gizmodo Australia 28 February.

Gizmodo are down on 10.7 and even more so on 10.8.

'Scott Forstall - Apple's own Doctor Moreau - is still pushing for an ungodly desktop/iPad hybrid. This is not the future; it's a patched up genetic experiment anchored in Apple's past and present successes.'

'For all of Mountain Lion's good new features - and there are a few - the new OS raises a terrifying brace of thoughts: that Apple has run out of ideas. Or worse, that Apple is too afraid to implement new concepts, fearing it will kill the company's golden goose. Too afraid to change the world once again, as Steve Jobs used to say, one desktop at a time.'


Which could be true. But there are always things 'under the bonnet' that can be improved. Or worsened. This article is about one of them. One that's not an improvement. And it's not a review - it's a technical explanation. That most people should have a clue about by now but are seemingly working very hard to avoid grasping.

Gizmodo write a bit about Gatekeeper, but not much. They term Gatekeeper 'almost unnecessary' but say little else about it.

'Apple says that Gatekeeper is designed to protect you against evil apps: Mountain Lion will require any app to either use an Apple unique identifier or be sold through the App Store. Users can run any other app at their own risk, but Gatekeeper will offer a warning. That will protect - and scare - a lot of newbies, who will be inclined to only use the App Store to download their software. (Even though the App Store is not the safest place anymore.) It's Apple's not so subtle way of corralling developers into its walled garden.'



'Josh Ong' at Apple Insider goes off like this.

'Daring Fireball's John Gruber called Gatekeeper his favorite feature in Mountain Lion, despite the fact that it 'hardly even has a visible interface'. He praised the default setting as being 'exactly right', noting that it is a win for both users and developers. Gruber expressed hope that the feature will one day make its way into iOS.'

Which just about tells you there's something very wrong about it.

Dustin Curtis is less kind and less fanboy - but not completely.

'This is a fear mongering dialog. The vast majority of apps people download will not damage their computer, and mere mortals have no idea what 'signed by a recognised distributor' means. The word 'signed' in relation to security certificates is a very technical term and no one ever calls developers 'distributors'. Also, saying 'You should move it to the Trash' is weirdly strong wording.'

But even he objects only to the propaganda, not the actual technology.

'I agree with the goals of Gatekeeper, it's going to be a great feature for users...'

The description of what's going on is correct; the myopic illusion it's somehow still OK is inexcusable. And as the people at Gizmodo are drinking Microsoft Kool-Aid and as the others don't have much more to say, it's time to move back to Macworld. For a relatively adequate summary.

Gatekeeper blocks apps (the first time)

Ah that 'first time' can put everyone at ease. Macworld:

'When Apple introduced the Mac App Store, the rumblings started: a lot of people wondered if the Mac was headed for an iOS-like future, one in which only Apple-approved apps could run on the Mac.'

'But with Lion and now Mountain Lion, those fears haven't become reality.'


Actually you're wrong there, Macworld. The furore started back with Leopard, that remote upgrade numbered 10.5. That's when Apple introduced code signing. That's when fears became a reality for all but the most incorrigible window lickers.



Go back a few years. Ask your grandparents if you can't remember. Once upon a time there was no iPhone. Then suddenly there was. And the first three versions of the iPhone OS were a bit wobbly. Crashes were frequent. And in those crash dumps developers could see that their innocent mobile apps were running a trimmed down Unix with all privileges set to root.

That's how it started. There was no iPhone app store back then. There was no protection. Gruber famously quipped that Apple must have thought long and hard about running everything with no security whatsoever. Of course he did. And he discouraged others from even thinking about it.

But Apple did think about it. Point upgrade 4 saw the apps running in ordinary user land and the iPhone got code signing.

What is code signing? It's something based on Apple's own root certificate. That's something rather mumbo-jumbo, it's cryptography at a high level, it's how Mark Shuttleworth made his half billion. A root certificate is hard to crack.

A root certificate can be used to 'seal' almost anything. And with 10.5 Leopard, the 'sealing' came to Cocoa application bundles. There's a wee file in there called 'CodeResources' (today a symlink to another file with the same name further down the bundle hierarchy) and that file details what's in the bundle, what can be done with those files, and whether they can be removed, modified, etc. It's an XML property list so you need an editor like PlistEdit to read it.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>files</key>
    <dict>
        <key>Resources/AW ActiveTabClose.png</key>
        <data>
        +keJVVJxw/PjBb+62gcWUiPVQF0=
        </data>
        <key>Resources/AW ActiveTabClosePressed.png</key>
        <data>
        Ju0NvMakcurN8FN3nvwb5Eoe1UY=
        </data>
        <key>Resources/AW ActiveTabCloseRollover.png</key>
        <data>
        +/Vr79N0bX9UoX6P/zWIv7PQ98w=
        </data>
        <key>Resources/AW ActiveTabFill.png</key>
        <data>
        onVQwtZlFQCx/G74EPQ7Dc+fIIM=
        </data>
        <key>Resources/AW ActiveTabLeftCap.png</key>
        <data>
        7vm2zLdoIbg62vdKXa/3iFZPxEk=
        </data>
        <key>Resources/AW ActiveTabLock.png</key>
        <data>
        qUrxi3K01HfiM3UYDGQvIYKGSrE=
        </data>
        <key>Resources/AW ActiveTabRightCap.png</key>
        <data>
        t1gLKPyU4v1Y0PupIca4vSqWNSA=
        </data>
        <key>Resources/AW AddTabButton.png</key>
        <data>
        re12/9p/UYXJ7iyn/bdgb+Amar4=
        </data>
        <key>Resources/AW AddTabButtonPushed.png</key>
        <data>
        j89AX+zxH2l3gC1CbpVdVg2iCeI=
        </data>
        <key>Resources/AW AddTabButtonRollover Pressed.png</key>
        <data>
        KRqazOLUWGCRzbcssRFGNvaKsXU=
        </data>
        <key>Resources/AW AddTabButtonRollover.png</key>
        <data>
        4D7eZvLyKfW2foZh17RT5jHsgDA=
        </data>
        <key>Resources/AW AddTabButtonRolloverBG Pressed.png</key>
        <data>
        qIfShAdpa1P2NQxKRUmD9PcicHY=
        </data>
        <key>Resources/AW AddTabButtonRolloverBG.png</key>
        <data>
        mm5GrJjRLoMYLuZIO/GPVqnqxjA=
        </data>
        <key>Resources/AW AddTabButtonRolloverPlus.png</key>
        <data>
        JUPj73vXsFf4u0wjo9NZz8gGnIQ=
        </data>
        <key>Resources/AW ChevronButton.png</key>
        <data>
        sbMGWgMGLoNFSkcWdhz9DM3DsmU=
        </data>
        <key>Resources/AW ChevronButtonPushed.png</key>
        <data>
        N1k2G9ytoLkueJFeCXkONCJ35mg=
        </data>
        <key>Resources/AW ChevronVerticalButton.png</key>
        <data>
        1JfxdKvsI6hBbIA6lyho7XqM7nE=
        </data>
        <key>Resources/AW InactiveTabAlert.png</key>
        <data>
        kmkAuUzv5ZoyWea359eqffRVeWw=
        </data>
        <key>Resources/AW InactiveTabBG.png</key>
        <data>
        e+/2Zemb1rp16NNTd/uYet36Ww4=
        </data>
        <key>Resources/AW InactiveTabClose.png</key>
        <data>
        k7vVoiQrZ3Sn3lxekuDfVFVzE4c=
        </data>
        <key>Resources/AW InactiveTabClosePressed.png</key>
        <data>
        wPqWAeo/DeqbSiJ6bw8q7NQPr+g=
        </data>
        <key>Resources/AW InactiveTabCloseRollover.png</key>
        <data>
        OcOtx0MWRiaJ9UVNtQGXG0HMUpA=
        </data>
        <key>Resources/AW InactiveTabLeftCap.png</key>
        <data>
        S1scLteFw4uNSvoke2orYx/8W0A=
        </data>
        <key>Resources/AW InactiveTabRightCap.png</key>
        <data>
        1SY38dvSt68bWDY+eDv6mB+rMs0=
        </data>
        <key>Resources/AW Pulled ActiveTabCenterFill.png</key>
        <data>
        eC+atI9dfXoyim2ZP2XjGnj+yxc=
        </data>
        <key>Resources/AW Pulled ActiveTabLeftCap.png</key>
        <data>
        X5CI2Z38U6tCj1y2YIk5FZHnPCk=
        </data>
        <key>Resources/AW Pulled ActiveTabRightCap.png</key>
        <data>
        Ldi4RwwOz58Ag8PVXH1Ge+QFcM8=
        </data>
        <key>Resources/Acknowledgments.html</key>
        <data>
        5MN6iaf3UuFsCS9N+kdMulaGmsQ=
        </data>
        <key>Resources/Activity_Stop.tif</key>
        <data>
        htKOOtdZ09cQPlq1S4gM/W1FiGA=
        </data>
        <key>Resources/Activity_StopPressed.tif</key>
        <data>
        HCBzsCuRWs86QGxBRRsKungYPu8=
        </data>
        <key>Resources/AddBookmarkLeftCapButton.png</key>
        <data>
        I27mX10ueuITjsduzewGM37v+3Q=
        </data>
        <key>Resources/AddBookmarkLeftCapButtonDisabled.png</key>
        <data>
        FG2jQXsa/xcU/Byh032ckVcIlHw=
        </data>
        <key>Resources/AddBookmarkLeftCapButtonDisabledInactive.png</key>
        <data>
        tQZ7xnxL0NdqqKdrrTfv66h4otA=
        </data>
        <key>Resources/AddBookmarkLeftCapButtonInactive.png</key>
        <data>
        cyeBNBFtnw9Bcl1641tNqRGEcJM=
        </data>
        <key>Resources/AddBookmarkLeftCapButtonPushed.png</key>
        <data>
        TTpwHEZD/EPeroX2DW2p9s0Ym8U=
        </data>
        <key>Resources/AddressBook.tiff</key>
        <data>
        OLwYMYR2IEiW6biygyOiA5JVqDA=
        </data>
        <key>Resources/AdvancedPreferences.tiff</key>
        <data>
        ycoVOARBHCQOhUZ70S9t+c4q4vc=
        </data>
        <key>Resources/AppearancePreferences.tiff</key>
        <data>
        Y5znMkJcHxlAuy2COfQnnUIR2U0=
        </data>
        <key>Resources/AutoFillButton.png</key>
        <data>
        GYrqAfaLOjE51+K8g85SLI0ZM+s=
        </data>
        <key>Resources/AutoFillButtonDisabled.png</key>
        <data>
        sAgpGTbg7Ez2a8hRFrDBiX6v584=
        </data>
        <key>Resources/AutoFillButtonDisabledInactive.png</key>
        <data>
        70cY1WfJ2LKRkQFu9wXEpmQMZp4=
        </data>
        <key>Resources/AutoFillButtonInactive.png</key>
        <data>
        Ds1uUSxvhfcnF6YNvHQ7ktbM/7U=
        </data>
        <key>Resources/AutoFillButtonPushed.png</key>
        <data>
        S2AbyTVAK6omU88BHMwyd3KlgI8=
        </data>
        <key>Resources/AutoFillPreferences.tiff</key>
        <data>
        Trcm3n7U9Tfms8GKhtIDl4S+t4o=
        </data>
        <key>Resources/AutoTabMarker.tif</key>
        <data>
        tNsxoy1nB6G0z1VdNEgnTtmjQMs=
        </data>
        <key>Resources/AutoTabMarkerWhite.tif</key>
        <data>
        AVyHUTqauj06ukSL1wegwJpUH7o=
        </data>
        <key>Resources/BlackSearchFieldCancel.png</key>
        <data>
        66TBqf9xDc4hgKSt9MoObB7Enhc=
        </data>
        <key>Resources/BlackSearchFieldCancelPressed.png</key>
        <data>
        s0tM1LeqgTrFzo4zry85dIm/hiM=
        </data>
        <key>Resources/BlackSearchFieldLeft.png</key>
        <data>
        VdtI5ol0TVHSFA5Xi0SD0UxKQQI=
        </data>
        <key>Resources/BlackSearchFieldMagnifier.png</key>
        <data>
        bxnMdo+nwSYrq9Je+zWGgkWB/rA=
        </data>
        <key>Resources/BlackSearchFieldMiddle.png</key>
        <data>
        eIXSkk1ao/hKtvIdHqPdyh9t6kU=
        </data>
        <key>Resources/BlackSearchFieldRight.png</key>
        <data>
        3b+S5YvXAFkGMUqQgdV6HFdFD7o=
        </data>
        <key>Resources/Bonjour.tif</key>
        <data>
        +1ocoA+yBoI+6L2DMF7IO0Jqk98=
        </data>
        <key>Resources/BonjourLarge.png</key>
        <data>
        /Ncaj7eWBi73k6kdhL2zBaKkAaA=
        </data>
        <key>Resources/BookmarkPreferences.tiff</key>
        <data>
        531WqwXlGflxD+g8xwEqrXrqvwg=
        </data>
        <key>Resources/BookmarksButton.png</key>
        <data>
        /MTttFOIlLVESKD02A2DaMx4p9c=
        </data>
        <key>Resources/BookmarksButton_Locked.png</key>
        <data>
        rch2L+xcgeGWekfnswbctxzP5HU=
        </data>
        <key>Resources/BookmarksButton_Locked_Pressed.png</key>
        <data>
        iRGnewj2p9h+CJ7X4cjrchmEVAQ=
        </data>
        <key>Resources/BookmarksButton_Locked_Rollover.png</key>
        <data>
        6/M8U/Tx+J7IRBpEYTeaGGfwl60=
        </data>
        <key>Resources/BookmarksButton_Locked_Selected.png</key>
        <data>
        X8zbaLzQivQZOC92AYU7fddlytc=
        </data>
        <key>Resources/BookmarksButton_Locked_Selected_Pressed.png</key>
        <data>
        1xWYR4Db5cYKR3OJC0CltfCWdps=
        </data>
        <key>Resources/BookmarksButton_Pressed.png</key>
        <data>
        QY2c+Dw6AtueDORdmEStjEjsqXY=
        </data>
        <key>Resources/BookmarksButton_Rollover.png</key>
        <data>
        Fa5zTv6ASVlEbWhZgitAb+6+Yqc=
        </data>
        <key>Resources/BookmarksButton_Selected.png</key>
        <data>
        5J3sqh50oD62Vh+R8C9NXdaK9lM=
        </data>
        <key>Resources/BookmarksButton_Selected_Pressed.png</key>
        <data>
        Ox/PMEXzLZQ/6zveCs56YkjNHjk=
        </data>
        <key>Resources/BookmarksDragBadge1-2.tif</key>
        <data>
        sJ4Vt5aaBubWHdKHP0K3ZJFGJGE=
        </data>
        <key>Resources/BookmarksDragBadge3.tif</key>
        <data>
        V+TB1aKLSI+Ctv9Qh8iwSpW/DIA=
        </data>
        <key>Resources/BookmarksDragBadge4.tif</key>
        <data>
        6lL9xY6VV5KgFIfYkDAYs4YqpVY=
        </data>
        <key>Resources/BookmarksDragBadge5.tif</key>
        <data>
        RuObGFWlzHeWsVbWX6AxtjA1RzA=
        </data>
        <key>Resources/BookmarksDragImage.tif</key>
        <data>
        Iykv3fhWUd+i08CdVxqDMet+eAY=
        </data>
        <key>Resources/BookmarksTemplate.pdf</key>
        <data>
        pVmDdV0bbRcH+0XgkCsQYPf2NjQ=
        </data>
        <key>Resources/BugReportButton.png</key>
        <data>
        xZSiyDNIJ03SS+QzcRLsvPLnAcc=
        </data>
        <key>Resources/BugReportButtonInactive.png</key>
        <data>
        w1RX6mP4Aw6O5ALR7nu5+6jKyUQ=
        </data>
        <key>Resources/BugReportButtonPushed.png</key>
        <data>
        oLtO/bUsCCigJgJWPy5flpwOsJQ=
        </data>
        <key>Resources/CacheController.nib/keyedobjects.nib</key>
        <data>
        sLRZrgSyyQQ9nZUrBLghtVATWm8=
        </data>
        <key>Resources/Defaults.plist</key>
        <data>
        B+NsHgwP4Pl0XmecYaaZuw7ENrA=
        </data>
        <key>Resources/DialogController.js</key>
        <data>
        G37ncpEWIrWhKlE50FobTv4vOcM=
        </data>
        <key>Resources/DotMac.tif</key>
        <data>
        ehdSZjoulf1QgzON9ZRe22izKD0=
        </data>
        <key>Resources/DownloadResume.tif</key>
        <data>
        rU/XuLhqsmAjltS5V3RMhcUIAz8=
        </data>
        <key>Resources/DownloadResumePressed.tif</key>
        <data>
        qm0ya/BJEux7IKz11KT4PhGBh44=
        </data>
        <key>Resources/DownloadResumePressed_Selected.tif</key>
        <data>
        en1jI1LvzfTEhrwuKyGk+2lzGvU=
        </data>
        <key>Resources/DownloadResumeRollover.tif</key>
        <data>
        aGr5mE+wUmXpiU4KJV66UTbmHQs=
        </data>
        <key>Resources/DownloadResumeRollover_Selected.tif</key>
        <data>
        yuS/UZlwhU4tG9fMDZvLsKViFpM=
        </data>
        <key>Resources/DownloadResume_Selected.tif</key>
        <data>
        y3SZ7+XkOsKcHtgVHXmh/PBQ9Us=
        </data>
        <key>Resources/DownloadReveal.tif</key>
        <data>
        ghwgm9KPWPc8oGNaCz/oz6sk1/c=
        </data>
        <key>Resources/DownloadRevealPressed.tif</key>
        <data>
        Rt2a13dy2VWkYm217ehZZ6VC9S0=
        </data>
        <key>Resources/DownloadRevealPressed_Selected.tif</key>
        <data>
        Rt2a13dy2VWkYm217ehZZ6VC9S0=
        </data>
        <key>Resources/DownloadRevealRollover.tif</key>
        <data>
        ekixdX2Q3wgQGx6wdlshJc8M478=
        </data>
        <key>Resources/DownloadRevealRollover_Selected.tif</key>
        <data>
        ekixdX2Q3wgQGx6wdlshJc8M478=
        </data>
        <key>Resources/DownloadReveal_Selected.tif</key>
        <data>
        ghwgm9KPWPc8oGNaCz/oz6sk1/c=
        </data>
        <key>Resources/DownloadStop.tif</key>
        <data>
        3KyBKD4lJJ0DFkSxeu591bveWYg=
        </data>
        <key>Resources/DownloadStopPressed.tif</key>
        <data>
        +BRi/8OvavtPHT3rO/GObqd1mCU=
        </data>
        <key>Resources/DownloadStopPressed_Selected.tif</key>
        <data>
        HV3TzVmaVRKnQHqpxPOcsSQkkck=
        </data>
        <key>Resources/DownloadStopRollover.tif</key>
        <data>
        cVH4mWqfmMH+G7j/OG/3AeZScKo=
        </data>
        <key>Resources/DownloadStopRollover_Selected.tif</key>
        <data>
        FbF4krnjw4A9Jz0bUfOsi6xm48s=
        </data>
        <key>Resources/DownloadStop_Selected.tif</key>
        <data>
        w3b8yzuU0dl6wmSh9XdWeq4wS1I=
        </data>
        <key>Resources/EVCertRolloverLeftCap.png</key>
        <data>
        BjY5aurCIeJdmbIvGZm+sA1GfLk=
        </data>
        <key>Resources/EVCertRolloverLeftCapPressed.png</key>
        <data>
        4Czfwya5NIYj+XBEIQXhHX4oJj8=
        </data>
        <key>Resources/EVCertRolloverRightCap.png</key>
        <data>
        YgIKuupzdjSdeWroQvmzdlXewlc=
        </data>
        <key>Resources/EVCertRolloverRightCapPressed.png</key>
        <data>
        jj78vWic+w74aJQn+rjsKvNBtvg=
        </data>
        <key>Resources/EVCertRolloverStretch.png</key>
        <data>
        utT+nb868dQaOiBBP5sA5wKVTsQ=
        </data>
        <key>Resources/EVCertRolloverStretchPressed.png</key>
        <data>
        bEvUnRrulkfTG7THOLQqMBvjoiE=
        </data>
        <key>Resources/English.lproj/ABAutoCompleteMappings.plist</key>
        <dict>
            <key>hash</key>
            <data>
            Z+iUAM0NFQPQ7ldQOYvku3u9RSA=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/ActivityViewer.nib/classes.nib</key>
        <dict>
            <key>hash</key>
            <data>
            2tgzLZKI0Bxm/41IdvTgvdOOFng=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/ActivityViewer.nib/info.nib</key>
        <dict>
            <key>hash</key>
            <data>
            ewBnPeyivmlTWZq5uHTCVWG0hYI=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/ActivityViewer.nib/objects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            F2mGSPc2PpcEy0LUgEk2zQFqRf4=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/AdvancedPreferences.nib/classes.nib</key>
        <dict>
            <key>hash</key>
            <data>
            +OTi+yE1Nd01haj37ZOp+L7d7z4=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/AdvancedPreferences.nib/info.nib</key>
        <dict>
            <key>hash</key>
            <data>
            oFZTZAWRYzTVuPZnSo6kYqBisvk=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/AdvancedPreferences.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            xsWtvBYN6P4lwFsUTsGXZ2EN8G8=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/AppearancePreferences.nib/classes.nib</key>
        <dict>
            <key>hash</key>
            <data>
            jLvU4k5zxhoJG4j6GUh/kHYC5aY=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/AppearancePreferences.nib/info.nib</key>
        <dict>
            <key>hash</key>
            <data>
            +O41Vf+jtM6ttw6PkdlQznvJaAo=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/AppearancePreferences.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            6XJt3P53GxkamRXZW9U2MnvPxOI=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/AutoFillPreferences.nib/classes.nib</key>
        <dict>
            <key>hash</key>
            <data>
            alsgdnIHuVLo088i0NeJGjVPlks=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/AutoFillPreferences.nib/info.nib</key>
        <dict>
            <key>hash</key>
            <data>
            gBQNW0FBppelJJ74CKIgX4sX4MM=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/AutoFillPreferences.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            UjRJ7RJALSOU/n+YJSm/6O2B5GU=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/BookmarkChooser.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            XJxFgjueyPJ1xUCiIWQWfsZf+O4=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/BookmarkPreferences.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            1/DU4PIc7/Jwvh0miud4ACfHVho=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/BookmarkTitleChange.nib/classes.nib</key>
        <dict>
            <key>hash</key>
            <data>
            6soQC9Lh3sOyyrnSz3MCgp/l5VA=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/BookmarkTitleChange.nib/info.nib</key>
        <dict>
            <key>hash</key>
            <data>
            ui3Fm7R0RYuJTIRoJE3ti8LF+/Y=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/BookmarkTitleChange.nib/objects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            n0LVjpOIqLRrWrdHfwQcR7r9zSQ=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/Bookmarks.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            ny2ufJWXeaUZvXkY2VNLzRulPLc=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/BookmarksSearchBar.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            e/lr8PBY5DChXp6secFUKdpHAXE=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/Browser.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            HGk8pHN5QrTpjOfXr+py/XXoRWg=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/BugReport.nib/classes.nib</key>
        <dict>
            <key>hash</key>
            <data>
            sJOMn8gZm8dWtOKhLWs0mEPf5To=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/BugReport.nib/info.nib</key>
        <dict>
            <key>hash</key>
            <data>
            Pm9ZBrjK8Cdv1W5/AnKV/Oh6ZBU=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/BugReport.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            IJxaiMWN8JYC5wjCOO8ui3xyz4s=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/BuiltInBookmarks.plist</key>
        <dict>
            <key>hash</key>
            <data>
            /6kPnyENV1UFQwk14+sKppD8WsY=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/Downloads.nib/classes.nib</key>
        <dict>
            <key>hash</key>
            <data>
            YlZ2MmuEd4koCZwrtfyvYRxVhCE=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/Downloads.nib/info.nib</key>
        <dict>
            <key>hash</key>
            <data>
            WGzWJssIrJDyOuPcqhVGdc2l4hQ=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/Downloads.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            SkspaV2Eo6acVQAdXfRgcT0ewqY=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/Downloads.nib/objects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            9bPriMjZDqnKkrkFDdskp90/KQE=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/FileFormatAccessoryView.nib/classes.nib</key>
        <dict>
            <key>hash</key>
            <data>
            7QwPLF/2eUP8I2/CNQtnc2p7VRM=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/FileFormatAccessoryView.nib/info.nib</key>
        <dict>
            <key>hash</key>
            <data>
            qBgairCK9Nb6yUV38F04u026Ckg=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/FileFormatAccessoryView.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            REjfVEkC4Zc6QBlLGelYKSzU+eY=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/FindBanner.nib/classes.nib</key>
        <dict>
            <key>hash</key>
            <data>
            hBU9DwlcVMINaILBP3i52tQEnsY=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/FindBanner.nib/info.nib</key>
        <dict>
            <key>hash</key>
            <data>
            81Dg8kB3gdcOiEQRpv26rZoL7xs=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/FindBanner.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            5VkWAaLJpOTcpuMRCy0ACrgp1bQ=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/GeneralPreferences.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            1cad3jqWkWOtqHA+oejwu1I3+EQ=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/HTMLSource.nib/classes.nib</key>
        <dict>
            <key>hash</key>
            <data>
            7/36gwJ9CWHEPQrGN2mZWyOa1kw=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/HTMLSource.nib/info.nib</key>
        <dict>
            <key>hash</key>
            <data>
            LZbrdy4XNnjVgqIPP5e1BuykxS4=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/HTMLSource.nib/objects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            qbL7wf2M/EhM5IDduPfueeL6qkM=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/InfoPlist.strings</key>
        <dict>
            <key>hash</key>
            <data>
            SNYBoLOCZkugbCdDzvyeXZ7cv5A=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/Localizable.strings</key>
        <dict>
            <key>hash</key>
            <data>
            vJZLQsBG8TOSBmvcQIvQilVSH/0=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/MainMenu.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            BwbdjfAxD0WwkcF4cQV6WLM+jpE=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/NetworkDiagnosticsErrorPage.html</key>
        <dict>
            <key>hash</key>
            <data>
            uFlMppqW4emFsvQu6ZgVZ1k//Zg=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/NewBookmark.nib/classes.nib</key>
        <dict>
            <key>hash</key>
            <data>
            6soQC9Lh3sOyyrnSz3MCgp/l5VA=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/NewBookmark.nib/info.nib</key>
        <dict>
            <key>hash</key>
            <data>
            Hxkte4Xajk7L9w6ZO9MplRY2uyM=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/NewBookmark.nib/objects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            VNBVvP9IPZa4ReK5jwIQokh3pCw=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/NewRSSBookmark.nib/classes.nib</key>
        <dict>
            <key>hash</key>
            <data>
            /UTwxoa9EhWV2GwsZsskD74M7G8=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/NewRSSBookmark.nib/info.nib</key>
        <dict>
            <key>hash</key>
            <data>
            pGFwC2K6eQPNf/hxFEJjVkiIS/c=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/NewRSSBookmark.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            5cVJZr+Tsq/adOKz0x5gx009bAk=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/OldRSSPreferences.nib/classes.nib</key>
        <dict>
            <key>hash</key>
            <data>
            JQ4QtrHDaZN4IyiqjMGVX6I5U+M=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/OldRSSPreferences.nib/info.nib</key>
        <dict>
            <key>hash</key>
            <data>
            n2mFalLBspgJ/ZLfejxAvK3FwEo=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/OldRSSPreferences.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            LLFVwBlZfLiDo7G5FhJlD7ueZXM=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/OtherUserAgentSheet.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            q7O8geabp7qRx0AduMY0GcXWg2g=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/ParentalControlsErrorPage.html</key>
        <dict>
            <key>hash</key>
            <data>
            ov52v41KpHcsknMfm8r8zscyBTA=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/Plug-ins.html</key>
        <dict>
            <key>hash</key>
            <data>
            eHJnO9p3lXyfRpTLOfXf1ZM+D1Y=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/PrintingAccessoryView.nib/classes.nib</key>
        <dict>
            <key>hash</key>
            <data>
            qFv2lyOFt6mZc6fHsE7EqWrPt6A=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/PrintingAccessoryView.nib/info.nib</key>
        <dict>
            <key>hash</key>
            <data>
            rhGLt6zM8OT3+pAwkbgfiCR2XAI=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/PrintingAccessoryView.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            xS/0sMtyR/mKQ9EonufzjgOI7as=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/RSSPreferences.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            7VhSvRvjBRlZ/MUdEFCJcamgTPk=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/ResetDialog.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            nWyf3JLMTDinHKiAvu/fkshszac=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/SafariAlertPanel.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            V2CpwMAmaK56IZmY+xihGLiRf1M=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/SecurityPreferences.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            V6cRTG/XSplt/AUNzeCswS++Oqc=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/ServerNotFoundErrorPage.html</key>
        <dict>
            <key>hash</key>
            <data>
            zJzVRsuT0zU1IHIdW6a8+XAClao=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/ServicesMenu.strings</key>
        <dict>
            <key>hash</key>
            <data>
            Atvc0BBO2ZkbSPqO1M6k7gn3PC4=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/StandardErrorPage.html</key>
        <dict>
            <key>hash</key>
            <data>
            MmVlITcKL76BSX5lbgy6KmkHs9E=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/TabsPreferences.nib/classes.nib</key>
        <dict>
            <key>hash</key>
            <data>
            /zMzn2cTzNygkKPBmOzQir5eqmA=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/TabsPreferences.nib/info.nib</key>
        <dict>
            <key>hash</key>
            <data>
            oFZTZAWRYzTVuPZnSo6kYqBisvk=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/TabsPreferences.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            kpwrBn5zs+YvbyxNo4aJ/6QTMhA=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/ToolbarItems.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            xIkApjqAmN0YBOWs8jmH5g+3FTk=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/ToolbarItemsTiger.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            AsHsP5d3MxwvJsq+QtpWKnqA/RI=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/WebClipBanner.nib/keyedobjects.nib</key>
        <dict>
            <key>hash</key>
            <data>
            ToijRtvH42W33RB9XK6nWaus1LE=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/English.lproj/localizedStrings.js</key>
        <dict>
            <key>hash</key>
            <data>
            8NbdEQp/wUG6/oF0ux2DpMLzN+c=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/ErrorPageHelpButton.tif</key>
        <data>
        lGXHt01IWxTk6VyWoTiFquLqz70=
        </data>
        <key>Resources/FavoriteDrag_Caps.tif</key>
        <data>
        G0Ntjd6KSye3r7j4S9iMLTCRqdI=
        </data>
        <key>Resources/FavoriteDrag_Middle.tif</key>
        <data>
        6L2Nv3St5thw2G0G7tuUWOZvcCU=
        </data>
        <key>Resources/FavoritePressed_Caps.tif</key>
        <data>
        7pl8+3bhb7B+cS9UQmAH8lF/7Tc=
        </data>
        <key>Resources/FavoritePressed_Middle.tif</key>
        <data>
        +dhOvUXU0AkcsKN8CdK+3sjKVi0=
        </data>
        <key>Resources/FavoriteRollover_Caps.tif</key>
        <data>
        JQBEwaR0zszGvNYOgb7QLtrpn4g=
        </data>
        <key>Resources/FavoriteRollover_Middle.tif</key>
        <data>
        v8AP+PuOzCvs0GAQEafrF2WHgvA=
        </data>
        <key>Resources/FavoritesBar.tif</key>
        <data>
        de/2jxXH2ZbCT19TWev863U/sJg=
        </data>
        <key>Resources/FavoritesFolderArrow.tif</key>
        <data>
        jFqNwLmFUFJL6/6J1uGrhDdWeEo=
        </data>
        <key>Resources/FavoritesFolderArrowWhite.tif</key>
        <data>
        DitulBkB8Xu9JbW031BjqHy7k1M=
        </data>
        <key>Resources/FindBannerBackground.tif</key>
        <data>
        oZLVCK6iZWbDuwcqC9kPJ/Btbqs=
        </data>
        <key>Resources/FlowViewSplitter.png</key>
        <data>
        Lm2vNRhze3glD/zHvboZtlMygB8=
        </data>
        <key>Resources/GeneralPreferences.tiff</key>
        <data>
        pP4/4l36aEL8pc/gVaDaTPO3wDs=
        </data>
        <key>Resources/HideRSSButton.png</key>
        <data>
        MctnovGmkNRZCKy/60T8UpQrKMc=
        </data>
        <key>Resources/HideRSSButtonPressed.png</key>
        <data>
        DaWE80v+hfKrsIaQc1yFm/Hfw00=
        </data>
        <key>Resources/History.tif</key>
        <data>
        0npkyhVpiQdVlyYlxlUgFO9dAC4=
        </data>
        <key>Resources/IW ActiveTabClose.png</key>
        <data>
        wNgn9v+DKRTGjpjy5sZcoXgN/jo=
        </data>
        <key>Resources/IW ActiveTabClosePressed.png</key>
        <data>
        VWfGvz5bqQFw7FsXksYWKVhhgrA=
        </data>
        <key>Resources/IW ActiveTabCloseRollover.png</key>
        <data>
        5mTAMer554PD1yusPsulP3rVamc=
        </data>
        <key>Resources/IW ActiveTabFill.png</key>
        <data>
        8hcH4axdxPc20rSyeLzWHviFVYQ=
        </data>
        <key>Resources/IW ActiveTabLeftCap.png</key>
        <data>
        LGXoAnqqurp3VT80e7SxsO3wpa4=
        </data>
        <key>Resources/IW ActiveTabLock.png</key>
        <data>
        ezMntOGj1oIBh7VsmFM3uGLASbI=
        </data>
        <key>Resources/IW ActiveTabRightCap.png</key>
        <data>
        v4HnHdFcoywQkyqYKqqI41Kpq1g=
        </data>
        <key>Resources/IW AddTabButton.png</key>
        <data>
        8j9JVsTqMkqPST6joNRVTr+SR88=
        </data>
        <key>Resources/IW ChevronButton.png</key>
        <data>
        BJ11XoWm70NOQO+UqLHZZIwVyi0=
        </data>
        <key>Resources/IW ChevronVerticalButton.png</key>
        <data>
        f6cb8DMFGOqGIcUb5to7cabtBW4=
        </data>
        <key>Resources/IW InactiveTabAlert.png</key>
        <data>
        ISCxWG75ICk/mJaf6j6fnQ+FAwQ=
        </data>
        <key>Resources/IW InactiveTabBG.png</key>
        <data>
        JnUOpDzwN1jbHBEQTi8VwOteQPk=
        </data>
        <key>Resources/IW InactiveTabClose.png</key>
        <data>
        rlyc1bzn3hm+ywsAvJ7zBx1sJa4=
        </data>
        <key>Resources/IW InactiveTabClosePressed.png</key>
        <data>
        9KfTiBSyLEnLgHivqv9+qCyqc/w=
        </data>
        <key>Resources/IW InactiveTabCloseRollover.png</key>
        <data>
        rz3aVTCpdkL5O9zTGzszTJ0zJLM=
        </data>
        <key>Resources/IW InactiveTabLeftCap.png</key>
        <data>
        GA31sUqFjqzLu1thNmqMbmOPQW4=
        </data>
        <key>Resources/IW InactiveTabRightCap.png</key>
        <data>
        /GKWrfbyRPjtr8x0/usa/kfZbQc=
        </data>
        <key>Resources/InactiveLoadingCornerFill.png</key>
        <data>
        a4ERjmMqfFPE9kP9xgykbRbrc1o=
        </data>
        <key>Resources/InactiveLoadingCornerLeftCap.png</key>
        <data>
        N1gc74/RLd2uES5v7GYK16bESAU=
        </data>
        <key>Resources/InactiveLoadingCornerRightCap.png</key>
        <data>
        ctn9/gnPn926F8K6Kh6N9FtCgO8=
        </data>
        <key>Resources/InactiveLoadingCornerWhiteFill.png</key>
        <data>
        L8PvpJrkrDovvh84JGtu4Q19p8g=
        </data>
        <key>Resources/InactiveLoadingCornerWhiteLeftCap.png</key>
        <data>
        SDEQP1DcU/g8gCSNA+0DBiGmang=
        </data>
        <key>Resources/InactiveLoadingCornerWhiteRightCap.png</key>
        <data>
        Tk5AHuwoT/p/cPgJQjoIoRuyLxU=
        </data>
        <key>Resources/LibrarySelection.tif</key>
        <data>
        StyEj5OyAOBXmeZMwxvEGu3vQdM=
        </data>
        <key>Resources/LibrarySelectionGray.tif</key>
        <data>
        jG/8/HdMC/YXWvzNKiD8iHEtfws=
        </data>
        <key>Resources/LoadingCornerFill.png</key>
        <data>
        3IeMYVZgC9+VsnhVEjouYAl0QIs=
        </data>
        <key>Resources/LoadingCornerFillPush.png</key>
        <data>
        ajaNBg7GuqqO0ToCD0MpW+GpgtA=
        </data>
        <key>Resources/LoadingCornerLeftCap.png</key>
        <data>
        A10xd8+PJv7hdc0SxYA6ipjYxRU=
        </data>
        <key>Resources/LoadingCornerLeftCapPush.png</key>
        <data>
        c+WAH0bCagt4bRRkWOh1gBvJ+tA=
        </data>
        <key>Resources/LoadingCornerRightCap.png</key>
        <data>
        aR5YAjl5oGNeBZxavV1Zkz5QdfA=
        </data>
        <key>Resources/LoadingCornerRightCapPush.png</key>
        <data>
        C467mgqro8gikqJxWk3pGySqkAM=
        </data>
        <key>Resources/LoadingCornerWhiteFill.png</key>
        <data>
        7vSUbRpvX3K0nfB/3NRXsV+Ybz8=
        </data>
        <key>Resources/LoadingCornerWhiteFillPush.png</key>
        <data>
        aOO6HGlsy47Km8H4sTJU+hKIsGg=
        </data>
        <key>Resources/LoadingCornerWhiteLeftCap.png</key>
        <data>
        8ykI2uJ7qX78cjvW7WjVVmsRfz8=
        </data>
        <key>Resources/LoadingCornerWhiteLeftCapPush.png</key>
        <data>
        ud0Wv7TgrjuCiDKQj906WX8jedA=
        </data>
        <key>Resources/LoadingCornerWhiteRightCap.png</key>
        <data>
        nbUXt6XMq9i4FMRShF9JK//ZBEI=
        </data>
        <key>Resources/LoadingCornerWhiteRightCapPush.png</key>
        <data>
        39crwSbza5trWLqVguW9FC55dyw=
        </data>
        <key>Resources/LockDotPressed.png</key>
        <data>
        1OpuoBoHa+87Mo+HXQP3ALdlxsw=
        </data>
        <key>Resources/LockDotRollover.png</key>
        <data>
        R8xlGxE0tVPI3U5IXwn9sjYO16w=
        </data>
        <key>Resources/NavBackButton.png</key>
        <data>
        f++XtzIdNu7kWpfDxcBTSshVghQ=
        </data>
        <key>Resources/NavBackButtonDisabled.png</key>
        <data>
        qeTMKABCjs3ATcE3t1DOZtIfZfI=
        </data>
        <key>Resources/NavBackButtonDisabledInactive.png</key>
        <data>
        yYeRQKhCJuhyBm559Q+ie0WjpXg=
        </data>
        <key>Resources/NavBackButtonInactive.png</key>
        <data>
        zLJCZSXUm1bCLogIWS6HgW1fSc8=
        </data>
        <key>Resources/NavBackButtonPushed.png</key>
        <data>
        OpIGpxzqw4E4WpLijEtCXi4WUTY=
        </data>
        <key>Resources/NavForwardButton.png</key>
        <data>
        fWa8qmF1pOeVT1m6zH+pYQ31S90=
        </data>
        <key>Resources/NavForwardButtonDisabled.png</key>
        <data>
        4euMQ8+qFaqYdJV4l8ylz65CAEs=
        </data>
        <key>Resources/NavForwardButtonDisabledInactive.png</key>
        <data>
        /eI7/76dCRm0zsPqhiB5JnQccTU=
        </data>
        <key>Resources/NavForwardButtonInactive.png</key>
        <data>
        o3FQK4GWIKDrofmQWPLv3cHPlo0=
        </data>
        <key>Resources/NavForwardButtonPushed.png</key>
        <data>
        RJyGIZfpBJM9dnZK2babNx9IsT0=
        </data>
        <key>Resources/NewFolder.tif</key>
        <data>
        oN4G+Hi5MZcFsxfZJeHBkWKccqo=
        </data>
        <key>Resources/NewFolder_Disabled.tif</key>
        <data>
        HTSRuBzgLMjAT4rdddvR13eedcI=
        </data>
        <key>Resources/NewFolder_Pressed.tif</key>
        <data>
        v4WrTUd2c/2cb3y1iWrYIAIKCOk=
        </data>
        <key>Resources/OldFindBannerPreviousNext.tif</key>
        <data>
        znoLVO55xZnJ2DvGIQX3jO/NbRU=
        </data>
        <key>Resources/OldFindBannerPreviousNextDisabled.tif</key>
        <data>
        1qO7jpBzuyckfvNjlSqSxqoRFac=
        </data>
        <key>Resources/OldFindBannerPreviousNextLeft_Pressed.tif</key>
        <data>
        jM7jW0QGT+MUT6WBs0AuDUH5vCA=
        </data>
        <key>Resources/OldFindBannerPreviousNextRight_Pressed.tif</key>
        <data>
        sz88OSAYMac2L0F7v2Rb2qAHhaU=
        </data>
        <key>Resources/PageLoadTest.nib/keyedobjects.nib</key>
        <data>
        smoKtawJt3sEgv+3vkUfb0HnQVQ=
        </data>
        <key>Resources/PhishingAlert.html</key>
        <data>
        LQldsVOYVUv+V9UytMavS/nANCk=
        </data>
        <key>Resources/PhishingAlertBase.png</key>
        <data>
        9dolzXD7/2GDuloCLL0ZgUf1Ar0=
        </data>
        <key>Resources/PhishingAlertTitlebar.png</key>
        <data>
        YA71V2BG+4M94vvpkdvfRK4MWkU=
        </data>
        <key>Resources/PlasticButtonPressed_Caps.tif</key>
        <data>
        sQCQg+GwbQM3vnHdp3vIBMH0qE4=
        </data>
        <key>Resources/PlasticButtonPressed_Middle.tif</key>
        <data>
        MnBUI4vXxRJYwU0wDE0C3LaNg6k=
        </data>
        <key>Resources/PlasticButton_Caps.tif</key>
        <data>
        MBn+4hhpL2OcK+3MlOezaG3hRvU=
        </data>
        <key>Resources/PlasticButton_Middle.tif</key>
        <data>
        C7VpCRJCys5xmwi8+hPB9IMfnFo=
        </data>
        <key>Resources/PrintButton.png</key>
        <data>
        27GNTZu0YI/EN8c5PtMJyL6Si/c=
        </data>
        <key>Resources/PrintButtonDisabled.png</key>
        <data>
        hxES4x8YWx1VRXpNaKN0HH85CmI=
        </data>
        <key>Resources/PrintButtonDisabledInactive.png</key>
        <data>
        VSnoS5/1DsqyYJsZnD3/vxSrHlA=
        </data>
        <key>Resources/PrintButtonInactive.png</key>
        <data>
        RNMWR/gZBasTdyKBvUA4Ss19e50=
        </data>
        <key>Resources/PrintButtonPushed.png</key>
        <data>
        xoEvr2S712UYP4nN1gehaP7/5KQ=
        </data>
        <key>Resources/PurpleButtonFill-Normal.png</key>
        <data>
        ONmeL1b/ZoULDJAO+IKS5o9tTs8=
        </data>
        <key>Resources/PurpleButtonFill-Pressed.png</key>
        <data>
        PvsFL5a1s6WmmGm0bN+FKWIioB4=
        </data>
        <key>Resources/PurpleButtonFill-Pulse.png</key>
        <data>
        hXat5jBI8xDJ4W+og6j55qAGXq8=
        </data>
        <key>Resources/PurpleButtonLeft-Normal.png</key>
        <data>
        HyJ79EPrbpLHghvB6BSSh4TkJ6k=
        </data>
        <key>Resources/PurpleButtonLeft-Pressed.png</key>
        <data>
        banrVkxInCWcvfQLVIaogKSxXT0=
        </data>
        <key>Resources/PurpleButtonLeft-Pulse.png</key>
        <data>
        h/qxQWelMnHEcGKp5j6efdB2oDc=
        </data>
        <key>Resources/PurpleButtonRight-Normal.png</key>
        <data>
        m4msBkSCIx7kpRhddc7448fCxaI=
        </data>
        <key>Resources/PurpleButtonRight-Pressed.png</key>
        <data>
        GPY8XZGaRJmYbzd1gqRBXA+G+EE=
        </data>
        <key>Resources/PurpleButtonRight-Pulse.png</key>
        <data>
        Cq69+kDuHmq0r/a8fg8VeoE0wng=
        </data>
        <key>Resources/PurplePopUpFill.png</key>
        <data>
        AI72bq37fDpHL0Lv02LiNZ0DFUI=
        </data>
        <key>Resources/PurplePopUpLeft.png</key>
        <data>
        HyJ79EPrbpLHghvB6BSSh4TkJ6k=
        </data>
        <key>Resources/PurplePopUpRight.png</key>
        <data>
        VJQPpRIo6sHPzMzpq/SSlpijUfI=
        </data>
        <key>Resources/RSSPreferences.tiff</key>
        <data>
        +Ds5o3PzL4ALtokBt78pcbqSGHw=
        </data>
        <key>Resources/RSSProxyImage.tif</key>
        <data>
        GiD7VrpZOClCf0G7h0DDBNs/0Q4=
        </data>
        <key>Resources/RecropButtonNormal.png</key>
        <data>
        mG7PadzSoel7cOKPbwGIcfIA9oY=
        </data>
        <key>Resources/RecropButtonPressed.png</key>
        <data>
        sY2ufgsRymrc/qvL20lVYjttCXY=
        </data>
        <key>Resources/RenderTree.nib/classes.nib</key>
        <dict>
            <key>hash</key>
            <data>
            ADkKmpOX839x0pEGlVXGjS47XqE=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/RenderTree.nib/info.nib</key>
        <dict>
            <key>hash</key>
            <data>
            Cr4jMuE8J+9WdhC0hglMZfCQb4I=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/RenderTree.nib/keyedobjects.nib</key>
        <data>
        btKuGNuYFOHHlY7V5QCtf5HANkQ=
        </data>
        <key>Resources/Safari.scriptSuite</key>
        <data>
        tikuKA8X95LoWVNeJ155ZPWdS4M=
        </data>
        <key>Resources/Safari.scriptTerminology</key>
        <data>
        TGv5WwhFcAOBa4GQ7YKeZF8H2JA=
        </data>
        <key>Resources/ScopeSelectLeft.png</key>
        <data>
        K6OdAOizGECAVKenN/hApkdt21U=
        </data>
        <key>Resources/ScopeSelectLeftPressed.png</key>
        <data>
        5qmL2mGHqdjNU15Ws9VHRKNTxWw=
        </data>
        <key>Resources/ScopeSelectMiddle.png</key>
        <data>
        HySoQ4GZn300e/fqUy87dP+i0/4=
        </data>
        <key>Resources/ScopeSelectMiddlePressed.png</key>
        <data>
        0b1uqmZWLw1D6OSsWhuwfOcRMak=
        </data>
        <key>Resources/ScopeSelectRight.png</key>
        <data>
        9gdlh5p5as2SfrcNeW0/OvqWQ8g=
        </data>
        <key>Resources/ScopeSelectRightPressed.png</key>
        <data>
        gxelUeALPC0YY4hjwMV1ftoEFYA=
        </data>
        <key>Resources/SearchFieldCapLeft.png</key>
        <data>
        rBCETz8Bwl+kquJWC2JoSE4t+b4=
        </data>
        <key>Resources/SearchFieldCapLeftInactive.png</key>
        <data>
        fOEs0YAzty0CIB+O4Itk7GLgfuE=
        </data>
        <key>Resources/SearchFieldCapRight.png</key>
        <data>
        A+LtBX3c7LG+4yOK+uFYt+ycyzc=
        </data>
        <key>Resources/SearchFieldCapRightInactive.png</key>
        <data>
        ci8ksB5JR0HySoowdv3JOsMILOU=
        </data>
        <key>Resources/SearchFieldStretch.png</key>
        <data>
        rJiJ1rYfWmI6xGG4HhB2fsw5v/o=
        </data>
        <key>Resources/SearchFieldStretchInactive.png</key>
        <data>
        NzAp/0fpxuC9YiRigBh9WioIIls=
        </data>
        <key>Resources/SearchMagGlass.png</key>
        <data>
        /UpltYhng5rDKN4R0sTWXCGfA50=
        </data>
        <key>Resources/SearchMagGlassPressed.png</key>
        <data>
        M4bf9OcvsgqDPOls5EhzLbNXyT8=
        </data>
        <key>Resources/SearchScopeButton-PressedFill.tif</key>
        <data>
        SoaQUstL9Y7Fh7GcKNn1hYkoYVk=
        </data>
        <key>Resources/SearchScopeButton-PressedL.tif</key>
        <data>
        /poh9nfiGRqgwNlq0FPa8VQPHRE=
        </data>
        <key>Resources/SearchScopeButton-PressedR.tif</key>
        <data>
        HbmXTLp4kcTVLKelbCR5s8bfZDg=
        </data>
        <key>Resources/SearchScopeButton-RolloverFill.tif</key>
        <data>
        yjdmHujcFKmC2bhaA/V2sw9CMow=
        </data>
        <key>Resources/SearchScopeButton-RolloverL.tif</key>
        <data>
        acyvYPoa+u7Oabqw0QbdxMUO8+Y=
        </data>
        <key>Resources/SearchScopeButton-RolloverR.tif</key>
        <data>
        vuUHo/hYfI5mgb2fD70rYYaK+7s=
        </data>
        <key>Resources/SearchScopeButton-SelectedFill.tif</key>
        <data>
        wvCUDz41A6gxibRHliTh2eMI0qc=
        </data>
        <key>Resources/SearchScopeButton-SelectedL.tif</key>
        <data>
        gFFa443ArwFmdsRGtaPk618P/g8=
        </data>
        <key>Resources/SearchScopeButton-SelectedR.tif</key>
        <data>
        R5qRMrvkClxf7XGCaZ1dFWsoXJo=
        </data>
        <key>Resources/Search_SnapBack.tif</key>
        <data>
        DyzeawzNLBW4dViNTGb3uijHLqs=
        </data>
        <key>Resources/Search_SnapBackPressed.tif</key>
        <data>
        YFwawhCAXrnfn7CZ2to4sNWVgxE=
        </data>
        <key>Resources/SecurityPreferences.tiff</key>
        <data>
        0PGczuLmsDuQniPk7Dl3xVqT6UI=
        </data>
        <key>Resources/Shortcuts.html</key>
        <data>
        E2eDDLs79uTG+fmJOzVRUaGD2cs=
        </data>
        <key>Resources/ShowRSSButton.png</key>
        <data>
        UvHINCgRKbcLTFUAq3+ApT7/JPw=
        </data>
        <key>Resources/ShowRSSButtonPressed.png</key>
        <data>
        /X+qjRM/h/hQ6iVwuL/Z00mh7FE=
        </data>
        <key>Resources/SlidingShadow.tif</key>
        <data>
        55hfY8RhAqbOB4hbTXo3eodwHGE=
        </data>
        <key>Resources/SnapshotPlaceholderCompass.png</key>
        <data>
        +1pMKqC90zz60ASaRfx+nlIjI1s=
        </data>
        <key>Resources/SnapshotPlaceholderGradient.png</key>
        <data>
        lW/C+t1YF82qNGL4UogkrOJZrww=
        </data>
        <key>Resources/SnapshotPlaceholderPadlock.png</key>
        <data>
        xJm/Tkg8a99YTZKwl6EcmqCdoaA=
        </data>
        <key>Resources/SnippetEditor/Images/buttonBarBackground.png</key>
        <data>
        5D8I+iUgzjUX2S3CS/G9u2bBqWs=
        </data>
        <key>Resources/SnippetEditor/Images/buttonBarBackgroundInactive.png</key>
        <data>
        ORC7Qskqg5ElnfTinVyApzx/dUM=
        </data>
        <key>Resources/SnippetEditor/Images/splitterBar.png</key>
        <data>
        pdNtKk7YRDW5NvpAgx+aEfPzc8I=
        </data>
        <key>Resources/SnippetEditor/Images/splitterBarInactive.png</key>
        <data>
        Sb6KG9UWhal5Qu49lVHo28H3Ibc=
        </data>
        <key>Resources/SnippetEditor/Images/splitterDimple.png</key>
        <data>
        DOhWmFhxe4fSXKlwOKba9OMqYCM=
        </data>
        <key>Resources/SnippetEditor/Images/splitterDimpleInactive.png</key>
        <data>
        BTOxXxD0LnD3FeYwusiySXEATug=
        </data>
        <key>Resources/SnippetEditor/Images/tigerToolbarButton.png</key>
        <data>
        6rDMt6gq6tLYAACD2wg3zQDYxjg=
        </data>
        <key>Resources/SnippetEditor/Images/tigerToolbarButtonPressed.png</key>
        <data>
        Qp/3JlMsPkE/ppNRMOx59ihBZK0=
        </data>
        <key>Resources/SnippetEditor/Images/toolbarButton.png</key>
        <data>
        9PQXft2LwpKZ1noHkSjmonLVEVM=
        </data>
        <key>Resources/SnippetEditor/Images/toolbarButtonInactive.png</key>
        <data>
        SdtL5T7TAS3CMLrekZaCTpQ+HBU=
        </data>
        <key>Resources/SnippetEditor/Images/toolbarButtonPressed.png</key>
        <data>
        Ovj3MypIO5GwErtPLfgYXaa+vY4=
        </data>
        <key>Resources/SnippetEditor/SnippetEditor.css</key>
        <data>
        SQROLbKcjiHysiQhIyt3N+FianM=
        </data>
        <key>Resources/SnippetEditor/SnippetEditor.html</key>
        <data>
        apvHKEq1TWzYE7pWeEm0NJeTgT4=
        </data>
        <key>Resources/SnippetEditor/SnippetEditor.js</key>
        <data>
        U/ehezBByLUI0iJSP7ej1ZjuVbc=
        </data>
        <key>Resources/TabsPreferences.png</key>
        <data>
        xi6jnym6XWurwPzzhGy9e++yilM=
        </data>
        <key>Resources/Tiger AW ToolbarGradient.png</key>
        <data>
        oeK7K1MHtLnMEOaCuriUiIYnwCg=
        </data>
        <key>Resources/Tiger IW ToolbarGradient.png</key>
        <data>
        Wz5odSZTFEnE6CC2YnKbgbzPUdw=
        </data>
        <key>Resources/Tiger WindowCornerMask Left.png</key>
        <data>
        14UIjMGuAlEWc8jZZWIaHDRDkdU=
        </data>
        <key>Resources/Tiger WindowCornerMask Right.png</key>
        <data>
        6b+C2aY/IvoCj7wpTTHkei9fy9Q=
        </data>
        <key>Resources/TinyAlert.tif</key>
        <data>
        4KIkUSqGhOzO3Qy96Xo+/mp2v4Q=
        </data>
        <key>Resources/ToolbarAddBookmarkButton.png</key>
        <data>
        wgCBkxO7aEn4hmD68pEFh/xZOY8=
        </data>
        <key>Resources/ToolbarAddBookmarkButtonDisabled.png</key>
        <data>
        RSNx4Xn3CWdSz4BiP/J6V2uXXVA=
        </data>
        <key>Resources/ToolbarAddBookmarkButtonDisabledInactive.png</key>
        <data>
        9C4k1DNqh7jURHvYjTeCCcH4e7w=
        </data>
        <key>Resources/ToolbarAddBookmarkButtonInactive.png</key>
        <data>
        pPAIgTTSnXVI9eWaUfBNu5F/3g0=
        </data>
        <key>Resources/ToolbarAddBookmarkButtonPushed.png</key>
        <data>
        Huoc9W72ghXNVlXCDuGUEEMhy8I=
        </data>
        <key>Resources/ToolbarAddBookmarkTemplate.pdf</key>
        <data>
        DmJXfAGsIPrqRdPW2U1wdeoGhgg=
        </data>
        <key>Resources/ToolbarBookmarksBarButton.png</key>
        <data>
        BGApLKe9BzqoLKDTmTFiuJo4LQw=
        </data>
        <key>Resources/ToolbarBookmarksBarButtonDisabled.png</key>
        <data>
        vsle6NgTXm4xF93CrPVUJmkMIdM=
        </data>
        <key>Resources/ToolbarBookmarksBarButtonDisabledInactive.png</key>
        <data>
        QOwPzNkQWdomtb1F9fL6Ne8n5kc=
        </data>
        <key>Resources/ToolbarBookmarksBarButtonInactive.png</key>
        <data>
        4cp2j87hjHjPt6wI34KbCpOKdbg=
        </data>
        <key>Resources/ToolbarBookmarksBarButtonPushed.png</key>
        <data>
        Gy+wnze9+gYRARowF9hgK7T44k4=
        </data>
        <key>Resources/ToolbarBookmarksBarTemplate.pdf</key>
        <data>
        XCXslA358h/ALQ8C4FH5GWAWjP0=
        </data>
        <key>Resources/ToolbarBookmarksButton.png</key>
        <data>
        RRGhnftsNP8hniD96WRsGO0pnQA=
        </data>
        <key>Resources/ToolbarBookmarksButtonDisabled.png</key>
        <data>
        /4yi9O1kTwNuBZtpWjfpPKX32aI=
        </data>
        <key>Resources/ToolbarBookmarksButtonDisabledInactive.png</key>
        <data>
        CnfvzzYHD5/I/RS68z18iCZ8Z0Y=
        </data>
        <key>Resources/ToolbarBookmarksButtonInactive.png</key>
        <data>
        UaGA79l0c2U501SZ40kCVcNON00=
        </data>
        <key>Resources/ToolbarBookmarksButtonPushed.png</key>
        <data>
        5YyZEKjR8eDXVWqglRTbEGGjpgI=
        </data>
        <key>Resources/ToolbarBookmarksTemplate.pdf</key>
        <data>
        Cdo8/WZ9uoz2rnZhFMlyCLz0sK0=
        </data>
        <key>Resources/ToolbarDownloadsButton.png</key>
        <data>
        5X+dv1uZQIR+k+TVvqwZJq52Q9k=
        </data>
        <key>Resources/ToolbarDownloadsButtonDisabled.png</key>
        <data>
        vu5Oe8ICXQ9HyCqzusHzJK6p740=
        </data>
        <key>Resources/ToolbarDownloadsButtonDisabledInactive.png</key>
        <data>
        mCBlqBe2xC1bOYJSRqu5F5ASVO4=
        </data>
        <key>Resources/ToolbarDownloadsButtonInactive.png</key>
        <data>
        u19apaowRI2gyQ6ayVBpHwDhX0c=
        </data>
        <key>Resources/ToolbarDownloadsButtonPushed.png</key>
        <data>
        qEuHjWPhs5YUynd6QVR7K1WBzxQ=
        </data>
        <key>Resources/ToolbarDownloadsTemplate.pdf</key>
        <data>
        HTvc18/Iytg8W43LOxD1VrKbwIs=
        </data>
        <key>Resources/ToolbarEmailButton.png</key>
        <data>
        Cme73Ej31N5Qqqf83LmqSs1jgCA=
        </data>
        <key>Resources/ToolbarEmailButtonDisabled.png</key>
        <data>
        lCzj4xKDTR40mtOJRW96F3m9Zr4=
        </data>
        <key>Resources/ToolbarEmailButtonDisabledInactive.png</key>
        <data>
        8UVP2YwplPQ1Ji1ev+6H1QmAsEM=
        </data>
        <key>Resources/ToolbarEmailButtonInactive.png</key>
        <data>
        KP2RTpe0QM5qtXPVHhoWwU1z/w4=
        </data>
        <key>Resources/ToolbarEmailButtonPushed.png</key>
        <data>
        M02JfzSvoYfrdY7VZyvw+fFt6wk=
        </data>
        <key>Resources/ToolbarEmailTemplate.pdf</key>
        <data>
        i5FhWIoWzkGwnI5dzxMCEuEXRWI=
        </data>
        <key>Resources/ToolbarHistoryButton.png</key>
        <data>
        LackSMlj7ADTOrCeB+CWtFmL/zU=
        </data>
        <key>Resources/ToolbarHistoryButtonDisabled.png</key>
        <data>
        w2ZQ8fh8KIJd+A+MLN6yKz1lQrE=
        </data>
        <key>Resources/ToolbarHistoryButtonDisabledInactive.png</key>
        <data>
        jGE5a3o6E38Zk3aDaNtXiSRc7Q8=
        </data>
        <key>Resources/ToolbarHistoryButtonInactive.png</key>
        <data>
        hu6w03/6SrkNcV6a8ctnQg5vGmc=
        </data>
        <key>Resources/ToolbarHistoryButtonPushed.png</key>
        <data>
        MSeXdlQd2vi+nLB7Dpm1vwy9nC8=
        </data>
        <key>Resources/ToolbarHistoryTemplate.pdf</key>
        <data>
        RYa+nhV5vRkdu1JlB3yadksheLc=
        </data>
        <key>Resources/ToolbarHomepageButton.png</key>
        <data>
        ZShsPNnrFMorsyWFZsBxkYKfCEI=
        </data>
        <key>Resources/ToolbarHomepageButtonDisabled.png</key>
        <data>
        m3VZ9ijQYvU0hjBXGy6vP1bW/Gc=
        </data>
        <key>Resources/ToolbarHomepageButtonDisabledInactive.png</key>
        <data>
        ZTFZGWlUPuyEY20FKK1z/krC85U=
        </data>
        <key>Resources/ToolbarHomepageButtonInactive.png</key>
        <data>
        XsstspWiJcTTNje803DupBrLnlE=
        </data>
        <key>Resources/ToolbarHomepageButtonPushed.png</key>
        <data>
        pCtvo75VH7WlOO6WvVFl9ylNWZE=
        </data>
        <key>Resources/ToolbarHomepageTemplate.pdf</key>
        <data>
        nsa9gGiCs6zFyALMZI8ZGuBknG0=
        </data>
        <key>Resources/ToolbarNewTabButton.png</key>
        <data>
        b5zeyTOA30icfgBmWPaxwpiX8lg=
        </data>
        <key>Resources/ToolbarNewTabButtonDisabled.png</key>
        <data>
        ethse6HpSUWo2iALMbIANbfXOjg=
        </data>
        <key>Resources/ToolbarNewTabButtonDisabledInactive.png</key>
        <data>
        tbWO+CVCseT+0Qs+NraFydRAHxc=
        </data>
        <key>Resources/ToolbarNewTabButtonInactive.png</key>
        <data>
        Eo6EzLa0HDDzGx/od8QE/zD2Kz0=
        </data>
        <key>Resources/ToolbarNewTabButtonPushed.png</key>
        <data>
        WaoBVCjz8MAj+eDFdLyY531rIT0=
        </data>
        <key>Resources/ToolbarNewTabTemplate.pdf</key>
        <data>
        HF9NDku7nBHWAQ1NwQ0GZzaH9Xo=
        </data>
        <key>Resources/ToolbarTopSitesButton.png</key>
        <data>
        o2mus3XSqxB30GXb2zJBMxRRaw8=
        </data>
        <key>Resources/ToolbarTopSitesButtonDisabled.png</key>
        <data>
        unf1N4MYFYjA6MjN8DGsKfbZg1s=
        </data>
        <key>Resources/ToolbarTopSitesButtonDisabledInactive.png</key>
        <data>
        wmQ5AMAwj8FsOrcwANb2GVV+n74=
        </data>
        <key>Resources/ToolbarTopSitesButtonInactive.png</key>
        <data>
        z4o85yGueyiod8q5+7vtWXVIOTU=
        </data>
        <key>Resources/ToolbarTopSitesButtonPushed.png</key>
        <data>
        vuXwZ1ncHO/LLi5rN3FvHkf2g6M=
        </data>
        <key>Resources/ToolbarTopSitesTemplate.pdf</key>
        <data>
        aIQK9MRME6v7IxXAi8hoY/8awJU=
        </data>
        <key>Resources/ToolbarWebInspectorTemplate.pdf</key>
        <data>
        4efHNsKOZb/04pWONG7FMnzPOj4=
        </data>
        <key>Resources/ToolbarWebinspectorButton.png</key>
        <data>
        iVcY064sVmspCSHb3PmYYK/q8sA=
        </data>
        <key>Resources/ToolbarWebinspectorButtonDisabled.png</key>
        <data>
        +GgIo4TfXNEdXwya434J475qhgs=
        </data>
        <key>Resources/ToolbarWebinspectorButtonDisabledInactive.png</key>
        <data>
        jQRaPD/+O6qG4O741k6fL3J0Cmc=
        </data>
        <key>Resources/ToolbarWebinspectorButtonInactive.png</key>
        <data>
        FGpF2nCvxRFce1fRA0tT3hqlnYM=
        </data>
        <key>Resources/ToolbarWebinspectorButtonPushed.png</key>
        <data>
        7P1fzNcHsOtJWwkSn+Yw+idpf4o=
        </data>
        <key>Resources/TopSitesButton.png</key>
        <data>
        NjvdQit3pJquerhJXMM7Ik967vs=
        </data>
        <key>Resources/TopSitesButton_Pressed.png</key>
        <data>
        81QWCZ9fMjhNUQ89ylkxA03pBkE=
        </data>
        <key>Resources/TopSitesButton_Rollover.png</key>
        <data>
        UW9xGX8pT0PmD5otVJ9dsNSbL0s=
        </data>
        <key>Resources/TopSitesCornerResize.png</key>
        <data>
        q8lQl+i1pvqrmbGrahyZtbzrKFM=
        </data>
        <key>Resources/TopSitesDarkButtonDiv.png</key>
        <data>
        B7FewqtpSyZN+Oh5ZdV9UK8PiXo=
        </data>
        <key>Resources/TopSitesDarkButtonFill-N.png</key>
        <data>
        zd7Q/Ao+g/QIwMNDvKVybUTcOno=
        </data>
        <key>Resources/TopSitesDarkButtonFill-P.png</key>
        <data>
        4Sy+Hb6VkhcBVnlsCWB/vL2uKfk=
        </data>
        <key>Resources/TopSitesDarkButtonFill-Pressed.png</key>
        <data>
        b96JbAccu89lzig0iGF508wmJdg=
        </data>
        <key>Resources/TopSitesDarkButtonLeft-N.png</key>
        <data>
        MDgnyadFKcg5pmoF0h3piFujf9k=
        </data>
        <key>Resources/TopSitesDarkButtonLeft-P.png</key>
        <data>
        GSTYg07QVYcqejaVwco92Z7/BI8=
        </data>
        <key>Resources/TopSitesDarkButtonLeft-Pressed.png</key>
        <data>
        hBQidtnt+Ifcu+K8MNcyP+/nvxw=
        </data>
        <key>Resources/TopSitesDarkButtonRight-N.png</key>
        <data>
        s3fML4Y/Aokpt8mLkGgX7JtjonU=
        </data>
        <key>Resources/TopSitesDarkButtonRight-P.png</key>
        <data>
        osnPC6vI0wFinMj7Z7kpoBWfa9c=
        </data>
        <key>Resources/TopSitesDarkButtonRight-Pressed.png</key>
        <data>
        RZHHbTNudhR1ZFcFXjd8Ieb7Pq0=
        </data>
        <key>Resources/TopSitesKeepButtonOff.png</key>
        <data>
        53OZYqZ1kKnvCjUrBVPVXIKMk/M=
        </data>
        <key>Resources/TopSitesKeepButtonOffPressed.png</key>
        <data>
        JpWxLCjbKnDuO3OJac4lCC0NjAo=
        </data>
        <key>Resources/TopSitesKeepButtonOn.png</key>
        <data>
        trO6j3Ut1G/Ei1Bufn4/eAhleWw=
        </data>
        <key>Resources/TopSitesKeepButtonOnPressed.png</key>
        <data>
        iN8jY9bY7Pykz8XCKayUgkx+65I=
        </data>
        <key>Resources/TopSitesKeepRemoveDivider.png</key>
        <data>
        Odd59qrSgdR7BQ1SEoxWkjGXgPA=
        </data>
        <key>Resources/TopSitesRemoveButton.png</key>
        <data>
        N3Qpj/6srb1kbsCo7q/8/mev7uQ=
        </data>
        <key>Resources/TopSitesRemoveButtonPressed.png</key>
        <data>
        2vdDL3uiOtHQLewunpSYkPJRV+w=
        </data>
        <key>Resources/TopSitesTemplate.pdf</key>
        <data>
        YGdZFRqUEI/0taWy5q9FrMpqyCg=
        </data>
        <key>Resources/TopSitesUpdatedPageCurl.png</key>
        <data>
        yH2cKs1nbr3WcGr1uAIXc/rBNJ4=
        </data>
        <key>Resources/URLBarReloadButton.png</key>
        <data>
        t2kxWd9dEM4STWAZdSFEkh/zAJo=
        </data>
        <key>Resources/URLBarReloadButtonDisabled.png</key>
        <data>
        TAJIgWz3m1iic6yGvmy2fy90R14=
        </data>
        <key>Resources/URLBarReloadButtonPressed.png</key>
        <data>
        y4T5lxu+UZIlDnuUf40x0aDODlg=
        </data>
        <key>Resources/URLBarStopButton.png</key>
        <data>
        BvNmJiXizZ0t8eVfjGArd4ycJ08=
        </data>
        <key>Resources/URLBarStopButtonWhite.png</key>
        <data>
        +9HaXZWoXJb41WfQFZLvK3utIqc=
        </data>
        <key>Resources/URLFadeOut.png</key>
        <data>
        4MaClz19/exeuKsTJKS6h4cLrXc=
        </data>
        <key>Resources/URLFieldCapLeft.png</key>
        <data>
        zCZ59Xw2wFw/dD6Mc9vyLnboe5U=
        </data>
        <key>Resources/URLFieldCapLeftInactive.png</key>
        <data>
        4CDs6xSSPPq/cOTQ/rNnLoyFLwc=
        </data>
        <key>Resources/URLFieldCapLeftRounded.png</key>
        <data>
        SQjEaywOjd/ca7X6ii+0lYpq7j0=
        </data>
        <key>Resources/URLFieldCapLeftRoundedInactive.png</key>
        <data>
        ukdsJcPOjlE3WVM4IdggaYbu3D0=
        </data>
        <key>Resources/URLFieldCapRight.png</key>
        <data>
        cI8WKBgMKwVrGo8C6W4/mlm5Adc=
        </data>
        <key>Resources/URLFieldCapRightInactive.png</key>
        <data>
        oPTSn4xv8TGQDQYw2D2+mG4zbLk=
        </data>
        <key>Resources/UserAgents.plist</key>
        <data>
        Ha0zMvxPT5oFhtyx9/6XtBYDoik=
        </data>
        <key>Resources/ViewTree.nib/classes.nib</key>
        <dict>
            <key>hash</key>
            <data>
            EBNvbjLsWuAdItdaH1KqeGBw08A=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/ViewTree.nib/info.nib</key>
        <dict>
            <key>hash</key>
            <data>
            Cr4jMuE8J+9WdhC0hglMZfCQb4I=
            </data>
            <key>optional</key>
            <true/>
        </dict>
        <key>Resources/ViewTree.nib/keyedobjects.nib</key>
        <data>
        3z9Y3Z+aLdi/2jpsNZdd5l2yzEE=
        </data>
        <key>Resources/WebClip.pdf</key>
        <data>
        c0hML2TWAcv1XP0fZEByJHt90Iw=
        </data>
        <key>Resources/WebClipBannerBackground.png</key>
        <data>
        Cjr3/4JNe6Kt32UKOtXwYsZtwFE=
        </data>
        <key>Resources/WhiteSpinner_0.png</key>
        <data>
        okfzQ0WP7yfrzzGkIAIX/2mwFec=
        </data>
        <key>Resources/WhiteSpinner_1.png</key>
        <data>
        on/Hf5YJDWZOGCe847X1wDyNp6s=
        </data>
        <key>Resources/WhiteSpinner_10.png</key>
        <data>
        ZqpFpy2PcQEXDxpP6x97npZWO7Y=
        </data>
        <key>Resources/WhiteSpinner_11.png</key>
        <data>
        c/gmQviq8NssvCqV0OIyQ3KiKtU=
        </data>
        <key>Resources/WhiteSpinner_2.png</key>
        <data>
        2k2QwbUA55pa9b7+4h5GYUfIhRw=
        </data>
        <key>Resources/WhiteSpinner_3.png</key>
        <data>
        P7O6Tw3vuGXjzFm5H2YEfNKJRN8=
        </data>
        <key>Resources/WhiteSpinner_4.png</key>
        <data>
        yQ2IiShCkYFisKFgsJn+nvrNy8c=
        </data>
        <key>Resources/WhiteSpinner_5.png</key>
        <data>
        432oPTYCXxykijAwsposKWTXmA8=
        </data>
        <key>Resources/WhiteSpinner_6.png</key>
        <data>
        Iw5G1gKbpJatyMReYLPI43QinFg=
        </data>
        <key>Resources/WhiteSpinner_7.png</key>
        <data>
        Ce9rKIRLdClEJo89pzQhvosrZ50=
        </data>
        <key>Resources/WhiteSpinner_8.png</key>
        <data>
        ZNetvBaED1mNIfTX3ZnzbsT8kOw=
        </data>
        <key>Resources/WhiteSpinner_9.png</key>
        <data>
        CI9uOssfexZeKz67mgaIpIcza2k=
        </data>
        <key>Resources/ZoomInButton.png</key>
        <data>
        dd83CceuBF64XzayGF0crydLtLA=
        </data>
        <key>Resources/ZoomInButtonDisable.png</key>
        <data>
        TJ6TwyN6clJV/11nSyACcdgTfEI=
        </data>
        <key>Resources/ZoomInButtonDisabledInactive.png</key>
        <data>
        L9O6tskzo0ajBFYv33zb+niHHQM=
        </data>
        <key>Resources/ZoomInButtonInactive.png</key>
        <data>
        Eu0SL5cAKp4seNdb8NEVK8HM414=
        </data>
        <key>Resources/ZoomInButtonPushed.png</key>
        <data>
        6Z+dYLczbbVpY3VVqaKxxdeWWVw=
        </data>
        <key>Resources/ZoomOutButton.png</key>
        <data>
        QDMrKINGUfTP6TqFOjYej3aZ9l8=
        </data>
        <key>Resources/ZoomOutButtonDisabled.png</key>
        <data>
        qwd+q0rGCQnWtuMVXDMo6SsZTSA=
        </data>
        <key>Resources/ZoomOutButtonDisabledInactive.png</key>
        <data>
        ADNK99iI0wLlbJnF2Nm4BL2rFBw=
        </data>
        <key>Resources/ZoomOutButtonInactive.png</key>
        <data>
        Ib0yXAXjRSzpeIKittW5wUQU1Sk=
        </data>
        <key>Resources/ZoomOutButtonPushed.png</key>
        <data>
        VJpWnmeHB9SooLyvRKkzhKwUmtc=
        </data>
        <key>Resources/com.apple.Safari.manifest/Contents/Resources/com.apple.Safari.manifest</key>
        <data>
        xtfLTrFnyhYezDT59tcT8WCB0ys=
        </data>
        <key>Resources/compass.icns</key>
        <data>
        oZXcEMrWttptqJM72ashyNxnTHU=
        </data>
        <key>Resources/document.icns</key>
        <data>
        OaDfF7fbp5r+GQIdXuekpURa5cc=
        </data>
        <key>Resources/download0.icns</key>
        <data>
        Jdp7UW/JppmGjL3pTdC0pRjj4aQ=
        </data>
        <key>Resources/download1.icns</key>
        <data>
        z/NrKdBDmy8Gfnb/w/APbpK/0Jg=
        </data>
        <key>Resources/download10.icns</key>
        <data>
        0GDsL+h98NjGXaWMOyXTqSulGQQ=
        </data>
        <key>Resources/download2.icns</key>
        <data>
        iOw56yLTlG00TVo2sGYmg4f5Zp8=
        </data>
        <key>Resources/download3.icns</key>
        <data>
        6bLwUPkmsh4/tjr1G3esfmrjAfQ=
        </data>
        <key>Resources/download4.icns</key>
        <data>
        fQqOELxF0MmXtIdAGunHgk5LO4g=
        </data>
        <key>Resources/download5.icns</key>
        <data>
        w6rQ/WOXiuHyyShrvC9JwmoAVEc=
        </data>
        <key>Resources/download6.icns</key>
        <data>
        s07zkhTa9g/X/UsJGyzoM2zjkfA=
        </data>
        <key>Resources/download7.icns</key>
        <data>
        ZKdi8jYmDkr31EpyJW0D4Co8NmE=
        </data>
        <key>Resources/download8.icns</key>
        <data>
        MF2dCGOOzhoYvJg/vj2g6iQ9r2k=
        </data>
        <key>Resources/download9.icns</key>
        <data>
        l2CqK3ouQmhQnlm+KFd3e5zlpIo=
        </data>
        <key>Resources/folder16.tiff</key>
        <data>
        hd74KKptYTgbAK7lXTmF0Bht8yc=
        </data>
        <key>Resources/ik_hud_scroller.png</key>
        <data>
        O0k7bilcc6WVpRD4OV+HQHJG3DQ=
        </data>
        <key>Resources/page-load-errors.css</key>
        <data>
        ZSAUDpq9OO5nZgfNvbLJ1A3mHjs=
        </data>
        <key>Resources/tiny_menu.tiff</key>
        <data>
        44MdGvP7nwlDuNA/v2nZlU/+djw=
        </data>
        <key>Resources/webarchive.icns</key>
        <data>
        tWQdT89ymh8LNUR0y1CExWcySdY=
        </data>
        <key>version.plist</key>
        <data>
        dqPbLkOf5ohcaQq1tp4wTeL/6C4=
        </data>
    </dict>
    <key>rules</key>
    <dict>
        <key>^Resources/</key>
        <true/>
        <key>^Resources/.*\.lproj/</key>
        <dict>
            <key>omit</key>
            <true/>
            <key>weight</key>
            <real>10</real>
        </dict>
        <key>^Resources/.*\.lproj/SafariHelp/</key>
        <dict>
            <key>omit</key>
            <true/>
            <key>weight</key>
            <real>50</real>
        </dict>
        <key>^Resources/.*\.lproj/locversion.plist$</key>
        <dict>
            <key>omit</key>
            <true/>
            <key>weight</key>
            <real>30</real>
        </dict>
        <key>^Resources/.*\.nib/classes\.nib$</key>
        <dict>
            <key>optional</key>
            <true/>
            <key>weight</key>
            <real>5</real>
        </dict>
        <key>^Resources/.*\.nib/data\.dependency$</key>
        <dict>
            <key>optional</key>
            <true/>
            <key>weight</key>
            <real>5</real>
        </dict>
        <key>^Resources/.*\.nib/designable\.nib$</key>
        <dict>
            <key>omit</key>
            <true/>
            <key>weight</key>
            <real>30</real>
        </dict>
        <key>^Resources/.*\.nib/info\.nib$</key>
        <dict>
            <key>optional</key>
            <true/>
            <key>weight</key>
            <real>5</real>
        </dict>
        <key>^Resources/English\.lproj/</key>
        <dict>
            <key>optional</key>
            <true/>
            <key>weight</key>
            <real>20</real>
        </dict>
        <key>^version.plist$</key>
        <true/>
    </dict>
</dict>
</plist>

The binary itself contains a new 'section' with the code signing gunk. This is the equivalent of what's done to protect CLIX - but with one major caveat: that new section that's supposed to protect your binary doesn't really protect anything at all.

Researchers at Rixstep toyed with Apple's code signing years back and discovered that one can simply remove it from a binary and the application will run just nicely, thank you. The launch services have to be tricked a bit, but it's easy to remove their caches. So nothing happens. The sky does not fall. The code signing can be there or not. It doesn't matter.

Except on the iPhone and iPad it does. Why? Because the kernels there check themselves for the binary's section with the code signing and they won't launch anything that doesn't have it or doesn't have an untampered bundle. It's at kernel level. And you can't reasonably do much about that.

The iPhone didn't need to be insecure out of the box. Running everything as root for three versions was unforgivable. Code signing wasn't needed there either. Bill Gates might need it on his excuse for an operating system - he uses it mostly to clamp down on peripheral devices that don't follow the secret standard of ruining audio and video quality to thwart organised piracy - but Apple can't possibly need it. Not with their rock solid foundation? No they don't need it. Not as long as they behave.

And although there have been times in the past when they've screwed up royally, and through a snobby lack of respect for the shoulders they're standing on gone and introduced absolutely wacky 'improvements' to Unix they later had to repeal, things are fairly stable today and the platform never experienced a serious hit. Certainly nothing approaching the humiliation people have come to accept as reality on Windows.

Macworld again.

'Right now, OS X checks an app the first time it launches, and displays a warning. It's an attempt to prevent malware apps from launching when you never intended them to. In Mountain Lion, that feature has been extended and tied into a new setting in the Security & Privacy pane of System Preferences.'

This feature has been around for a long time. It's been given a variety of names including the 'protocol hole'. And it's tied to the launch services.

'By default, Mountain Lion will only let Mac App Store apps and Apps from 'identified developers' launch for the first time. To become an 'identified developer', Mac developers have to register with Apple and get a personalised certificate, which they then use to cryptographically sign their apps. Apple doesn't do any sort of background check on the developer, and it doesn't see any of the software.'

Which makes the whole thing rather moot. Any malware factory can send off for hundreds or thousands of those useless certificates. So security is not what Apple are worried about. But let's let Macworld continue.

'Apple says that although these apps aren't as safe as Mac App Store apps, they're safer for a couple of reasons. First, a signed app can't be modified (to add in some spyware, for example) without breaking the signature.'

True - but what if the app is written as malware in the first place? Oops.

'Second, if it turns out that an app from a particular developer is actually malware, Apple has the ability to revoke that developer's licence - at which point no future Mac users will be able to install software from that developer.'

Ouch. So the malware author just pulls out a new cert, one of the hundreds he got from Apple who did no background check on him or software check on his malware app, and it's back to business. Great idea. Now punters have the Mac App Store. This store is where you can get 'secure and safe' software for a platform that's never been hit by malware to speak of. Yeah right.

Macworld's 'Hands On' with Gatekeeper

Macworld have a more detailed account of Gatekeeper in another article.

'Since at least the days of version 10.5, OS X has had a feature called File Quarantine, which checks apps before they run for the first time. You most often encounter this feature when you download an app and run it for the first time - a dialog box appears informing you it's a file downloaded from the Internet, and asking for you to confirm you do indeed want to run it.'

This isn't entirely correct. Lots of files - through Safari and Firefox - get the extended attribute 'com.apple.quarantine'. Safari even glues this onto its multitudinous cache files - but what's going on with code signing and the launch services is something else entirely.

Files with the quarantine XA take longer to open - even if you've previously approved them - and the quarantine XA doesn't disappear. (That's why there are special tools today in the ACP to help with the kludge and why the Xfile System automatically singles those infected files out.) But quarantine and the launch services are different horses.

The Key to Gatekeeper

The key to Gatekeeper is that there really is a key - and it's in Cupertino.

Censorship rears its ugly head. Macworld:

'Mountain Lion checks once a day to see if there's been an update to the blacklist. If a developer is on the blacklist, Mountain Lion won't allow apps signed by that developer to run.'

Which makes things almost as bad as Windows where, lest we forget, all kinds of gauze and makeshift plasters are needed because the system itself has such bad security.

But that doesn't hold for Apple's OS. After all the (basically accurate) talk of the 'rock solid foundation', people are now led to believe the foundation isn't that 'rock solid' after all? Oh yes it is.

Mark Pilgrim famously left the platform a few years ago after a lifetime of hacking on it. His words ring prophetic today.

So do the words written at this site going back years as well.

Things started off with this innocuous piece 24 April 2010.

Mac Developer Program Update
http://rixstep.com/1/20100424,00.shtml


There are no references in that article. The article's not made up - it's just not referenced. Because there were no references.

The article was a gambit. The gambit worked. Steve Jobs got pwned.

The idea was to freak out at least one fanboy who would write to Steve Jobs personally and ask him if it was true - if in fact Apple were planning a walled garden with the garden walls closing in more each day.

'No software will be able to run on Mac OS X 10.7 without being approved and signed by Apple, Inc.'

It didn't really matter if it was true, although of course it would be true someday: there's no reason to introduce code signing otherwise. What mattered was Steve Jobs would have to deny it. And deny it he did. He fell right in the trap.

And that's all that was needed. For his denial is now a matter of record. Something everyone can refer back to time and again as Apple continue to adjust their garden walls.

Everything's in Place!

Again from 24 April 2010:

'Apprehension in the ISV sector has grown not only because people see signs of change in Apple's website but also because Apple's technologies for their mobile platforms are already in place on their computer platform (where for the moment they're totally irrelevant).'

'Slapping a root certificate on a binary running Snow Leopard or earlier doesn't change anything: the certificate represents an additional executable section that can easily be removed. Individual apps can of course check for the presence of a certificate, but it's not before the OS kernel itself insists on this certificate that program execution is totally in Apple's control.'


Then on 20 October 2010:

Mac Developer Program Update II
http://rixstep.com/1/20101020,00.shtml


'Apple have a new MacBook Air and they also have a name for Mac OS X 10.7. 'Lion'. King of the jungle. But they've also unveiled another thing. Another thing that's been predicted at this site, another thing that's going to have a lot of people looking for the emergency exits. The Mac App Store.'

'Now of course Steve wouldn't come out and say Apple are going to tie third party software to the platform as they've done with the portable devices. Oh no - that comes later. All he'd say for now is that it won't be the only place in town - only 'the best'. Phase Two will have to wait.'




Any OS vendor can at any time cripple any computer. Phoning home once per day to get new blacklists - it's a great way of doing business. Microsoft have been doing the equivalent for years. And it's typical that Apple look to Redmond for guidance rather than the gurus who actually put together the operating system they use but don't understand.

App stores can be great. And software users don't see what's going on. Then again, citizens in totalitarian dictatorships with carpeted censorship don't see anything either.

But Apple hold the key. They're nudging everyone a bit deeper into the garden. All of this is like clockwork. And it's so predictable. And yet what we see is not concerned voices protesting the very idea of autocratic censorship, but voices who work overtime trying to reconcile themselves with the fact the walls are closing in again.

We think about everything. We don't close things off.
 - Tim Cook
We will never do music. We will never do video iPod. We will never do phone. We will never go Intel.
 - '9toX'
For you Apple apologists claiming Apple will never lock down the Mac, step one is in place and you all let it happen.
 - Ron Gilbert
There's a URL out there the iPhone supposedly accesses. Some say it's so the iPhone can find if the applications it's running are still approved. If not - then anything can in theory happen.
 - 'Code Sign of the Times' 9 August 2008

See Also
Red Hat Diaries: Code Sign of the Times

Wayback: Mark Pilgrim: Tinkerer's Sunset
Industry Watch: Mac Developer Program Update
Industry Watch: Mac Developer Program Update II

Rixstep /7: Mountain Lion - The iOSification Continues (Membership Required)

About | ACP | Buy | Industry Watch | Learning Curve | News | Products | Search | Substack
Copyright © Rixstep. All rights reserved.