diff -Nru thunderbird-49.0~b1+build4/debian/changelog thunderbird-49.0~b1+build5/debian/changelog --- thunderbird-49.0~b1+build4/debian/changelog 2016-08-26 05:43:17.000000000 +0000 +++ thunderbird-49.0~b1+build5/debian/changelog 2016-09-02 04:48:10.000000000 +0000 @@ -1,4 +1,10 @@ -thunderbird (1:49.0~b1+build4-0ubuntu0.16.10.1) yakkety; urgency=medium +thunderbird (1:49.0~b1+build5-0ubuntu0.16.10.1) yakkety; urgency=medium + + * New upstream release from the beta channel (THUNDERBIRD_49_0b1_BUILD5) + + -- Rico Tzschichholz Fri, 02 Sep 2016 06:48:10 +0200 + +thunderbird (1:49.0~b1+build4-0ubuntu0.16.04.1) xenial; urgency=medium * New upstream release from the beta channel (THUNDERBIRD_49_0b1_BUILD4) diff -Nru thunderbird-49.0~b1+build4/l10n/changesets thunderbird-49.0~b1+build5/l10n/changesets --- thunderbird-49.0~b1+build4/l10n/changesets 2016-08-26 06:36:42.000000000 +0000 +++ thunderbird-49.0~b1+build5/l10n/changesets 2016-09-02 05:50:42.000000000 +0000 @@ -1,58 +1,58 @@ -ar 2037:bd56c2b1b867 -ast 1572:aab5290533ce -be 1973:f1edb6891732 -bg 1404:0ab6e4eccb91 -bn-BD 1306:0476ed4500ad -br 1642:9ea3db317038 -ca 2772:401d87beeaeb -cs 4519:19985d5ca954 -cy 1454:3e9891edff01 -da 2552:5c620df3cd98 -de 5265:a973f8808a3d -dsb 677:6d71ce248f55 -el 1592:3db3789bc0d6 -en-GB 2229:69c5c0de1cdb -es-AR 2895:bb3bd6a4486b -es-ES 4584:0928c9984c35 -et 2059:4ee68caed465 -eu 1926:0a9a20050ac7 -fi 2530:4cd599b97e64 -fr 7578:e0fb54b66a46 -fy-NL 2993:ee85dec501f7 -ga-IE 2141:6f7381624b30 -gd 1986:4d1ad6f5ffd9 -gl 3293:be6f29e27235 -he 1690:0a153c750ce2 -hr 2059:56cb4af862d5 -hsb 844:11709e28da3d -hu 2860:86c2be8ceccf -hy-AM 1557:d0c14dfff998 -id 1976:c01b79dc49e7 -is 1699:db1472c4f397 -it 6956:32c5df7e0cc8 -ja 2710:729187ceb5af -ja-JP-mac 2236:f762ce6b7b3d -ko 2289:4c459dacec04 -lt 3376:fb1447a41a65 -nb-NO 3024:ef7a597a0eee -nl 5913:6198f979aac2 -nn-NO 1828:1b4b40246f5f -pa-IN 2101:d6b6f254aabe -pl 8981:d0ed2454baae -pt-BR 2679:2822f40553d4 -pt-PT 5473:1e6f22b93789 -rm 1625:bf10609a47ff -ro 2329:2dbd433a404a -ru 4489:d73f09d89bb4 -si 1439:a72924013cec -sk 4253:f922c7ee26e0 -sl 2770:0a2583b2d6dd -sq 2211:4c46bb095204 -sr 1472:9c383dbe2c0f -sv-SE 5088:6d8f3b78d0ac -ta-LK 800:c49cca9e55b0 -tr 2594:80823a664bef -uk 3446:7130a399164c -vi 1126:a6cb3ce14e45 -zh-CN 2754:b25b8fcf56d4 -zh-TW 2931:ccda9b8f0002 +ar 2040:af2150a2e656 +ast 1574:ed1c346af67d +be 1975:1c4f4fda6ce5 +bg 1405:2dbfa7a51b9e +bn-BD 1307:e100f36d5e11 +br 1644:ecd3fd4d03b7 +ca 2774:6f53a3a04e74 +cs 4521:8232bcc89136 +cy 1456:f6ef3f9e2927 +da 2558:b689339672f1 +de 5267:f2cc042d635a +dsb 679:c19e1a6cbe0b +el 1593:097d9c43ff9a +en-GB 2231:24af7576d111 +es-AR 2897:e830bddfc1c8 +es-ES 4586:bca7cb27874a +et 2061:7e20d6dfd052 +eu 1928:f3640c9580e9 +fi 2534:eb62d803c694 +fr 7580:b0c0b16681f3 +fy-NL 2995:5e2ab3101fce +ga-IE 2143:2af54cc342a8 +gd 1988:fab2297fd38d +gl 3295:9942e5afdfe4 +he 1692:a27db8131cc1 +hr 2061:d57e554a5379 +hsb 846:afc45814e34a +hu 2862:d70ad74d763f +hy-AM 1559:c9824ebff8d8 +id 1980:0609a0fb2716 +is 1701:624a66f3086f +it 6958:1b4c78536463 +ja 2712:726444efec8a +ja-JP-mac 2237:ca8ea7039c7a +ko 2291:12e8b4aba492 +lt 3378:4c7f2faae6db +nb-NO 3026:d3389d70e8f3 +nl 5915:464ac5384ad4 +nn-NO 1830:9e4d0417241e +pa-IN 2103:31f56ff924c2 +pl 8983:d11ec7f0b19c +pt-BR 2681:4db69c7a7e58 +pt-PT 5475:f02cd270fdd1 +rm 1634:6da17fad3659 +ro 2331:6fec10378dd3 +ru 4492:cc7b3b7e821e +si 1440:8a9a5cbc760d +sk 4255:da5135ec3207 +sl 2772:8bd679956625 +sq 2219:728955d00c8b +sr 1474:e5b8137782c5 +sv-SE 5090:a537dddb0995 +ta-LK 802:a69619798e26 +tr 2596:7c9f2112d3ec +uk 3449:a0660f89bbae +vi 1127:49f1f0574174 +zh-CN 2756:243d5dba5445 +zh-TW 2934:79efbd7349fc diff -Nru thunderbird-49.0~b1+build4/mail/app/blocklist.xml thunderbird-49.0~b1+build5/mail/app/blocklist.xml --- thunderbird-49.0~b1+build4/mail/app/blocklist.xml 2016-08-26 06:12:44.000000000 +0000 +++ thunderbird-49.0~b1+build5/mail/app/blocklist.xml 2016-09-02 05:22:06.000000000 +0000 @@ -1,5 +1,5 @@ - + @@ -13,6 +13,12 @@ + + + + + + @@ -150,12 +156,6 @@ - - - - - - @@ -1856,6 +1856,12 @@ + + + + + + @@ -2025,6 +2031,12 @@ + + + + + + diff -Nru thunderbird-49.0~b1+build4/mail/base/content/mailWindowOverlay.js thunderbird-49.0~b1+build5/mail/base/content/mailWindowOverlay.js --- thunderbird-49.0~b1+build4/mail/base/content/mailWindowOverlay.js 2016-08-26 06:12:48.000000000 +0000 +++ thunderbird-49.0~b1+build5/mail/base/content/mailWindowOverlay.js 2016-09-02 05:22:06.000000000 +0000 @@ -571,7 +571,8 @@ { let msg = gFolderDisplay.selectedMessage; let folder = gFolderDisplay.displayedFolder; - let inDraftFolder = (msg && + let inDraftFolder = (msg && msg.folder && // Need to check folder since messages + // opened from file have none. msg.folder.isSpecialFolder(nsMsgFolderFlags.Drafts, true)) || (folder && folder.getFlag(nsMsgFolderFlags.Drafts)); document.getElementById("cmd_editDraftMsg").setAttribute("hidden", !inDraftFolder); diff -Nru thunderbird-49.0~b1+build4/mail/config/mozconfigs/macosx64/l10n-mozconfig thunderbird-49.0~b1+build5/mail/config/mozconfigs/macosx64/l10n-mozconfig --- thunderbird-49.0~b1+build4/mail/config/mozconfigs/macosx64/l10n-mozconfig 2016-08-26 06:12:44.000000000 +0000 +++ thunderbird-49.0~b1+build5/mail/config/mozconfigs/macosx64/l10n-mozconfig 2016-09-02 05:22:06.000000000 +0000 @@ -1,10 +1,10 @@ -. $topsrcdir/build/macosx/universal/mozconfig +. $topsrcdir/build/macosx/local-mozconfig.common ac_add_options --enable-application=mail ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL} ac_add_options --disable-install-strip ac_add_options --enable-profiling -ac_add_options --with-l10n-base=../../../l10n +ac_add_options --with-l10n-base=../../l10n # Build lightning locales ac_add_options --enable-calendar diff -Nru thunderbird-49.0~b1+build4/mail/test/mozmill/content-tabs/test-plugin-crashing.js thunderbird-49.0~b1+build5/mail/test/mozmill/content-tabs/test-plugin-crashing.js --- thunderbird-49.0~b1+build4/mail/test/mozmill/content-tabs/test-plugin-crashing.js 2016-08-26 06:12:44.000000000 +0000 +++ thunderbird-49.0~b1+build5/mail/test/mozmill/content-tabs/test-plugin-crashing.js 2016-09-02 05:22:06.000000000 +0000 @@ -222,14 +222,17 @@ .getAnonymousElementByAttribute(plugin, "class", "submitStatus"); - - if (!submitDiv) - return null; - return submitDiv; } - let submitDiv = getStatusDiv(); + let submitDiv = null; + mc.waitFor(() => (submitDiv = getStatusDiv()) != null, + "Timeout waiting for submit status to appear", + 5000, 100); + + assert_equals(null, mc.tabmail.selectedTab.browser.parentNode + .getNotificationWithValue("plugin-crashed")); + let statusString = submitDiv.getAttribute("status"); if (!statusString) { let submitStatusChanged = false; diff -Nru thunderbird-49.0~b1+build4/mozilla/accessible/generic/DocAccessible.cpp thunderbird-49.0~b1+build5/mozilla/accessible/generic/DocAccessible.cpp --- thunderbird-49.0~b1+build4/mozilla/accessible/generic/DocAccessible.cpp 2016-08-26 06:25:43.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/accessible/generic/DocAccessible.cpp 2016-09-02 05:35:03.000000000 +0000 @@ -129,6 +129,7 @@ } NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mAccessibleCache) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mAnchorJumpElm) + NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mInvalidationList) for (auto it = tmp->mARIAOwnsHash.ConstIter(); !it.Done(); it.Next()) { nsTArray >* ar = it.UserData(); for (uint32_t i = 0; i < ar->Length(); i++) { @@ -147,6 +148,7 @@ tmp->mNodeToAccessibleMap.Clear(); NS_IMPL_CYCLE_COLLECTION_UNLINK(mAccessibleCache) NS_IMPL_CYCLE_COLLECTION_UNLINK(mAnchorJumpElm) + NS_IMPL_CYCLE_COLLECTION_UNLINK(mInvalidationList) tmp->mARIAOwnsHash.Clear(); NS_IMPL_CYCLE_COLLECTION_UNLINK_END diff -Nru thunderbird-49.0~b1+build4/mozilla/accessible/generic/DocAccessible.h thunderbird-49.0~b1+build5/mozilla/accessible/generic/DocAccessible.h --- thunderbird-49.0~b1+build4/mozilla/accessible/generic/DocAccessible.h 2016-08-26 06:25:43.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/accessible/generic/DocAccessible.h 2016-09-02 05:35:03.000000000 +0000 @@ -682,7 +682,7 @@ * * @see ProcessInvalidationList */ - nsTArray mInvalidationList; + nsTArray> mInvalidationList; /** * Holds a list of aria-owns relocations. diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/app/blocklist.xml thunderbird-49.0~b1+build5/mozilla/browser/app/blocklist.xml --- thunderbird-49.0~b1+build4/mozilla/browser/app/blocklist.xml 2016-08-26 06:25:43.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/app/blocklist.xml 2016-09-02 05:35:03.000000000 +0000 @@ -1,5 +1,5 @@ - + @@ -13,6 +13,12 @@ + + + + + + @@ -159,12 +165,6 @@ - - - - - - @@ -1965,6 +1965,12 @@ + + + + + + @@ -2135,6 +2141,12 @@ + + + + + + @@ -2779,8 +2791,11 @@ - - + + + + + @@ -2797,11 +2812,8 @@ - - - - - + + diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/app/profile/firefox.js thunderbird-49.0~b1+build5/mozilla/browser/app/profile/firefox.js --- thunderbird-49.0~b1+build4/mozilla/browser/app/profile/firefox.js 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/app/profile/firefox.js 2016-09-02 05:35:03.000000000 +0000 @@ -1429,6 +1429,12 @@ pref("browser.laterrun.enabled", false); +pref("browser.migrate.automigrate.enabled", false); +// 4 here means the suggestion notification will be automatically +// hidden the 4th day, so it will actually be shown on 3 different days. +pref("browser.migrate.automigrate.daysToOfferUndo", 4); +pref("browser.migrate.automigrate.ui.enabled", true); + // Enable browser frames for use on desktop. Only exposed to chrome callers. pref("dom.mozBrowserFramesEnabled", true); diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/base/content/browser.css thunderbird-49.0~b1+build5/mozilla/browser/base/content/browser.css --- thunderbird-49.0~b1+build4/mozilla/browser/base/content/browser.css 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/base/content/browser.css 2016-09-02 05:35:03.000000000 +0000 @@ -266,6 +266,17 @@ .titlebar-placeholder[type="fullscreen-button"]:-moz-locale-dir(rtl) { -moz-box-ordinal-group: 0; } + +/* In private windows, the #titlebar-content is higher because of the + * private browsing indicator. With the margin-top the titlebar buttons + * align to the top correctly in that case, but only if we don't stretch + * the box they're in because the container is too high, so we override + * the default alignment value (stretch). + */ +#main-window[tabsintitlebar] > #titlebar > #titlebar-content > #titlebar-buttonbox-container { + -moz-box-align: start; +} + %else /* On non-OSX, these should be start-aligned */ #titlebar-buttonbox-container { diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/base/content/tab-content.js thunderbird-49.0~b1+build5/mozilla/browser/base/content/tab-content.js --- thunderbird-49.0~b1+build4/mozilla/browser/base/content/tab-content.js 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/base/content/tab-content.js 2016-09-02 05:35:03.000000000 +0000 @@ -148,6 +148,7 @@ addEventListener("click", this, true); addEventListener("pagehide", this, true); + sendAsyncMessage("AboutHome:MaybeShowAutoMigrationUndoNotification"); sendAsyncMessage("AboutHome:RequestUpdate"); }, diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/components/extensions/ext-commands.js thunderbird-49.0~b1+build5/mozilla/browser/components/extensions/ext-commands.js --- thunderbird-49.0~b1+build4/mozilla/browser/components/extensions/ext-commands.js 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/components/extensions/ext-commands.js 2016-09-02 05:35:03.000000000 +0000 @@ -75,10 +75,12 @@ for (let name of Object.keys(manifest.commands)) { let command = manifest.commands[name]; let shortcut = command.suggested_key[os] || command.suggested_key.default; - commands.set(name, { - description: command.description, - shortcut: shortcut.replace(/\s+/g, ""), - }); + if (shortcut) { + commands.set(name, { + description: command.description, + shortcut: shortcut.replace(/\s+/g, ""), + }); + } } return commands; }, diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/components/extensions/test/browser/browser_ext_pageAction_context.js thunderbird-49.0~b1+build5/mozilla/browser/components/extensions/test/browser/browser_ext_pageAction_context.js --- thunderbird-49.0~b1+build4/mozilla/browser/components/extensions/test/browser/browser_ext_pageAction_context.js 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/components/extensions/test/browser/browser_ext_pageAction_context.js 2016-09-02 05:35:03.000000000 +0000 @@ -131,12 +131,16 @@ }); }); + yield SpecialPowers.pushPrefEnv({set: [["general.useragent.locale", "es-ES"]]}); + yield extension.startup(); yield awaitFinish; yield extension.unload(); + yield SpecialPowers.popPrefEnv(); + let node = document.getElementById(pageActionId); is(node, null, "pageAction image removed from document"); @@ -177,22 +181,33 @@ "description": "Title", }, }, + "_locales/es_ES/messages.json": { + "popup": { + "message": "default.html", + "description": "Popup", + }, + + "title": { + "message": "T\u00edtulo", + "description": "Title", + }, + }, }, getTests(tabs) { let details = [ {"icon": browser.runtime.getURL("default.png"), "popup": browser.runtime.getURL("default.html"), - "title": "Default Title \u263a"}, + "title": "Default T\u00edtulo \u263a"}, {"icon": browser.runtime.getURL("1.png"), "popup": browser.runtime.getURL("default.html"), - "title": "Default Title \u263a"}, + "title": "Default T\u00edtulo \u263a"}, {"icon": browser.runtime.getURL("2.png"), "popup": browser.runtime.getURL("2.html"), "title": "Title 2"}, {"icon": browser.runtime.getURL("2.png"), "popup": browser.runtime.getURL("2.html"), - "title": "Default Title \u263a"}, + "title": "Default T\u00edtulo \u263a"}, ]; let promiseTabLoad = details => { diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_runAt.js thunderbird-49.0~b1+build5/mozilla/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_runAt.js --- thunderbird-49.0~b1+build4/mozilla/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_runAt.js 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_runAt.js 2016-09-02 05:35:03.000000000 +0000 @@ -31,9 +31,11 @@ return Promise.reject(new Error("Max tries exceeded")); } + let url = `${URL}?r=${Math.random()}`; + let loadingPromise = new Promise(resolve => { browser.tabs.onUpdated.addListener(function listener(tabId, changed, tab_) { - if (tabId == tab.id && changed.status == "loading" && tab_.url == URL) { + if (tabId == tab.id && changed.status == "loading" && tab_.url == url) { browser.tabs.onUpdated.removeListener(listener); resolve(); } @@ -42,7 +44,7 @@ // TODO: Test allFrames and frameId. - return browser.tabs.update({url: URL}).then(() => { + return browser.tabs.update({url}).then(() => { return loadingPromise; }).then(() => { return Promise.all([ diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/components/migration/AutoMigrate.jsm thunderbird-49.0~b1+build5/mozilla/browser/components/migration/AutoMigrate.jsm --- thunderbird-49.0~b1+build4/mozilla/browser/components/migration/AutoMigrate.jsm 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/components/migration/AutoMigrate.jsm 2016-09-02 05:36:11.000000000 +0000 @@ -0,0 +1,391 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +this.EXPORTED_SYMBOLS = ["AutoMigrate"]; + +const { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components; + +const kAutoMigrateEnabledPref = "browser.migrate.automigrate.enabled"; +const kUndoUIEnabledPref = "browser.migrate.automigrate.ui.enabled"; + +const kAutoMigrateStartedPref = "browser.migrate.automigrate.started"; +const kAutoMigrateFinishedPref = "browser.migrate.automigrate.finished"; +const kAutoMigrateBrowserPref = "browser.migrate.automigrate.browser"; + +const kAutoMigrateLastUndoPromptDateMsPref = "browser.migrate.automigrate.lastUndoPromptDateMs"; +const kAutoMigrateDaysToOfferUndoPref = "browser.migrate.automigrate.daysToOfferUndo"; + +const kPasswordManagerTopic = "passwordmgr-storage-changed"; +const kPasswordManagerTopicTypes = new Set([ + "addLogin", + "modifyLogin", +]); + +const kSyncTopic = "fxaccounts:onlogin"; + +const kNotificationId = "abouthome-automigration-undo"; + +Cu.import("resource:///modules/MigrationUtils.jsm"); +Cu.import("resource://gre/modules/Preferences.jsm"); +Cu.import("resource://gre/modules/PlacesUtils.jsm"); +Cu.import("resource://gre/modules/Services.jsm"); +Cu.import("resource://gre/modules/Task.jsm"); +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); + +let gAutoMigrationBundle; + +function getBundle() { + if (!gAutoMigrationBundle) { + gAutoMigrationBundle = Services.strings.createBundle( + "chrome://browser/content/migration/automigration.properties"); + } + return gAutoMigrationBundle; +} + +const AutoMigrate = { + get resourceTypesToUse() { + let {BOOKMARKS, HISTORY, PASSWORDS} = Ci.nsIBrowserProfileMigrator; + return BOOKMARKS | HISTORY | PASSWORDS; + }, + + init() { + this.enabled = Preferences.get(kAutoMigrateEnabledPref, false) && + Cc["@mozilla.org/chrome/chrome-registry;1"]. + getService(Ci.nsIXULChromeRegistry). + getSelectedLocale("browser") == "en-US"; + if (this.enabled) { + this.maybeInitUndoObserver(); + } + }, + + maybeInitUndoObserver() { + if (!this.canUndo()) { + return; + } + // Now register places, password and sync observers: + this.onItemAdded = this.onItemMoved = this.onItemChanged = + this.removeUndoOption.bind(this, this.UNDO_REMOVED_REASON_BOOKMARK_CHANGE); + PlacesUtils.addLazyBookmarkObserver(this, true); + for (let topic of [kSyncTopic, kPasswordManagerTopic]) { + Services.obs.addObserver(this, topic, true); + } + }, + + observe(subject, topic, data) { + if (topic == kPasswordManagerTopic) { + // As soon as any login gets added or modified, disable undo: + // (Note that this ignores logins being removed as that doesn't + // impair the 'undo' functionality of the import.) + if (kPasswordManagerTopicTypes.has(data)) { + this.removeUndoOption(this.UNDO_REMOVED_REASON_PASSWORD_CHANGE); + } + } else if (topic == kSyncTopic) { + this.removeUndoOption(this.UNDO_REMOVED_REASON_SYNC_SIGNIN); + } + }, + + /** + * Automatically pick a migrator and resources to migrate, + * then migrate those and start up. + * + * @throws if automatically deciding on migrators/data + * failed for some reason. + */ + migrate(profileStartup, migratorKey, profileToMigrate) { + let histogram = Services.telemetry.getHistogramById( + "FX_STARTUP_MIGRATION_AUTOMATED_IMPORT_PROCESS_SUCCESS"); + histogram.add(0); + let {migrator, pickedKey} = this.pickMigrator(migratorKey); + histogram.add(5); + + profileToMigrate = this.pickProfile(migrator, profileToMigrate); + histogram.add(10); + + let resourceTypes = migrator.getMigrateData(profileToMigrate, profileStartup); + if (!(resourceTypes & this.resourceTypesToUse)) { + throw new Error("No usable resources were found for the selected browser!"); + } + histogram.add(15); + + let sawErrors = false; + let migrationObserver = (subject, topic, data) => { + if (topic == "Migration:ItemError") { + sawErrors = true; + } else if (topic == "Migration:Ended") { + histogram.add(25); + if (sawErrors) { + histogram.add(26); + } + Services.obs.removeObserver(migrationObserver, "Migration:Ended"); + Services.obs.removeObserver(migrationObserver, "Migration:ItemError"); + Services.prefs.setCharPref(kAutoMigrateStartedPref, startTime.toString()); + Services.prefs.setCharPref(kAutoMigrateFinishedPref, Date.now().toString()); + Services.prefs.setCharPref(kAutoMigrateBrowserPref, pickedKey); + // Need to manually start listening to new bookmarks/logins being created, + // because, when we were initialized, there wasn't the possibility to + // 'undo' anything. + this.maybeInitUndoObserver(); + } + }; + + Services.obs.addObserver(migrationObserver, "Migration:Ended", false); + Services.obs.addObserver(migrationObserver, "Migration:ItemError", false); + // We'll save this when the migration has finished, at which point the pref + // service will be available. + let startTime = Date.now(); + migrator.migrate(this.resourceTypesToUse, profileStartup, profileToMigrate); + histogram.add(20); + }, + + /** + * Pick and return a migrator to use for automatically migrating. + * + * @param {String} migratorKey optional, a migrator key to prefer/pick. + * @returns {Object} an object with the migrator to use for migrating, as + * well as the key we eventually ended up using to obtain it. + */ + pickMigrator(migratorKey) { + if (!migratorKey) { + let defaultKey = MigrationUtils.getMigratorKeyForDefaultBrowser(); + if (!defaultKey) { + throw new Error("Could not determine default browser key to migrate from"); + } + migratorKey = defaultKey; + } + if (migratorKey == "firefox") { + throw new Error("Can't automatically migrate from Firefox."); + } + + let migrator = MigrationUtils.getMigrator(migratorKey); + if (!migrator) { + throw new Error("Migrator specified or a default was found, but the migrator object is not available."); + } + return {migrator, pickedKey: migratorKey}; + }, + + /** + * Pick a source profile (from the original browser) to use. + * + * @param {Migrator} migrator the migrator object to use + * @param {String} suggestedId the id of the profile to migrate, if pre-specified, or null + * @returns the profile to migrate, or null if migrating + * from the default profile. + */ + pickProfile(migrator, suggestedId) { + let profiles = migrator.sourceProfiles; + if (profiles && !profiles.length) { + throw new Error("No profile data found to migrate."); + } + if (suggestedId) { + if (!profiles) { + throw new Error("Profile specified but only a default profile found."); + } + let suggestedProfile = profiles.find(profile => profile.id == suggestedId); + if (!suggestedProfile) { + throw new Error("Profile specified was not found."); + } + return suggestedProfile; + } + if (profiles && profiles.length > 1) { + throw new Error("Don't know how to pick a profile when more than 1 profile is present."); + } + return profiles ? profiles[0] : null; + }, + + getUndoRange() { + let start, finish; + try { + start = parseInt(Preferences.get(kAutoMigrateStartedPref, "0"), 10); + finish = parseInt(Preferences.get(kAutoMigrateFinishedPref, "0"), 10); + } catch (ex) { + Cu.reportError(ex); + } + if (!finish || !start) { + return null; + } + return [new Date(start), new Date(finish)]; + }, + + canUndo() { + return !!this.getUndoRange(); + }, + + undo: Task.async(function* () { + let histogram = Services.telemetry.getHistogramById("FX_STARTUP_MIGRATION_AUTOMATED_IMPORT_UNDO"); + histogram.add(0); + if (!this.canUndo()) { + histogram.add(5); + throw new Error("Can't undo!"); + } + + histogram.add(10); + + yield PlacesUtils.bookmarks.eraseEverything(); + histogram.add(15); + + // NB: we drop the start time of the migration for now. This is because + // imported history will always end up being 'backdated' to the actual + // visit time recorded by the browser from which we imported. As a result, + // a lower bound on this item doesn't really make sense. + // Note that for form data this could be different, but we currently don't + // support form data import from any non-Firefox browser, so it isn't + // imported from other browsers by the automigration code, nor do we + // remove it here. + let range = this.getUndoRange(); + yield PlacesUtils.history.removeVisitsByFilter({ + beginDate: new Date(0), + endDate: range[1] + }); + histogram.add(20); + + try { + Services.logins.removeAllLogins(); + } catch (ex) { + // ignore failure. + } + histogram.add(25); + this.removeUndoOption(this.UNDO_REMOVED_REASON_UNDO_USED); + histogram.add(30); + }), + + removeUndoOption(reason) { + // Remove observers, and ensure that exceptions doing so don't break + // removing the pref. + for (let topic of [kSyncTopic, kPasswordManagerTopic]) { + try { + Services.obs.removeObserver(this, topic); + } catch (ex) { + Cu.reportError("Error removing observer for " + topic + ": " + ex); + } + } + try { + PlacesUtils.removeLazyBookmarkObserver(this); + } catch (ex) { + Cu.reportError("Error removing lazy bookmark observer: " + ex); + } + + let migrationBrowser = Preferences.get(kAutoMigrateBrowserPref, "unknown"); + Services.prefs.clearUserPref(kAutoMigrateStartedPref); + Services.prefs.clearUserPref(kAutoMigrateFinishedPref); + Services.prefs.clearUserPref(kAutoMigrateBrowserPref); + + let browserWindows = Services.wm.getEnumerator("navigator:browser"); + while (browserWindows.hasMoreElements()) { + let win = browserWindows.getNext(); + if (!win.closed) { + for (let browser of win.gBrowser.browsers) { + let nb = win.gBrowser.getNotificationBox(browser); + let notification = nb.getNotificationWithValue(kNotificationId); + if (notification) { + nb.removeNotification(notification); + } + } + } + } + let histogram = + Services.telemetry.getKeyedHistogramById("FX_STARTUP_MIGRATION_UNDO_REASON"); + histogram.add(migrationBrowser, reason); + }, + + getBrowserUsedForMigration() { + let browserId = Services.prefs.getCharPref(kAutoMigrateBrowserPref); + if (browserId) { + return MigrationUtils.getBrowserName(browserId); + } + return null; + }, + + getLocalizedString(str, args) { + if (args === undefined) + return getBundle().GetStringFromName(str); + return getBundle().formatStringFromName( + str, args, args.length); + }, + + maybeShowUndoNotification(target) { + // The tab might have navigated since we requested the undo state: + if (!this.canUndo() || target.currentURI.spec != "about:home" || + !Preferences.get(kUndoUIEnabledPref, false)) { + return; + } + let win = target.ownerGlobal; + let notificationBox = win.gBrowser.getNotificationBox(target); + if (!notificationBox || notificationBox.getNotificationWithValue("abouthome-automigration-undo")) { + return; + } + + // At this stage we're committed to show the prompt - unless we shouldn't, + // in which case we remove the undo prefs (which will cause canUndo() to + // return false from now on.): + if (!this.shouldStillShowUndoPrompt()) { + this.removeUndoOption(this.UNDO_REMOVED_REASON_OFFER_EXPIRED); + return; + } + + let browserName = this.getBrowserUsedForMigration(); + let message; + if (browserName) { + message = this.getLocalizedString("automigration.undo.message", + [browserName]); + } else { + message = this.getLocalizedString("automigration.undo.unknownBrowserMessage"); + } + + let buttons = [ + { + label: this.getLocalizedString("automigration.undo.keep.label"), + accessKey: this.getLocalizedString("automigration.undo.keep.accesskey"), + callback: () => { + this.removeUndoOption(this.UNDO_REMOVED_REASON_OFFER_REJECTED); + }, + }, + { + label: this.getLocalizedString("automigration.undo.dontkeep.label"), + accessKey: this.getLocalizedString("automigration.undo.dontkeep.accesskey"), + callback: () => { + this.undo(); + }, + }, + ]; + notificationBox.appendNotification( + message, kNotificationId, null, notificationBox.PRIORITY_INFO_HIGH, buttons + ); + }, + + shouldStillShowUndoPrompt() { + let today = new Date(); + // Round down to midnight: + today = new Date(today.getFullYear(), today.getMonth(), today.getDate()); + // We store the unix timestamp corresponding to midnight on the last day + // on which we prompted. Fetch that and compare it to today's date. + // (NB: stored as a string because int prefs are too small for unix + // timestamps.) + let previousPromptDateMsStr = Preferences.get(kAutoMigrateLastUndoPromptDateMsPref, "0"); + let previousPromptDate = new Date(parseInt(previousPromptDateMsStr, 10)); + if (previousPromptDate < today) { + let remainingDays = Preferences.get(kAutoMigrateDaysToOfferUndoPref, 4) - 1; + Preferences.set(kAutoMigrateDaysToOfferUndoPref, remainingDays); + Preferences.set(kAutoMigrateLastUndoPromptDateMsPref, today.valueOf().toString()); + if (remainingDays <= 0) { + return false; + } + } + return true; + }, + + UNDO_REMOVED_REASON_UNDO_USED: 0, + UNDO_REMOVED_REASON_SYNC_SIGNIN: 1, + UNDO_REMOVED_REASON_PASSWORD_CHANGE: 2, + UNDO_REMOVED_REASON_BOOKMARK_CHANGE: 3, + UNDO_REMOVED_REASON_OFFER_EXPIRED: 4, + UNDO_REMOVED_REASON_OFFER_REJECTED: 5, + + QueryInterface: XPCOMUtils.generateQI( + [Ci.nsIObserver, Ci.nsINavBookmarkObserver, Ci.nsISupportsWeakReference] + ), +}; + +AutoMigrate.init(); diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/components/migration/content/automigration.properties thunderbird-49.0~b1+build5/mozilla/browser/components/migration/content/automigration.properties --- thunderbird-49.0~b1+build4/mozilla/browser/components/migration/content/automigration.properties 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/components/migration/content/automigration.properties 2016-09-02 05:35:03.000000000 +0000 @@ -0,0 +1,7 @@ +# Automigration undo notification. +automigration.undo.message = We automatically imported your data from %S. Would you like to keep it? +automigration.undo.unknownBrowserMessage = We automatically imported your data from another browser. Would you like to keep it? +automigration.undo.keep.label = Keep +automigration.undo.keep.accesskey = K +automigration.undo.dontkeep.label = Don’t Keep +automigration.undo.dontkeep.accesskey = D diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/components/migration/content/migration.js thunderbird-49.0~b1+build5/mozilla/browser/components/migration/content/migration.js --- thunderbird-49.0~b1+build4/mozilla/browser/components/migration/content/migration.js 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/components/migration/content/migration.js 2016-09-02 05:36:11.000000000 +0000 @@ -314,38 +314,14 @@ singleStart.setAttribute("label", mainStr); singleStart.setAttribute("value", "DEFAULT"); - var source = null; - switch (this._source) { - case "ie": - source = "sourceNameIE"; - break; - case "safari": - source = "sourceNameSafari"; - break; - case "canary": - source = "sourceNameCanary"; - break; - case "chrome": - source = "sourceNameChrome"; - break; - case "chromium": - source = "sourceNameChromium"; - break; - case "firefox": - source = "sourceNameFirefox"; - break; - case "360se": - source = "sourceName360se"; - break; - } + var appName = MigrationUtils.getBrowserName(this._source); // semi-wallpaper for crash when multiple profiles exist, since we haven't initialized mSourceProfile in places this._migrator.getMigrateData(this._selectedProfile, this._autoMigrate); var oldHomePageURL = this._migrator.sourceHomePageURL; - if (oldHomePageURL && source) { - var appName = MigrationUtils.getLocalizedString(source); + if (oldHomePageURL && appName) { var oldHomePageLabel = brandBundle.getFormattedString("homePageImport", [appName]); var oldHomePage = document.getElementById("oldHomePage"); diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/components/migration/jar.mn thunderbird-49.0~b1+build5/mozilla/browser/components/migration/jar.mn --- thunderbird-49.0~b1+build4/mozilla/browser/components/migration/jar.mn 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/components/migration/jar.mn 2016-09-02 05:35:03.000000000 +0000 @@ -5,4 +5,5 @@ browser.jar: * content/browser/migration/migration.xul (content/migration.xul) content/browser/migration/migration.js (content/migration.js) + content/browser/migration/automigration.properties (content/automigration.properties) content/browser/aboutWelcomeBack.xhtml (content/aboutWelcomeBack.xhtml) diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/components/migration/MigrationUtils.jsm thunderbird-49.0~b1+build5/mozilla/browser/components/migration/MigrationUtils.jsm --- thunderbird-49.0~b1+build4/mozilla/browser/components/migration/MigrationUtils.jsm 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/components/migration/MigrationUtils.jsm 2016-09-02 05:35:03.000000000 +0000 @@ -10,17 +10,21 @@ const TOPIC_WILL_IMPORT_BOOKMARKS = "initial-migration-will-import-default-bookmarks"; const TOPIC_DID_IMPORT_BOOKMARKS = "initial-migration-did-import-default-bookmarks"; -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +Cu.import("resource://gre/modules/AppConstants.jsm"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/Task.jsm"); -Cu.import("resource://gre/modules/AppConstants.jsm"); +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils", - "resource://gre/modules/PlacesUtils.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "AutoMigrate", + "resource:///modules/AutoMigrate.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "BookmarkHTMLUtils", "resource://gre/modules/BookmarkHTMLUtils.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils", + "resource://gre/modules/PlacesUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "PromiseUtils", "resource://gre/modules/PromiseUtils.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "TelemetryStopwatch", + "resource://gre/modules/TelemetryStopwatch.jsm"); var gMigrators = null; var gProfileStartup = null; @@ -95,7 +99,7 @@ * profiles. * * Each migration resource should provide: - * - a |type| getter, retunring any of the migration types (see + * - a |type| getter, returning any of the migration types (see * nsIBrowserProfileMigrator). * * - a |migrate| method, taking a single argument, aCallback(bool success), @@ -181,6 +185,10 @@ return types.reduce((a, b) => a |= b, 0); }, + getKey: function MP_getKey() { + return this.contractID.match(/\=([^\=]+)$/)[1]; + }, + /** * DO NOT OVERRIDE - After deCOMing migration, the UI will just call * migrate for each resource. @@ -202,6 +210,31 @@ }); }; + let getHistogramForResourceType = resourceType => { + if (resourceType == MigrationUtils.resourceTypes.HISTORY) { + return "FX_MIGRATION_HISTORY_IMPORT_MS"; + } + if (resourceType == MigrationUtils.resourceTypes.BOOKMARKS) { + return "FX_MIGRATION_BOOKMARKS_IMPORT_MS"; + } + if (resourceType == MigrationUtils.resourceTypes.PASSWORDS) { + return "FX_MIGRATION_LOGINS_IMPORT_MS"; + } + return null; + }; + let maybeStartTelemetryStopwatch = (resourceType, resource) => { + let histogram = getHistogramForResourceType(resourceType); + if (histogram) { + TelemetryStopwatch.startKeyed(histogram, this.getKey(), resource); + } + }; + let maybeStopTelemetryStopwatch = (resourceType, resource) => { + let histogram = getHistogramForResourceType(resourceType); + if (histogram) { + TelemetryStopwatch.finishKeyed(histogram, this.getKey(), resource); + } + }; + // Called either directly or through the bookmarks import callback. let doMigrate = Task.async(function*() { let resourcesGroupedByItems = new Map(); @@ -230,8 +263,10 @@ for (let res of itemResources) { // Workaround bug 449811. let resource = res; + maybeStartTelemetryStopwatch(migrationType, resource); let completeDeferred = PromiseUtils.defer(); let resourceDone = function(aSuccess) { + maybeStopTelemetryStopwatch(migrationType, resource); itemResources.delete(resource); itemSuccess |= aSuccess; if (itemResources.size == 0) { @@ -436,6 +471,36 @@ aKey, aReplacements, aReplacements.length); }, + _getLocalePropertyForBrowser(browserId) { + switch (browserId) { + case "edge": + return "sourceNameEdge"; + case "ie": + return "sourceNameIE"; + case "safari": + return "sourceNameSafari"; + case "canary": + return "sourceNameCanary"; + case "chrome": + return "sourceNameChrome"; + case "chromium": + return "sourceNameChromium"; + case "firefox": + return "sourceNameFirefox"; + case "360se": + return "sourceName360se"; + } + return null; + }, + + getBrowserName(browserId) { + let prop = this._getLocalePropertyForBrowser(browserId); + if (prop) { + return this.getLocalizedString(prop); + } + return null; + }, + /** * Helper for creating a folder for imported bookmarks from a particular * migration source. The folder is created at the end of the given folder. @@ -513,6 +578,7 @@ // Canary uses the same description as Chrome so we can't distinguish them. const APP_DESC_TO_KEY = { "Internet Explorer": "ie", + "Microsoft Edge": "edge", "Safari": "safari", "Firefox": "firefox", "Google Chrome": "chrome", // Windows, Linux @@ -696,8 +762,21 @@ } } + let isRefresh = migrator && skipSourcePage && + migratorKey == AppConstants.MOZ_APP_NAME; + + if (!isRefresh && AutoMigrate.enabled) { + try { + AutoMigrate.migrate(aProfileStartup, aMigratorKey, aProfileToMigrate); + return; + } catch (ex) { + // If automigration failed, continue and show the dialog. + Cu.reportError(ex); + } + } + let migrationEntryPoint = this.MIGRATION_ENTRYPOINT_FIRSTRUN; - if (migrator && skipSourcePage && migratorKey == AppConstants.MOZ_APP_NAME) { + if (isRefresh) { migrationEntryPoint = this.MIGRATION_ENTRYPOINT_FXREFRESH; } @@ -721,6 +800,8 @@ gMigrationBundle = null; }, + gAvailableMigratorKeys, + MIGRATION_ENTRYPOINT_UNKNOWN: 0, MIGRATION_ENTRYPOINT_FIRSTRUN: 1, MIGRATION_ENTRYPOINT_FXREFRESH: 2, diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/components/migration/moz.build thunderbird-49.0~b1+build5/mozilla/browser/components/migration/moz.build --- thunderbird-49.0~b1+build4/mozilla/browser/components/migration/moz.build 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/components/migration/moz.build 2016-09-02 05:35:03.000000000 +0000 @@ -27,6 +27,7 @@ ] EXTRA_JS_MODULES += [ + 'AutoMigrate.jsm', 'MigrationUtils.jsm', ] diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/components/migration/tests/unit/test_automigration.js thunderbird-49.0~b1+build5/mozilla/browser/components/migration/tests/unit/test_automigration.js --- thunderbird-49.0~b1+build4/mozilla/browser/components/migration/tests/unit/test_automigration.js 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/components/migration/tests/unit/test_automigration.js 2016-09-02 05:35:03.000000000 +0000 @@ -0,0 +1,288 @@ +Cu.import("resource:///modules/MigrationUtils.jsm"); +Cu.import("resource://gre/modules/PlacesUtils.jsm"); +Cu.import("resource://gre/modules/Preferences.jsm"); +Cu.import("resource://testing-common/TestUtils.jsm"); +Cu.import("resource://testing-common/PlacesTestUtils.jsm"); +let AutoMigrateBackstage = Cu.import("resource:///modules/AutoMigrate.jsm"); + +let gShimmedMigratorKeyPicker = null; +let gShimmedMigrator = null; + +const kUsecPerMin = 60 * 1000000; + +// This is really a proxy on MigrationUtils, but if we specify that directly, +// we get in trouble because the object itself is frozen, and Proxies can't +// return a different value to an object when directly proxying a frozen +// object. +AutoMigrateBackstage.MigrationUtils = new Proxy({}, { + get(target, name) { + if (name == "getMigratorKeyForDefaultBrowser" && gShimmedMigratorKeyPicker) { + return gShimmedMigratorKeyPicker; + } + if (name == "getMigrator" && gShimmedMigrator) { + return function() { return gShimmedMigrator }; + } + return MigrationUtils[name]; + }, +}); + +do_register_cleanup(function() { + AutoMigrateBackstage.MigrationUtils = MigrationUtils; +}); + +/** + * Test automatically picking a browser to migrate from + */ +add_task(function* checkMigratorPicking() { + Assert.throws(() => AutoMigrate.pickMigrator("firefox"), + /Can't automatically migrate from Firefox/, + "Should throw when explicitly picking Firefox."); + + Assert.throws(() => AutoMigrate.pickMigrator("gobbledygook"), + /migrator object is not available/, + "Should throw when passing unknown migrator key"); + gShimmedMigratorKeyPicker = function() { + return "firefox"; + }; + Assert.throws(() => AutoMigrate.pickMigrator(), + /Can't automatically migrate from Firefox/, + "Should throw when implicitly picking Firefox."); + gShimmedMigratorKeyPicker = function() { + return "gobbledygook"; + }; + Assert.throws(() => AutoMigrate.pickMigrator(), + /migrator object is not available/, + "Should throw when an unknown migrator is the default"); + gShimmedMigratorKeyPicker = function() { + return ""; + }; + Assert.throws(() => AutoMigrate.pickMigrator(), + /Could not determine default browser key/, + "Should throw when an unknown migrator is the default"); +}); + + +/** + * Test automatically picking a profile to migrate from + */ +add_task(function* checkProfilePicking() { + let fakeMigrator = {sourceProfiles: [{id: "a"}, {id: "b"}]}; + let profB = fakeMigrator.sourceProfiles[1]; + Assert.throws(() => AutoMigrate.pickProfile(fakeMigrator), + /Don't know how to pick a profile when more/, + "Should throw when there are multiple profiles."); + Assert.throws(() => AutoMigrate.pickProfile(fakeMigrator, "c"), + /Profile specified was not found/, + "Should throw when the profile supplied doesn't exist."); + let profileToMigrate = AutoMigrate.pickProfile(fakeMigrator, "b"); + Assert.equal(profileToMigrate, profB, "Should return profile supplied"); + + fakeMigrator.sourceProfiles = null; + Assert.throws(() => AutoMigrate.pickProfile(fakeMigrator, "c"), + /Profile specified but only a default profile found./, + "Should throw when the profile supplied doesn't exist."); + profileToMigrate = AutoMigrate.pickProfile(fakeMigrator); + Assert.equal(profileToMigrate, null, "Should return default profile when that's the only one."); + + fakeMigrator.sourceProfiles = []; + Assert.throws(() => AutoMigrate.pickProfile(fakeMigrator), + /No profile data found/, + "Should throw when no profile data is present."); + + fakeMigrator.sourceProfiles = [{id: "a"}]; + let profA = fakeMigrator.sourceProfiles[0]; + profileToMigrate = AutoMigrate.pickProfile(fakeMigrator); + Assert.equal(profileToMigrate, profA, "Should return the only profile if only one is present."); +}); + +/** + * Test the complete automatic process including browser and profile selection, + * and actual migration (which implies startup) + */ +add_task(function* checkIntegration() { + gShimmedMigrator = { + get sourceProfiles() { + do_print("Read sourceProfiles"); + return null; + }, + getMigrateData(profileToMigrate) { + this._getMigrateDataArgs = profileToMigrate; + return Ci.nsIBrowserProfileMigrator.BOOKMARKS; + }, + migrate(types, startup, profileToMigrate) { + this._migrateArgs = [types, startup, profileToMigrate]; + }, + }; + gShimmedMigratorKeyPicker = function() { + return "gobbledygook"; + }; + AutoMigrate.migrate("startup"); + Assert.strictEqual(gShimmedMigrator._getMigrateDataArgs, null, + "getMigrateData called with 'null' as a profile"); + + let {BOOKMARKS, HISTORY, PASSWORDS} = Ci.nsIBrowserProfileMigrator; + let expectedTypes = BOOKMARKS | HISTORY | PASSWORDS; + Assert.deepEqual(gShimmedMigrator._migrateArgs, [expectedTypes, "startup", null], + "migrate called with 'null' as a profile"); +}); + +/** + * Test the undo preconditions and a no-op undo in the automigrator. + */ +add_task(function* checkUndoPreconditions() { + gShimmedMigrator = { + get sourceProfiles() { + do_print("Read sourceProfiles"); + return null; + }, + getMigrateData(profileToMigrate) { + this._getMigrateDataArgs = profileToMigrate; + return Ci.nsIBrowserProfileMigrator.BOOKMARKS; + }, + migrate(types, startup, profileToMigrate) { + this._migrateArgs = [types, startup, profileToMigrate]; + TestUtils.executeSoon(function() { + Services.obs.notifyObservers(null, "Migration:Ended", undefined); + }); + }, + }; + + gShimmedMigratorKeyPicker = function() { + return "gobbledygook"; + }; + AutoMigrate.migrate("startup"); + let migrationFinishedPromise = TestUtils.topicObserved("Migration:Ended"); + Assert.strictEqual(gShimmedMigrator._getMigrateDataArgs, null, + "getMigrateData called with 'null' as a profile"); + + let {BOOKMARKS, HISTORY, PASSWORDS} = Ci.nsIBrowserProfileMigrator; + let expectedTypes = BOOKMARKS | HISTORY | PASSWORDS; + Assert.deepEqual(gShimmedMigrator._migrateArgs, [expectedTypes, "startup", null], + "migrate called with 'null' as a profile"); + + yield migrationFinishedPromise; + Assert.ok(Preferences.has("browser.migrate.automigrate.started"), + "Should have set start time pref"); + Assert.ok(Preferences.has("browser.migrate.automigrate.finished"), + "Should have set finish time pref"); + Assert.ok(AutoMigrate.canUndo(), "Should be able to undo migration"); + + let [beginRange, endRange] = AutoMigrate.getUndoRange(); + let stringRange = `beginRange: ${beginRange}; endRange: ${endRange}`; + Assert.ok(beginRange <= endRange, + "Migration should have started before or when it ended " + stringRange); + + yield AutoMigrate.undo(); + Assert.ok(true, "Should be able to finish an undo cycle."); +}); + +/** + * Fake a migration and then try to undo it to verify all data gets removed. + */ +add_task(function* checkUndoRemoval() { + let startTime = "" + Date.now(); + + // Insert a login and check that that worked. + let login = Cc["@mozilla.org/login-manager/loginInfo;1"].createInstance(Ci.nsILoginInfo); + login.init("www.mozilla.org", "http://www.mozilla.org", null, "user", "pass", "userEl", "passEl"); + Services.logins.addLogin(login); + let storedLogins = Services.logins.findLogins({}, "www.mozilla.org", + "http://www.mozilla.org", null); + Assert.equal(storedLogins.length, 1, "Should have 1 login"); + + // Insert a bookmark and check that we have exactly 1 bookmark for that URI. + yield PlacesUtils.bookmarks.insert({ + parentGuid: PlacesUtils.bookmarks.toolbarGuid, + url: "http://www.example.org/", + title: "Some example bookmark", + }); + + let bookmark = yield PlacesUtils.bookmarks.fetch({url: "http://www.example.org/"}); + Assert.ok(bookmark, "Should have a bookmark before undo"); + Assert.equal(bookmark.title, "Some example bookmark", "Should have correct bookmark before undo."); + + // Insert 2 history visits - one in the current migration time, one from before. + let now_uSec = Date.now() * 1000; + let visitedURI = Services.io.newURI("http://www.example.com/", null, null); + yield PlacesTestUtils.addVisits([ + {uri: visitedURI, visitDate: now_uSec}, + {uri: visitedURI, visitDate: now_uSec - 100 * kUsecPerMin}, + ]); + + // Verify that both visits get reported. + let opts = PlacesUtils.history.getNewQueryOptions(); + opts.resultType = opts.RESULTS_AS_VISIT; + let query = PlacesUtils.history.getNewQuery(); + query.uri = visitedURI; + let visits = PlacesUtils.history.executeQuery(query, opts); + visits.root.containerOpen = true; + Assert.equal(visits.root.childCount, 2, "Should have 2 visits"); + // Clean up: + visits.root.containerOpen = false; + + // Now set finished pref: + let endTime = "" + Date.now(); + Preferences.set("browser.migrate.automigrate.started", startTime); + Preferences.set("browser.migrate.automigrate.finished", endTime); + + // Verify that we can undo, then undo: + Assert.ok(AutoMigrate.canUndo(), "Should be possible to undo migration"); + yield AutoMigrate.undo(); + + // Check that the undo removed the history visits: + visits = PlacesUtils.history.executeQuery(query, opts); + visits.root.containerOpen = true; + Assert.equal(visits.root.childCount, 0, "Should have no more visits"); + visits.root.containerOpen = false; + + // Check that the undo removed the bookmarks: + bookmark = yield PlacesUtils.bookmarks.fetch({url: "http://www.example.org/"}); + Assert.ok(!bookmark, "Should have no bookmarks after undo"); + + // Check that the undo removed the passwords: + storedLogins = Services.logins.findLogins({}, "www.mozilla.org", + "http://www.mozilla.org", null); + Assert.equal(storedLogins.length, 0, "Should have no logins"); + + // Finally check prefs got cleared: + Assert.ok(!Preferences.has("browser.migrate.automigrate.started"), + "Should no longer have pref for migration start time."); + Assert.ok(!Preferences.has("browser.migrate.automigrate.finished"), + "Should no longer have pref for migration finish time."); +}); + +add_task(function* checkUndoDisablingByBookmarksAndPasswords() { + let startTime = "" + Date.now(); + Services.prefs.setCharPref("browser.migrate.automigrate.started", startTime); + // Now set finished pref: + let endTime = "" + (Date.now() + 1000); + Services.prefs.setCharPref("browser.migrate.automigrate.finished", endTime); + AutoMigrate.maybeInitUndoObserver(); + + ok(AutoMigrate.canUndo(), "Should be able to undo."); + + // Insert a login and check that that disabled undo. + let login = Cc["@mozilla.org/login-manager/loginInfo;1"].createInstance(Ci.nsILoginInfo); + login.init("www.mozilla.org", "http://www.mozilla.org", null, "user", "pass", "userEl", "passEl"); + Services.logins.addLogin(login); + + ok(!AutoMigrate.canUndo(), "Should no longer be able to undo."); + Services.prefs.setCharPref("browser.migrate.automigrate.started", startTime); + Services.prefs.setCharPref("browser.migrate.automigrate.finished", endTime); + ok(AutoMigrate.canUndo(), "Should be able to undo."); + AutoMigrate.maybeInitUndoObserver(); + + // Insert a bookmark and check that that disabled undo. + yield PlacesUtils.bookmarks.insert({ + parentGuid: PlacesUtils.bookmarks.toolbarGuid, + url: "http://www.example.org/", + title: "Some example bookmark", + }); + ok(!AutoMigrate.canUndo(), "Should no longer be able to undo."); + + try { + Services.logins.removeAllLogins(); + } catch (ex) {} + yield PlacesUtils.bookmarks.eraseEverything(); +}); + diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/components/migration/tests/unit/xpcshell.ini thunderbird-49.0~b1+build5/mozilla/browser/components/migration/tests/unit/xpcshell.ini --- thunderbird-49.0~b1+build4/mozilla/browser/components/migration/tests/unit/xpcshell.ini 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/components/migration/tests/unit/xpcshell.ini 2016-09-02 05:35:03.000000000 +0000 @@ -7,6 +7,7 @@ Library/** AppData/** +[test_automigration.js] [test_Chrome_cookies.js] skip-if = os != "mac" # Relies on ULibDir [test_Chrome_passwords.js] diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/components/nsBrowserGlue.js thunderbird-49.0~b1+build5/mozilla/browser/components/nsBrowserGlue.js --- thunderbird-49.0~b1+build4/mozilla/browser/components/nsBrowserGlue.js 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/components/nsBrowserGlue.js 2016-09-02 05:35:03.000000000 +0000 @@ -797,6 +797,9 @@ SelfSupportBackend.init(); + // Ensure we keep track of places/pw-mananager undo by init'ing this early. + Cu.import("resource:///modules/AutoMigrate.jsm"); + if (!AppConstants.RELEASE_BUILD) { let themeName = gBrowserBundle.GetStringFromName("deveditionTheme.name"); let vendorShortName = gBrandBundle.GetStringFromName("vendorShortName"); diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/config/version_display.txt thunderbird-49.0~b1+build5/mozilla/browser/config/version_display.txt --- thunderbird-49.0~b1+build4/mozilla/browser/config/version_display.txt 2016-08-26 06:25:43.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/config/version_display.txt 2016-09-02 05:35:03.000000000 +0000 @@ -1 +1 @@ -49.0b7 +49.0b9 diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/locales/en-US/chrome/browser/browser.dtd thunderbird-49.0~b1+build5/mozilla/browser/locales/en-US/chrome/browser/browser.dtd --- thunderbird-49.0~b1+build4/mozilla/browser/locales/en-US/chrome/browser/browser.dtd 2016-08-26 06:25:43.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/locales/en-US/chrome/browser/browser.dtd 2016-09-02 05:35:03.000000000 +0000 @@ -264,7 +264,7 @@ - + diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/modules/AboutHome.jsm thunderbird-49.0~b1+build5/mozilla/browser/modules/AboutHome.jsm --- thunderbird-49.0~b1+build4/mozilla/browser/modules/AboutHome.jsm 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/modules/AboutHome.jsm 2016-09-02 05:35:03.000000000 +0000 @@ -15,10 +15,12 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppConstants", "resource://gre/modules/AppConstants.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils", - "resource://gre/modules/PrivateBrowsingUtils.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "AutoMigrate", + "resource:///modules/AutoMigrate.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "fxAccounts", "resource://gre/modules/FxAccounts.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils", + "resource://gre/modules/PrivateBrowsingUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "Promise", "resource://gre/modules/Promise.jsm"); @@ -99,6 +101,7 @@ "AboutHome:Sync", "AboutHome:Settings", "AboutHome:RequestUpdate", + "AboutHome:MaybeShowAutoMigrationUndoNotification", ], init: function() { @@ -148,6 +151,10 @@ case "AboutHome:RequestUpdate": this.sendAboutHomeData(aMessage.target); break; + + case "AboutHome:MaybeShowAutoMigrationUndoNotification": + AutoMigrate.maybeShowUndoNotification(aMessage.target); + break; } }, @@ -182,5 +189,6 @@ }).then(null, function onError(x) { Cu.reportError("Error in AboutHome.sendAboutHomeData: " + x); }); - } + }, + }; diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/themes/osx/browser.css thunderbird-49.0~b1+build5/mozilla/browser/themes/osx/browser.css --- thunderbird-49.0~b1+build4/mozilla/browser/themes/osx/browser.css 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/themes/osx/browser.css 2016-09-02 05:35:03.000000000 +0000 @@ -1064,11 +1064,6 @@ #panic-button@toolbarButtonPressed@ { -moz-image-region: rect(36px, 1404px, 72px, 1368px); } - - #add-share-provider { - list-style-image: url(chrome://browser/skin/menuPanel-small@2x.png); - -moz-image-region: rect(0px, 192px, 32px, 160px); - } } toolbar .toolbarbutton-1:not([type="menu-button"]), diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/themes/osx/devedition.css thunderbird-49.0~b1+build5/mozilla/browser/themes/osx/devedition.css --- thunderbird-49.0~b1+build4/mozilla/browser/themes/osx/devedition.css 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/themes/osx/devedition.css 2016-09-02 05:35:03.000000000 +0000 @@ -32,16 +32,6 @@ margin-top: 6px; } -/* In private windows, the #titlebar-content is higher because of the - * private browsing indicator. With the margin-top the titlebar buttons - * align to the top correctly in that case, but only if we don't stretch - * the box they're in because the container is too high, so we override - * the default alignment value (stretch). - */ -#main-window[tabsintitlebar] > #titlebar > #titlebar-content > #titlebar-buttonbox-container { - -moz-box-align: start; -} - /* Square back and forward buttons. Need !important on these because there are a lot of more specific selectors sprinkled around elsewhere for changing background / shadows for different states */ diff -Nru thunderbird-49.0~b1+build4/mozilla/browser/themes/shared/menupanel.inc.css thunderbird-49.0~b1+build5/mozilla/browser/themes/shared/menupanel.inc.css --- thunderbird-49.0~b1+build4/mozilla/browser/themes/shared/menupanel.inc.css 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/browser/themes/shared/menupanel.inc.css 2016-09-02 05:35:03.000000000 +0000 @@ -393,6 +393,11 @@ -moz-image-region: rect(0, 1664px, 64px, 1600px); } + #add-share-provider { + list-style-image: url(chrome://browser/skin/menuPanel-small@2x.png); + -moz-image-region: rect(0px, 192px, 32px, 160px); + } + /* Footer and wide panel control icons */ #edit-controls@inAnyPanel@ > toolbarbutton, #zoom-controls@inAnyPanel@ > toolbarbutton, diff -Nru thunderbird-49.0~b1+build4/mozilla/devtools/client/canvasdebugger/snapshotslist.js thunderbird-49.0~b1+build5/mozilla/devtools/client/canvasdebugger/snapshotslist.js --- thunderbird-49.0~b1+build4/mozilla/devtools/client/canvasdebugger/snapshotslist.js 2016-08-26 06:25:44.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/devtools/client/canvasdebugger/snapshotslist.js 2016-09-02 05:35:04.000000000 +0000 @@ -362,9 +362,7 @@ } let channel = NetUtil.newChannel({ - uri: NetUtil.newURI(fp.file), - loadingNode: window.document, - contentPolicyType: Ci.nsIContentPolicy.TYPE_OTHER}); + uri: NetUtil.newURI(fp.file), loadUsingSystemPrincipal: true}); channel.contentType = "text/plain"; NetUtil.asyncFetch(channel, (inputStream, status) => { diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/base/ImageEncoder.cpp thunderbird-49.0~b1+build5/mozilla/dom/base/ImageEncoder.cpp --- thunderbird-49.0~b1+build4/mozilla/dom/base/ImageEncoder.cpp 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/base/ImageEncoder.cpp 2016-09-02 05:35:04.000000000 +0000 @@ -436,6 +436,12 @@ imgStream = do_QueryInterface(aEncoder); } } else { + CheckedInt32 requiredBytes = CheckedInt32(aSize.width) * CheckedInt32(aSize.height) * 4; + if (MOZ_UNLIKELY(!requiredBytes.isValid())) { + return NS_ERROR_INVALID_ARG; + } + + // no context, so we have to encode an empty image // note that if we didn't have a current context, the spec says we're // supposed to just return transparent black pixels of the canvas diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/base/nsDOMWindowUtils.cpp thunderbird-49.0~b1+build5/mozilla/dom/base/nsDOMWindowUtils.cpp --- thunderbird-49.0~b1+build4/mozilla/dom/base/nsDOMWindowUtils.cpp 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/base/nsDOMWindowUtils.cpp 2016-09-02 05:35:04.000000000 +0000 @@ -3939,6 +3939,17 @@ return NS_OK; } +NS_IMETHODIMP +nsDOMWindowUtils::ForceReflowInterrupt() +{ + nsPresContext* pc = GetPresContext(); + if (!pc) { + return NS_ERROR_NOT_AVAILABLE; + } + pc->SetPendingInterruptFromTest(); + return NS_OK; +} + NS_INTERFACE_MAP_BEGIN(nsTranslationNodeList) NS_INTERFACE_MAP_ENTRY(nsISupports) NS_INTERFACE_MAP_ENTRY(nsITranslationNodeList) diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/indexedDB/ActorsParent.cpp thunderbird-49.0~b1+build5/mozilla/dom/indexedDB/ActorsParent.cpp --- thunderbird-49.0~b1+build4/mozilla/dom/indexedDB/ActorsParent.cpp 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/indexedDB/ActorsParent.cpp 2016-09-02 05:35:05.000000000 +0000 @@ -12517,12 +12517,16 @@ if (owningThread) { mDatabaseInfo->AssertIsOnConnectionThread(); - MOZ_ASSERT(mDatabaseInfo->mConnection); - mDatabaseInfo->mConnection->DoIdleProcessing(mNeedsCheckpoint); - MOZ_ALWAYS_SUCCEEDS( - owningThread->Dispatch(this, NS_DISPATCH_NORMAL)); - return NS_OK; + // The connection could be null if EnsureConnection() didn't run or was not + // successful in TransactionDatabaseOperationBase::RunOnConnectionThread(). + if (mDatabaseInfo->mConnection) { + mDatabaseInfo->mConnection->DoIdleProcessing(mNeedsCheckpoint); + + MOZ_ALWAYS_SUCCEEDS( + owningThread->Dispatch(this, NS_DISPATCH_NORMAL)); + return NS_OK; + } } RefPtr connectionPool = mDatabaseInfo->mConnectionPool; @@ -12561,6 +12565,8 @@ nsCOMPtr owningThread; mOwningThread.swap(owningThread); + // The connection could be null if EnsureConnection() didn't run or was not + // successful in TransactionDatabaseOperationBase::RunOnConnectionThread(). if (mDatabaseInfo->mConnection) { mDatabaseInfo->AssertIsOnConnectionThread(); diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/interfaces/base/nsIDOMWindowUtils.idl thunderbird-49.0~b1+build5/mozilla/dom/interfaces/base/nsIDOMWindowUtils.idl --- thunderbird-49.0~b1+build4/mozilla/dom/interfaces/base/nsIDOMWindowUtils.idl 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/interfaces/base/nsIDOMWindowUtils.idl 2016-09-02 05:35:05.000000000 +0000 @@ -1889,6 +1889,12 @@ * was last provided is what will be used. */ void respectDisplayPortSuppression(in boolean aEnabled); + + /** + * Set a flag that forces the next reflow interrupt check to return true. This + * can be used by tests to force execution of the interrupted reflow codepaths. + */ + void forceReflowInterrupt(); }; [scriptable, uuid(c694e359-7227-4392-a138-33c0cc1f15a6)] diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/media/encoder/MediaEncoder.cpp thunderbird-49.0~b1+build5/mozilla/dom/media/encoder/MediaEncoder.cpp --- thunderbird-49.0~b1+build4/mozilla/dom/media/encoder/MediaEncoder.cpp 2016-08-26 06:25:45.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/media/encoder/MediaEncoder.cpp 2016-09-02 05:35:05.000000000 +0000 @@ -299,17 +299,19 @@ LOG(LogLevel::Debug, ("ENCODE_TRACK TimeStamp = %f", GetEncodeTimeStamp())); EncodedFrameContainer encodedData; nsresult rv = NS_OK; - rv = WriteEncodedDataToMuxer(mAudioEncoder.get()); + // We're most likely to actually wait for a video frame, so do that first to minimize + // capture offset/lipsync issues + rv = WriteEncodedDataToMuxer(mVideoEncoder.get()); if (NS_FAILED(rv)) { - LOG(LogLevel::Error, ("Error! Fail to write audio encoder data to muxer")); + LOG(LogLevel::Error, ("Fail to write video encoder data to muxer")); break; } - LOG(LogLevel::Debug, ("Audio encoded TimeStamp = %f", GetEncodeTimeStamp())); - rv = WriteEncodedDataToMuxer(mVideoEncoder.get()); + rv = WriteEncodedDataToMuxer(mAudioEncoder.get()); if (NS_FAILED(rv)) { - LOG(LogLevel::Error, ("Fail to write video encoder data to muxer")); + LOG(LogLevel::Error, ("Error! Fail to write audio encoder data to muxer")); break; } + LOG(LogLevel::Debug, ("Audio encoded TimeStamp = %f", GetEncodeTimeStamp())); LOG(LogLevel::Debug, ("Video encoded TimeStamp = %f", GetEncodeTimeStamp())); // In audio only or video only case, let unavailable track's flag to be true. bool isAudioCompleted = (mAudioEncoder && mAudioEncoder->IsEncodingComplete()) || !mAudioEncoder; diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/media/encoder/OpusTrackEncoder.cpp thunderbird-49.0~b1+build5/mozilla/dom/media/encoder/OpusTrackEncoder.cpp --- thunderbird-49.0~b1+build4/mozilla/dom/media/encoder/OpusTrackEncoder.cpp 2016-08-26 06:25:45.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/media/encoder/OpusTrackEncoder.cpp 2016-09-02 05:35:05.000000000 +0000 @@ -275,175 +275,187 @@ // calculation below depends on the truth that mInitialized is true. MOZ_ASSERT(mInitialized); - // re-sampled frames left last time which didn't fit into an Opus packet duration. - const int framesLeft = mResampledLeftover.Length() / mChannels; - // When framesLeft is 0, (GetPacketDuration() - framesLeft) is a multiple - // of kOpusSamplingRate. There is not precision loss in the integer division - // in computing framesToFetch. If frameLeft > 0, we need to add 1 to - // framesToFetch to ensure there will be at least n frames after re-sampling. - const int frameRoundUp = framesLeft ? 1 : 0; - - MOZ_ASSERT(GetPacketDuration() >= framesLeft); - // Try to fetch m frames such that there will be n frames - // where (n + frameLeft) >= GetPacketDuration() after re-sampling. - const int framesToFetch = !mResampler ? GetPacketDuration() - : (GetPacketDuration() - framesLeft) * mSamplingRate / kOpusSamplingRate - + frameRoundUp; - { - // Move all the samples from mRawSegment to mSourceSegment. We only hold - // the monitor in this block. - ReentrantMonitorAutoEnter mon(mReentrantMonitor); - - // Wait until enough raw data, end of stream or cancelled. - while (!mCanceled && mRawSegment.GetDuration() + - mSourceSegment.GetDuration() < framesToFetch && - !mEndOfStream) { - mReentrantMonitor.Wait(); - } - - if (mCanceled || mEncodingComplete) { - return NS_ERROR_FAILURE; - } - - mSourceSegment.AppendFrom(&mRawSegment); - - // Pad |mLookahead| samples to the end of source stream to prevent lost of - // original data, the pcm duration will be calculated at rate 48K later. - if (mEndOfStream && !mEosSetInEncoder) { - mEosSetInEncoder = true; - mSourceSegment.AppendNullData(mLookahead); - } - } - - // Start encoding data. - AutoTArray pcm; - pcm.SetLength(GetPacketDuration() * mChannels); - AudioSegment::ChunkIterator iter(mSourceSegment); - int frameCopied = 0; - - while (!iter.IsEnded() && frameCopied < framesToFetch) { - AudioChunk chunk = *iter; - - // Chunk to the required frame size. - int frameToCopy = chunk.GetDuration(); - if (frameCopied + frameToCopy > framesToFetch) { - frameToCopy = framesToFetch - frameCopied; - } - - if (!chunk.IsNull()) { - // Append the interleaved data to the end of pcm buffer. - AudioTrackEncoder::InterleaveTrackData(chunk, frameToCopy, mChannels, - pcm.Elements() + frameCopied * mChannels); - } else { - memset(pcm.Elements() + frameCopied * mChannels, 0, - frameToCopy * mChannels * sizeof(AudioDataValue)); - } - - frameCopied += frameToCopy; - iter.Next(); - } - - RefPtr audiodata = new EncodedFrame(); - audiodata->SetFrameType(EncodedFrame::OPUS_AUDIO_FRAME); - int framesInPCM = frameCopied; - if (mResampler) { - AutoTArray resamplingDest; - // We want to consume all the input data, so we slightly oversize the - // resampled data buffer so we can fit the output data in. We cannot really - // predict the output frame count at each call. - uint32_t outframes = frameCopied * kOpusSamplingRate / mSamplingRate + 1; - uint32_t inframes = frameCopied; + bool wait = true; + int result = 0; + // Only wait once, then loop until we run out of packets of input data + while (result >= 0 && !mEncodingComplete) { + // re-sampled frames left last time which didn't fit into an Opus packet duration. + const int framesLeft = mResampledLeftover.Length() / mChannels; + // When framesLeft is 0, (GetPacketDuration() - framesLeft) is a multiple + // of kOpusSamplingRate. There is not precision loss in the integer division + // in computing framesToFetch. If frameLeft > 0, we need to add 1 to + // framesToFetch to ensure there will be at least n frames after re-sampling. + const int frameRoundUp = framesLeft ? 1 : 0; + + MOZ_ASSERT(GetPacketDuration() >= framesLeft); + // Try to fetch m frames such that there will be n frames + // where (n + frameLeft) >= GetPacketDuration() after re-sampling. + const int framesToFetch = !mResampler ? GetPacketDuration() + : (GetPacketDuration() - framesLeft) * mSamplingRate / kOpusSamplingRate + + frameRoundUp; + { + // Move all the samples from mRawSegment to mSourceSegment. We only hold + // the monitor in this block. + ReentrantMonitorAutoEnter mon(mReentrantMonitor); + + // Wait until enough raw data, end of stream or cancelled. + while (!mCanceled && mRawSegment.GetDuration() + + mSourceSegment.GetDuration() < framesToFetch && + !mEndOfStream) { + if (wait) { + mReentrantMonitor.Wait(); + wait = false; + } else { + goto done; // nested while's... + } + } + + if (mCanceled) { + return NS_ERROR_FAILURE; + } + + mSourceSegment.AppendFrom(&mRawSegment); + + // Pad |mLookahead| samples to the end of source stream to prevent lost of + // original data, the pcm duration will be calculated at rate 48K later. + if (mEndOfStream && !mEosSetInEncoder) { + mEosSetInEncoder = true; + mSourceSegment.AppendNullData(mLookahead); + } + } + + // Start encoding data. + AutoTArray pcm; + pcm.SetLength(GetPacketDuration() * mChannels); + AudioSegment::ChunkIterator iter(mSourceSegment); + int frameCopied = 0; + + while (!iter.IsEnded() && frameCopied < framesToFetch) { + AudioChunk chunk = *iter; + + // Chunk to the required frame size. + int frameToCopy = chunk.GetDuration(); + if (frameCopied + frameToCopy > framesToFetch) { + frameToCopy = framesToFetch - frameCopied; + } + + if (!chunk.IsNull()) { + // Append the interleaved data to the end of pcm buffer. + AudioTrackEncoder::InterleaveTrackData(chunk, frameToCopy, mChannels, + pcm.Elements() + frameCopied * mChannels); + } else { + memset(pcm.Elements() + frameCopied * mChannels, 0, + frameToCopy * mChannels * sizeof(AudioDataValue)); + } + + frameCopied += frameToCopy; + iter.Next(); + } + + RefPtr audiodata = new EncodedFrame(); + audiodata->SetFrameType(EncodedFrame::OPUS_AUDIO_FRAME); + int framesInPCM = frameCopied; + if (mResampler) { + AutoTArray resamplingDest; + // We want to consume all the input data, so we slightly oversize the + // resampled data buffer so we can fit the output data in. We cannot really + // predict the output frame count at each call. + uint32_t outframes = frameCopied * kOpusSamplingRate / mSamplingRate + 1; + uint32_t inframes = frameCopied; - resamplingDest.SetLength(outframes * mChannels); + resamplingDest.SetLength(outframes * mChannels); #if MOZ_SAMPLE_TYPE_S16 - short* in = reinterpret_cast(pcm.Elements()); - short* out = reinterpret_cast(resamplingDest.Elements()); - speex_resampler_process_interleaved_int(mResampler, in, &inframes, - out, &outframes); + short* in = reinterpret_cast(pcm.Elements()); + short* out = reinterpret_cast(resamplingDest.Elements()); + speex_resampler_process_interleaved_int(mResampler, in, &inframes, + out, &outframes); #else - float* in = reinterpret_cast(pcm.Elements()); - float* out = reinterpret_cast(resamplingDest.Elements()); - speex_resampler_process_interleaved_float(mResampler, in, &inframes, - out, &outframes); + float* in = reinterpret_cast(pcm.Elements()); + float* out = reinterpret_cast(resamplingDest.Elements()); + speex_resampler_process_interleaved_float(mResampler, in, &inframes, + out, &outframes); #endif - MOZ_ASSERT(pcm.Length() >= mResampledLeftover.Length()); - PodCopy(pcm.Elements(), mResampledLeftover.Elements(), - mResampledLeftover.Length()); - - uint32_t outframesToCopy = std::min(outframes, - static_cast(GetPacketDuration() - framesLeft)); - - MOZ_ASSERT(pcm.Length() - mResampledLeftover.Length() >= - outframesToCopy * mChannels); - PodCopy(pcm.Elements() + mResampledLeftover.Length(), - resamplingDest.Elements(), outframesToCopy * mChannels); - int frameLeftover = outframes - outframesToCopy; - mResampledLeftover.SetLength(frameLeftover * mChannels); - PodCopy(mResampledLeftover.Elements(), - resamplingDest.Elements() + outframesToCopy * mChannels, - mResampledLeftover.Length()); - // This is always at 48000Hz. - framesInPCM = framesLeft + outframesToCopy; - audiodata->SetDuration(framesInPCM); - } else { - // The ogg time stamping and pre-skip is always timed at 48000. - audiodata->SetDuration(frameCopied * (kOpusSamplingRate / mSamplingRate)); - } - - // Remove the raw data which has been pulled to pcm buffer. - // The value of frameCopied should equal to (or smaller than, if eos) - // GetPacketDuration(). - mSourceSegment.RemoveLeading(frameCopied); - - // Has reached the end of input stream and all queued data has pulled for - // encoding. - if (mSourceSegment.GetDuration() == 0 && mEndOfStream) { - mEncodingComplete = true; - LOG("[Opus] Done encoding."); - } - - MOZ_ASSERT(mEndOfStream || framesInPCM == GetPacketDuration()); + MOZ_ASSERT(pcm.Length() >= mResampledLeftover.Length()); + PodCopy(pcm.Elements(), mResampledLeftover.Elements(), + mResampledLeftover.Length()); + + uint32_t outframesToCopy = std::min(outframes, + static_cast(GetPacketDuration() - framesLeft)); + + MOZ_ASSERT(pcm.Length() - mResampledLeftover.Length() >= + outframesToCopy * mChannels); + PodCopy(pcm.Elements() + mResampledLeftover.Length(), + resamplingDest.Elements(), outframesToCopy * mChannels); + int frameLeftover = outframes - outframesToCopy; + mResampledLeftover.SetLength(frameLeftover * mChannels); + PodCopy(mResampledLeftover.Elements(), + resamplingDest.Elements() + outframesToCopy * mChannels, + mResampledLeftover.Length()); + // This is always at 48000Hz. + framesInPCM = framesLeft + outframesToCopy; + audiodata->SetDuration(framesInPCM); + } else { + // The ogg time stamping and pre-skip is always timed at 48000. + audiodata->SetDuration(frameCopied * (kOpusSamplingRate / mSamplingRate)); + } - // Append null data to pcm buffer if the leftover data is not enough for - // opus encoder. - if (framesInPCM < GetPacketDuration() && mEndOfStream) { - PodZero(pcm.Elements() + framesInPCM * mChannels, - (GetPacketDuration() - framesInPCM) * mChannels); - } - nsTArray frameData; - // Encode the data with Opus Encoder. - frameData.SetLength(MAX_DATA_BYTES); - // result is returned as opus error code if it is negative. - int result = 0; + // Remove the raw data which has been pulled to pcm buffer. + // The value of frameCopied should equal to (or smaller than, if eos) + // GetPacketDuration(). + mSourceSegment.RemoveLeading(frameCopied); + + // Has reached the end of input stream and all queued data has pulled for + // encoding. + if (mSourceSegment.GetDuration() == 0 && mEosSetInEncoder) { + mEncodingComplete = true; + LOG("[Opus] Done encoding."); + } + + MOZ_ASSERT(mEosSetInEncoder || framesInPCM == GetPacketDuration()); + + // Append null data to pcm buffer if the leftover data is not enough for + // opus encoder. + if (framesInPCM < GetPacketDuration() && mEosSetInEncoder) { + PodZero(pcm.Elements() + framesInPCM * mChannels, + (GetPacketDuration() - framesInPCM) * mChannels); + } + nsTArray frameData; + // Encode the data with Opus Encoder. + frameData.SetLength(MAX_DATA_BYTES); + // result is returned as opus error code if it is negative. + result = 0; #ifdef MOZ_SAMPLE_TYPE_S16 - const opus_int16* pcmBuf = static_cast(pcm.Elements()); - result = opus_encode(mEncoder, pcmBuf, GetPacketDuration(), - frameData.Elements(), MAX_DATA_BYTES); + const opus_int16* pcmBuf = static_cast(pcm.Elements()); + result = opus_encode(mEncoder, pcmBuf, GetPacketDuration(), + frameData.Elements(), MAX_DATA_BYTES); #else - const float* pcmBuf = static_cast(pcm.Elements()); - result = opus_encode_float(mEncoder, pcmBuf, GetPacketDuration(), - frameData.Elements(), MAX_DATA_BYTES); + const float* pcmBuf = static_cast(pcm.Elements()); + result = opus_encode_float(mEncoder, pcmBuf, GetPacketDuration(), + frameData.Elements(), MAX_DATA_BYTES); #endif - frameData.SetLength(result >= 0 ? result : 0); + frameData.SetLength(result >= 0 ? result : 0); - if (result < 0) { - LOG("[Opus] Fail to encode data! Result: %s.", opus_strerror(result)); - } - if (mEncodingComplete) { - if (mResampler) { - speex_resampler_destroy(mResampler); - mResampler = nullptr; + if (result < 0) { + LOG("[Opus] Fail to encode data! Result: %s.", opus_strerror(result)); } - mResampledLeftover.SetLength(0); + if (mEncodingComplete) { + if (mResampler) { + speex_resampler_destroy(mResampler); + mResampler = nullptr; + } + mResampledLeftover.SetLength(0); + } + + audiodata->SwapInFrameData(frameData); + // timestamp should be the time of the first sample + audiodata->SetTimeStamp(mOutputTimeStamp); + mOutputTimeStamp += FramesToUsecs(GetPacketDuration(), kOpusSamplingRate).value(); + LOG("[Opus] mOutputTimeStamp %lld.",mOutputTimeStamp); + aData.AppendEncodedFrame(audiodata); } - - audiodata->SwapInFrameData(frameData); - mOutputTimeStamp += FramesToUsecs(GetPacketDuration(), kOpusSamplingRate).value(); - audiodata->SetTimeStamp(mOutputTimeStamp); - LOG("[Opus] mOutputTimeStamp %lld.",mOutputTimeStamp); - aData.AppendEncodedFrame(audiodata); +done: return result >= 0 ? NS_OK : NS_ERROR_FAILURE; } diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/media/gmp/GMPParent.cpp thunderbird-49.0~b1+build5/mozilla/dom/media/gmp/GMPParent.cpp --- thunderbird-49.0~b1+build4/mozilla/dom/media/gmp/GMPParent.cpp 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/media/gmp/GMPParent.cpp 2016-09-02 05:35:05.000000000 +0000 @@ -40,8 +40,10 @@ #include "WMFDecoderModule.h" #endif +#ifdef MOZ_EME #include "mozilla/dom/WidevineCDMManifestBinding.h" #include "widevine-adapter/WidevineAdapter.h" +#endif namespace mozilla { @@ -807,6 +809,7 @@ return ReadGMPInfoFile(infoFile); } +#ifdef MOZ_EME // Maybe this is the Widevine adapted plugin? nsCOMPtr manifestFile; rv = mDirectory->Clone(getter_AddRefs(manifestFile)); @@ -815,6 +818,9 @@ } manifestFile->AppendRelativePath(NS_LITERAL_STRING("manifest.json")); return ReadChromiumManifestFile(manifestFile); +#else + return GenericPromise::CreateAndReject(NS_ERROR_FAILURE, __func__); +#endif } RefPtr @@ -928,6 +934,7 @@ LOGD("%s: for '%s'", __FUNCTION__, NS_LossyConvertUTF16toASCII(aJSON).get()); MOZ_ASSERT(NS_IsMainThread()); +#ifdef MOZ_EME mozilla::dom::WidevineCDMManifest m; if (!m.Init(aJSON)) { return GenericPromise::CreateAndReject(NS_ERROR_FAILURE, __func__); @@ -960,6 +967,10 @@ #endif return GenericPromise::CreateAndResolve(true, __func__); +#else + MOZ_ASSERT_UNREACHABLE("don't call me if EME isn't enabled"); + return GenericPromise::CreateAndReject(NS_ERROR_FAILURE, __func__); +#endif } bool diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/media/mediasource/SourceBufferResource.cpp thunderbird-49.0~b1+build5/mozilla/dom/media/mediasource/SourceBufferResource.cpp --- thunderbird-49.0~b1+build4/mozilla/dom/media/mediasource/SourceBufferResource.cpp 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/media/mediasource/SourceBufferResource.cpp 2016-09-02 05:35:05.000000000 +0000 @@ -36,84 +36,59 @@ } nsresult -SourceBufferResource::ReadInternal(char* aBuffer, uint32_t aCount, uint32_t* aBytes, bool aMayBlock) +SourceBufferResource::ReadAt(int64_t aOffset, char* aBuffer, uint32_t aCount, uint32_t* aBytes) +{ + SBR_DEBUG("ReadAt(aOffset=%lld, aBuffer=%p, aCount=%u, aBytes=%p)", + aOffset, aBytes, aCount, aBytes); + ReentrantMonitorAutoEnter mon(mMonitor); + return ReadAtInternal(aOffset, aBuffer, aCount, aBytes, /* aMayBlock = */ true); +} + +nsresult +SourceBufferResource::ReadAtInternal(int64_t aOffset, char* aBuffer, uint32_t aCount, uint32_t* aBytes, + bool aMayBlock) { mMonitor.AssertCurrentThreadIn(); + MOZ_ASSERT_IF(!aMayBlock, aBytes); - // Cache the offset for the read in case mOffset changes while waiting on the - // monitor below. It's basically impossible to implement these API semantics - // sanely. :-( - uint64_t readOffset = mOffset; + if (mClosed || + aOffset < 0 || + uint64_t(aOffset) < mInputBuffer.GetOffset() || + aOffset > GetLength()) { + return NS_ERROR_FAILURE; + } while (aMayBlock && !mEnded && - readOffset + aCount > static_cast(GetLength())) { + aOffset + aCount > GetLength()) { SBR_DEBUGV("waiting for data"); mMonitor.Wait(); // The callers of this function should have checked this, but it's // possible that we had an eviction while waiting on the monitor. - if (readOffset < mInputBuffer.GetOffset()) { + if (uint64_t(aOffset) < mInputBuffer.GetOffset()) { return NS_ERROR_FAILURE; } } - uint32_t available = GetLength() - readOffset; + uint32_t available = GetLength() - aOffset; uint32_t count = std::min(aCount, available); - SBR_DEBUGV("readOffset=%llu GetLength()=%u available=%u count=%u mEnded=%d", - readOffset, GetLength(), available, count, mEnded); + + // Keep the position of the last read to have Tell() approximately give us + // the position we're up to in the stream. + mOffset = aOffset + count; + + SBR_DEBUGV("offset=%llu GetLength()=%u available=%u count=%u mEnded=%d", + aOffset, GetLength(), available, count, mEnded); if (available == 0) { SBR_DEBUGV("reached EOF"); *aBytes = 0; return NS_OK; } - mInputBuffer.CopyData(readOffset, count, aBuffer); + mInputBuffer.CopyData(aOffset, count, aBuffer); *aBytes = count; - // From IRC: - // <@cpearce>bholley: *this* is why there should only every be a ReadAt() and - // no Read() on a Stream abstraction! there's no good answer, they all suck. - mOffset = readOffset + count; - - return NS_OK; -} - -nsresult -SourceBufferResource::ReadAt(int64_t aOffset, char* aBuffer, uint32_t aCount, uint32_t* aBytes) -{ - SBR_DEBUG("ReadAt(aOffset=%lld, aBuffer=%p, aCount=%u, aBytes=%p)", - aOffset, aBytes, aCount, aBytes); - ReentrantMonitorAutoEnter mon(mMonitor); - return ReadAtInternal(aOffset, aBuffer, aCount, aBytes, /* aMayBlock = */ true); -} - -nsresult -SourceBufferResource::ReadAtInternal(int64_t aOffset, char* aBuffer, uint32_t aCount, uint32_t* aBytes, - bool aMayBlock) -{ - mMonitor.AssertCurrentThreadIn(); - nsresult rv = SeekInternal(aOffset); - if (NS_FAILED(rv)) { - return rv; - } - - return ReadInternal(aBuffer, aCount, aBytes, aMayBlock); -} - -nsresult -SourceBufferResource::SeekInternal(int64_t aOffset) -{ - mMonitor.AssertCurrentThreadIn(); - - if (mClosed || - aOffset < 0 || - uint64_t(aOffset) < mInputBuffer.GetOffset() || - aOffset > GetLength()) { - return NS_ERROR_FAILURE; - } - - mOffset = aOffset; return NS_OK; } @@ -124,9 +99,7 @@ aBuffer, aOffset, aCount); ReentrantMonitorAutoEnter mon(mMonitor); uint32_t bytesRead; - int64_t oldOffset = mOffset; nsresult rv = ReadAtInternal(aOffset, aBuffer, aCount, &bytesRead, /* aMayBlock = */ false); - mOffset = oldOffset; // ReadFromCache isn't supposed to affect the seek position. NS_ENSURE_SUCCESS(rv, rv); // ReadFromCache return failure if not all the data is cached. @@ -154,10 +127,9 @@ { SBR_DEBUG("EvictBefore(aOffset=%llu)", aOffset); ReentrantMonitorAutoEnter mon(mMonitor); - // If aOffset is past the current playback offset we don't evict. - if (aOffset < mOffset) { - mInputBuffer.EvictBefore(aOffset, aRv); - } + + mInputBuffer.EvictBefore(aOffset, aRv); + // Wake up any waiting threads in case a ReadInternal call // is now invalid. mon.NotifyAll(); diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/media/mediasource/SourceBufferResource.h thunderbird-49.0~b1+build5/mozilla/dom/media/mediasource/SourceBufferResource.h --- thunderbird-49.0~b1+build4/mozilla/dom/media/mediasource/SourceBufferResource.h 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/media/mediasource/SourceBufferResource.h 2016-09-02 05:35:05.000000000 +0000 @@ -136,8 +136,6 @@ private: virtual ~SourceBufferResource(); - nsresult SeekInternal(int64_t aOffset); - nsresult ReadInternal(char* aBuffer, uint32_t aCount, uint32_t* aBytes, bool aMayBlock); nsresult ReadAtInternal(int64_t aOffset, char* aBuffer, uint32_t aCount, uint32_t* aBytes, bool aMayBlock); const nsCString mType; diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/media/MediaStreamGraph.cpp thunderbird-49.0~b1+build5/mozilla/dom/media/MediaStreamGraph.cpp --- thunderbird-49.0~b1+build4/mozilla/dom/media/MediaStreamGraph.cpp 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/media/MediaStreamGraph.cpp 2016-09-02 05:35:05.000000000 +0000 @@ -23,6 +23,7 @@ #include "AudioNodeStream.h" #include "AudioNodeExternalInputStream.h" #include "mozilla/dom/AudioContextBinding.h" +#include "mozilla/media/MediaUtils.h" #include #include "DOMMediaStream.h" #include "GeckoProfiler.h" @@ -1630,13 +1631,14 @@ } void -MediaStreamGraphImpl::ForceShutDown() +MediaStreamGraphImpl::ForceShutDown(ShutdownTicket* aShutdownTicket) { NS_ASSERTION(NS_IsMainThread(), "Must be called on main thread"); STREAM_LOG(LogLevel::Debug, ("MediaStreamGraph %p ForceShutdown", this)); { MonitorAutoLock lock(mMonitor); mForceShutDown = true; + mForceShutdownTicket = aShutdownTicket; if (mLifecycleState == LIFECYCLE_THREAD_NOT_STARTED) { // We *could* have just sent this a message to start up, so don't // yank the rug out from under it. Tell it to startup and let it @@ -1649,14 +1651,19 @@ } } +/* static */ StaticRefPtr gMediaStreamGraphShutdownBlocker; + namespace { -class MediaStreamGraphShutDownRunnable : public Runnable { +class MediaStreamGraphShutDownRunnable : public Runnable + , public nsITimerCallback { public: explicit MediaStreamGraphShutDownRunnable(MediaStreamGraphImpl* aGraph) : mGraph(aGraph) {} - NS_IMETHOD Run() + NS_DECL_ISUPPORTS_INHERITED + + NS_IMETHOD Run() override { NS_ASSERTION(mGraph->mDetectedNotRunning, "We should know the graph thread control loop isn't running!"); @@ -1674,9 +1681,39 @@ } #endif + if (mGraph->mForceShutdownTicket) { + // Avoid waiting forever for a callback driver to shut down + // synchronously. Reports are that some 3rd-party audio drivers + // occasionally hang in shutdown (both for us and Chrome). + mTimer = do_CreateInstance(NS_TIMER_CONTRACTID); + if (!mTimer) { + return NS_ERROR_FAILURE; + } + mTimer->InitWithCallback(this, + MediaStreamGraph::AUDIO_CALLBACK_DRIVER_SHUTDOWN_TIMEOUT, + nsITimer::TYPE_ONE_SHOT); + } + mGraph->mDriver->Shutdown(); // This will wait until it's shutdown since // we'll start tearing down the graph after this + // We may be one of several graphs. Drop ticket to eventually unblock shutdown. + if (mTimer && !mGraph->mForceShutdownTicket) { + MOZ_ASSERT(false, + "AudioCallbackDriver took too long to shut down and we let shutdown" + " continue - freezing and leaking"); + + // The timer fired, so we may be deeper in shutdown now. Block any further + // teardown and just leak, for safety. + return NS_OK; + } + mTimer = nullptr; + mGraph->mForceShutdownTicket = nullptr; + + // We can't block past the final LIFECYCLE_WAITING_FOR_STREAM_DESTRUCTION + // stage, since completion of that stage requires all streams to be freed, + // which requires shutdown to proceed. + // mGraph's thread is not running so it's OK to do whatever here if (mGraph->IsEmpty()) { // mGraph is no longer needed, so delete it. @@ -1700,10 +1737,30 @@ } return NS_OK; } + + NS_IMETHOD Notify(nsITimer* aTimer) override + { + // Sigh, driver took too long to shut down. Stop blocking system + // shutdown and hope all is well. Shutdown of this graph will proceed + // if the driver eventually comes back. + NS_ASSERTION(!(mGraph->mForceShutdownTicket), + "AudioCallbackDriver took too long to shut down - probably hung"); + + mGraph->mForceShutdownTicket = nullptr; + return NS_OK; + } + private: + ~MediaStreamGraphShutDownRunnable() {} + + nsCOMPtr mTimer; RefPtr mGraph; }; +NS_IMPL_ISUPPORTS_INHERITED(MediaStreamGraphShutDownRunnable, Runnable, nsITimerCallback) + + + class MediaStreamGraphStableStateRunnable : public Runnable { public: explicit MediaStreamGraphStableStateRunnable(MediaStreamGraphImpl* aGraph, @@ -1743,14 +1800,6 @@ } }; -class MediaStreamGraphShutdownObserver final : public nsIObserver -{ - ~MediaStreamGraphShutdownObserver() {} -public: - NS_DECL_ISUPPORTS - NS_DECL_NSIOBSERVER -}; - } // namespace void @@ -3339,26 +3388,6 @@ mSelfRef = nullptr; } -NS_IMPL_ISUPPORTS(MediaStreamGraphShutdownObserver, nsIObserver) - -static bool gShutdownObserverRegistered = false; - -NS_IMETHODIMP -MediaStreamGraphShutdownObserver::Observe(nsISupports *aSubject, - const char *aTopic, - const char16_t *aData) -{ - if (strcmp(aTopic, NS_XPCOM_SHUTDOWN_OBSERVER_ID) == 0) { - for (auto iter = gGraphs.Iter(); !iter.Done(); iter.Next()) { - MediaStreamGraphImpl* graph = iter.UserData(); - graph->ForceShutDown(); - } - nsContentUtils::UnregisterShutdownObserver(this); - gShutdownObserverRegistered = false; - } - return NS_OK; -} - MediaStreamGraph* MediaStreamGraph::GetInstance(MediaStreamGraph::GraphDriverType aGraphDriverRequested, dom::AudioChannel aChannel) @@ -3369,9 +3398,39 @@ MediaStreamGraphImpl* graph = nullptr; if (!gGraphs.Get(channel, &graph)) { - if (!gShutdownObserverRegistered) { - gShutdownObserverRegistered = true; - nsContentUtils::RegisterShutdownObserver(new MediaStreamGraphShutdownObserver()); + if (!gMediaStreamGraphShutdownBlocker) { + + class Blocker : public media::ShutdownBlocker + { + public: + Blocker() + : media::ShutdownBlocker(NS_LITERAL_STRING( + "MediaStreamGraph shutdown: blocking on msg thread")) + {} + + NS_IMETHOD + BlockShutdown(nsIAsyncShutdownClient* aProfileBeforeChange) override + { + // Distribute the global async shutdown blocker in a ticket. If there + // are zero graphs then shutdown is unblocked when we go out of scope. + RefPtr ticket = + new MediaStreamGraphImpl::ShutdownTicket(gMediaStreamGraphShutdownBlocker.get()); + gMediaStreamGraphShutdownBlocker = nullptr; + + for (auto iter = gGraphs.Iter(); !iter.Done(); iter.Next()) { + iter.UserData()->ForceShutDown(ticket); + } + return NS_OK; + } + }; + + gMediaStreamGraphShutdownBlocker = new Blocker(); + nsCOMPtr barrier = MediaStreamGraphImpl::GetShutdownBarrier(); + nsresult rv = barrier-> + AddBlocker(gMediaStreamGraphShutdownBlocker, + NS_LITERAL_STRING(__FILE__), __LINE__, + NS_LITERAL_STRING("MediaStreamGraph shutdown")); + MOZ_RELEASE_ASSERT(NS_SUCCEEDED(rv)); } CubebUtils::InitPreferredSampleRate(); @@ -3419,7 +3478,7 @@ // Start the graph, but don't produce anything graph->StartNonRealtimeProcessing(0); } - graph->ForceShutDown(); + graph->ForceShutDown(nullptr); } NS_IMPL_ISUPPORTS(MediaStreamGraphImpl, nsIMemoryReporter) diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/media/MediaStreamGraph.h thunderbird-49.0~b1+build5/mozilla/dom/media/MediaStreamGraph.h --- thunderbird-49.0~b1+build4/mozilla/dom/media/MediaStreamGraph.h 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/media/MediaStreamGraph.h 2016-09-02 05:35:05.000000000 +0000 @@ -1482,6 +1482,8 @@ SYSTEM_THREAD_DRIVER, OFFLINE_THREAD_DRIVER }; + static const uint32_t AUDIO_CALLBACK_DRIVER_SHUTDOWN_TIMEOUT = 20*1000; + // Main thread only static MediaStreamGraph* GetInstance(GraphDriverType aGraphDriverRequested, dom::AudioChannel aChannel); diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/media/MediaStreamGraphImpl.h thunderbird-49.0~b1+build5/mozilla/dom/media/MediaStreamGraphImpl.h --- thunderbird-49.0~b1+build4/mozilla/dom/media/MediaStreamGraphImpl.h 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/media/MediaStreamGraphImpl.h 2016-09-02 05:35:05.000000000 +0000 @@ -15,6 +15,7 @@ #include "nsIMemoryReporter.h" #include "nsIThread.h" #include "nsIRunnable.h" +#include "nsIAsyncShutdown.h" #include "Latency.h" #include "mozilla/UniquePtr.h" #include "mozilla/WeakPtr.h" @@ -144,13 +145,48 @@ */ void AppendMessage(UniquePtr aMessage); + // Shutdown helpers. + + static already_AddRefed + GetShutdownBarrier() + { + nsCOMPtr svc = services::GetAsyncShutdown(); + MOZ_RELEASE_ASSERT(svc); + + nsCOMPtr barrier; + nsresult rv = svc->GetProfileBeforeChange(getter_AddRefs(barrier)); + if (!barrier) { + // We are probably in a content process. We need to do cleanup at + // XPCOM shutdown in leakchecking builds. + rv = svc->GetXpcomWillShutdown(getter_AddRefs(barrier)); + } + MOZ_RELEASE_ASSERT(NS_SUCCEEDED(rv)); + MOZ_RELEASE_ASSERT(barrier); + return barrier.forget(); + } + + class ShutdownTicket final + { + public: + explicit ShutdownTicket(nsIAsyncShutdownBlocker* aBlocker) : mBlocker(aBlocker) {} + NS_INLINE_DECL_REFCOUNTING(ShutdownTicket) + private: + ~ShutdownTicket() + { + nsCOMPtr barrier = GetShutdownBarrier(); + barrier->RemoveBlocker(mBlocker); + } + + nsCOMPtr mBlocker; + }; + /** * Make this MediaStreamGraph enter forced-shutdown state. This state * will be noticed by the media graph thread, which will shut down all streams * and other state controlled by the media graph thread. * This is called during application shutdown. */ - void ForceShutDown(); + void ForceShutDown(ShutdownTicket* aShutdownTicket); /** * Called before the thread runs. @@ -717,6 +753,12 @@ * True when we need to do a forced shutdown during application shutdown. */ bool mForceShutDown; + + /** + * Drop this reference during shutdown to unblock shutdown. + **/ + RefPtr mForceShutdownTicket; + /** * True when we have posted an event to the main thread to run * RunInStableState() and the event hasn't run yet. diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/media/ogg/OggWriter.cpp thunderbird-49.0~b1+build5/mozilla/dom/media/ogg/OggWriter.cpp --- thunderbird-49.0~b1+build4/mozilla/dom/media/ogg/OggWriter.cpp 2016-08-26 06:25:45.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/media/ogg/OggWriter.cpp 2016-09-02 05:35:05.000000000 +0000 @@ -61,14 +61,17 @@ PROFILER_LABEL("OggWriter", "WriteEncodedTrack", js::ProfileEntry::Category::OTHER); - for (uint32_t i = 0; i < aData.GetEncodedFrames().Length(); i++) { + uint32_t len = aData.GetEncodedFrames().Length(); + for (uint32_t i = 0; i < len; i++) { if (aData.GetEncodedFrames()[i]->GetFrameType() != EncodedFrame::OPUS_AUDIO_FRAME) { LOG("[OggWriter] wrong encoded data type!"); return NS_ERROR_FAILURE; } + // only pass END_OF_STREAM on the last frame! nsresult rv = WriteEncodedData(aData.GetEncodedFrames()[i]->GetFrameData(), aData.GetEncodedFrames()[i]->GetDuration(), + i < len-1 ? (aFlags & ~ContainerWriter::END_OF_STREAM) : aFlags); if (NS_FAILED(rv)) { LOG("%p Failed to WriteEncodedTrack!", this); diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/media/platforms/wmf/WMFVideoMFTManager.cpp thunderbird-49.0~b1+build5/mozilla/dom/media/platforms/wmf/WMFVideoMFTManager.cpp --- thunderbird-49.0~b1+build4/mozilla/dom/media/platforms/wmf/WMFVideoMFTManager.cpp 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/media/platforms/wmf/WMFVideoMFTManager.cpp 2016-09-02 05:35:05.000000000 +0000 @@ -164,7 +164,7 @@ StaticAutoPtr sD3D9BlacklistingCache; // If a blacklisted DLL is found, return its information, otherwise "". -static const nsACString& +static const nsCString& FindDXVABlacklistedDLL(StaticAutoPtr& aDLLBlacklistingCache, const char* aDLLBlacklistPrefName) { @@ -278,13 +278,13 @@ return aDLLBlacklistingCache->mBlacklistedDLL; } -static const nsACString& +static const nsCString& FindD3D11BlacklistedDLL() { return FindDXVABlacklistedDLL(sD3D11BlacklistingCache, "media.wmf.disable-d3d11-for-dlls"); } -static const nsACString& +static const nsCString& FindD3D9BlacklistedDLL() { return FindDXVABlacklistedDLL(sD3D9BlacklistingCache, "media.wmf.disable-d3d9-for-dlls"); @@ -303,10 +303,10 @@ nsCString secondFailureReason; if (mBackend == LayersBackend::LAYERS_D3D11 && MediaPrefs::PDMWMFAllowD3D11() && IsWin8OrLater()) { - const nsACString& blacklistedDLL = FindD3D11BlacklistedDLL(); + const nsCString& blacklistedDLL = FindD3D11BlacklistedDLL(); if (!blacklistedDLL.IsEmpty()) { failureReason->AppendPrintf("D3D11 blacklisted with DLL %s", - blacklistedDLL); + blacklistedDLL.get()); } else { mDXVA2Manager = DXVA2Manager::CreateD3D11DXVA(*failureReason); if (mDXVA2Manager) { @@ -319,10 +319,10 @@ mFailureReason.Append(NS_LITERAL_CSTRING("; ")); } - const nsACString& blacklistedDLL = FindD3D9BlacklistedDLL(); + const nsCString& blacklistedDLL = FindD3D9BlacklistedDLL(); if (!blacklistedDLL.IsEmpty()) { mFailureReason.AppendPrintf("D3D9 blacklisted with DLL %s", - blacklistedDLL); + blacklistedDLL.get()); } else { mDXVA2Manager = DXVA2Manager::CreateD3D9DXVA(*failureReason); // Make sure we include the messages from both attempts (if applicable). diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/media/systemservices/LoadManager.h thunderbird-49.0~b1+build5/mozilla/dom/media/systemservices/LoadManager.h --- thunderbird-49.0~b1+build4/mozilla/dom/media/systemservices/LoadManager.h 2016-08-26 06:25:45.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/media/systemservices/LoadManager.h 2016-09-02 05:35:05.000000000 +0000 @@ -7,7 +7,6 @@ #define _LOADMANAGER_H_ #include "LoadMonitor.h" -#include "mozilla/WeakPtr.h" #include "mozilla/StaticPtr.h" #include "mozilla/TimeStamp.h" #include "mozilla/Services.h" @@ -24,15 +23,12 @@ class LoadManagerSingleton : public LoadNotificationCallback, public webrtc::CPULoadStateCallbackInvoker, public webrtc::CpuOveruseObserver, - public SupportsWeakPtr, public nsIObserver { public: static LoadManagerSingleton* Get(); - MOZ_DECLARE_WEAKREFERENCE_TYPENAME(LoadManagerSingleton) - NS_DECL_THREADSAFE_ISUPPORTS NS_DECL_NSIOBSERVER @@ -90,31 +86,23 @@ void AddObserver(webrtc::CPULoadStateObserver * aObserver) override { - if (mManager) { - mManager->AddObserver(aObserver); - } + mManager->AddObserver(aObserver); } void RemoveObserver(webrtc::CPULoadStateObserver * aObserver) override { - if (mManager) { - mManager->RemoveObserver(aObserver); - } + mManager->RemoveObserver(aObserver); } void OveruseDetected() override { - if (mManager) { - mManager->OveruseDetected(); - } + mManager->OveruseDetected(); } void NormalUsage() override { - if (mManager) { - mManager->NormalUsage(); - } + mManager->NormalUsage(); } private: - WeakPtr mManager; + RefPtr mManager; }; } //namespace diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/media/wave/WaveDemuxer.cpp thunderbird-49.0~b1+build5/mozilla/dom/media/wave/WaveDemuxer.cpp --- thunderbird-49.0~b1+build4/mozilla/dom/media/wave/WaveDemuxer.cpp 2016-08-26 06:25:45.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/media/wave/WaveDemuxer.cpp 2016-09-02 05:35:05.000000000 +0000 @@ -112,8 +112,6 @@ uint32_t aChunkName = mHeaderParser.GiveHeader().ChunkName(); uint32_t aChunkSize = mHeaderParser.GiveHeader().ChunkSize(); - aChunkSize += aChunkSize % 2; - if (aChunkName == FRMT_CODE) { if (!FmtChunkParserInit()) { return false; @@ -134,7 +132,8 @@ } break; } else { - mOffset += aChunkSize; // Skip other irrelevant chunks. + // Wave files are 2-byte aligned so we need to round up + mOffset += (aChunkSize + 1) & ~1; // Skip other irrelevant chunks. } mHeaderParser.Reset(); } diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/media/webrtc/MediaEngineWebRTCAudio.cpp thunderbird-49.0~b1+build5/mozilla/dom/media/webrtc/MediaEngineWebRTCAudio.cpp --- thunderbird-49.0~b1+build4/mozilla/dom/media/webrtc/MediaEngineWebRTCAudio.cpp 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/media/webrtc/MediaEngineWebRTCAudio.cpp 2016-09-02 05:35:05.000000000 +0000 @@ -780,12 +780,8 @@ if (mState != kStarted) return; - uint32_t len = mSources.Length(); - for (uint32_t i = 0; i < len; i++) { - MOZ_ASSERT(!isStereo); - InsertInGraph(audio10ms, length, 1); - } - + MOZ_ASSERT(!isStereo); + InsertInGraph(audio10ms, length, 1); return; } diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/plugins/ipc/PluginModuleParent.cpp thunderbird-49.0~b1+build5/mozilla/dom/plugins/ipc/PluginModuleParent.cpp --- thunderbird-49.0~b1+build4/mozilla/dom/plugins/ipc/PluginModuleParent.cpp 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/plugins/ipc/PluginModuleParent.cpp 2016-09-02 05:35:05.000000000 +0000 @@ -2651,6 +2651,7 @@ InfallibleTArray& values, NPSavedData* saved, NPError* error) { + MOZ_ASSERT(names.Length() == values.Length()); if (mPluginName.IsEmpty()) { GetPluginDetails(); InitQuirksModes(nsDependentCString(pluginType)); @@ -2676,6 +2677,18 @@ new PluginInstanceParent(this, instance, strPluginType, mNPNIface); if (mIsFlashPlugin) { + // In Bug 1287588, we found out that if the salign attribute is before + // the scale attribute in embed parameters, flash objects render + // incorrectly. This is most likely due to an order of operations + // problem in the plugin itself. Bug 1264270 changes the order in which + // parameters were passed, causing this bug to trigger on pages that + // formerly worked. In order to keep things working the way they were in + // Firefox <= 48, we reverse the order of parameters, making sure it + // happens before we possibly appends more parameters. This should keep + // parameters in the same order as prior versions. + std::reverse(names.begin(), names.end()); + std::reverse(values.begin(), values.end()); + parentInstance->InitMetadata(strPluginType, srcAttribute); #ifdef XP_WIN bool supportsAsyncRender = false; diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/security/nsCSPContext.cpp thunderbird-49.0~b1+build5/mozilla/dom/security/nsCSPContext.cpp --- thunderbird-49.0~b1+build4/mozilla/dom/security/nsCSPContext.cpp 2016-08-26 06:25:45.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/security/nsCSPContext.cpp 2016-09-02 05:36:11.000000000 +0000 @@ -322,7 +322,8 @@ { *outBlockAllMixedContent = false; for (uint32_t i = 0; i < mPolicies.Length(); i++) { - if (mPolicies[i]->hasDirective(nsIContentSecurityPolicy::BLOCK_ALL_MIXED_CONTENT)) { + if (!mPolicies[i]->getReportOnlyFlag() && + mPolicies[i]->hasDirective(nsIContentSecurityPolicy::BLOCK_ALL_MIXED_CONTENT)) { *outBlockAllMixedContent = true; return NS_OK; } diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/security/test/csp/file_block_all_mcb.sjs thunderbird-49.0~b1+build5/mozilla/dom/security/test/csp/file_block_all_mcb.sjs --- thunderbird-49.0~b1+build4/mozilla/dom/security/test/csp/file_block_all_mcb.sjs 2016-08-26 06:25:45.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/security/test/csp/file_block_all_mcb.sjs 2016-09-02 05:35:05.000000000 +0000 @@ -28,6 +28,23 @@ "" + ""; +// We have to use this special code fragment, in particular '?nocache' to trigger an +// actual network load rather than loading the image from the cache. +const BODY_CSPRO = + "" + + "" + + "" + + "" + + ""; + function handleRequest(request, response) { // avoid confusing cache behaviors @@ -47,6 +64,12 @@ response.write(HEAD + BODY); return; } + if (queryString === "cspro-block") { + // CSP RO is not supported in meta tag, let's use the header + response.setHeader("Content-Security-Policy-Report-Only", "block-all-mixed-content", false); + response.write(HEAD + BODY_CSPRO); + return; + } // we should never get here but just in case return something unexpected response.write("do'h"); diff -Nru thunderbird-49.0~b1+build4/mozilla/dom/security/test/csp/test_block_all_mixed_content.html thunderbird-49.0~b1+build5/mozilla/dom/security/test/csp/test_block_all_mixed_content.html --- thunderbird-49.0~b1+build4/mozilla/dom/security/test/csp/test_block_all_mixed_content.html 2016-08-26 06:25:45.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/dom/security/test/csp/test_block_all_mixed_content.html 2016-09-02 05:35:05.000000000 +0000 @@ -56,6 +56,11 @@ expected: "img-blocked", description: "(csp-block) block-all-mixed content should block insecure cache loads" }, + { // Test 5 + query: "cspro-block", + expected: "img-loaded", + description: "(cspro-block) block-all-mixed in report only mode should not block" + }, ]; var curTest; diff -Nru thunderbird-49.0~b1+build4/mozilla/gfx/2d/DrawTargetCairo.cpp thunderbird-49.0~b1+build5/mozilla/gfx/2d/DrawTargetCairo.cpp --- thunderbird-49.0~b1+build4/mozilla/gfx/2d/DrawTargetCairo.cpp 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/gfx/2d/DrawTargetCairo.cpp 2016-09-02 05:35:06.000000000 +0000 @@ -731,7 +731,8 @@ } } #endif - if (cairo_surface_get_type(surf) == CAIRO_SURFACE_TYPE_IMAGE) { + if (cairo_surface_get_type(surf) == CAIRO_SURFACE_TYPE_IMAGE && + cairo_surface_status(surf) == CAIRO_STATUS_SUCCESS) { PointDouble offset; cairo_surface_get_device_offset(target, &offset.x, &offset.y); // verify the device offset can be converted to integers suitable for a bounds rect diff -Nru thunderbird-49.0~b1+build4/mozilla/gfx/layers/apz/src/APZCTreeManager.cpp thunderbird-49.0~b1+build5/mozilla/gfx/layers/apz/src/APZCTreeManager.cpp --- thunderbird-49.0~b1+build4/mozilla/gfx/layers/apz/src/APZCTreeManager.cpp 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/gfx/layers/apz/src/APZCTreeManager.cpp 2016-09-02 05:35:06.000000000 +0000 @@ -499,6 +499,9 @@ aState.mPaintLogger.LogTestData(aMetrics.GetScrollId(), "isRootContent", true); } + // Note that the async scroll offset is in ParentLayer pixels + aState.mPaintLogger.LogTestData(aMetrics.GetScrollId(), "asyncScrollOffset", + apzc->GetCurrentAsyncScrollOffset(AsyncPanZoomController::NORMAL)); } if (newApzc) { diff -Nru thunderbird-49.0~b1+build4/mozilla/gfx/layers/apz/src/AsyncPanZoomController.cpp thunderbird-49.0~b1+build5/mozilla/gfx/layers/apz/src/AsyncPanZoomController.cpp --- thunderbird-49.0~b1+build4/mozilla/gfx/layers/apz/src/AsyncPanZoomController.cpp 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/gfx/layers/apz/src/AsyncPanZoomController.cpp 2016-09-02 05:36:11.000000000 +0000 @@ -2817,16 +2817,16 @@ return listener ? listener->GetLastTouchIdentifier() : -1; } -void AsyncPanZoomController::RequestContentRepaint() { +void AsyncPanZoomController::RequestContentRepaint(bool aUserAction) { // Reinvoke this method on the main thread if it's not there already. It's // important to do this before the call to CalculatePendingDisplayPort, so // that CalculatePendingDisplayPort uses the most recent available version of // mFrameMetrics, just before the paint request is dispatched to content. if (!NS_IsMainThread()) { // use the local variable to resolve the function overload. - auto func = static_cast + auto func = static_cast (&AsyncPanZoomController::RequestContentRepaint); - NS_DispatchToMainThread(NewRunnableMethod(this, func)); + NS_DispatchToMainThread(NewRunnableMethod(this, func, aUserAction)); return; } @@ -2837,6 +2837,7 @@ mFrameMetrics.SetDisplayPortMargins(CalculatePendingDisplayPort(mFrameMetrics, velocity)); mFrameMetrics.SetUseDisplayPortMargins(true); mFrameMetrics.SetPaintRequestTime(TimeStamp::Now()); + mFrameMetrics.SetRepaintDrivenByUserAction(aUserAction); RequestContentRepaint(mFrameMetrics, velocity); } @@ -2897,6 +2898,8 @@ } } + MOZ_ASSERT(aFrameMetrics.GetScrollUpdateType() == FrameMetrics::eNone || + aFrameMetrics.GetScrollUpdateType() == FrameMetrics::eUserAction); controller->RequestContentRepaint(aFrameMetrics); mExpectedGeckoMetrics = aFrameMetrics; mLastPaintRequestMetrics = aFrameMetrics; @@ -3222,6 +3225,20 @@ APZC_LOG("%p NotifyLayersUpdated short-circuit\n", this); return; } + + // If the mFrameMetrics scroll offset is different from the last scroll offset + // that the main-thread sent us, then we know that the user has been doing + // something that triggers a scroll. This check is the APZ equivalent of the + // check on the main-thread at + // https://hg.mozilla.org/mozilla-central/file/97a52326b06a/layout/generic/nsGfxScrollFrame.cpp#l4050 + // There is code below (the use site of userScrolled) that prevents a restored- + // scroll-position update from overwriting a user scroll, again equivalent to + // how the main thread code does the same thing. + CSSPoint lastScrollOffset = mLastContentPaintMetadata.GetMetrics().GetScrollOffset(); + bool userScrolled = + !FuzzyEqualsAdditive(mFrameMetrics.GetScrollOffset().x, lastScrollOffset.x) || + !FuzzyEqualsAdditive(mFrameMetrics.GetScrollOffset().y, lastScrollOffset.y); + if (aLayerMetrics.GetScrollUpdateType() != FrameMetrics::ScrollOffsetUpdateType::ePending) { mLastContentPaintMetadata = aScrollMetadata; } @@ -3287,6 +3304,12 @@ bool scrollOffsetUpdated = aLayerMetrics.GetScrollOffsetUpdated() && (aLayerMetrics.GetScrollGeneration() != mFrameMetrics.GetScrollGeneration()); + if (scrollOffsetUpdated && userScrolled && + aLayerMetrics.GetScrollUpdateType() == FrameMetrics::ScrollOffsetUpdateType::eRestore) { + APZC_LOG("%p dropping scroll update of type eRestore because of user scroll\n", this); + scrollOffsetUpdated = false; + } + bool smoothScrollRequested = aLayerMetrics.GetDoSmoothScroll() && (aLayerMetrics.GetScrollGeneration() != mFrameMetrics.GetScrollGeneration()); @@ -3412,7 +3435,8 @@ } if (needContentRepaint) { - RequestContentRepaint(); + // This repaint request is not driven by a user action on the APZ side + RequestContentRepaint(false); } UpdateSharedCompositorFrameMetrics(); } @@ -3560,6 +3584,7 @@ CalculatePendingDisplayPort(endZoomToMetrics, velocity)); endZoomToMetrics.SetUseDisplayPortMargins(true); endZoomToMetrics.SetPaintRequestTime(TimeStamp::Now()); + endZoomToMetrics.SetRepaintDrivenByUserAction(true); if (NS_IsMainThread()) { RequestContentRepaint(endZoomToMetrics, velocity); } else { diff -Nru thunderbird-49.0~b1+build4/mozilla/gfx/layers/apz/src/AsyncPanZoomController.h thunderbird-49.0~b1+build5/mozilla/gfx/layers/apz/src/AsyncPanZoomController.h --- thunderbird-49.0~b1+build4/mozilla/gfx/layers/apz/src/AsyncPanZoomController.h 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/gfx/layers/apz/src/AsyncPanZoomController.h 2016-09-02 05:35:06.000000000 +0000 @@ -584,7 +584,7 @@ * from a non-main thread, it will redispatch itself to the main thread, and * use the latest metrics during the redispatch. */ - void RequestContentRepaint(); + void RequestContentRepaint(bool aUserAction = true); /** * Send the provided metrics to Gecko to trigger a repaint. This function diff -Nru thunderbird-49.0~b1+build4/mozilla/gfx/layers/apz/test/mochitest/mochitest.ini thunderbird-49.0~b1+build5/mozilla/gfx/layers/apz/test/mochitest/mochitest.ini --- thunderbird-49.0~b1+build4/mozilla/gfx/layers/apz/test/mochitest/mochitest.ini 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/gfx/layers/apz/test/mochitest/mochitest.ini 2016-09-02 05:35:06.000000000 +0000 @@ -43,6 +43,7 @@ [test_scroll_subframe_scrollbar.html] skip-if = (os == 'android') || (os == 'b2g') || (buildapp == 'mulet') # wheel events not supported on mobile; see bug 1164274 for mulet [test_frame_reconstruction.html] +[test_interrupted_reflow.html] [test_group_touchevents.html] # Windows touch injection doesn't work in automation, but this test can be run locally on a windows touch device. # On OS X we don't support touch events at all. diff -Nru thunderbird-49.0~b1+build4/mozilla/gfx/layers/apz/test/mochitest/test_interrupted_reflow.html thunderbird-49.0~b1+build5/mozilla/gfx/layers/apz/test/mochitest/test_interrupted_reflow.html --- thunderbird-49.0~b1+build4/mozilla/gfx/layers/apz/test/mochitest/test_interrupted_reflow.html 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/gfx/layers/apz/test/mochitest/test_interrupted_reflow.html 2016-09-02 05:36:11.000000000 +0000 @@ -0,0 +1,704 @@ + + + + + Test for bug 1292781 + + + + + + + + + +Mozilla Bug 1292781 +

+
+

The frame reconstruction should not leave this scrollframe in a bad state

+
+
+ this is the top of the scrollframe. +
this is a box
+
this is a box
+
this is a box
+
this is a box
+ this is near the top of the scrollframe. +
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+ this is near the bottom of the scrollframe. +
this is a box
+
this is a box
+
this is a box
+
this is a box
+
this is a box
+ this is the bottom of the scrollframe. +
+
+
+ +
+
+
+
diff -Nru thunderbird-49.0~b1+build4/mozilla/gfx/layers/apz/util/APZCCallbackHelper.cpp thunderbird-49.0~b1+build5/mozilla/gfx/layers/apz/util/APZCCallbackHelper.cpp
--- thunderbird-49.0~b1+build4/mozilla/gfx/layers/apz/util/APZCCallbackHelper.cpp	2016-08-26 06:26:49.000000000 +0000
+++ thunderbird-49.0~b1+build5/mozilla/gfx/layers/apz/util/APZCCallbackHelper.cpp	2016-09-02 05:35:06.000000000 +0000
@@ -66,15 +66,23 @@
 }
 
 static CSSPoint
-ScrollFrameTo(nsIScrollableFrame* aFrame, const CSSPoint& aPoint, bool& aSuccessOut)
+ScrollFrameTo(nsIScrollableFrame* aFrame, const FrameMetrics& aMetrics, bool& aSuccessOut)
 {
   aSuccessOut = false;
+  CSSPoint targetScrollPosition = aMetrics.GetScrollOffset();
 
   if (!aFrame) {
-    return aPoint;
+    return targetScrollPosition;
   }
 
-  CSSPoint targetScrollPosition = aPoint;
+  CSSPoint geckoScrollPosition = CSSPoint::FromAppUnits(aFrame->GetScrollPosition());
+
+  // If the repaint request was triggered due to a previous main-thread scroll
+  // offset update sent to the APZ, then we don't need to do another scroll here
+  // and we can just return.
+  if (!aMetrics.GetScrollOffsetUpdated()) {
+    return geckoScrollPosition;
+  }
 
   // If the frame is overflow:hidden on a particular axis, we don't want to allow
   // user-driven scroll on that axis. Simply set the scroll position on that axis
@@ -83,7 +91,6 @@
   // (by design). Note also that when we run into this case, even if both axes
   // have overflow:hidden, we want to set aSuccessOut to true, so that the displayport
   // follows the async scroll position rather than the gecko scroll position.
-  CSSPoint geckoScrollPosition = CSSPoint::FromAppUnits(aFrame->GetScrollPosition());
   if (aFrame->GetScrollbarStyles().mVertical == NS_STYLE_OVERFLOW_HIDDEN) {
     targetScrollPosition.y = geckoScrollPosition.y;
   }
@@ -129,7 +136,7 @@
   }
   bool scrollUpdated = false;
   CSSPoint apzScrollOffset = aMetrics.GetScrollOffset();
-  CSSPoint actualScrollOffset = ScrollFrameTo(sf, apzScrollOffset, scrollUpdated);
+  CSSPoint actualScrollOffset = ScrollFrameTo(sf, aMetrics, scrollUpdated);
 
   if (scrollUpdated) {
     if (aMetrics.IsScrollInfoLayer()) {
diff -Nru thunderbird-49.0~b1+build4/mozilla/gfx/layers/FrameMetrics.h thunderbird-49.0~b1+build5/mozilla/gfx/layers/FrameMetrics.h
--- thunderbird-49.0~b1+build4/mozilla/gfx/layers/FrameMetrics.h	2016-08-26 06:26:49.000000000 +0000
+++ thunderbird-49.0~b1+build5/mozilla/gfx/layers/FrameMetrics.h	2016-09-02 05:35:06.000000000 +0000
@@ -56,6 +56,14 @@
     ePending,       // The scroll offset was updated on the main thread, but not
                     // painted, so the layer texture data is still at the old
                     // offset.
+    eUserAction,    // In an APZ repaint request, this means the APZ generated
+                    // the scroll position based on user action (the alternative
+                    // is eNone which means it's just request a repaint because
+                    // it got a scroll update from the main thread).
+    eRestore,       // The scroll offset was updated by the main thread, but as
+                    // a restore from history or after a frame reconstruction.
+                    // In this case, APZ can ignore the offset change if the
+                    // user has done an APZ scroll already.
 
     eSentinel       // For IPC use only
   };
@@ -246,6 +254,11 @@
     mScrollUpdateType = ePending;
   }
 
+  void SetRepaintDrivenByUserAction(bool aUserAction)
+  {
+    mScrollUpdateType = aUserAction ? eUserAction : eNone;
+  }
+
 public:
   void SetPresShellResolution(float aPresShellResolution)
   {
@@ -353,6 +366,12 @@
     mScrollGeneration = aScrollGeneration;
   }
 
+  void SetScrollOffsetRestored(uint32_t aScrollGeneration)
+  {
+    mScrollUpdateType = eRestore;
+    mScrollGeneration = aScrollGeneration;
+  }
+
   void SetSmoothScrollOffsetUpdated(int32_t aScrollGeneration)
   {
     mDoSmoothScroll = true;
diff -Nru thunderbird-49.0~b1+build4/mozilla/gfx/thebes/gfxPlatform.cpp thunderbird-49.0~b1+build5/mozilla/gfx/thebes/gfxPlatform.cpp
--- thunderbird-49.0~b1+build4/mozilla/gfx/thebes/gfxPlatform.cpp	2016-08-26 06:26:49.000000000 +0000
+++ thunderbird-49.0~b1+build5/mozilla/gfx/thebes/gfxPlatform.cpp	2016-09-02 05:35:06.000000000 +0000
@@ -501,7 +501,10 @@
 
     mSkiaGlue = nullptr;
 
-    uint32_t canvasMask = BackendTypeBit(BackendType::CAIRO) | BackendTypeBit(BackendType::SKIA);
+    uint32_t canvasMask = BackendTypeBit(BackendType::CAIRO);
+#ifdef USE_SKIA
+    canvasMask |= BackendTypeBit(BackendType::SKIA);
+#endif
     uint32_t contentMask = BackendTypeBit(BackendType::CAIRO);
     InitBackendPrefs(canvasMask, BackendType::CAIRO,
                      contentMask, BackendType::CAIRO);
diff -Nru thunderbird-49.0~b1+build4/mozilla/ipc/chromium/src/base/pickle.cc thunderbird-49.0~b1+build5/mozilla/ipc/chromium/src/base/pickle.cc
--- thunderbird-49.0~b1+build4/mozilla/ipc/chromium/src/base/pickle.cc	2016-08-26 06:26:49.000000000 +0000
+++ thunderbird-49.0~b1+build5/mozilla/ipc/chromium/src/base/pickle.cc	2016-09-02 05:35:07.000000000 +0000
@@ -19,10 +19,6 @@
 
 #include "nsDebug.h"
 
-#if !defined(RELEASE_BUILD) || defined(DEBUG)
-#define SENTINEL_CHECKING
-#endif
-
 //------------------------------------------------------------------------------
 
 static_assert(MOZ_ALIGNOF(Pickle::memberAlignmentType) >= MOZ_ALIGNOF(uint32_t),
@@ -437,25 +433,19 @@
   return iter->iter_.AdvanceAcrossSegments(buffers_, AlignInt(length) - length);
 }
 
+#ifdef MOZ_PICKLE_SENTINEL_CHECKING
 bool Pickle::ReadSentinel(PickleIterator* iter, uint32_t sentinel) const {
-#ifdef SENTINEL_CHECKING
   uint32_t found;
   if (!ReadUInt32(iter, &found)) {
     return false;
   }
   return found == sentinel;
-#else
-  return true;
-#endif
 }
 
 bool Pickle::WriteSentinel(uint32_t sentinel) {
-#ifdef SENTINEL_CHECKING
   return WriteUInt32(sentinel);
-#else
-  return true;
-#endif
 }
+#endif
 
 void Pickle::EndRead(PickleIterator& iter) const {
   DCHECK(iter.iter_.Done());
diff -Nru thunderbird-49.0~b1+build4/mozilla/ipc/chromium/src/base/pickle.h thunderbird-49.0~b1+build5/mozilla/ipc/chromium/src/base/pickle.h
--- thunderbird-49.0~b1+build4/mozilla/ipc/chromium/src/base/pickle.h	2016-08-26 06:26:49.000000000 +0000
+++ thunderbird-49.0~b1+build5/mozilla/ipc/chromium/src/base/pickle.h	2016-09-02 05:35:07.000000000 +0000
@@ -17,6 +17,10 @@
 #include "mozilla/BufferList.h"
 #include "mozilla/mozalloc.h"
 
+#if !defined(RELEASE_BUILD) || defined(DEBUG)
+#define MOZ_PICKLE_SENTINEL_CHECKING
+#endif
+
 class Pickle;
 
 class PickleIterator {
@@ -109,8 +113,14 @@
   // Use it for reading the object sizes.
   MOZ_MUST_USE bool ReadLength(PickleIterator* iter, int* result) const;
 
-  MOZ_MUST_USE bool ReadSentinel(PickleIterator* iter, uint32_t sentinel) const;
-
+  MOZ_MUST_USE bool ReadSentinel(PickleIterator* iter, uint32_t sentinel) const
+#ifdef MOZ_PICKLE_SENTINEL_CHECKING
+    ;
+#else
+  {
+    return true;
+  }
+#endif
   void EndRead(PickleIterator& iter) const;
 
   // Methods for adding to the payload of the Pickle.  These values are
@@ -173,8 +183,14 @@
   bool WriteBytes(const void* data, uint32_t data_len,
                   uint32_t alignment = sizeof(memberAlignmentType));
 
-  bool WriteSentinel(uint32_t sentinel);
-
+  bool WriteSentinel(uint32_t sentinel)
+#ifdef MOZ_PICKLE_SENTINEL_CHECKING
+    ;
+#else
+  {
+    return true;
+  }
+#endif
   int32_t* GetInt32PtrForTest(uint32_t offset);
 
   void InputBytes(const char* data, uint32_t length);
diff -Nru thunderbird-49.0~b1+build4/mozilla/js/src/jit/IonCaches.cpp thunderbird-49.0~b1+build5/mozilla/js/src/jit/IonCaches.cpp
--- thunderbird-49.0~b1+build4/mozilla/js/src/jit/IonCaches.cpp	2016-08-26 06:25:48.000000000 +0000
+++ thunderbird-49.0~b1+build5/mozilla/js/src/jit/IonCaches.cpp	2016-09-02 05:35:08.000000000 +0000
@@ -1111,7 +1111,7 @@
 
     // Note: this may clobber the object register if it's used as scratch.
     if (obj != holder)
-        GeneratePrototypeGuards(cx, ion, masm, obj, holder, object, scratchReg, failures);
+        GeneratePrototypeGuards(cx, ion, masm, obj, holder, object, scratchReg, maybePopAndFail);
 
     // Guard on the holder's shape.
     Register holderReg = scratchReg;
diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/base/FrameLayerBuilder.cpp thunderbird-49.0~b1+build5/mozilla/layout/base/FrameLayerBuilder.cpp
--- thunderbird-49.0~b1+build4/mozilla/layout/base/FrameLayerBuilder.cpp	2016-08-26 06:26:49.000000000 +0000
+++ thunderbird-49.0~b1+build5/mozilla/layout/base/FrameLayerBuilder.cpp	2016-09-02 05:36:11.000000000 +0000
@@ -4863,11 +4863,10 @@
         // The clip can move asynchronously, so we can't rely on opaque parts
         // staying in the same place.
         clippedOpaque.SetEmpty();
-      }
-      data->mOpaqueRegion.Or(data->mOpaqueRegion, clippedOpaque);
-      if (e->mHideAllLayersBelow) {
+      } else if (e->mHideAllLayersBelow) {
         hideAll = true;
       }
+      data->mOpaqueRegion.Or(data->mOpaqueRegion, clippedOpaque);
     }
 
     if (e->mLayer->GetType() == Layer::TYPE_READBACK) {
diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/base/nsDisplayItemTypesList.h thunderbird-49.0~b1+build5/mozilla/layout/base/nsDisplayItemTypesList.h
--- thunderbird-49.0~b1+build4/mozilla/layout/base/nsDisplayItemTypesList.h	2016-08-26 06:25:49.000000000 +0000
+++ thunderbird-49.0~b1+build5/mozilla/layout/base/nsDisplayItemTypesList.h	2016-09-02 05:35:08.000000000 +0000
@@ -43,6 +43,7 @@
 DECLARE_DISPLAY_ITEM_TYPE(PLUGIN_READBACK)
 DECLARE_DISPLAY_ITEM_TYPE(PLUGIN_VIDEO)
 DECLARE_DISPLAY_ITEM_TYPE(PRINT_PLUGIN)
+DECLARE_DISPLAY_ITEM_TYPE(RANGE_FOCUS_RING)
 DECLARE_DISPLAY_ITEM_TYPE(REMOTE)
 DECLARE_DISPLAY_ITEM_TYPE(REMOTE_SHADOW)
 DECLARE_DISPLAY_ITEM_TYPE(RESOLUTION)
diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/base/nsDocumentViewer.cpp thunderbird-49.0~b1+build5/mozilla/layout/base/nsDocumentViewer.cpp
--- thunderbird-49.0~b1+build4/mozilla/layout/base/nsDocumentViewer.cpp	2016-08-26 06:26:49.000000000 +0000
+++ thunderbird-49.0~b1+build5/mozilla/layout/base/nsDocumentViewer.cpp	2016-09-02 05:35:08.000000000 +0000
@@ -3748,6 +3748,9 @@
   nsAutoPtr beforeAndAfterPrint(
     new nsPrintEventDispatcher(doc));
   NS_ENSURE_STATE(!GetIsPrinting());
+  // beforeprint event may have caused ContentViewer to be shutdown.
+  NS_ENSURE_STATE(mContainer);
+  NS_ENSURE_STATE(mDeviceContext);
   if (!mPrintEngine) {
     mPrintEngine = new nsPrintEngine();
 
diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/base/nsLayoutUtils.cpp thunderbird-49.0~b1+build5/mozilla/layout/base/nsLayoutUtils.cpp
--- thunderbird-49.0~b1+build4/mozilla/layout/base/nsLayoutUtils.cpp	2016-08-26 06:26:49.000000000 +0000
+++ thunderbird-49.0~b1+build5/mozilla/layout/base/nsLayoutUtils.cpp	2016-09-02 05:35:08.000000000 +0000
@@ -8901,10 +8901,15 @@
 
     // If the frame was scrolled since the last layers update, and by something
     // that is higher priority than APZ, we want to tell the APZ to update
-    // its scroll offset.
-    if (CanScrollOriginClobberApz(scrollableFrame->LastScrollOrigin())) {
+    // its scroll offset. We want to distinguish the case where the scroll offset
+    // was "restored" because in that case the restored scroll position should
+    // not overwrite a user-driven scroll.
+    if (scrollableFrame->LastScrollOrigin() == nsGkAtoms::restore) {
+      metrics.SetScrollOffsetRestored(scrollableFrame->CurrentScrollGeneration());
+    } else if (CanScrollOriginClobberApz(scrollableFrame->LastScrollOrigin())) {
       metrics.SetScrollOffsetUpdated(scrollableFrame->CurrentScrollGeneration());
     }
+
     nsIAtom* lastSmoothScrollOrigin = scrollableFrame->LastSmoothScrollOrigin();
     if (lastSmoothScrollOrigin) {
       metrics.SetSmoothScrollOffsetUpdated(scrollableFrame->CurrentScrollGeneration());
diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/base/nsPresContext.cpp thunderbird-49.0~b1+build5/mozilla/layout/base/nsPresContext.cpp
--- thunderbird-49.0~b1+build4/mozilla/layout/base/nsPresContext.cpp	2016-08-26 06:26:49.000000000 +0000
+++ thunderbird-49.0~b1+build5/mozilla/layout/base/nsPresContext.cpp	2016-09-02 05:35:08.000000000 +0000
@@ -2681,6 +2681,12 @@
     TimeStamp::Now() - mReflowStartTime > sInterruptTimeout &&
     HavePendingInputEvent() &&
     !IsChrome();
+
+  if (mPendingInterruptFromTest) {
+    mPendingInterruptFromTest = false;
+    mHasPendingInterrupt = true;
+  }
+
   if (mHasPendingInterrupt) {
 #ifdef NOISY_INTERRUPTIBLE_REFLOW
     printf("*** DETECTED pending interrupt (time=%lld)\n", PR_Now());
diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/base/nsPresContext.h thunderbird-49.0~b1+build5/mozilla/layout/base/nsPresContext.h
--- thunderbird-49.0~b1+build4/mozilla/layout/base/nsPresContext.h	2016-08-26 06:26:49.000000000 +0000
+++ thunderbird-49.0~b1+build5/mozilla/layout/base/nsPresContext.h	2016-09-02 05:35:08.000000000 +0000
@@ -1019,6 +1019,12 @@
    * ReflowStarted call. Cannot itself trigger an interrupt check.
    */
   bool HasPendingInterrupt() { return mHasPendingInterrupt; }
+  /**
+   * Sets a flag that will trip a reflow interrupt. This only bypasses the
+   * interrupt timeout and the pending event check; other checks such as whether
+   * interrupts are enabled and the interrupt check skipping still take effect.
+   */
+  void SetPendingInterruptFromTest() { mPendingInterruptFromTest = true; }
 
   /**
    * If we have a presshell, and if the given content's current
@@ -1318,6 +1324,7 @@
   mozilla::TimeStamp    mLastStyleUpdateForAllAnimations;
 
   unsigned              mHasPendingInterrupt : 1;
+  unsigned              mPendingInterruptFromTest : 1;
   unsigned              mInterruptsEnabled : 1;
   unsigned              mUseDocumentFonts : 1;
   unsigned              mUseDocumentColors : 1;
diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/forms/nsRangeFrame.cpp thunderbird-49.0~b1+build5/mozilla/layout/forms/nsRangeFrame.cpp
--- thunderbird-49.0~b1+build4/mozilla/layout/forms/nsRangeFrame.cpp	2016-08-26 06:25:49.000000000 +0000
+++ thunderbird-49.0~b1+build5/mozilla/layout/forms/nsRangeFrame.cpp	2016-09-02 05:35:09.000000000 +0000
@@ -193,7 +193,7 @@
                                  nsRegion *aInvalidRegion) override;
   virtual nsRect GetBounds(nsDisplayListBuilder* aBuilder, bool* aSnap) override;
   virtual void Paint(nsDisplayListBuilder* aBuilder, nsRenderingContext* aCtx) override;
-  NS_DISPLAY_DECL_NAME("RangeFocusRing", TYPE_OUTLINE)
+  NS_DISPLAY_DECL_NAME("RangeFocusRing", TYPE_RANGE_FOCUS_RING)
 };
 
 nsDisplayItemGeometry*
diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/generic/nsGfxScrollFrame.cpp thunderbird-49.0~b1+build5/mozilla/layout/generic/nsGfxScrollFrame.cpp
--- thunderbird-49.0~b1+build4/mozilla/layout/generic/nsGfxScrollFrame.cpp	2016-08-26 06:26:49.000000000 +0000
+++ thunderbird-49.0~b1+build5/mozilla/layout/generic/nsGfxScrollFrame.cpp	2016-09-02 05:35:08.000000000 +0000
@@ -2179,7 +2179,7 @@
 
   nsRect scrollRange = GetScrollRangeForClamping();
   mDestination = scrollRange.ClampPoint(aScrollPosition);
-  if (mDestination != aScrollPosition && aOrigin == nsGkAtoms::restore) {
+  if (mDestination != aScrollPosition && aOrigin == nsGkAtoms::restore && !PageIsStillLoading()) {
     // If we're doing a restore but the scroll position is clamped, promote
     // the origin from one that APZ can clobber to one that it can't clobber.
     aOrigin = nsGkAtoms::other;
diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/generic/test/file_scroll_position_restore.html thunderbird-49.0~b1+build5/mozilla/layout/generic/test/file_scroll_position_restore.html
--- thunderbird-49.0~b1+build4/mozilla/layout/generic/test/file_scroll_position_restore.html	2016-08-26 06:26:49.000000000 +0000
+++ thunderbird-49.0~b1+build5/mozilla/layout/generic/test/file_scroll_position_restore.html	2016-09-02 05:35:09.000000000 +0000
@@ -7,9 +7,9 @@
   
 	
 	
-		

Index of /pub/firefox/tinderbox-builds/mozilla-central-win32/

+

Index of /pub/firefox/tinderbox-builds/mozilla-inbound-win32/

- + @@ -18,8191 +18,111169 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + -
Type Name Size
Dir....
Dir1442444362/
Dir1442445380/
Dir1442446344/
Dir1442447004/
Dir1442448336/
Dir1442448442/
Dir1442558151/
Dir1442558812/
Dir1442871815/
Dir1442873979/
Dir1442874157/
Dir1442875117/
Dir1442875296/
Dir1442876558/
Dir1442876880/
Dir1442877182/
Dir1442877362/
Dir1442878623/
Dir1442878741/
Dir1442880422/
Dir1442880901/
Dir1442881382/
Dir1442882281/
Dir1442882641/
Dir1442883602/
Dir1442883724/
Dir1442888042/
Dir1442890741/
Dir1442891143/
Dir1442891586/
Dir1442896142/
Dir1442899442/
Dir1442901542/
Dir1442901602/
Dir1442905322/
Dir1442905686/
Dir1442906282/
Dir1442906704/
Dir1442907061/
Dir1442910655/
Dir1442916223/
Dir1442918223/
Dir1442919086/
Dir1442919309/
Dir1442923021/
Dir1442925721/
Dir1442926261/
Dir1442926921/
Dir1442927044/
Dir1442929501/
Dir1442932681/
Dir1442933703/
Dir1442934002/
Dir1442934157/
Dir1442934485/
Dir1442934722/
Dir1442934962/
Dir1442935272/
Dir1442935681/
Dir1442935922/
Dir1442936407/
Dir1442938321/
Dir1442938381/
Dir1442939222/
Dir1442940603/
Dir1442941623/
Dir1442941747/
Dir1442942042/
Dir1442945617/
Dir1442946155/
Dir1442946455/
Dir1442946874/
Dir1442946935/
Dir1442946997/
Dir1442948194/
Dir1442949034/
Dir1442949396/
Dir1442949754/
Dir1442950476/
Dir1442951198/
Dir1442957615/
Dir1442958334/
Dir1442958394/
Dir1442958638/
Dir1442961035/
Dir1442890443/1442961515/
Dir1442899830/1442962114/
Dir1442916124/1442962294/
Dir1442916902/1442962353/
Dir1442917224/1442963014/
Dir1442918523/1442963435/
Dir1442921412/1442964395/
Dir1442965059/1442965660/
Dir1442965178/1442967035/
Dir1442965365/1442967875/
Dir1442966977/1442968354/
Dir1443002550/1442968474/
Dir1443003818/1442968595/
Dir1443003999/1442968775/
Dir1443004441/1442969375/
Dir1443039257/1442970876/
Dir1443039557/1442971361/
Dir1443039798/1442971598/
Dir1443047297/1442975194/
Dir1443088817/1442976154/
Dir1443088945/1442977294/
Dir1443088951/1442977544/
Dir1443089138/1442978800/
Dir1443138136/1442979216/
Dir1443138437/1442983475/
Dir1443139096/1442985816/
Dir1443155596/1442986241/
Dir1443175326/1442987075/
Dir1443184337/1442987195/
Dir1443184637/1442987735/
Dir1443184817/1442989474/
Dir1443192936/1442989654/
Dir1443212911/1442990014/
Dir1443213395/1442990193/
Dir1443261736/1442990974/
Dir1443264094/1442991394/
Dir1443308603/1442992457/
Dir1443348180/1442992475/
Dir1443434526/1442992655/
Dir1443442139/1442993014/
Dir1443442384/1442994216/
Dir1443442678/1442996316/
Dir1443478164/1443005195/
Dir1443479845/1443005255/
Dir1443481284/1443006556/
Dir1443520344/1443008116/
Dir1443520643/1443009679/
Dir1443520885/1443013516/
Dir1443520945/1443013517/
Dir1443547591/1443014296/
Dir1443547707/1443015498/
Dir1443566229/1443016035/
Dir1443567427/1443016816/
Dir1443567956/1443018915/
Dir1443607351/1443020176/
Dir1443609908/1443021376/
Dir1443610148/1443021686/
Dir1443646046/1443023364/
Dir1443646230/1443025756/
Dir1443646466/1443026475/
Dir1443692847/1443026536/
Dir1443693445/1443028156/
Dir1443693756/1443028816/
Dir1443696026/1443030077/
Dir1443778957/1443031758/
Dir1443779497/1443031816/
Dir1443779857/1443031875/
Dir1443780124/1443033380/
Dir1443817236/1443033677/
Dir1443818017/1443034096/
Dir1443818556/1443036736/
Dir1443866545/1443039858/
Dir1443869136/1443040037/
Dir1443911977/1443041300/
Dir1443912636/1443041716/
Dir1443952931/1443044240/
Dir1443977676/1443046816/
Dir1443977856/1443047422/
Dir1444039056/1443051976/
Dir1444039116/1443053956/
Dir1444039326/1443054857/
Dir1444039409/1443056296/
Dir1444058976/1443057856/
Dir1444066242/1443058889/
Dir1444073556/1443060398/
Dir1444075358/1443065296/
Dir1444075836/1443066016/
Dir1444077013/1443066916/
Dir1444125116/1443067456/
Dir1444125357/1443067640/
Dir1444125751/1443067816/
Dir1444125828/1443067987/
Dir1444131031/1443071357/
Dir1444156115/1443072676/
Dir1444158514/1443075795/
Dir1444158935/1443076395/
Dir1444163401/1443076875/
Dir1444210955/1443077055/
Dir1444211320/1443077238/
Dir1444212125/1443077355/
Dir1444217432/1443078136/
Dir1444222360/1443078495/
Dir1444224214/1443086775/
Dir1444225953/1443087916/
Dir1444228259/1443089240/
Dir1444237114/1443090195/
Dir1444239012/1443092355/
Dir1444239162/1443093016/
Dir1444241174/1443094339/
Dir1444249845/1443094815/
Dir1444260630/1443095955/
Dir1444298012/1443100276/
Dir1444298552/1443101116/
Dir1444303812/1443103820/
Dir1444310861/1443103896/
Dir1444314649/1443105038/
Dir1444339698/1443105193/
Dir1444339760/1443105856/
Dir1444340118/1443107668/
Dir1444344139/1443108735/
Dir1444347018/1443108976/
Dir1444382507/1443110956/
Dir1444383466/1443114736/
Dir1444383827/1443117436/
Dir1444384950/1443118815/
Dir1444423127/1443121641/
Dir1444423187/1443128475/
Dir1444432607/1443128542/
Dir1444471354/1443128630/
Dir1444474011/1443128631/
Dir1444557749/1443128840/
Dir1444640547/1443128895/
Dir1444640837/1443129135/
Dir1444643893/1443129195/
Dir1444644372/1443129917/
Dir1444673292/1443132016/
Dir1444674553/1443133335/
Dir1444688334/1443135196/
Dir1444730396/1443135316/
Dir1444730458/1443135856/
Dir1444730514/1443136638/
Dir1444730545/1443137055/
Dir1444756830/1443140116/
Dir1444816943/1443140655/
Dir1444818621/1443141075/
Dir1444818799/1443145757/
Dir1444819640/1443145996/
Dir1444825818/1443146296/
Dir1444832361/1443147189/
Dir1444857089/1443147676/
Dir1444858850/1443149116/
Dir1444859991/1443159915/
Dir1444902530/1443161172/
Dir1444902648/1443161416/
Dir1444902829/1443161898/
Dir1444903353/1443162858/
Dir1444932936/1443163155/
Dir1444933115/1443166639/
Dir1444934135/1443168916/
Dir1444989748/1443174375/
Dir1444993832/1443174916/
Dir1444994251/1443175215/
Dir1444994309/1443177075/
Dir1444995000/1443179715/
Dir1445020653/1443180015/
Dir1445021612/1443182235/
Dir1445023653/1443183015/
Dir1445027542/1443184936/
Dir1445076144/1443185178/
Dir1445080291/1443188055/
Dir1445081404/1443188357/
Dir1445102373/1443190840/
Dir1445103008/1443191616/
Dir1445106032/1443192998/
Dir1445136999/1443194975/
Dir1445146208/1443195216/
Dir1445162570/1443195454/
Dir1445192371/1443195640/
Dir1445192428/1443196415/
Dir1445247092/1443196655/
Dir1445247333/1443197736/
Dir1445247572/1443203078/
Dir1445248947/1443203079/
Dir1445254208/1443203674/
Dir1445284648/1443203735/
Dir1445286616/1443205476/
Dir1445335997/1443205716/
Dir1445336011/1443205895/
Dir1445340609/1443206732/
Dir1445372699/1443207157/
Dir1445373325/1443207877/
Dir1445378083/1443207993/
Dir1445378439/1443208296/
Dir1445383915/1443209796/
Dir1445386861/1443210335/
Dir1445405760/1443210395/
Dir1445416226/1443210575/
Dir1445421601/1443210995/
Dir1445421732/1443211354/
Dir1445422148/1443211772/
Dir1445434441/1443211835/
Dir1445434940/1443212136/
Dir1445435425/1443212551/
Dir1445437959/1443214055/
Dir1445443637/1443214474/
Dir1445448661/1443215612/
Dir1445469661/1443216337/
Dir1445470202/1443217595/
Dir1445470217/1443225275/
Dir1445470679/1443229444/
Dir1445481074/1443230194/
Dir1445506579/1443238891/
Dir1445507040/1443252755/
Dir1445507249/1443253415/
Dir1445508346/1443256655/
Dir1445557102/1443272634/
Dir1445557578/1443285335/
Dir1445557886/1443291755/
Dir1445592571/1443306035/
Dir1445592868/1443331295/
Dir1445594565/1443332675/
Dir1445639192/1443335375/
Dir1445639912/1443340295/
Dir1445640461/1443345755/
Dir1445680968/1443353375/
Dir1445683652/1443365135/
Dir1445759672/1443367895/
Dir1445767468/1443382295/
Dir1445853332/1443387807/
Dir1445853392/1443390395/
Dir1445853633/1443390575/
Dir1445853862/1443396875/
Dir1445866885/1443397055/
Dir1445890883/1443397175/
Dir1445891485/1443400235/
Dir1445895309/1443401735/
Dir1445939300/1443402313/
Dir1445939600/1443403415/
Dir1445939841/1443403655/
Dir1445940159/1443406655/
Dir1445973511/1443407913/
Dir1445974532/1443411575/
Dir1445980353/1443413555/
Dir1446024993/1443413737/
Dir1446025177/1443415777/
Dir1446025537/1443416195/
Dir1446026672/1443416255/
Dir1446070115/1443416436/
Dir1446075755/1443419975/
Dir1446076895/1443423275/
Dir1446112978/1443430779/
Dir1446113621/1443430895/
Dir1446115722/1443431141/
Dir1446115842/1443434675/
Dir1446119188/1443435275/
Dir1446119547/1443439895/
Dir1446129686/1443441035/
Dir1446130647/1443441824/
Dir1446139407/1443442743/
Dir1446145046/1443444239/
Dir1446151827/1443445557/
Dir1446163490/1443445739/
Dir1446163692/1443446280/
Dir1446163999/1443447098/
Dir1446199356/1443448625/
Dir1446201869/1443448696/
Dir1446202050/1443448799/
Dir1446247051/1443449082/
Dir1446248193/1443449376/
Dir1446249271/1443451053/
Dir1446265253/1443452136/
Dir1446285727/1443453335/
Dir1446335032/1443456815/
Dir1446336112/1443467701/
Dir1446337313/1443467761/
Dir1446375823/1443467881/
Dir1446461406/1443467940/
Dir1446461526/1443468001/
Dir1446461826/1443468061/
Dir1446462161/1443468481/
Dir1446500525/1443468781/
Dir1446503226/1443469381/
Dir1446506046/1443469740/
Dir1446548313/1443469984/
Dir1446548374/1443470161/
Dir1446548493/1443470461/
Dir1446548568/1443470701/
Dir1446556174/1443471781/
Dir1446587493/1443476101/
Dir1446634715/1443476225/
Dir1446634836/1443476521/
Dir1446635077/1443476820/
Dir1446720815/1443477481/
Dir1446720996/1443477864/
Dir1446721178/1443479724/
Dir1446721473/1443480681/
Dir1446726608/1443481044/
Dir1446727175/1443481221/
Dir1446737445/1443481466/
Dir1446763955/1443481582/
Dir1446774033/1443481764/
Dir1446777942/1443481941/
Dir1446780674/1443482002/
Dir1446807863/1443482121/
Dir1446808475/1443482964/
Dir1446808895/1443483145/
Dir1446813002/1443484881/
Dir1446813936/1443485305/
Dir1446817055/1443485421/
Dir1446823960/1443486742/
Dir1446838233/1443489625/
Dir1446839012/1443490284/
Dir1446845432/1443490884/
Dir1446850775/1443491545/
Dir1446851075/1443492444/
Dir1446851435/1443492930/
Dir1446894279/1443493224/
Dir1446980657/1443493944/
Dir1447067057/1443494482/
Dir1447075775/1443499284/
Dir1447075895/1443499644/
Dir1447077396/1443500606/
Dir1447083220/1443501144/
Dir1447116572/1443502344/
Dir1447118610/1443505585/
Dir1447119151/1443505944/
Dir1447126313/1443507324/
Dir1447139615/1443508884/
Dir1447147837/1443509424/
Dir1447153113/1443510324/
Dir1447153232/1443511464/
Dir1447153325/1443512361/
Dir1447158602/1443514166/
Dir1447239727/1443519264/
Dir1447239865/1443519442/
Dir1447240170/1443520224/
Dir1447242214/1443522084/
Dir1447245010/1443523285/
Dir1447288485/1443524484/
Dir1447288966/1443527784/
Dir1447290527/1443527964/
Dir1447299048/1443531974/
Dir1447325806/1443532464/
Dir1447325927/1443533605/
Dir1447326107/1443535044/
Dir1447326158/1443537292/
Dir1447331402/1443537625/
Dir1447370020/1443537744/
Dir1447373078/1443538224/
Dir1447373435/1443539072/
Dir1447412132/1443539909/
Dir1447412568/1443540452/
Dir1447412852/1443540872/
Dir1447468232/1443541051/
Dir1447471889/1443541289/
Dir1447499044/1443542308/
Dir1447535310/1443542673/
Dir1447536213/1443543514/
Dir1447585480/1443544716/
Dir1447607553/1443545554/
Dir1447638813/1443546572/
Dir1447643551/1443548911/
Dir1447644871/1443549453/
Dir1447671154/1443550894/
Dir1447671728/1443551853/
Dir1447678894/1443552639/
Dir1447687834/1443554314/
Dir1447707696/1443556833/
Dir1447709405/1443558639/
Dir1447717207/1443558706/
Dir1447720223/1443558707/
Dir1447723331/1443558708/
Dir1447731208/1443558709/
Dir1447749965/1443558711/
Dir1447758065/1443558712/
Dir1447758162/1443558713/
Dir1447758665/1443558718/
Dir1447759687/1443558719/
Dir1447763402/1443558720/
Dir1447793885/1443558725/
Dir1447794661/1443558726/
Dir1447795326/1443558727/
Dir1447817795/1443558729/
Dir1447844552/1443558740/
Dir1447854444/1443558741/
Dir1447854564/1443558744/
Dir1447854684/1443558746/
Dir1447860662/1443558747/
Dir1447931044/1443558748/
Dir1447940301/1443558749/
Dir1447940722/1443558988/
Dir1447944806/1443558989/
Dir1447947096/1443558991/
Dir1447967412/1443558992/
Dir1447967831/1443558993/
Dir1447969632/1443558995/
Dir1447979447/1443558997/
Dir1447995394/1443558998/
Dir1448017347/1443558999/
Dir1448021553/1443559004/
Dir1448021614/1443559005/
Dir1448022602/1443559007/
Dir1448034217/1443559008/
Dir1448044230/1443559019/
Dir1448058513/1443559020/
Dir1448059056/1443559023/
Dir1448059351/1443559025/
Dir1448103752/1443559026/
Dir1448106632/1443559027/
Dir1448190150/1443559028/
Dir1448275947/1443559292/
Dir1448276188/1443562267/
Dir1448276557/1443563346/
Dir1448284166/1443566586/
Dir1448292739/1443567969/
Dir1448323830/1443568327/
Dir1448324971/1443568508/
Dir1448362652/1443570128/
Dir1448362771/1443570247/
Dir1448363153/1443570607/
Dir1448402132/1443571507/
Dir1448411671/1443572352/
Dir1448412811/1443573847/
Dir1448449351/1443574208/
Dir1448451511/1443577269/
Dir1448451631/1443577465/
Dir1448452291/1443579619/
Dir1448452352/1443580507/
Dir1448463571/1443580629/
Dir1448535369/1443580747/
Dir1448535490/1443580867/
Dir1448535746/1443581107/
Dir1448553130/1443581108/
Dir1448553250/1443581227/
Dir1448553310/1443581588/
Dir1448618552/1443582428/
Dir1448618771/1443582787/
Dir1448618951/1443584169/
Dir1448622151/1443587647/
Dir1448708550/1443591247/
Dir1448795039/1443593347/
Dir1448881348/1443595926/
Dir1448882913/1443596107/
Dir1448885843/1443596286/
Dir1448886039/1443596897/
Dir1448933436/1443597007/
Dir1448934274/1443597967/
Dir1448967573/1443599048/
Dir1448967693/1443599167/
Dir1448967746/1443602468/
Dir1448980054/1443607770/
Dir1449007712/1443607771/
Dir1449012059/1443607772/
Dir1449013440/1443607774/
Dir1449014882/1443607775/
Dir1449054130/1443607776/
Dir1449065722/1443607777/
Dir1449065904/1443607780/
Dir1449066142/1443607781/
Dir1449085342/1443607782/
Dir1449086031/1443607783/
Dir1449097222/1443607787/
Dir1449140302/1443607788/
Dir1449140362/1443607789/
Dir1449140546/1443607790/
Dir1449140665/1443607802/
Dir1449149721/1443607803/
Dir1449158504/1443607805/
Dir1449186342/1443607808/
Dir1449186882/1443607810/
Dir1449187697/1443608129/
Dir1449226576/1443608130/
Dir1449226637/1443608131/
Dir1449226817/1443608134/
Dir1449226928/1443608135/
Dir1449269965/1443608137/
Dir1449313328/1443608140/
Dir1449317200/1443608142/
Dir1449346228/1443608147/
Dir1449347009/1443608148/
Dir1449357629/1443608149/
Dir1449399888/1443608162/
Dir1449485611/1443608163/
Dir1449486130/1443608164/
Dir1449494249/1443608169/
Dir1449541943/1443608170/
Dir1449572485/1443608172/
Dir1449572532/1443608444/
Dir1449609397/1443608445/
Dir1449609520/1443608446/
Dir1449609955/1443608449/
Dir1449635440/1443608450/
Dir1449658601/1443608452/
Dir1449658948/1443608455/
Dir1449659033/1443608456/
Dir1449683321/1443608457/
Dir1449683700/1443608458/
Dir1449699878/1443608462/
Dir1449699914/1443608463/
Dir1449745332/1443608464/
Dir1449745422/1443608476/
Dir1449745722/1443608477/
Dir1449829960/1443608478/
Dir1449830255/1443608479/
Dir1449830319/1443608484/
Dir1449831727/1443608485/
Dir1449837001/1443608487/
Dir1449897572/1443608763/
Dir1449897694/1443608764/
Dir1449901804/1443608765/
Dir1449918142/1443608766/
Dir1449922111/1443608768/
Dir1449925892/1443608770/
Dir1449934290/1443608771/
Dir1449968132/1443608773/
Dir1449977435/1443608774/
Dir1450004561/1443608775/
Dir1450074752/1443608776/
Dir1450085400/1443608780/
Dir1450090592/1443608781/
Dir1450090940/1443608782/
Dir1450096217/1443608784/
Dir1450124184/1443608796/
Dir1450124562/1443608799/
Dir1450128627/1443608801/
Dir1450137679/1443608802/
Dir1450139404/1443608803/
Dir1450177341/1443608804/
Dir1450177512/1443609368/
Dir1450178232/1443610867/
Dir1450182603/1443614048/
Dir1450187172/1443615786/
Dir1450193588/1443618368/
Dir1450222138/1443619747/
Dir1450222918/1443620524/
Dir1450223278/1443621367/
Dir1450263547/1443622526/
Dir1450263749/1443622647/
Dir1450263751/1443623008/
Dir1450349794/1443624331/
Dir1450349913/1443625528/
Dir1450350127/1443625672/
Dir1450355403/1443627213/
Dir1450365756/1443627445/
Dir1450365789/1443627927/
Dir1450397158/1443628108/
Dir1450398607/1443628588/
Dir1450436552/1443628767/
Dir1450447971/1443629906/
Dir1450448092/1443630387/
Dir1450448759/1443630687/
Dir1450522935/1443630989/
Dir1450527032/1443631467/
Dir1450528202/1443631767/
Dir1450609343/1443632546/
Dir1450694968/1443632794/
Dir1450695088/1443633688/
Dir1450695214/1443636747/
Dir1450695759/1443644908/
Dir1450699709/1443645508/
Dir1450701014/1443645747/
Dir1450726888/1443645806/
Dir1450726979/1443646166/
Dir1450733445/1443646768/
Dir1450780518/1443647367/
Dir1450781001/1443647488/
Dir1450781300/1443647549/
Dir1450782127/1443648088/
Dir1450787404/1443649167/
Dir1450868310/1443651448/
Dir1450868370/1443651927/
Dir1450868491/1443652168/
Dir1450868603/1443652290/
Dir1450873800/1443653008/
Dir1450954948/1443653966/
Dir1451041327/1443654266/
Dir1451092669/1443654688/
Dir1451093628/1443655048/
Dir1451094649/1443655049/
Dir1451127732/1443655527/
Dir1451131553/1443655833/
Dir1451214159/1443655885/
Dir1451294628/1443655949/
Dir1451294808/1443656368/
Dir1451300533/1443656668/
Dir1451386539/1443657745/
Dir1451386598/1443667587/
Dir1451386936/1443669148/
Dir1451472878/1443671907/
Dir1451473175/1443671967/
Dir1451473237/1443673107/
Dir1451473354/1443677847/
Dir1451523396/1443678207/
Dir1451525318/1443679107/
Dir1451525800/1443680547/
Dir1451559734/1443681028/
Dir1451646210/1443681328/
Dir1451689600/1443683252/
Dir1451690018/1443683906/
Dir1451694638/1443684991/
Dir1451697819/1443687508/
Dir1451732537/1443687868/
Dir1451736399/1443689608/
Dir1451791119/1443690211/
Dir1451818982/1443690625/
Dir1451904758/1443692306/
Dir1451904998/1443692487/
Dir1451905337/1443693568/
Dir1451910603/1443696148/
Dir1451991339/1443697468/
Dir1451991458/1443698188/
Dir1451991580/1443698488/
Dir1451991731/1443699207/
Dir1451997037/1443699867/
Dir1452038710/1443700408/
Dir1452040218/1443701189/
Dir1452040504/1443701788/
Dir1452051035/1443702747/
Dir1452078145/1443705628/
Dir1452088807/1443705808/
Dir1452091266/1443710068/
Dir1452091507/1443712222/
Dir1452091748/1443712223/
Dir1452094269/1443712224/
Dir1452163685/1443712225/
Dir1452163807/1443712292/
Dir1452163927/1443712293/
Dir1452164555/1443712294/
Dir1452169801/1443712297/
Dir1452206930/1443712298/
Dir1452213004/1443712299/
Dir1452213355/1443712300/
Dir1452215570/1443712301/
Dir1452227871/1443712306/
Dir1452250670/1443712307/
Dir1452250790/1443712309/
Dir1452250854/1443712310/
Dir1452251014/1443712312/
Dir1452256206/1443712315/
Dir1452262917/1443712316/
Dir1452267113/1443712317/
Dir1452293012/1443712319/
Dir1452299404/1443712323/
Dir1452337328/1443712324/
Dir1452343172/1443712325/
Dir1452353623/1443712326/
Dir1452368492/1443712328/
Dir1452368732/1443712332/
Dir1452369392/1443712334/
Dir1452375014/1443712335/
Dir1452423734/1443712336/
Dir1452469112/1443712343/
Dir1452469172/1443712344/
Dir1452469231/1443712345/
Dir1452472205/1443712348/
Dir1452510127/1443712605/
Dir1452510332/1443712606/
Dir1452510692/1443712607/
Dir1452510872/1443712660/
Dir1452595852/1443712661/
Dir1452596036/1443712664/
Dir1452596155/1443712665/
Dir1452596547/1443712667/
Dir1452682410/1443712670/
Dir1452682531/1443712671/
Dir1452682710/1443712672/
Dir1452682928/1443712673/
Dir1452688218/1443712677/
Dir1452710074/1443712678/
Dir1452720621/1443712683/
Dir1452723213/1443712684/
Dir1452734370/1443712687/
Dir1452734490/1443712690/
Dir1452734792/1443712691/
Dir1452735452/1443712692/
Dir1452742433/1443712697/
Dir1452768631/1443712698/
Dir1452768691/1443712701/
Dir1452769366/1443713309/
Dir1452774614/1443714568/
Dir1452780091/1443716246/
Dir1452780439/1443719366/
Dir1452785593/1443719488/
Dir1452800641/1443719548/
Dir1452819341/1443720928/
Dir1452828643/1443724408/
Dir1452853901/1443724468/
Dir1452854384/1443725428/
Dir1452854866/1443728128/
Dir1452855755/1443728188/
Dir1452861011/1443728368/
Dir1452862426/1443728966/
Dir1452866008/1443731788/
Dir1452871883/1443734619/
Dir1452883460/1443735278/
Dir1452893405/1443739718/
Dir1452898463/1443740137/
Dir1452899483/1443743137/
Dir1452904211/1443747759/
Dir1452942160/1443750458/
Dir1452945862/1443750765/
Dir1452947401/1443751058/
Dir1453028535/1443753758/
Dir1453059683/1443753878/
Dir1453060642/1443755258/
Dir1453061182/1443759578/
Dir1453066202/1443766358/
Dir1453104562/1443767738/
Dir1453115018/1443768938/
Dir1453122324/1443769178/
Dir1453122862/1443770078/
Dir1453123402/1443770558/
Dir1453131121/1443773438/
Dir1453201117/1443774518/
Dir1453201235/1443775598/
Dir1453201297/1443777938/
Dir1453201352/1443778779/
Dir1453206643/1443781598/
Dir1453275678/1443784060/
Dir1453287759/1443785919/
Dir1453299919/1443792772/
Dir1453300279/1443794558/
Dir1453300519/1443795594/
Dir1453322823/1443796358/
Dir1453372820/1443796957/
Dir1453373300/1443798363/
Dir1453373481/1443798639/
Dir1453374128/1443799420/
Dir1453391302/1443800440/
Dir1453414712/1443800919/
Dir1453422451/1443801877/
Dir1453425092/1443802538/
Dir1453426530/1443802897/
Dir1453460071/1443804696/
Dir1453460564/1443806678/
Dir1453460792/1443807339/
Dir1453505310/1443807518/
Dir1453547028/1443807759/
Dir1453552650/1443808238/
Dir1453578390/1443810338/
Dir1453600632/1443810518/
Dir1453601587/1443812677/
Dir1453601827/1443816818/
Dir1453633329/1443817961/
Dir1453669987/1443818498/
Dir1453718887/1443818619/
Dir1453719007/1443819851/
Dir1453719068/1443820418/
Dir1453719723/1443820419/
Dir1453730482/1443822039/
Dir1453730792/1443822518/
Dir1453735462/1443823359/
Dir1453756643/1443823780/
Dir1453759283/1443825159/
Dir1453805247/1443827320/
Dir1453805666/1443827860/
Dir1453806164/1443828261/
Dir1453892369/1443828262/
Dir1453892493/1443828263/
Dir1453892556/1443828318/
Dir1453978859/1443828319/
Dir1453978928/1443828320/
Dir1453979700/1443828322/
Dir1454027436/1443828323/
Dir1454032105/1443828324/
Dir1454064448/1443828329/
Dir1454064505/1443828330/
Dir1454065326/1443828331/
Dir1454101949/1443828335/
Dir1454103687/1443828337/
Dir1454151760/1443828338/
Dir1454174185/1443828342/
Dir1454174965/1443828343/
Dir1454202566/1443828344/
Dir1454238227/1443828346/
Dir1454263346/1443828349/
Dir1454291605/1443828350/
Dir1454291666/1443828351/
Dir1454317646/1443828353/
Dir1454324561/1443828356/
Dir1454326885/1443828357/
Dir1454337626/1443828358/
Dir1454337685/1443828359/
Dir1454410219/1443828486/
Dir1454410339/1443828487/
Dir1454410952/1443828490/
Dir1454497122/1443828541/
Dir1454497245/1443828542/
Dir1454497369/1443828543/
Dir1454583626/1443828545/
Dir1454583749/1443828546/
Dir1454583854/1443828548/
Dir1454642710/1443828550/
Dir1454669650/1443828551/
Dir1454670124/1443828552/
Dir1454725716/1443828553/
Dir1454726562/1443828557/
Dir1454756527/1443828558/
Dir1454814479/1443828559/
Dir1454814652/1443828563/
Dir1454843042/1443828564/
Dir1454887863/1443828565/
Dir1454899683/1443828570/
Dir1454929083/1443828571/
Dir1454929364/1443828573/
Dir1455013077/1443828577/
Dir1455015657/1443828578/
Dir1455015827/1443828579/
Dir1455015851/1443828580/
Dir1455101060/1443828795/
Dir1455101301/1443828796/
Dir1455102156/1443828797/
Dir1455116969/1443828851/
Dir1455117075/1443828852/
Dir1455187714/1443828853/
Dir1455187955/1443828855/
Dir1455188562/1443828856/
Dir1455200013/1443828857/
Dir1455206335/1443828858/
Dir1455216094/1443828861/
Dir1455274962/1443828862/
Dir1455277273/1443828863/
Dir1455286637/1443828865/
Dir1455293543/1443828867/
Dir1455361330/1443828868/
Dir1455419717/1443828869/
Dir1455420017/1443828870/
Dir1455447756/1443828872/
Dir1455534133/1443828873/
Dir1455534744/1443828874/
Dir1455534863/1443828875/
Dir1455619669/1443828879/
Dir1455620210/1443828880/
Dir1455620565/1443828881/
Dir1455706370/1443828885/
Dir1455706949/1443828886/
Dir1455707329/1443828888/
Dir1455716149/1443829108/
Dir1455719181/1443829109/
Dir1455729509/1443829110/
Dir1455736290/1443829170/
Dir1455793106/1443829171/
Dir1455793423/1443829172/
Dir1455793429/1443829174/
Dir1455832586/1443829175/
Dir1455833066/1443829176/
Dir1455879720/1443829181/
Dir1455879768/1443829182/
Dir1455879834/1443829183/
Dir1455885036/1443829187/
Dir1455898825/1443829188/
Dir1455966247/1443829189/
Dir1456017854/1443829190/
Dir1456017973/1443829194/
Dir1456019113/1443829195/
Dir1456052620/1443829198/
Dir1456113056/1443829201/
Dir1456113057/1443829202/
Dir1456138932/1443829204/
Dir1456148158/1443829207/
Dir1456148276/1443829208/
Dir1456225384/1443829209/
Dir1456242790/1443829210/
Dir1456242969/1443829780/
Dir1456274926/1443834758/
Dir1456275465/1443841794/
Dir1456311766/1443843577/
Dir1456311916/1443849098/
Dir1456311917/1443885938/
Dir1456393410/1443886058/
Dir1456397670/1443886899/
Dir1456397910/1443888218/
Dir1456398129/1443897098/
Dir1456439186/1443909637/
Dir1456439606/1443912939/
Dir1456484576/1443917200/
Dir1456514485/1443969458/
Dir1456518026/1443978039/
Dir1456570925/1443979838/
Dir1456657359/1443999878/
Dir1456740974/1444008999/
Dir1456742174/1444010758/
Dir1456743888/1444014698/
Dir1456827761/1444015598/
Dir1456829981/1444015658/
Dir1456830157/1444015718/
Dir1456830164/1444020458/
Dir1456833280/1444023998/
Dir1456839401/1444024057/
Dir1456870891/1444024898/
Dir1456874612/1444025258/
Dir1456916529/1444025918/
Dir1456930353/1444026897/
Dir1456930532/1444027358/
Dir1457002473/1444027538/
Dir1457002532/1444027838/
Dir1457002973/1444028138/
Dir1457084726/1444029098/
Dir1457088627/1444030238/
Dir1457088747/1444030501/
Dir1457089326/1444032579/
Dir1457100746/1444035218/
Dir1457120817/1444035698/
Dir1457175761/1444037860/
Dir1457223670/1444037978/
Dir1457223849/1444038818/
Dir1457262135/1444039899/
Dir1457294651/1444044698/
Dir1457346789/1444046020/
Dir1457346912/1444048536/
Dir1457348528/1444052858/
Dir1457360663/1444055099/
Dir1457360943/1444055511/
Dir1457361557/1444057179/
Dir1457416584/1444057298/
Dir1457433743/1444057552/
Dir1457435058/1444058921/
Dir1457478073/1444059339/
Dir1457481749/1444059578/
Dir1457494932/1444059878/
Dir1457520372/1444060240/
Dir1457520433/1444060482/
Dir1457521459/1444060898/
Dir1457603245/1444061138/
Dir1457606723/1444061798/
Dir1457607196/1444061919/
Dir1457607762/1444062161/
Dir1457613080/1444062399/
Dir1457680454/1444063121/
Dir1457689994/1444066655/
Dir1457693534/1444075959/
Dir1457694153/1444076078/
Dir1457699474/1444076138/
Dir1457711534/1444076380/
Dir1457712793/1444076381/
Dir1457780645/1444076678/
Dir1457786430/1444077012/
Dir1457805630/1444078778/
Dir1457814331/1444080518/
Dir1457863458/1444080623/
Dir1457910264/1444080774/
Dir1457910571/1444081075/
Dir1457949735/1444082035/
Dir1458001953/1444083713/
Dir1458002372/1444084016/
Dir1458007896/1444084436/
Dir1458034954/1444085216/
Dir1458035077/1444085816/
Dir1458036150/1444087139/
Dir1458086562/1444087827/
Dir1458088008/1444095715/
Dir1458122146/1444096256/
Dir1458122270/1444097101/
Dir1458122553/1444097335/
Dir1458166044/1444097755/
Dir1458171250/1444097935/
Dir1458172281/1444098534/
Dir1458208757/1444098711/
Dir1458208880/1444101596/
Dir1458208955/1444103633/
Dir1458227122/1444105075/
Dir1458227280/1444109425/
Dir1458295356/1444110894/
Dir1458311592/1444113356/
Dir1458312795/1444113715/
Dir1458381958/1444115815/
Dir1458387877/1444116415/
Dir1458400477/1444116596/
Dir1458401075/1444120216/
Dir1458401127/1444120555/
Dir1458447996/1444121336/
Dir1458452002/1444121814/
Dir1458468249/1444122223/
Dir1458554537/1444122536/
Dir1458570707/1444123375/
Dir1458570714/1444125654/
Dir1458570754/1444125955/
Dir1458581517/1444126973/
Dir1458640837/1444131040/
Dir1458641057/1444132436/
Dir1458645346/1444133996/
Dir1458646228/1444137357/
Dir1458689432/1444137536/
Dir1458689440/1444138674/
Dir1458690382/1444139227/
Dir1458726635/1444139589/
Dir1458727440/1444139639/
Dir1458746792/1444139753/
Dir1458754227/1444140574/
Dir1458813887/1444141629/
Dir1458832106/1444141630/
Dir1458832617/1444141631/
Dir1458840627/1444141632/
Dir1458858157/1444141716/
Dir1458859236/1444141717/
Dir1458862208/1444141973/
Dir1458884263/1444143033/
Dir1458894621/1444145374/
Dir1458900161/1444146576/
Dir1458920197/1444152611/
Dir1458920258/1444156714/
Dir1458920312/1444156892/
Dir1458921073/1444157074/
Dir1458927025/1444157196/
Dir1458957951/1444157314/
Dir1458958178/1444158874/
Dir1458986670/1444159052/
Dir1458992731/1444159239/
Dir1459002678/1444159475/
Dir1459073077/1444160613/
Dir1459159335/1444162891/
Dir1459195215/1444163010/
Dir1459195605/1444163011/
Dir1459245766/1444163012/
Dir1459253795/1444163091/
Dir1459253851/1444163092/
Dir1459332206/1444163093/
Dir1459343618/1444163376/
Dir1459348279/1444163377/
Dir1459418551/1444163378/
Dir1459453651/1444163379/
Dir1459454740/1444163455/
Dir1459504128/1444163456/
Dir1459504936/1444163457/
Dir1459510228/1444164936/
Dir1459549951/1444167152/
Dir1459550698/1444167692/
Dir1459553414/1444168834/
Dir1459591346/1444170212/
Dir1459617592/1444170993/
Dir1459618227/1444171172/
Dir1459618609/1444172135/
Dir1459629011/1444174204/
Dir1459677763/1444174952/
Dir1459734079/1444177650/
Dir1459763718/1444179092/
Dir1459763781/1444182452/
Dir1459764151/1444187195/
Dir1459812344/1444190132/
Dir1459827380/1444190312/
Dir1459839305/1444195814/
Dir1459842612/1444195952/
Dir1459846879/1444196555/
Dir1459850534/1444197032/
Dir1459861148/1444197393/
Dir1459867875/1444197632/
Dir1459868000/1444198530/
Dir1459898772/1444199852/
Dir1459936695/1444200091/
Dir1459936821/1444201509/
Dir1459936941/1444202792/
Dir1460022748/1444205672/
Dir1460022768/1444211492/
Dir1460023354/1444211792/
Dir1460057625/1444211972/
Dir1460061260/1444212391/
Dir1460061768/1444212392/
Dir1460109600/1444212691/
Dir1460109722/1444212991/
Dir1460109732/1444213113/
Dir1460154466/1444213198/
Dir1460196139/1444213411/
Dir1460202470/1444213592/
Dir1460210983/1444213891/
Dir1460229824/1444213996/
Dir1460282544/1444213997/
Dir1460319666/1444213998/
Dir1460319732/1444214001/
Dir1460367969/1444214079/
Dir1460368028/1444214080/
Dir1460368951/1444214083/
Dir1460415045/1444214252/
Dir1460415778/1444214278/
Dir1460455355/1444214400/
Dir1460461429/1444214403/
Dir1460461911/1444214406/
Dir1460462429/1444214481/
Dir1460500130/1444214483/
Dir1460500553/1444214486/
Dir1460540873/1444214492/
Dir1460541294/1444214506/
Dir1460541759/1444214510/
Dir1460581724/1444214513/
Dir1460582390/1444215271/
Dir1460590779/1444216350/
Dir1460626607/1444217423/
Dir1460626792/1444217912/
Dir1460628167/1444219473/
Dir1460643648/1444222592/
Dir1460713248/1444222832/
Dir1460713371/1444223552/
Dir1460714551/1444224751/
Dir1460743307/1444224870/
Dir1460755945/1444224931/
Dir1460759834/1444226135/
Dir1460797100/1444226372/
Dir1460800940/1444227994/
Dir1460807417/1444228246/
Dir1460887561/1444229972/
Dir1460961975/1444231112/
Dir1460973785/1444233931/
Dir1460983157/1444237112/
Dir1460983283/1444237292/
Dir1460990361/1444238611/
Dir1461017302/1444239932/
Dir1461017661/1444240714/
Dir1461037891/1444241073/
Dir1461059932/1444241507/
Dir1461059984/1444241801/
Dir1461060192/1444242511/
Dir1461145662/1444243592/
Dir1461145898/1444244432/
Dir1461146533/1444244915/
Dir1461175369/1444245093/
Dir1461185753/1444246414/
Dir1461187086/1444246532/
Dir1461229087/1444247132/
Dir1461232982/1444247432/
Dir1461243866/1444248692/
Dir1461273976/1444250130/
Dir1461274995/1444251833/
Dir1461319343/1444253372/
Dir1461333359/1444253671/
Dir1461333436/1444254872/
Dir1461401271/1444255349/
Dir1461405740/1444255650/
Dir1461412855/1444256911/
Dir1461460364/1444257212/
Dir1461492361/1444257453/
Dir1461578084/1444257872/
Dir1461578210/1444260032/
Dir1461578748/1444260635/
Dir1461604276/1444260932/
Dir1461604419/1444261233/
Dir1461604923/1444261652/
Dir1461623172/1444262627/
Dir1461629593/1444264170/
Dir1461664932/1444264312/
Dir1461671048/1444274671/
Dir1461671161/1444277972/
Dir1461671169/1444281212/
Dir1461705480/1444281392/
Dir1461705600/1444281452/
Dir1461750963/1444282171/
Dir1461751147/1444283612/
Dir1461751335/1444284394/
Dir1461778096/1444284512/
Dir1461837738/1444284932/
Dir1461852889/1444286970/
Dir1461854287/1444288591/
Dir1461868023/1444290213/
Dir1461923321/1444291712/
Dir1461924135/1444292072/
Dir1461967137/1444292972/
Dir1462010543/1444296272/
Dir1462017395/1444296392/
Dir1462096937/1444296452/
Dir1462181018/1444296512/
Dir1462181200/1444296898/
Dir1462183327/1444296993/
Dir1462269401/1444297352/
Dir1462269861/1444297470/
Dirlatest/1444297711/
Dir1444297892/
Dir1444298311/
Dir1444300171/
Dir1444300232/
Dir1444303805/
Dir1444305151/
Dir1444305835/
Dir1444308216/
Dir1444309056/
Dir1444312896/
Dir1444313557/
Dir1444314154/
Dir1444314743/
Dir1444318055/
Dir1444319673/
Dir1444321537/
Dir1444322793/
Dir1444323337/
Dir1444324293/
Dir1444324589/
Dir1444324954/
Dir1444325413/
Dir1444325733/
Dir1444326035/
Dir1444330757/
Dir1444330947/
Dir1444331719/
Dir1444332197/
Dir1444332621/
Dir1444334764/
Dir1444335200/
Dir1444336220/
Dir1444336699/
Dir1444337839/
Dir1444338154/
Dir1444339158/
Dir1444340179/
Dir1444340658/
Dir1444341137/
Dir1444341558/
Dir1444342038/
Dir1444342699/
Dir1444342998/
Dir1444343359/
Dir1444344320/
Dir1444347015/
Dir1444348851/
Dir1444349035/
Dir1444349270/
Dir1444350947/
Dir1444354727/
Dir1444356108/
Dir1444357881/
Dir1444359948/
Dir1444363728/
Dir1444383767/
Dir1444384727/
Dir1444385012/
Dir1444388088/
Dir1444393608/
Dir1444395048/
Dir1444402437/
Dir1444402612/
Dir1444403268/
Dir1444404467/
Dir1444407827/
Dir1444408488/
Dir1444408716/
Dir1444409751/
Dir1444411308/
Dir1444411489/
Dir1444412267/
Dir1444416167/
Dir1444417248/
Dir1444417249/
Dir1444417573/
Dir1444421087/
Dir1444422169/
Dir1444422649/
Dir1444422828/
Dir1444422890/
Dir1444423248/
Dir1444423788/
Dir1444424148/
Dir1444425348/
Dir1444425408/
Dir1444434229/
Dir1444434348/
Dir1444439747/
Dir1444440048/
Dir1444440114/
Dir1444460749/
Dir1444462187/
Dir1444465067/
Dir1444477367/
Dir1444495547/
Dir1444509947/
Dir1444518396/
Dir1444537727/
Dir1444538987/
Dir1444550867/
Dir1444565327/
Dir1444567607/
Dir1444574568/
Dir1444579068/
Dir1444579127/
Dir1444579187/
Dir1444580149/
Dir1444592568/
Dir1444604773/
Dir1444609513/
Dir1444611970/
Dir1444612573/
Dir1444616952/
Dir1444621812/
Dir1444622294/
Dir1444623253/
Dir1444630873/
Dir1444634233/
Dir1444634413/
Dir1444634533/
Dir1444635672/
Dir1444639633/
Dir1444642152/
Dir1444643954/
Dir1444644862/
Dir1444646053/
Dir1444647192/
Dir1444650850/
Dir1444652598/
Dir1444653254/
Dir1444656013/
Dir1444663332/
Dir1444667053/
Dir1444667533/
Dir1444668974/
Dir1444669692/
Dir1444670893/
Dir1444671793/
Dir1444672154/
Dir1444672573/
Dir1444673235/
Dir1444674133/
Dir1444674373/
Dir1444674793/
Dir1444675812/
Dir1444677013/
Dir1444678622/
Dir1444678623/
Dir1444678624/
Dir1444678625/
Dir1444678626/
Dir1444678627/
Dir1444678628/
Dir1444678629/
Dir1444678630/
Dir1444678631/
Dir1444678632/
Dir1444678634/
Dir1444678635/
Dir1444678637/
Dir1444678638/
Dir1444680492/
Dir1444681358/
Dir1444681652/
Dir1444681653/
Dir1444681654/
Dir1444681655/
Dir1444681656/
Dir1444681657/
Dir1444681658/
Dir1444681659/
Dir1444681661/
Dir1444681662/
Dir1444681663/
Dir1444681665/
Dir1444681666/
Dir1444681668/
Dir1444681898/
Dir1444683229/
Dir1444683230/
Dir1444683233/
Dir1444683310/
Dir1444683311/
Dir1444683312/
Dir1444683313/
Dir1444683518/
Dir1444683519/
Dir1444683520/
Dir1444683521/
Dir1444683525/
Dir1444683607/
Dir1444683608/
Dir1444683609/
Dir1444683612/
Dir1444687479/
Dir1444692114/
Dir1444693735/
Dir1444697275/
Dir1444699017/
Dir1444702375/
Dir1444705560/
Dir1444714555/
Dir1444716295/
Dir1444719895/
Dir1444720079/
Dir1444720194/
Dir1444720675/
Dir1444732917/
Dir1444733036/
Dir1444734383/
Dir1444734534/
Dir1444735315/
Dir1444736274/
Dir1444737657/
Dir1444739456/
Dir1444740596/
Dir1444746704/
Dir1444746750/
Dir1444747349/
Dir1444747769/
Dir1444748429/
Dir1444749328/
Dir1444753588/
Dir1444754609/
Dir1444756109/
Dir1444756468/
Dir1444764089/
Dir1444765948/
Dir1444766813/
Dir1444769131/
Dir1444769188/
Dir1444769249/
Dir1444770029/
Dir1444770629/
Dir1444771289/
Dir1444771949/
Dir1444772669/
Dir1444772788/
Dir1444773449/
Dir1444777109/
Dir1444777429/
Dir1444778369/
Dir1444779509/
Dir1444779988/
Dir1444780409/
Dir1444780949/
Dir1444782029/
Dir1444783109/
Dir1444783771/
Dir1444786532/
Dir1444788929/
Dir1444790476/
Dir1444791689/
Dir1444794020/
Dir1444797440/
Dir1444799899/
Dir1444801939/
Dir1444802752/
Dir1444803140/
Dir1444803799/
Dir1444804641/
Dir1444804879/
Dir1444804999/
Dir1444805419/
Dir1444806269/
Dir1444807640/
Dir1444807819/
Dir1444807939/
Dir1444808178/
Dir1444808599/
Dir1444809620/
Dir1444810462/
Dir1444812379/
Dir1444815322/
Dir1444815440/
Dir1444815560/
Dir1444818680/
Dir1444819159/
Dir1444819702/
Dir1444824861/
Dir1444825818/
Dir1444825941/
Dir1444825996/
Dir1444827200/
Dir1444828817/
Dir1444832538/
Dir1444832960/
Dir1444834895/
Dir1444835262/
Dir1444835610/
Dir1444836510/
Dir1444837171/
Dir1444838768/
Dir1444839208/
Dir1444841551/
Dir1444845331/
Dir1444845691/
Dir1444845828/
Dir1444845871/
Dir1444845991/
Dir1444846230/
Dir1444847011/
Dir1444847491/
Dir1444847671/
Dir1444847730/
Dir1444849287/
Dir1444849591/
Dir1444853251/
Dir1444853371/
Dir1444853727/
Dir1444854871/
Dir1444855347/
Dir1444855768/
Dir1444855769/
Dir1444855892/
Dir1444856628/
Dir1444857529/
Dir1444857649/
Dir1444857708/
Dir1444858186/
Dir1444860109/
Dir1444860963/
Dir1444861966/
Dir1444865031/
Dir1444865274/
Dir1444866757/
Dir1444867248/
Dir1444867249/
Dir1444870034/
Dir1444873969/
Dir1444875349/
Dir1444877027/
Dir1444877544/
Dir1444879368/
Dir1444880989/
Dir1444881166/
Dir1444881167/
Dir1444882790/
Dir1444888431/
Dir1444889329/
Dir1444889809/
Dir1444889989/
Dir1444890169/
Dir1444890410/
Dir1444893356/
Dir1444894010/
Dir1444894369/
Dir1444894370/
Dir1444895938/
Dir1444896648/
Dir1444899827/
Dir1444900170/
Dir1444901618/
Dir1444903184/
Dir1444909546/
Dir1444910929/
Dir1444914889/
Dir1444917025/
Dir1444917108/
Dir1444917229/
Dir1444917912/
Dir1444918787/
Dir1444918914/
Dir1444922556/
Dir1444923714/
Dir1444924553/
Dir1444924790/
Dir1444925388/
Dir1444925448/
Dir1444925630/
Dir1444929950/
Dir1444934259/
Dir1444935876/
Dir1444936115/
Dir1444936370/
Dir1444936921/
Dir1444938355/
Dir1444938639/
Dir1444939955/
Dir1444941817/
Dir1444942536/
Dir1444943259/
Dir1444943323/
Dir1444944815/
Dir1444945058/
Dir1444948890/
Dir1444949490/
Dir1444952731/
Dir1444953690/
Dir1444956878/
Dir1444961105/
Dir1444973010/
Dir1444973191/
Dir1444973310/
Dir1444974810/
Dir1444975471/
Dir1444975830/
Dir1444976610/
Dir1444977090/
Dir1444977210/
Dir1444977269/
Dir1444977810/
Dir1444977931/
Dir1444978110/
Dir1444978650/
Dir1444981350/
Dir1444984228/
Dir1444986031/
Dir1444989870/
Dir1444993053/
Dir1444995012/
Dir1444999591/
Dir1444999710/
Dir1445001751/
Dir1445002246/
Dir1445002651/
Dir1445002833/
Dir1445003286/
Dir1445003437/
Dir1445004098/
Dir1445004595/
Dir1445005911/
Dir1445008836/
Dir1445009313/
Dir1445009492/
Dir1445011170/
Dir1445011583/
Dir1445013031/
Dir1445013871/
Dir1445014170/
Dir1445014725/
Dir1445015845/
Dir1445015910/
Dir1445015911/
Dir1445016510/
Dir1445016612/
Dir1445018855/
Dir1445020594/
Dir1445020651/
Dir1445021009/
Dir1445021731/
Dir1445021920/
Dir1445022606/
Dir1445023891/
Dir1445024501/
Dir1445025358/
Dir1445026560/
Dir1445026797/
Dir1445027337/
Dir1445027525/
Dir1445028993/
Dir1445031631/
Dir1445032050/
Dir1445032231/
Dir1445034105/
Dir1445034692/
Dir1445038215/
Dir1445038591/
Dir1445043031/
Dir1445045490/
Dir1445046211/
Dir1445049051/
Dir1445052150/
Dir1445052451/
Dir1445052813/
Dir1445064630/
Dir1445067750/
Dir1445068468/
Dir1445070624/
Dir1445096228/
Dir1445102989/
Dir1445106330/
Dir1445117195/
Dir1445117475/
Dir1445124603/
Dir1445141972/
Dir1445143291/
Dir1445145390/
Dir1445146206/
Dir1445166990/
Dir1445174431/
Dir1445192610/
Dir1445194296/
Dir1445199570/
Dir1445208030/
Dir1445214810/
Dir1445216190/
Dir1445217932/
Dir1445219070/
Dir1445221110/
Dir1445221230/
Dir1445221350/
Dir1445222610/
Dir1445224290/
Dir1445224830/
Dir1445224890/
Dir1445234250/
Dir1445234370/
Dir1445235150/
Dir1445235570/
Dir1445243440/
Dir1445244990/
Dir1445245770/
Dir1445247691/
Dir1445248230/
Dir1445248830/
Dir1445250872/
Dir1445252011/
Dir1445252555/
Dir1445253811/
Dir1445254207/
Dir1445254890/
Dir1445260231/
Dir1445261971/
Dir1445262658/
Dir1445262755/
Dir1445264014/
Dir1445264542/
Dir1445265235/
Dir1445265249/
Dir1445265529/
Dir1445267337/
Dir1445267711/
Dir1445267888/
Dir1445269176/
Dir1445269889/
Dir1445270791/
Dir1445273972/
Dir1445274100/
Dir1445274272/
Dir1445276223/
Dir1445276729/
Dir1445277229/
Dir1445277394/
Dir1445277395/
Dir1445278189/
Dir1445278490/
Dir1445279009/
Dir1445279369/
Dir1445279851/
Dir1445280597/
Dir1445282190/
Dir1445283679/
Dir1445284123/
Dir1445284529/
Dir1445284709/
Dir1445284765/
Dir1445285792/
Dir1445286269/
Dir1445286614/
Dir1445287829/
Dir1445288250/
Dir1445289272/
Dir1445289453/
Dir1445292232/
Dir1445293051/
Dir1445293289/
Dir1445293470/
Dir1445293650/
Dir1445294265/
Dir1445295750/
Dir1445296006/
Dir1445296247/
Dir1445296632/
Dir1445296930/
Dir1445297647/
Dir1445300347/
Dir1445302586/
Dir1445302760/
Dir1445304626/
Dir1445305699/
Dir1445306146/
Dir1445306171/
Dir1445307671/
Dir1445309032/
Dir1445309300/
Dir1445310462/
Dir1445311749/
Dir1445312695/
Dir1445314989/
Dir1445315107/
Dir1445318168/
Dir1445318482/
Dir1445318609/
Dir1445319367/
Dir1445323207/
Dir1445329387/
Dir1445329567/
Dir1445330167/
Dir1445330707/
Dir1445330766/
Dir1445331189/
Dir1445332086/
Dir1445332807/
Dir1445333647/
Dir1445334007/
Dir1445334386/
Dir1445334488/
Dir1445336419/
Dir1445337188/
Dir1445337308/
Dir1445337486/
Dir1445337668/
Dir1445338874/
Dir1445340667/
Dir1445340907/
Dir1445341517/
Dir1445341567/
Dir1445342891/
Dir1445343254/
Dir1445344929/
Dir1445345955/
Dir1445347632/
Dir1445348887/
Dir1445350268/
Dir1445350695/
Dir1445351056/
Dir1445351126/
Dir1445352014/
Dir1445357527/
Dir1445359327/
Dir1445359449/
Dir1445359574/
Dir1445361488/
Dir1445362628/
Dir1445362749/
Dir1445364009/
Dir1445364151/
Dir1445365874/
Dir1445366709/
Dir1445368210/
Dir1445369264/
Dir1445369599/
Dir1445370608/
Dir1445370912/
Dir1445371648/
Dir1445371987/
Dir1445373737/
Dir1445373897/
Dir1445373952/
Dir1445374431/
Dir1445379019/
Dir1445380241/
Dir1445386501/
Dir1445400721/
Dir1445406422/
Dir1445406423/
Dir1445406481/
Dir1445406540/
Dir1445407020/
Dir1445407080/
Dir1445407501/
Dir1445407560/
Dir1445408101/
Dir1445408884/
Dir1445409420/
Dir1445410209/
Dir1445411793/
Dir1445413648/
Dir1445413709/
Dir1445413710/
Dir1445413853/
Dir1445413854/
Dir1445413855/
Dir1445413942/
Dir1445415302/
Dir1445415615/
Dir1445415847/
Dir1445418538/
Dir1445418975/
Dir1445423402/
Dir1445434502/
Dir1445435731/
Dir1445435732/
Dir1445435758/
Dir1445436081/
Dir1445436649/
Dir1445436781/
Dir1445436945/
Dir1445437158/
Dir1445437621/
Dir1445442564/
Dir1445444015/
Dir1445444016/
Dir1445444688/
Dir1445446501/
Dir1445448238/
Dir1445451750/
Dir1445454474/
Dir1445457312/
Dir1445458080/
Dir1445459649/
Dir1445460183/
Dir1445463061/
Dir1445463122/
Dir1445463458/
Dir1445466067/
Dir1445470866/
Dir1445471398/
Dir1445472017/
Dir1445472860/
Dir1445472865/
Dir1445473640/
Dir1445475256/
Dir1445477296/
Dir1445478658/
Dir1445478917/
Dir1445480280/
Dir1445480462/
Dir1445481490/
Dir1445484239/
Dir1445486458/
Dir1445489040/
Dir1445494698/
Dir1445495841/
Dir1445496002/
Dir1445496240/
Dir1445497082/
Dir1445501655/
Dir1445501777/
Dir1445502081/
Dir1445502211/
Dir1445506240/
Dir1445507821/
Dir1445516703/
Dir1445517551/
Dir1445520298/
Dir1445521082/
Dir1445521387/
Dir1445521719/
Dir1445522709/
Dir1445523189/
Dir1445527581/
Dir1445530642/
Dir1445531151/
Dir1445531648/
Dir1445531827/
Dir1445533214/
Dir1445534906/
Dir1445537313/
Dir1445537314/
Dir1445538232/
Dir1445538239/
Dir1445546341/
Dir1445546578/
Dir1445546808/
Dir1445549580/
Dir1445549640/
Dir1445550003/
Dir1445550485/
Dir1445554220/
Dir1445554339/
Dir1445555300/
Dir1445556919/
Dir1445557158/
Dir1445558254/
Dir1445558334/
Dir1445558553/
Dir1445562766/
Dir1445563863/
Dir1445565996/
Dir1445569017/
Dir1445571885/
Dir1445572591/
Dir1445572772/
Dir1445574875/
Dir1445578588/
Dir1445579504/
Dir1445580569/
Dir1445581232/
Dir1445581833/
Dir1445582072/
Dir1445584708/
Dir1445584899/
Dir1445585074/
Dir1445585128/
Dir1445585247/
Dir1445590352/
Dir1445593773/
Dir1445594681/
Dir1445599234/
Dir1445603790/
Dir1445605203/
Dir1445605374/
Dir1445608978/
Dir1445610222/
Dir1445612011/
Dir1445613808/
Dir1445620112/
Dir1445626474/
Dir1445626955/
Dir1445627435/
Dir1445629001/
Dir1445629175/
Dir1445629236/
Dir1445629549/
Dir1445632833/
Dir1445633261/
Dir1445635536/
Dir1445637215/
Dir1445637876/
Dir1445640938/
Dir1445641973/
Dir1445648735/
Dir1445649095/
Dir1445655635/
Dir1445661635/
Dir1445661755/
Dir1445665475/
Dir1445679398/
Dir1445679574/
Dir1445679694/
Dir1445689116/
Dir1445694756/
Dir1445695175/
Dir1445695497/
Dir1445699495/
Dir1445707355/
Dir1445713297/
Dir1445713671/
Dir1445715515/
Dir1445717223/
Dir1445775517/
Dir1445785297/
Dir1445804134/
Dir1445805934/
Dir1445811093/
Dir1445816314/
Dir1445819492/
Dir1445835860/
Dir1445838160/
Dir1445839487/
Dir1445848414/
Dir1445852613/
Dir1445853641/
Dir1445853866/
Dir1445853867/
Dir1445853876/
Dir1445854295/
Dir1445854894/
Dir1445855386/
Dir1445856516/
Dir1445856709/
Dir1445856932/
Dir1445857054/
Dir1445858617/
Dir1445858736/
Dir1445859514/
Dir1445864674/
Dir1445866824/
Dir1445867182/
Dir1445873218/
Dir1445873553/
Dir1445873665/
Dir1445873789/
Dir1445874895/
Dir1445876570/
Dir1445877501/
Dir1445878342/
Dir1445880487/
Dir1445880625/
Dir1445880866/
Dir1445880867/
Dir1445881357/
Dir1445882871/
Dir1445883022/
Dir1445883144/
Dir1445883500/
Dir1445883802/
Dir1445885606/
Dir1445888379/
Dir1445888813/
Dir1445889621/
Dir1445893787/
Dir1445893789/
Dir1445895570/
Dir1445898204/
Dir1445898482/
Dir1445899503/
Dir1445900518/
Dir1445900522/
Dir1445904925/
Dir1445906926/
Dir1445908384/
Dir1445912542/
Dir1445913680/
Dir1445914882/
Dir1445915089/
Dir1445918002/
Dir1445920761/
Dir1445924659/
Dir1445929101/
Dir1445933361/
Dir1445933541/
Dir1445933962/
Dir1445934082/
Dir1445934562/
Dir1445935881/
Dir1445936001/
Dir1445939903/
Dir1445946624/
Dir1445950402/
Dir1445950524/
Dir1445950525/
Dir1445950761/
Dir1445951122/
Dir1445951779/
Dir1445952982/
Dir1445955145/
Dir1445956827/
Dir1445957485/
Dir1445960182/
Dir1445961575/
Dir1445963080/
Dir1445964278/
Dir1445966193/
Dir1445966550/
Dir1445967873/
Dir1445968352/
Dir1445968591/
Dir1445970151/
Dir1445970750/
Dir1445971051/
Dir1445972010/
Dir1445977533/
Dir1445977534/
Dir1445979761/
Dir1445980412/
Dir1445980591/
Dir1445982148/
Dir1445982451/
Dir1445983170/
Dir1445984311/
Dir1445989651/
Dir1445998892/
Dir1446000637/
Dir1446001759/
Dir1446004472/
Dir1446005088/
Dir1446007712/
Dir1446008434/
Dir1446009332/
Dir1446010352/
Dir1446011852/
Dir1446023431/
Dir1446025953/
Dir1446027632/
Dir1446029252/
Dir1446030340/
Dir1446031834/
Dir1446032617/
Dir1446032912/
Dir1446035454/
Dir1446036453/
Dir1446036636/
Dir1446038972/
Dir1446039216/
Dir1446039453/
Dir1446040986/
Dir1446041254/
Dir1446041492/
Dir1446043059/
Dir1446044315/
Dir1446047311/
Dir1446047372/
Dir1446048360/
Dir1446051277/
Dir1446053013/
Dir1446054692/
Dir1446055498/
Dir1446056193/
Dir1446056792/
Dir1446058113/
Dir1446058353/
Dir1446058772/
Dir1446059493/
Dir1446059613/
Dir1446061114/
Dir1446061233/
Dir1446062559/
Dir1446065012/
Dir1446065073/
Dir1446068012/
Dir1446068254/
Dir1446068793/
Dir1446069274/
Dir1446069332/
Dir1446070178/
Dir1446070653/
Dir1446071436/
Dir1446073475/
Dir1446074435/
Dir1446074793/
Dir1446075394/
Dir1446075753/
Dir1446075932/
Dir1446077135/
Dir1446077279/
Dir1446077672/
Dir1446078934/
Dir1446080027/
Dir1446080563/
Dir1446080711/
Dir1446082125/
Dir1446084409/
Dir1446085665/
Dir1446086090/
Dir1446098325/
Dir1446098927/
Dir1446099465/
Dir1446099644/
Dir1446099704/
Dir1446099764/
Dir1446100904/
Dir1446103007/
Dir1446103425/
Dir1446103726/
Dir1446103844/
Dir1446104024/
Dir1446104167/
Dir1446108524/
Dir1446109007/
Dir1446109666/
Dir1446110745/
Dir1446112001/
Dir1446112301/
Dir1446117344/
Dir1446120688/
Dir1446123088/
Dir1446123204/
Dir1446124408/
Dir1446157812/
Dir1446158173/
Dir1446158412/
Dir1446160512/
Dir1446160573/
Dir1446160815/
Dir1446161776/
Dir1446161952/
Dir1446161953/
Dir1446162673/
Dir1446163092/
Dir1446164233/
Dir1446166333/
Dir1446166981/
Dir1446167775/
Dir1446168135/
Dir1446171617/
Dir1446172634/
Dir1446173659/
Dir1446175649/
Dir1446177093/
Dir1446177901/
Dir1446178712/
Dir1446179021/
Dir1446179070/
Dir1446185551/
Dir1446185790/
Dir1446186390/
Dir1446190231/
Dir1446192570/
Dir1446192810/
Dir1446192990/
Dir1446194011/
Dir1446194668/
Dir1446195890/
Dir1446199051/
Dir1446199493/
Dir1446199661/
Dir1446200371/
Dir1446200491/
Dir1446202349/
Dir1446203971/
Dir1446207992/
Dir1446208831/
Dir1446209490/
Dir1446211290/
Dir1446211665/
Dir1446212910/
Dir1446214438/
Dir1446215732/
Dir1446215970/
Dir1446216966/
Dir1446217053/
Dir1446217832/
Dir1446219763/
Dir1446223163/
Dir1446223401/
Dir1446223526/
Dir1446224062/
Dir1446224306/
Dir1446224444/
Dir1446225335/
Dir1446225993/
Dir1446227072/
Dir1446231335/
Dir1446233251/
Dir1446234273/
Dir1446234570/
Dir1446235366/
Dir1446235506/
Dir1446235771/
Dir1446235891/
Dir1446236432/
Dir1446237507/
Dir1446245610/
Dir1446246297/
Dir1446247710/
Dir1446247949/
Dir1446248070/
Dir1446249510/
Dir1446252870/
Dir1446256470/
Dir1446258210/
Dir1446261652/
Dir1446262613/
Dir1446269093/
Dir1446273833/
Dir1446281153/
Dir1446288473/
Dir1446292561/
Dir1446294593/
Dir1446296753/
Dir1446297114/
Dir1446298133/
Dir1446304973/
Dir1446305872/
Dir1446310313/
Dir1446310492/
Dir1446312173/
Dir1446312473/
Dir1446312892/
Dir1446312952/
Dir1446317933/
Dir1446318951/
Dir1446323692/
Dir1446325072/
Dir1446326092/
Dir1446328913/
Dir1446332992/
Dir1446334069/
Dir1446337553/
Dir1446343064/
Dir1446376357/
Dir1446394477/
Dir1446399998/
Dir1446400717/
Dir1446411698/
Dir1446420870/
Dir1446422130/
Dir1446423391/
Dir1446427291/
Dir1446431311/
Dir1446431909/
Dir1446433708/
Dir1446434311/
Dir1446434880/
Dir1446439712/
Dir1446443671/
Dir1446449611/
Dir1446449792/
Dir1446449971/
Dir1446450091/
Dir1446450751/
Dir1446451772/
Dir1446453449/
Dir1446456638/
Dir1446456721/
Dir1446456807/
Dir1446457122/
Dir1446461106/
Dir1446462307/
Dir1446467886/
Dir1446469027/
Dir1446470886/
Dir1446473105/
Dir1446476424/
Dir1446476474/
Dir1446477127/
Dir1446477307/
Dir1446477965/
Dir1446480009/
Dir1446480561/
Dir1446481085/
Dir1446482288/
Dir1446483395/
Dir1446484329/
Dir1446486247/
Dir1446486615/
Dir1446486729/
Dir1446486849/
Dir1446487809/
Dir1446488227/
Dir1446488407/
Dir1446489307/
Dir1446489428/
Dir1446491527/
Dir1446491528/
Dir1446491886/
Dir1446494707/
Dir1446496806/
Dir1446498308/
Dir1446499207/
Dir1446499327/
Dir1446499810/
Dir1446499866/
Dir1446500228/
Dir1446501187/
Dir1446501426/
Dir1446504366/
Dir1446507007/
Dir1446507368/
Dir1446507907/
Dir1446508687/
Dir1446510078/
Dir1446511327/
Dir1446520104/
Dir1446524227/
Dir1446524406/
Dir1446525368/
Dir1446526148/
Dir1446531007/
Dir1446531186/
Dir1446531366/
Dir1446531548/
Dir1446532387/
Dir1446535086/
Dir1446536347/
Dir1446537727/
Dir1446537955/
Dir1446539047/
Dir1446539285/
Dir1446539466/
Dir1446543185/
Dir1446543849/
Dir1446545796/
Dir1446549210/
Dir1446549932/
Dir1446550172/
Dir1446556232/
Dir1446558751/
Dir1446559481/
Dir1446560312/
Dir1446563852/
Dir1446565172/
Dir1446566716/
Dir1446567214/
Dir1446569612/
Dir1446569672/
Dir1446571651/
Dir1446574174/
Dir1446575010/
Dir1446575192/
Dir1446576751/
Dir1446578492/
Dir1446578552/
Dir1446579152/
Dir1446583591/
Dir1446585152/
Dir1446586472/
Dir1446587731/
Dir1446588696/
Dir1446592776/
Dir1446595660/
Dir1446597333/
Dir1446603215/
Dir1446603936/
Dir1446604895/
Dir1446605634/
Dir1446605736/
Dir1446606996/
Dir1446607055/
Dir1446609096/
Dir1446610775/
Dir1446611914/
Dir1446615814/
Dir1446619236/
Dir1446620678/
Dir1446620913/
Dir1446624375/
Dir1446631115/
Dir1446631775/
Dir1446634836/
Dir1446635975/
Dir1446636696/
Dir1446637895/
Dir1446641255/
Dir1446643475/
Dir1446643655/
Dir1446645035/
Dir1446646655/
Dir1446649823/
Dir1446652293/
Dir1446654455/
Dir1446656558/
Dir1446660755/
Dir1446661896/
Dir1446662197/
Dir1446663454/
Dir1446665075/
Dir1446665914/
Dir1446666155/
Dir1446671555/
Dir1446672214/
Dir1446673114/
Dir1446673235/
Dir1446674855/
Dir1446675035/
Dir1446676355/
Dir1446676836/
Dir1446678437/
Dir1446679471/
Dir1446679475/
Dir1446679479/
Dir1446679481/
Dir1446679486/
Dir1446679487/
Dir1446679490/
Dir1446679536/
Dir1446680435/
Dir1446680615/
Dir1446682655/
Dir1446683461/
Dir1446683467/
Dir1446683469/
Dir1446683470/
Dir1446683474/
Dir1446683524/
Dir1446683622/
Dir1446683627/
Dir1446683629/
Dir1446683632/
Dir1446685295/
Dir1446685472/
Dir1446688295/
Dir1446688835/
Dir1446690155/
Dir1446692315/
Dir1446692835/
Dir1446704315/
Dir1446705214/
Dir1446708335/
Dir1446710555/
Dir1446710860/
Dir1446711095/
Dir1446712055/
Dir1446712056/
Dir1446712850/
Dir1446712896/
Dir1446713021/
Dir1446713134/
Dir1446713374/
Dir1446713432/
Dir1446715655/
Dir1446717575/
Dir1446718300/
Dir1446718357/
Dir1446718955/
Dir1446719374/
Dir1446720156/
Dir1446721894/
Dir1446722196/
Dir1446726641/
Dir1446727415/
Dir1446728255/
Dir1446728494/
Dir1446731917/
Dir1446733954/
Dir1446734075/
Dir1446735002/
Dir1446737195/
Dir1446737514/
Dir1446737522/
Dir1446737976/
Dir1446744874/
Dir1446747936/
Dir1446748245/
Dir1446754295/
Dir1446757836/
Dir1446757955/
Dir1446758255/
Dir1446759008/
Dir1446759335/
Dir1446759755/
Dir1446760595/
Dir1446760896/
Dir1446763832/
Dir1446766115/
Dir1446766175/
Dir1446767738/
Dir1446768816/
Dir1446769715/
Dir1446770555/
Dir1446770975/
Dir1446771455/
Dir1446771635/
Dir1446772297/
Dir1446773135/
Dir1446774574/
Dir1446775664/
Dir1446777999/
Dir1446780516/
Dir1446780807/
Dir1446781056/
Dir1446781294/
Dir1446782320/
Dir1446783754/
Dir1446784356/
Dir1446787174/
Dir1446787773/
Dir1446788322/
Dir1446794495/
Dir1446798935/
Dir1446799174/
Dir1446802257/
Dir1446809674/
Dir1446809854/
Dir1446809914/
Dir1446809974/
Dir1446810035/
Dir1446810154/
Dir1446810454/
Dir1446814774/
Dir1446815735/
Dir1446815914/
Dir1446817237/
Dir1446817655/
Dir1446817954/
Dir1446818435/
Dir1446821799/
Dir1446821877/
Dir1446821914/
Dir1446822704/
Dir1446823721/
Dir1446823935/
Dir1446825454/
Dir1446826176/
Dir1446826715/
Dir1446826895/
Dir1446828948/
Dir1446831154/
Dir1446831277/
Dir1446831459/
Dir1446832529/
Dir1446833246/
Dir1446833254/
Dir1446834671/
Dir1446836195/
Dir1446836376/
Dir1446836561/
Dir1446837216/
Dir1446837336/
Dir1446838118/
Dir1446841594/
Dir1446842434/
Dir1446844413/
Dir1446844414/
Dir1446845426/
Dir1446846635/
Dir1446847716/
Dir1446848557/
Dir1446848855/
Dir1446849156/
Dir1446850295/
Dir1446850835/
Dir1446851676/
Dir1446852034/
Dir1446852755/
Dir1446854376/
Dir1446854666/
Dir1446855333/
Dir1446855875/
Dir1446856225/
Dir1446860615/
Dir1446867935/
Dir1446870712/
Dir1446873755/
Dir1446888035/
Dir1446888215/
Dir1446899914/
Dir1446904595/
Dir1446907115/
Dir1446907294/
Dir1446925175/
Dir1446941266/
Dir1447007195/
Dir1447007315/
Dir1447014335/
Dir1447014514/
Dir1447030295/
Dir1447030535/
Dir1447030775/
Dir1447038696/
Dir1447042355/
Dir1447045551/
Dir1447046613/
Dir1447046735/
Dir1447050611/
Dir1447054955/
Dir1447055194/
Dir1447055374/
Dir1447055674/
Dir1447055974/
Dir1447056172/
Dir1447058751/
Dir1447077578/
Dir1447078896/
Dir1447079797/
Dir1447081174/
Dir1447083325/
Dir1447090952/
Dir1447092458/
Dir1447092690/
Dir1447093292/
Dir1447095634/
Dir1447096417/
Dir1447099650/
Dir1447101034/
Dir1447104093/
Dir1447104615/
Dir1447104933/
Dir1447105411/
Dir1447105833/
Dir1447106855/
Dir1447107454/
Dir1447114831/
Dir1447114951/
Dir1447115793/
Dir1447116331/
Dir1447118791/
Dir1447119211/
Dir1447119271/
Dir1447119331/
Dir1447120052/
Dir1447121431/
Dir1447123785/
Dir1447124011/
Dir1447124372/
Dir1447125090/
Dir1447126305/
Dir1447131092/
Dir1447133917/
Dir1447134515/
Dir1447137016/
Dir1447142763/
Dir1447143036/
Dir1447144655/
Dir1447145855/
Dir1447146515/
Dir1447146815/
Dir1447147355/
Dir1447149335/
Dir1447150535/
Dir1447151675/
Dir1447154013/
Dir1447156715/
Dir1447158035/
Dir1447158605/
Dir1447159475/
Dir1447163015/
Dir1447164403/
Dir1447169082/
Dir1447169581/
Dir1447170995/
Dir1447171657/
Dir1447172382/
Dir1447173214/
Dir1447173397/
Dir1447173514/
Dir1447174953/
Dir1447175194/
Dir1447175317/
Dir1447175675/
Dir1447176396/
Dir1447177717/
Dir1447178373/
Dir1447180259/
Dir1447181555/
Dir1447181974/
Dir1447183114/
Dir1447184914/
Dir1447188094/
Dir1447188275/
Dir1447188995/
Dir1447189115/
Dir1447189892/
Dir1447192349/
Dir1447193069/
Dir1447193911/
Dir1447195052/
Dir1447195951/
Dir1447198051/
Dir1447208492/
Dir1447209811/
Dir1447212570/
Dir1447213117/
Dir1447214880/
Dir1447215272/
Dir1447216169/
Dir1447216535/
Dir1447218641/
Dir1447219051/
Dir1447219591/
Dir1447219831/
Dir1447220731/
Dir1447221211/
Dir1447225712/
Dir1447225895/
Dir1447228651/
Dir1447228954/
Dir1447234245/
Dir1447237111/
Dir1447237832/
Dir1447238072/
Dir1447238851/
Dir1447239152/
Dir1447241552/
Dir1447241670/
Dir1447241911/
Dir1447242164/
Dir1447242334/
Dir1447242634/
Dir1447244252/
Dir1447245015/
Dir1447251151/
Dir1447252052/
Dir1447253311/
Dir1447254508/
Dir1447254752/
Dir1447254991/
Dir1447255109/
Dir1447255173/
Dir1447255291/
Dir1447255878/
Dir1447257153/
Dir1447258235/
Dir1447260632/
Dir1447260992/
Dir1447261232/
Dir1447261349/
Dir1447261712/
Dir1447263454/
Dir1447266152/
Dir1447266654/
Dir1447275451/
Dir1447277372/
Dir1447277373/
Dir1447277492/
Dir1447277551/
Dir1447277793/
Dir1447278391/
Dir1447278870/
Dir1447279891/
Dir1447280371/
Dir1447280913/
Dir1447281571/
Dir1447281811/
Dir1447285307/
Dir1447287887/
Dir1447287950/
Dir1447288206/
Dir1447288908/
Dir1447290768/
Dir1447293888/
Dir1447295027/
Dir1447298267/
Dir1447299227/
Dir1447299828/
Dir1447305707/
Dir1447315007/
Dir1447320370/
Dir1447322858/
Dir1447322925/
Dir1447325868/
Dir1447328268/
Dir1447339248/
Dir1447339967/
Dir1447340864/
Dir1447340865/
Dir1447342965/
Dir1447344108/
Dir1447344585/
Dir1447344746/
Dir1447345253/
Dir1447347285/
Dir1447348310/
Dir1447350348/
Dir1447351480/
Dir1447351661/
Dir1447352988/
Dir1447353063/
Dir1447358254/
Dir1447374397/
Dir1447376079/
Dir1447376139/
Dir1447376197/
Dir1447376256/
Dir1447377097/
Dir1447377880/
Dir1447381776/
Dir1447383770/
Dir1447388376/
Dir1447389999/
Dir1447394976/
Dir1447395278/
Dir1447400265/
Dir1447407036/
Dir1447407042/
Dir1447407511/
Dir1447408173/
Dir1447408354/
Dir1447408711/
Dir1447409132/
Dir1447409433/
Dir1447416332/
Dir1447417808/
Dir1447421851/
Dir1447424373/
Dir1447424793/
Dir1447425395/
Dir1447425696/
Dir1447426259/
Dir1447426774/
Dir1447427689/
Dir1447428109/
Dir1447428212/
Dir1447428450/
Dir1447429130/
Dir1447431346/
Dir1447432958/
Dir1447433192/
Dir1447433372/
Dir1447434302/
Dir1447435776/
Dir1447437032/
Dir1447439194/
Dir1447440511/
Dir1447440815/
Dir1447442013/
Dir1447444710/
Dir1447445491/
Dir1447445552/
Dir1447446211/
Dir1447448132/
Dir1447450713/
Dir1447451313/
Dir1447452869/
Dir1447454372/
Dir1447456113/
Dir1447456531/
Dir1447457852/
Dir1447458152/
Dir1447460132/
Dir1447465352/
Dir1447466552/
Dir1447467812/
Dir1447467991/
Dir1447472033/
Dir1447477451/
Dir1447477893/
Dir1447490911/
Dir1447507833/
Dir1447515173/
Dir1447516772/
Dir1447524633/
Dir1447536992/
Dir1447542276/
Dir1447547409/
Dir1447554033/
Dir1447554632/
Dir1447559253/
Dir1447576052/
Dir1447576936/
Dir1447588173/
Dir1447588713/
Dir1447595734/
Dir1447599633/
Dir1447606472/
Dir1447610253/
Dir1447610373/
Dir1447612052/
Dir1447612412/
Dir1447622552/
Dir1447627292/
Dir1447627293/
Dir1447628253/
Dir1447631613/
Dir1447638092/
Dir1447638453/
Dir1447643854/
Dir1447646861/
Dir1447650547/
Dir1447652079/
Dir1447657896/
Dir1447658496/
Dir1447661797/
Dir1447665517/
Dir1447670076/
Dir1447677004/
Dir1447679616/
Dir1447682014/
Dir1447685988/
Dir1447686043/
Dir1447686306/
Dir1447686515/
Dir1447686875/
Dir1447687922/
Dir1447688198/
Dir1447688681/
Dir1447688736/
Dir1447688977/
Dir1447689873/
Dir1447690426/
Dir1447691613/
Dir1447692154/
Dir1447693446/
Dir1447695400/
Dir1447696417/
Dir1447696699/
Dir1447696700/
Dir1447696704/
Dir1447696708/
Dir1447697194/
Dir1447697736/
Dir1447698697/
Dir1447698714/
Dir1447700499/
Dir1447701276/
Dir1447710996/
Dir1447711237/
Dir1447711296/
Dir1447711297/
Dir1447711475/
Dir1447711656/
Dir1447712136/
Dir1447713636/
Dir1447713758/
Dir1447714295/
Dir1447714537/
Dir1447714655/
Dir1447715079/
Dir1447715442/
Dir1447718885/
Dir1447719724/
Dir1447719843/
Dir1447719905/
Dir1447720023/
Dir1447720231/
Dir1447720503/
Dir1447721523/
Dir1447722149/
Dir1447722545/
Dir1447723687/
Dir1447723923/
Dir1447724523/
Dir1447728064/
Dir1447731302/
Dir1447733286/
Dir1447736284/
Dir1447738384/
Dir1447738744/
Dir1447740165/
Dir1447740342/
Dir1447745283/
Dir1447746483/
Dir1447747864/
Dir1447750264/
Dir1447750948/
Dir1447751464/
Dir1447752658/
Dir1447753383/
Dir1447754826/
Dir1447756444/
Dir1447760104/
Dir1447762507/
Dir1447763413/
Dir1447764065/
Dir1447766644/
Dir1447767843/
Dir1447768872/
Dir1447772808/
Dir1447773024/
Dir1447774083/
Dir1447774411/
Dir1447775344/
Dir1447776311/
Dir1447779544/
Dir1447781402/
Dir1447781945/
Dir1447782184/
Dir1447782912/
Dir1447783503/
Dir1447783702/
Dir1447784704/
Dir1447785029/
Dir1447785240/
Dir1447788664/
Dir1447788904/
Dir1447789863/
Dir1447790403/
Dir1447790825/
Dir1447795449/
Dir1447796523/
Dir1447797484/
Dir1447797743/
Dir1447800123/
Dir1447800783/
Dir1447801024/
Dir1447802193/
Dir1447803576/
Dir1447803814/
Dir1447805734/
Dir1447806095/
Dir1447808645/
Dir1447809274/
Dir1447810294/
Dir1447811974/
Dir1447813354/
Dir1447813475/
Dir1447817481/
Dir1447818035/
Dir1447818394/
Dir1447821214/
Dir1447823269/
Dir1447854565/
Dir1447854745/
Dir1447854984/
Dir1447856961/
Dir1447858406/
Dir1447861765/
Dir1447862006/
Dir1447862431/
Dir1447862906/
Dir1447863087/
Dir1447863159/
Dir1447863206/
Dir1447863622/
Dir1447864881/
Dir1447865245/
Dir1447865487/
Dir1447866865/
Dir1447867347/
Dir1447867582/
Dir1447869205/
Dir1447870960/
Dir1447872762/
Dir1447872818/
Dir1447872819/
Dir1447873720/
Dir1447874678/
Dir1447877561/
Dir1447877562/
Dir1447877629/
Dir1447878276/
Dir1447880195/
Dir1447884459/
Dir1447884700/
Dir1447884815/
Dir1447884938/
Dir1447886019/
Dir1447886379/
Dir1447887881/
Dir1447888059/
Dir1447888060/
Dir1447889199/
Dir1447889619/
Dir1447889916/
Dir1447890099/
Dir1447890162/
Dir1447890457/
Dir1447890519/
Dir1447890639/
Dir1447890823/
Dir1447890879/
Dir1447891184/
Dir1447891241/
Dir1447892438/
Dir1447893279/
Dir1447893461/
Dir1447893763/
Dir1447894296/
Dir1447895091/
Dir1447895496/
Dir1447901506/
Dir1447902640/
Dir1447903539/
Dir1447909897/
Dir1447912179/
Dir1447912539/
Dir1447917279/
Dir1447920339/
Dir1447921120/
Dir1447923459/
Dir1447924419/
Dir1447925379/
Dir1447925556/
Dir1447926040/
Dir1447926280/
Dir1447926399/
Dir1447926459/
Dir1447926579/
Dir1447926696/
Dir1447935560/
Dir1447939819/
Dir1447940119/
Dir1447941986/
Dir1447942087/
Dir1447942088/
Dir1447943046/
Dir1447944559/
Dir1447945054/
Dir1447945147/
Dir1447945989/
Dir1447948205/
Dir1447949345/
Dir1447949469/
Dir1447951867/
Dir1447954867/
Dir1447955404/
Dir1447957539/
Dir1447958319/
Dir1447960475/
Dir1447960716/
Dir1447961555/
Dir1447961735/
Dir1447962879/
Dir1447963235/
Dir1447964195/
Dir1447964798/
Dir1447965218/
Dir1447967771/
Dir1447968430/
Dir1447968550/
Dir1447969753/
Dir1447969993/
Dir1447970348/
Dir1447970852/
Dir1447971035/
Dir1447973374/
Dir1447973433/
Dir1447974399/
Dir1447983755/
Dir1447985435/
Dir1447985916/
Dir1447987236/
Dir1447990408/
Dir1447992095/
Dir1447993362/
Dir1447993921/
Dir1447994196/
Dir1447994674/
Dir1447996175/
Dir1447998514/
Dir1447999714/
Dir1448000434/
Dir1448000554/
Dir1448000974/
Dir1448003050/
Dir1448004515/
Dir1448005475/
Dir1448005714/
Dir1448010456/
Dir1448010932/
Dir1448011114/
Dir1448013575/
Dir1448019756/
Dir1448019874/
Dir1448020835/
Dir1448024802/
Dir1448025815/
Dir1448025934/
Dir1448026533/
Dir1448028265/
Dir1448028935/
Dir1448029294/
Dir1448029534/
Dir1448030973/
Dir1448034343/
Dir1448034996/
Dir1448035656/
Dir1448039376/
Dir1448039431/
Dir1448039972/
Dir1448040572/
Dir1448042494/
Dir1448043751/
Dir1448044657/
Dir1448047470/
Dir1448048195/
Dir1448049633/
Dir1448053593/
Dir1448055033/
Dir1448055210/
Dir1448056232/
Dir1448056533/
Dir1448057195/
Dir1448059056/
Dir1448059474/
Dir1448059597/
Dir1448060493/
Dir1448068007/
Dir1448068233/
Dir1448079993/
Dir1448080267/
Dir1448087612/
Dir1448090913/
Dir1448112934/
Dir1448135711/
Dir1448156113/
Dir1448185631/
Dir1448200691/
Dir1448205311/
Dir1448205431/
Dir1448220613/
Dir1448226011/
Dir1448230271/
Dir1448233271/
Dir1448244791/
Dir1448248811/
Dir1448251231/
Dir1448251946/
Dir1448255425/
Dir1448256745/
Dir1448256985/
Dir1448258621/
Dir1448262624/
Dir1448269764/
Dir1448278465/
Dir1448278645/
Dir1448279426/
Dir1448279725/
Dir1448280265/
Dir1448283744/
Dir1448285546/
Dir1448286507/
Dir1448287551/
Dir1448287922/
Dir1448288126/
Dir1448291268/
Dir1448291492/
Dir1448292093/
Dir1448292204/
Dir1448292865/
Dir1448293105/
Dir1448293343/
Dir1448293644/
Dir1448293705/
Dir1448293952/
Dir1448294006/
Dir1448294127/
Dir1448294128/
Dir1448294424/
Dir1448295505/
Dir1448299045/
Dir1448301267/
Dir1448306366/
Dir1448307559/
Dir1448309184/
Dir1448313019/
Dir1448313080/
Dir1448314279/
Dir1448314459/
Dir1448314579/
Dir1448315419/
Dir1448316224/
Dir1448316560/
Dir1448317519/
Dir1448317759/
Dir1448319499/
Dir1448320173/
Dir1448321012/
Dir1448321372/
Dir1448324072/
Dir1448326413/
Dir1448328452/
Dir1448332060/
Dir1448332173/
Dir1448333254/
Dir1448337576/
Dir1448339855/
Dir1448341534/
Dir1448344592/
Dir1448348643/
Dir1448351132/
Dir1448351252/
Dir1448351313/
Dir1448358692/
Dir1448359234/
Dir1448361573/
Dir1448364093/
Dir1448369013/
Dir1448374232/
Dir1448374892/
Dir1448375974/
Dir1448378672/
Dir1448380233/
Dir1448380593/
Dir1448380654/
Dir1448381152/
Dir1448381493/
Dir1448382814/
Dir1448383359/
Dir1448383777/
Dir1448384675/
Dir1448386003/
Dir1448386172/
Dir1448387013/
Dir1448387252/
Dir1448387433/
Dir1448388452/
Dir1448390314/
Dir1448390372/
Dir1448391094/
Dir1448391872/
Dir1448392532/
Dir1448392772/
Dir1448394514/
Dir1448394752/
Dir1448395893/
Dir1448396253/
Dir1448399733/
Dir1448400333/
Dir1448401593/
Dir1448405673/
Dir1448406390/
Dir1448407593/
Dir1448409213/
Dir1448409333/
Dir1448411672/
Dir1448413234/
Dir1448414012/
Dir1448415992/
Dir1448422001/
Dir1448422653/
Dir1448424942/
Dir1448425296/
Dir1448426193/
Dir1448426913/
Dir1448428233/
Dir1448429312/
Dir1448435255/
Dir1448435856/
Dir1448436105/
Dir1448436654/
Dir1448436752/
Dir1448442813/
Dir1448445092/
Dir1448445971/
Dir1448448814/
Dir1448451572/
Dir1448451933/
Dir1448452951/
Dir1448454391/
Dir1448456313/
Dir1448457333/
Dir1448458498/
Dir1448458499/
Dir1448459553/
Dir1448462431/
Dir1448462616/
Dir1448463275/
Dir1448463640/
Dir1448465588/
Dir1448467610/
Dir1448467835/
Dir1448470655/
Dir1448471793/
Dir1448472574/
Dir1448472694/
Dir1448473652/
Dir1448473773/
Dir1448482893/
Dir1448483672/
Dir1448484033/
Dir1448484516/
Dir1448485533/
Dir1448489470/
Dir1448491090/
Dir1448492950/
Dir1448494813/
Dir1448496315/
Dir1448496610/
Dir1448496853/
Dir1448499130/
Dir1448499131/
Dir1448511190/
Dir1448514260/
Dir1448524509/
Dir1448528350/
Dir1448529250/
Dir1448529371/
Dir1448529849/
Dir1448530453/
Dir1448530570/
Dir1448530750/
Dir1448533211/
Dir1448535069/
Dir1448535130/
Dir1448535670/
Dir1448536210/
Dir1448538469/
Dir1448539349/
Dir1448540229/
Dir1448547850/
Dir1448549531/
Dir1448551450/
Dir1448553250/
Dir1448553431/
Dir1448555110/
Dir1448555530/
Dir1448555590/
Dir1448555840/
Dir1448557451/
Dir1448557813/
Dir1448557931/
Dir1448564896/
Dir1448566390/
Dir1448566571/
Dir1448567832/
Dir1448568972/
Dir1448570234/
Dir1448570292/
Dir1448571492/
Dir1448572034/
Dir1448574852/
Dir1448577072/
Dir1448578212/
Dir1448578512/
Dir1448580492/
Dir1448581572/
Dir1448583672/
Dir1448588832/
Dir1448589968/
Dir1448591236/
Dir1448591772/
Dir1448592732/
Dir1448597173/
Dir1448597713/
Dir1448607132/
Dir1448609292/
Dir1448617092/
Dir1448619132/
Dir1448628252/
Dir1448628312/
Dir1448629093/
Dir1448630292/
Dir1448631972/
Dir1448635092/
Dir1448635452/
Dir1448639832/
Dir1448641234/
Dir1448643272/
Dir1448647892/
Dir1448650653/
Dir1448652453/
Dir1448655453/
Dir1448659952/
Dir1448664932/
Dir1448666493/
Dir1448667635/
Dir1448669673/
Dir1448672310/
Dir1448683355/
Dir1448684732/
Dir1448693612/
Dir1448693973/
Dir1448707772/
Dir1448743112/
Dir1448743232/
Dir1448759312/
Dir1448759672/
Dir1448816372/
Dir1448824292/
Dir1448829585/
Dir1448831610/
Dir1448835752/
Dir1448836832/
Dir1448839592/
Dir1448842054/
Dir1448844572/
Dir1448859811/
Dir1448860056/
Dir1448860173/
Dir1448861312/
Dir1448867853/
Dir1448868334/
Dir1448874093/
Dir1448875112/
Dir1448876492/
Dir1448876735/
Dir1448882312/
Dir1448885252/
Dir1448886273/
Dir1448886813/
Dir1448886933/
Dir1448887608/
Dir1448894853/
Dir1448898633/
Dir1448903972/
Dir1448904393/
Dir1448908211/
Dir1448912793/
Dir1448912913/
Dir1448913121/
Dir1448913159/
Dir1448914592/
Dir1448916334/
Dir1448916453/
Dir1448917558/
Dir1448917595/
Dir1448918193/
Dir1448918313/
Dir1448918854/
Dir1448919633/
Dir1448921026/
Dir1448921171/
Dir1448921553/
Dir1448921734/
Dir1448922936/
Dir1448923233/
Dir1448925093/
Dir1448925392/
Dir1448925992/
Dir1448926053/
Dir1448926054/
Dir1448926354/
Dir1448926712/
Dir1448927253/
Dir1448927312/
Dir1448928933/
Dir1448928993/
Dir1448929053/
Dir1448929472/
Dir1448929773/
Dir1448931963/
Dir1448933073/
Dir1448933734/
Dir1448933911/
Dir1448934455/
Dir1448934516/
Dir1448936490/
Dir1448938773/
Dir1448939147/
Dir1448939148/
Dir1448944414/
Dir1448944596/
Dir1448945973/
Dir1448946154/
Dir1448946936/
Dir1448947412/
Dir1448947593/
Dir1448948432/
Dir1448949212/
Dir1448954435/
Dir1448956113/
Dir1448959593/
Dir1448959951/
Dir1448960552/
Dir1448960771/
Dir1448962352/
Dir1448962953/
Dir1448963552/
Dir1448963974/
Dir1448964154/
Dir1448964225/
Dir1448964392/
Dir1448964512/
Dir1448964573/
Dir1448964692/
Dir1448965533/
Dir1448967333/
Dir1448973933/
Dir1448974592/
Dir1448976092/
Dir1448976694/
Dir1448978373/
Dir1448978628/
Dir1448978912/
Dir1448980113/
Dir1448981022/
Dir1448981314/
Dir1448981673/
Dir1448983298/
Dir1448984226/
Dir1448984553/
Dir1448989441/
Dir1448990392/
Dir1448994208/
Dir1448995522/
Dir1448996065/
Dir1448996248/
Dir1448997685/
Dir1448997801/
Dir1448999006/
Dir1448999246/
Dir1448999545/
Dir1449002785/
Dir1449003145/
Dir1449003324/
Dir1449005910/
Dir1449006630/
Dir1449006810/
Dir1449008491/
Dir1449008790/
Dir1449009210/
Dir1449010230/
Dir1449012420/
Dir1449012960/
Dir1449013259/
Dir1449013320/
Dir1449014160/
Dir1449015061/
Dir1449021240/
Dir1449021984/
Dir1449024060/
Dir1449026581/
Dir1449030061/
Dir1449031441/
Dir1449032667/
Dir1449039120/
Dir1449041581/
Dir1449042181/
Dir1449042360/
Dir1449043201/
Dir1449044700/
Dir1449045660/
Dir1449048180/
Dir1449050636/
Dir1449051120/
Dir1449061140/
Dir1449061500/
Dir1449061622/
Dir1449061981/
Dir1449064381/
Dir1449066206/
Dir1449066981/
Dir1449069385/
Dir1449069804/
Dir1449071981/
Dir1449073539/
Dir1449074126/
Dir1449074541/
Dir1449076347/
Dir1449076702/
Dir1449078206/
Dir1449082042/
Dir1449082466/
Dir1449083121/
Dir1449084385/
Dir1449084866/
Dir1449086301/
Dir1449086421/
Dir1449089961/
Dir1449090921/
Dir1449092301/
Dir1449092721/
Dir1449093381/
Dir1449093561/
Dir1449094641/
Dir1449094881/
Dir1449094941/
Dir1449095425/
Dir1449095841/
Dir1449096202/
Dir1449096381/
Dir1449096501/
Dir1449097281/
Dir1449100465/
Dir1449104661/
Dir1449104783/
Dir1449105026/
Dir1449105381/
Dir1449105802/
Dir1449106701/
Dir1449106761/
Dir1449108981/
Dir1449109102/
Dir1449113592/
Dir1449114563/
Dir1449116905/
Dir1449117321/
Dir1449123745/
Dir1449124405/
Dir1449125245/
Dir1449125601/
Dir1449128723/
Dir1449131002/
Dir1449131061/
Dir1449131301/
Dir1449132141/
Dir1449134841/
Dir1449136526/
Dir1449136645/
Dir1449136761/
Dir1449136822/
Dir1449137191/
Dir1449138141/
Dir1449140903/
Dir1449141445/
Dir1449141622/
Dir1449141801/
Dir1449143781/
Dir1449149122/
Dir1449150506/
Dir1449151822/
Dir1449151941/
Dir1449156265/
Dir1449158122/
Dir1449158242/
Dir1449159759/
Dir1449163344/
Dir1449167241/
Dir1449171024/
Dir1449171444/
Dir1449171921/
Dir1449173962/
Dir1449174381/
Dir1449177638/
Dir1449178902/
Dir1449180281/
Dir1449180822/
Dir1449183881/
Dir1449184004/
Dir1449185442/
Dir1449185742/
Dir1449185921/
Dir1449185981/
Dir1449187122/
Dir1449187938/
Dir1449189614/
Dir1449190815/
Dir1449191175/
Dir1449191475/
Dir1449191775/
Dir1449192555/
Dir1449195493/
Dir1449197295/
Dir1449198015/
Dir1449199277/
Dir1449199767/
Dir1449200716/
Dir1449202695/
Dir1449203055/
Dir1449203234/
Dir1449203895/
Dir1449205037/
Dir1449206956/
Dir1449209595/
Dir1449211038/
Dir1449224055/
Dir1449224655/
Dir1449225437/
Dir1449227012/
Dir1449237015/
Dir1449238755/
Dir1449238996/
Dir1449239596/
Dir1449240740/
Dir1449240915/
Dir1449241356/
Dir1449241560/
Dir1449241570/
Dir1449248851/
Dir1449249316/
Dir1449251656/
Dir1449253275/
Dir1449254288/
Dir1449255069/
Dir1449256035/
Dir1449256209/
Dir1449259433/
Dir1449263848/
Dir1449263968/
Dir1449264808/
Dir1449264869/
Dir1449265289/
Dir1449266129/
Dir1449271346/
Dir1449273566/
Dir1449280890/
Dir1449281071/
Dir1449281206/
Dir1449283587/
Dir1449287190/
Dir1449292047/
Dir1449296971/
Dir1449299607/
Dir1449305008/
Dir1449308371/
Dir1449309151/
Dir1449320910/
Dir1449329910/
Dir1449331961/
Dir1449346591/
Dir1449347371/
Dir1449348031/
Dir1449351268/
Dir1449393691/
Dir1449420691/
Dir1449428549/
Dir1449436170/
Dir1449444871/
Dir1449453690/
Dir1449454588/
Dir1449454770/
Dir1449463950/
Dir1449466235/
Dir1449467490/
Dir1449483690/
Dir1449487470/
Dir1449491610/
Dir1449496295/
Dir1449497252/
Dir1449500723/
Dir1449504810/
Dir1449506139/
Dir1449516031/
Dir1449527847/
Dir1449529647/
Dir1449530122/
Dir1449531626/
Dir1449531805/
Dir1449534206/
Dir1449560242/
Dir1449562105/
Dir1449564684/
Dir1449564744/
Dir1449570385/
Dir1449570505/
Dir1449593961/
Dir1449597342/
Dir1449597942/
Dir1449599422/
Dir1449604062/
Dir1449604662/
Dir1449605443/
Dir1449606520/
Dir1449606700/
Dir1449613004/
Dir1449614261/
Dir1449614982/
Dir1449615161/
Dir1449626601/
Dir1449630141/
Dir1449630163/
Dir1449630165/
Dir1449630362/
Dir1449630373/
Dir1449630374/
Dir1449630377/
Dir1449630452/
Dir1449630455/
Dir1449630538/
Dir1449630586/
Dir1449630608/
Dir1449630681/
Dir1449630697/
Dir1449630857/
Dir1449635864/
Dir1449654342/
Dir1449654457/
Dir1449656742/
Dir1449660222/
Dir1449660523/
Dir1449668443/
Dir1449673002/
Dir1449673522/
Dir1449674142/
Dir1449676422/
Dir1449676901/
Dir1449677080/
Dir1449677440/
Dir1449678042/
Dir1449678939/
Dir1449679064/
Dir1449679303/
Dir1449680383/
Dir1449684896/
Dir1449685363/
Dir1449695922/
Dir1449696582/
Dir1449697480/
Dir1449697660/
Dir1449700182/
Dir1449700299/
Dir1449700663/
Dir1449701258/
Dir1449703303/
Dir1449714103/
Dir1449715959/
Dir1449719985/
Dir1449737982/
Dir1449738357/
Dir1449738643/
Dir1449742483/
Dir1449747283/
Dir1449750605/
Dir1449752615/
Dir1449761022/
Dir1449761872/
Dir1449763253/
Dir1449766793/
Dir1449767182/
Dir1449767330/
Dir1449767509/
Dir1449767873/
Dir1449771769/
Dir1449772213/
Dir1449772913/
Dir1449773332/
Dir1449774592/
Dir1449775073/
Dir1449779152/
Dir1449779332/
Dir1449779393/
Dir1449779573/
Dir1449780589/
Dir1449780712/
Dir1449782136/
Dir1449782320/
Dir1449782797/
Dir1449783032/
Dir1449783877/
Dir1449784415/
Dir1449788918/
Dir1449793805/
Dir1449797078/
Dir1449802268/
Dir1449804738/
Dir1449814597/
Dir1449815419/
Dir1449818557/
Dir1449821618/
Dir1449821678/
Dir1449821978/
Dir1449822157/
Dir1449822277/
Dir1449824438/
Dir1449824499/
Dir1449826207/
Dir1449830558/
Dir1449837002/
Dir1449845498/
Dir1449847293/
Dir1449847652/
Dir1449847986/
Dir1449848493/
Dir1449850710/
Dir1449852152/
Dir1449852812/
Dir1449853710/
Dir1449855394/
Dir1449857733/
Dir1449858617/
Dir1449858812/
Dir1449861511/
Dir1449862292/
Dir1449863611/
Dir1449869406/
Dir1449898351/
Dir1449901810/
Dir1449930032/
Dir1449934446/
Dir1449946351/
Dir1449947611/
Dir1449948931/
Dir1449954394/
Dir1449955806/
Dir1449968432/
Dir1449976232/
Dir1449977511/
Dir1450045471/
Dir1450045651/
Dir1450053002/
Dir1450054711/
Dir1450056092/
Dir1450056751/
Dir1450056811/
Dir1450060651/
Dir1450061241/
Dir1450074993/
Dir1450079851/
Dir1450080201/
Dir1450080512/
Dir1450081532/
Dir1450082132/
Dir1450085403/
Dir1450087055/
Dir1450091251/
Dir1450096212/
Dir1450103371/
Dir1450103731/
Dir1450103853/
Dir1450104751/
Dir1450105764/
Dir1450107217/
Dir1450109209/
Dir1450112013/
Dir1450112611/
Dir1450116332/
Dir1450117471/
Dir1450117808/
Dir1450119332/
Dir1450122151/
Dir1450122513/
Dir1450122744/
Dir1450123165/
Dir1450123464/
Dir1450123824/
Dir1450125866/
Dir1450126464/
Dir1450128667/
Dir1450128805/
Dir1450129285/
Dir1450129945/
Dir1450130061/
Dir1450132232/
Dir1450133121/
Dir1450133305/
Dir1450134741/
Dir1450137140/
Dir1450137556/
Dir1450137684/
Dir1450138391/
Dir1450138509/
Dir1450139430/
Dir1450144211/
Dir1450144329/
Dir1450150364/
Dir1450150931/
Dir1450151710/
Dir1450153331/
Dir1450157650/
Dir1450160590/
Dir1450173807/
Dir1450182606/
Dir1450186691/
Dir1450187591/
Dir1450187830/
Dir1450188790/
Dir1450188850/
Dir1450189090/
Dir1450190848/
Dir1450191030/
Dir1450192109/
Dir1450192227/
Dir1450195852/
Dir1450201769/
Dir1450204595/
Dir1450205309/
Dir1450205369/
Dir1450207409/
Dir1450214913/
Dir1450217998/
Dir1450218298/
Dir1450218477/
Dir1450219377/
Dir1450219858/
Dir1450220875/
Dir1450221115/
Dir1450223638/
Dir1450223998/
Dir1450224968/
Dir1450226709/
Dir1450228746/
Dir1450230366/
Dir1450230846/
Dir1450236486/
Dir1450239846/
Dir1450245486/
Dir1450254546/
Dir1450256608/
Dir1450257426/
Dir1450259766/
Dir1450259948/
Dir1450260967/
Dir1450262706/
Dir1450263246/
Dir1450263846/
Dir1450263847/
Dir1450264624/
Dir1450264748/
Dir1450265346/
Dir1450266966/
Dir1450269484/
Dir1450270999/
Dir1450273394/
Dir1450276266/
Dir1450276567/
Dir1450278919/
Dir1450280646/
Dir1450282000/
Dir1450282117/
Dir1450282539/
Dir1450286917/
Dir1450287877/
Dir1450298460/
Dir1450298519/
Dir1450298699/
Dir1450298939/
Dir1450298940/
Dir1450299120/
Dir1450299360/
Dir1450300260/
Dir1450300319/
Dir1450300619/
Dir1450301160/
Dir1450301698/
Dir1450301939/
Dir1450302360/
Dir1450302420/
Dir1450303258/
Dir1450304159/
Dir1450305360/
Dir1450306140/
Dir1450306261/
Dir1450306620/
Dir1450306739/
Dir1450307017/
Dir1450310039/
Dir1450310339/
Dir1450311360/
Dir1450312379/
Dir1450313156/
Dir1450314237/
Dir1450317153/
Dir1450317995/
Dir1450320932/
Dir1450321952/
Dir1450322072/
Dir1450322193/
Dir1450322312/
Dir1450323149/
Dir1450324712/
Dir1450328192/
Dir1450337431/
Dir1450337911/
Dir1450338272/
Dir1450338392/
Dir1450338632/
Dir1450339433/
Dir1450344572/
Dir1450346312/
Dir1450350271/
Dir1450353690/
Dir1450358070/
Dir1450364806/
Dir1450365150/
Dir1450366831/
Dir1450369590/
Dir1450370012/
Dir1450370248/
Dir1450370435/
Dir1450373731/
Dir1450373911/
Dir1450377952/
Dir1450379752/
Dir1450380113/
Dir1450381618/
Dir1450381972/
Dir1450383235/
Dir1450383355/
Dir1450386413/
Dir1450387912/
Dir1450390791/
Dir1450390792/
Dir1450391519/
Dir1450391631/
Dir1450392175/
Dir1450393672/
Dir1450397933/
Dir1450399191/
Dir1450400617/
Dir1450404053/
Dir1450404218/
Dir1450405552/
Dir1450408974/
Dir1450410368/
Dir1450410711/
Dir1450421752/
Dir1450421876/
Dir1450426132/
Dir1450426312/
Dir1450427272/
Dir1450428292/
Dir1450429132/
Dir1450429852/
Dir1450433636/
Dir1450434591/
Dir1450440833/
Dir1450443833/
Dir1450445571/
Dir1450447311/
Dir1450448812/
Dir1450448936/
Dir1450450194/
Dir1450451874/
Dir1450452358/
Dir1450454391/
Dir1450454769/
Dir1450455472/
Dir1450456374/
Dir1450457516/
Dir1450457875/
Dir1450457991/
Dir1450464330/
Dir1450464510/
Dir1450465054/
Dir1450465470/
Dir1450466250/
Dir1450467693/
Dir1450468350/
Dir1450469191/
Dir1450471470/
Dir1450473570/
Dir1450473810/
Dir1450475250/
Dir1450476351/
Dir1450476810/
Dir1450477650/
Dir1450478610/
Dir1450480412/
Dir1450481190/
Dir1450481609/
Dir1450487850/
Dir1450488030/
Dir1450489231/
Dir1450495470/
Dir1450536090/
Dir1450559850/
Dir1450572990/
Dir1450622970/
Dir1450665509/
Dir1450674689/
Dir1450685429/
Dir1450687287/
Dir1450688489/
Dir1450690109/
Dir1450690289/
Dir1450690409/
Dir1450690949/
Dir1450691129/
Dir1450692629/
Dir1450693829/
Dir1450694370/
Dir1450695510/
Dir1450697126/
Dir1450699765/
Dir1450708648/
Dir1450708769/
Dir1450710871/
Dir1450711290/
Dir1450711348/
Dir1450715069/
Dir1450716689/
Dir1450718606/
Dir1450721486/
Dir1450721546/
Dir1450722509/
Dir1450723589/
Dir1450724549/
Dir1450727429/
Dir1450729769/
Dir1450730609/
Dir1450732271/
Dir1450732512/
Dir1450733121/
Dir1450733589/
Dir1450734550/
Dir1450737224/
Dir1450737284/
Dir1450737645/
Dir1450737823/
Dir1450738631/
Dir1450738688/
Dir1450743738/
Dir1450744398/
Dir1450744518/
Dir1450745655/
Dir1450745898/
Dir1450746557/
Dir1450748898/
Dir1450753567/
Dir1450753938/
Dir1450760898/
Dir1450763959/
Dir1450765278/
Dir1450766178/
Dir1450766958/
Dir1450767378/
Dir1450767678/
Dir1450773737/
Dir1450776378/
Dir1450779136/
Dir1450781301/
Dir1450784839/
Dir1450786636/
Dir1450789938/
Dir1450790599/
Dir1450791258/
Dir1450792699/
Dir1450793727/
Dir1450793787/
Dir1450795347/
Dir1450797327/
Dir1450798320/
Dir1450800928/
Dir1450801647/
Dir1450802127/
Dir1450802309/
Dir1450803208/
Dir1450804107/
Dir1450805126/
Dir1450808847/
Dir1450809016/
Dir1450814247/
Dir1450814738/
Dir1450817067/
Dir1450818214/
Dir1450819527/
Dir1450820067/
Dir1450821267/
Dir1450821867/
Dir1450822646/
Dir1450826667/
Dir1450827267/
Dir1450830613/
Dir1450831527/
Dir1450832733/
Dir1450836388/
Dir1450837887/
Dir1450838307/
Dir1450843947/
Dir1450846827/
Dir1450852212/
Dir1450853368/
Dir1450855288/
Dir1450860627/
Dir1450863005/
Dir1450863507/
Dir1450867048/
Dir1450871308/
Dir1450873803/
Dir1450879887/
Dir1450880428/
Dir1450881867/
Dir1450882286/
Dir1450882527/
Dir1450882955/
Dir1450883271/
Dir1450886490/
Dir1450886804/
Dir1450887869/
Dir1450888046/
Dir1450889732/
Dir1450889909/
Dir1450892372/
Dir1450895450/
Dir1450897769/
Dir1450900651/
Dir1450901129/
Dir1450901549/
Dir1450902089/
Dir1450902628/
Dir1450903949/
Dir1450904430/
Dir1450904743/
Dir1450904909/
Dir1450906215/
Dir1450906587/
Dir1450907112/
Dir1450908371/
Dir1450908433/
Dir1450914432/
Dir1450916772/
Dir1450917032/
Dir1450918392/
Dir1450918941/
Dir1450922538/
Dir1450923851/
Dir1450925712/
Dir1450926491/
Dir1450927903/
Dir1450928111/
Dir1450928173/
Dir1450930451/
Dir1450933151/
Dir1450933812/
Dir1450937291/
Dir1450938613/
Dir1450949403/
Dir1450953191/
Dir1450956990/
Dir1450960204/
Dir1450975427/
Dir1450978847/
Dir1450979207/
Dir1450979807/
Dir1450981127/
Dir1450981832/
Dir1450984065/
Dir1450984547/
Dir1450984847/
Dir1450986287/
Dir1450991387/
Dir1450993727/
Dir1451003407/
Dir1451011667/
Dir1451014304/
Dir1451082167/
Dir1451089804/
Dir1451094708/
Dir1451128247/
Dir1451133004/
Dir1451155367/
Dir1451165405/
Dir1451172047/
Dir1451176547/
Dir1451187131/
Dir1451212967/
Dir1451219425/
Dir1451229107/
Dir1451229707/
Dir1451230127/
Dir1451230479/
Dir1451245427/
Dir1451251787/
Dir1451251805/
Dir1451253107/
Dir1451255627/
Dir1451260547/
Dir1451295887/
Dir1451296067/
Dir1451297267/
Dir1451300867/
Dir1451304767/
Dir1451305804/
Dir1451311392/
Dir1451315406/
Dir1451316527/
Dir1451328452/
Dir1451332352/
Dir1451333242/
Dir1451338101/
Dir1451342375/
Dir1451342558/
Dir1451342978/
Dir1451343910/
Dir1451345558/
Dir1451346758/
Dir1451349038/
Dir1451349576/
Dir1451349644/
Dir1451349758/
Dir1451354258/
Dir1451354377/
Dir1451357378/
Dir1451364878/
Dir1451377478/
Dir1451378200/
Dir1451380178/
Dir1451380238/
Dir1451380358/
Dir1451382163/
Dir1451383178/
Dir1451386538/
Dir1451387678/
Dir1451388038/
Dir1451389298/
Dir1451390800/
Dir1451395778/
Dir1451397638/
Dir1451397910/
Dir1451399078/
Dir1451399738/
Dir1451400515/
Dir1451403338/
Dir1451403997/
Dir1451404176/
Dir1451405199/
Dir1451407422/
Dir1451412218/
Dir1451412219/
Dir1451412641/
Dir1451412815/
Dir1451414630/
Dir1451421399/
Dir1451421818/
Dir1451424038/
Dir1451428298/
Dir1451429078/
Dir1451431238/
Dir1451432976/
Dir1451435498/
Dir1451445460/
Dir1451446418/
Dir1451454880/
Dir1451463038/
Dir1451465678/
Dir1451469338/
Dir1451469398/
Dir1451471918/
Dir1451474199/
Dir1451476598/
Dir1451478218/
Dir1451478698/
Dir1451482478/
Dir1451484095/
Dir1451484998/
Dir1451495918/
Dir1451497418/
Dir1451500778/
Dir1451501798/
Dir1451502098/
Dir1451503298/
Dir1451505964/
Dir1451506718/
Dir1451506837/
Dir1451507678/
Dir1451510136/
Dir1451511338/
Dir1451511818/
Dir1451513125/
Dir1451513319/
Dir1451514757/
Dir1451515718/
Dir1451515775/
Dir1451515958/
Dir1451516815/
Dir1451517098/
Dir1451517518/
Dir1451518476/
Dir1451519018/
Dir1451519498/
Dir1451519738/
Dir1451521118/
Dir1451521238/
Dir1451521779/
Dir1451522138/
Dir1451526158/
Dir1451528499/
Dir1451531558/
Dir1451532578/
Dir1451533958/
Dir1451536658/
Dir1451538098/
Dir1451540797/
Dir1451547518/
Dir1451549618/
Dir1451557959/
Dir1451565173/
Dir1451565234/
Dir1451565237/
Dir1451565240/
Dir1451565243/
Dir1451565246/
Dir1451568278/
Dir1451569718/
Dir1451585378/
Dir1451587239/
Dir1451590418/
Dir1451591440/
Dir1451594378/
Dir1451597918/
Dir1451598458/
Dir1451601998/
Dir1451602298/
Dir1451604278/
Dir1451604758/
Dir1451606018/
Dir1451606594/
Dir1451606799/
Dir1451607219/
Dir1451617718/
Dir1451642196/
Dir1451645499/
Dir1451657018/
Dir1451665720/
Dir1451681018/
Dir1451686718/
Dir1451694700/
Dir1451699018/
Dir1451786198/
Dir1451791118/
Dir1451858618/
Dir1451858918/
Dir1451859638/
Dir1451859998/
Dir1451863538/
Dir1451864856/
Dir1451872598/
Dir1451876316/
Dir1451877578/
Dir1451887478/
Dir1451887718/
Dir1451894582/
Dir1451894703/
Dir1451894856/
Dir1451895098/
Dir1451895218/
Dir1451895398/
Dir1451908776/
Dir1451910605/
Dir1451911418/
Dir1451911838/
Dir1451915498/
Dir1451918378/
Dir1451919218/
Dir1451920835/
Dir1451921589/
Dir1451923010/
Dir1451929598/
Dir1451932217/
Dir1451932479/
Dir1451934211/
Dir1451934331/
Dir1451934570/
Dir1451935231/
Dir1451936129/
Dir1451936791/
Dir1451937090/
Dir1451937448/
Dir1451937810/
Dir1451940028/
Dir1451941950/
Dir1451942071/
Dir1451943040/
Dir1451943051/
Dir1451943450/
Dir1451943873/
Dir1451944291/
Dir1451945111/
Dir1451945610/
Dir1451945852/
Dir1451946570/
Dir1451947291/
Dir1451947708/
Dir1451948479/
Dir1451949019/
Dir1451949978/
Dir1451953538/
Dir1451953826/
Dir1451954860/
Dir1451954981/
Dir1451955460/
Dir1451956360/
Dir1451959396/
Dir1451962903/
Dir1451963861/
Dir1451964521/
Dir1451964686/
Dir1451966389/
Dir1451966440/
Dir1451966741/
Dir1451973396/
Dir1451978138/
Dir1451985340/
Dir1451986228/
Dir1451986840/
Dir1451987141/
Dir1451987559/
Dir1451988100/
Dir1451988581/
Dir1451991802/
Dir1451991924/
Dir1451992901/
Dir1451997029/
Dir1451998300/
Dir1451999108/
Dir1452003581/
Dir1452005377/
Dir1452007004/
Dir1452008007/
Dir1452008010/
Dir1452008445/
Dir1452010120/
Dir1452010419/
Dir1452012041/
Dir1452012697/
Dir1452012764/
Dir1452012881/
Dir1452013964/
Dir1452014261/
Dir1452014560/
Dir1452014750/
Dir1452017849/
Dir1452018651/
Dir1452021210/
Dir1452021270/
Dir1452024149/
Dir1452024317/
Dir1452024332/
Dir1452024388/
Dir1452025501/
Dir1452025561/
Dir1452025683/
Dir1452026161/
Dir1452026405/
Dir1452027300/
Dir1452028052/
Dir1452028647/
Dir1452029310/
Dir1452029967/
Dir1452032852/
Dir1452035731/
Dir1452040232/
Dir1452041406/
Dir1452041588/
Dir1452045367/
Dir1452045609/
Dir1452045745/
Dir1452045814/
Dir1452045928/
Dir1452046148/
Dir1452047168/
Dir1452047588/
Dir1452048128/
Dir1452048186/
Dir1452048904/
Dir1452049148/
Dir1452049350/
Dir1452051084/
Dir1452053015/
Dir1452053348/
Dir1452055267/
Dir1452055509/
Dir1452055868/
Dir1452056944/
Dir1452060010/
Dir1452060667/
Dir1452062285/
Dir1452065468/
Dir1452069247/
Dir1452069429/
Dir1452072643/
Dir1452074605/
Dir1452075067/
Dir1452082147/
Dir1452082208/
Dir1452085027/
Dir1452088447/
Dir1452089647/
Dir1452091148/
Dir1452091813/
Dir1452091870/
Dir1452092168/
Dir1452094407/
Dir1452094866/
Dir1452095064/
Dir1452097211/
Dir1452099184/
Dir1452099366/
Dir1452100035/
Dir1452100165/
Dir1452104226/
Dir1452104646/
Dir1452104708/
Dir1452107647/
Dir1452108968/
Dir1452109987/
Dir1452110227/
Dir1452110644/
Dir1452110768/
Dir1452111365/
Dir1452111606/
Dir1452113887/
Dir1452114205/
Dir1452114546/
Dir1452115149/
Dir1452115812/
Dir1452116288/
Dir1452117808/
Dir1452118987/
Dir1452119227/
Dir1452119527/
Dir1452119947/
Dir1452121808/
Dir1452121866/
Dir1452123187/
Dir1452123368/
Dir1452123727/
Dir1452124746/
Dir1452126007/
Dir1452126609/
Dir1452127024/
Dir1452130146/
Dir1452131827/
Dir1452135124/
Dir1452136268/
Dir1452136508/
Dir1452137530/
Dir1452137534/
Dir1452142507/
Dir1452143167/
Dir1452143407/
Dir1452143767/
Dir1452146106/
Dir1452147730/
Dir1452148362/
Dir1452150550/
Dir1452151627/
Dir1452153188/
Dir1452158467/
Dir1452159027/
Dir1452159424/
Dir1452160507/
Dir1452161887/
Dir1452165607/
Dir1452165670/
Dir1452167885/
Dir1452169747/
Dir1452169804/
Dir1452170107/
Dir1452171668/
Dir1452172508/
Dir1452173764/
Dir1452176708/
Dir1452180798/
Dir1452181227/
Dir1452182067/
Dir1452182127/
Dir1452182365/
Dir1452182545/
Dir1452184302/
Dir1452184707/
Dir1452185365/
Dir1452188005/
Dir1452189266/
Dir1452189745/
Dir1452190528/
Dir1452190707/
Dir1452190885/
Dir1452191479/
Dir1452191496/
Dir1452192387/
Dir1452194247/
Dir1452194727/
Dir1452195088/
Dir1452197788/
Dir1452198626/
Dir1452199050/
Dir1452202227/
Dir1452204505/
Dir1452205046/
Dir1452207805/
Dir1452209873/
Dir1452210591/
Dir1452211548/
Dir1452212931/
Dir1452215812/
Dir1452215872/
Dir1452218091/
Dir1452219291/
Dir1452221031/
Dir1452223984/
Dir1452224091/
Dir1452224811/
Dir1452225231/
Dir1452225516/
Dir1452225568/
Dir1452225823/
Dir1452225832/
Dir1452225833/
Dir1452225846/
Dir1452225990/
Dir1452226194/
Dir1452226195/
Dir1452226272/
Dir1452226286/
Dir1452226772/
Dir1452226860/
Dir1452227001/
Dir1452227134/
Dir1452227136/
Dir1452227138/
Dir1452227141/
Dir1452227143/
Dir1452227144/
Dir1452227145/
Dir1452227188/
Dir1452227255/
Dir1452227363/
Dir1452227391/
Dir1452227433/
Dir1452227652/
Dir1452227767/
Dir1452227769/
Dir1452228007/
Dir1452228028/
Dir1452228158/
Dir1452228159/
Dir1452228161/
Dir1452228164/
Dir1452229131/
Dir1452231113/
Dir1452234616/
Dir1452234831/
Dir1452239691/
Dir1452241011/
Dir1452242031/
Dir1452242271/
Dir1452245391/
Dir1452245407/
Dir1452247070/
Dir1452247554/
Dir1452248271/
Dir1452249111/
Dir1452256214/
Dir1452257812/
Dir1452263035/
Dir1452264353/
Dir1452266451/
Dir1452267293/
Dir1452269331/
Dir1452269514/
Dir1452269750/
Dir1452272620/
Dir1452277891/
Dir1452279152/
Dir1452279213/
Dir1452280653/
Dir1452280712/
Dir1452280889/
Dir1452284012/
Dir1452285333/
Dir1452285873/
Dir1452286174/
Dir1452287070/
Dir1452288091/
Dir1452288619/
Dir1452289173/
Dir1452290732/
Dir1452292293/
Dir1452299407/
Dir1452307713/
Dir1452310772/
Dir1452311234/
Dir1452311238/
Dir1452311266/
Dir1452311269/
Dir1452311270/
Dir1452311273/
Dir1452311274/
Dir1452311276/
Dir1452311280/
Dir1452311435/
Dir1452311437/
Dir1452311438/
Dir1452311440/
Dir1452311442/
Dir1452311445/
Dir1452311446/
Dir1452311471/
Dir1452311481/
Dir1452311596/
Dir1452311601/
Dir1452311602/
Dir1452311605/
Dir1452311636/
Dir1452311726/
Dir1452311752/
Dir1452311772/
Dir1452311775/
Dir1452311817/
Dir1452311834/
Dir1452311838/
Dir1452311857/
Dir1452311922/
Dir1452312016/
Dir1452312036/
Dir1452312125/
Dir1452312131/
Dir1452312137/
Dir1452312196/
Dir1452312302/
Dir1452312303/
Dir1452312304/
Dir1452312305/
Dir1452312309/
Dir1452312312/
Dir1452312588/
Dir1452312596/
Dir1452312602/
Dir1452312605/
Dir1452312608/
Dir1452312614/
Dir1452312650/
Dir1452312672/
Dir1452312674/
Dir1452312800/
Dir1452312885/
Dir1452312952/
Dir1452312972/
Dir1452312979/
Dir1452312982/
Dir1452312985/
Dir1452312986/
Dir1452313183/
Dir1452313283/
Dir1452313365/
Dir1452313370/
Dir1452313409/
Dir1452313413/
Dir1452313511/
Dir1452313529/
Dir1452313771/
Dir1452313779/
Dir1452313824/
Dir1452313835/
Dir1452313855/
Dir1452313943/
Dir1452313946/
Dir1452313948/
Dir1452313966/
Dir1452314013/
Dir1452314050/
Dir1452314058/
Dir1452314063/
Dir1452319413/
Dir1452320792/
Dir1452321046/
Dir1452326630/
Dir1452338012/
Dir1452342606/
Dir1452369393/
Dir1452369634/
Dir1452372932/
Dir1452378754/
Dir1452380852/
Dir1452382893/
Dir1452383972/
Dir1452385811/
Dir1452401253/
Dir1452403593/
Dir1452434613/
Dir1452435212/
Dir1452439962/
Dir1452462993/
Dir1452463233/
Dir1452465632/
Dir1452468512/
Dir1452469352/
Dir1452469772/
Dir1452472207/
Dir1452478660/
Dir1452480634/
Dir1452483321/
Dir1452486896/
Dir1452489569/
Dir1452492232/
Dir1452493652/
Dir1452493834/
Dir1452496353/
Dir1452500794/
Dir1452502233/
Dir1452504607/
Dir1452507093/
Dir1452509913/
Dir1452511052/
Dir1452511173/
Dir1452515406/
Dir1452515612/
Dir1452521133/
Dir1452521613/
Dir1452524179/
Dir1452525330/
Dir1452525447/
Dir1452526463/
Dir1452526465/
Dir1452529524/
Dir1452532529/
Dir1452534928/
Dir1452536068/
Dir1452536548/
Dir1452537079/
Dir1452537394/
Dir1452537690/
Dir1452537994/
Dir1452538048/
Dir1452538468/
Dir1452540092/
Dir1452542496/
Dir1452543509/
Dir1452544412/
Dir1452545250/
Dir1452545852/
Dir1452547712/
Dir1452547819/
Dir1452547829/
Dir1452549452/
Dir1452550114/
Dir1452550228/
Dir1452550892/
Dir1452556877/
Dir1452557180/
Dir1452557241/
Dir1452557299/
Dir1452557359/
Dir1452558440/
Dir1452558664/
Dir1452560360/
Dir1452561502/
Dir1452563899/
Dir1452564619/
Dir1452566121/
Dir1452568557/
Dir1452568675/
Dir1452568793/
Dir1452569573/
Dir1452571559/
Dir1452572093/
Dir1452572395/
Dir1452575335/
Dir1452577974/
Dir1452579355/
Dir1452579536/
Dir1452580214/
Dir1452582955/
Dir1452583316/
Dir1452585056/
Dir1452585175/
Dir1452585295/
Dir1452585475/
Dir1452588474/
Dir1452589315/
Dir1452590456/
Dir1452591534/
Dir1452592555/
Dir1452594295/
Dir1452595491/
Dir1452596217/
Dir1452597115/
Dir1452597896/
Dir1452598974/
Dir1452601736/
Dir1452601814/
Dir1452604916/
Dir1452605215/
Dir1452607546/
Dir1452608146/
Dir1452608387/
Dir1452609045/
Dir1452610183/
Dir1452612977/
Dir1452617026/
Dir1452617146/
Dir1452617276/
Dir1452617332/
Dir1452617333/
Dir1452617385/
Dir1452617445/
Dir1452617684/
Dir1452618235/
Dir1452618405/
Dir1452618465/
Dir1452618587/
Dir1452619125/
Dir1452619246/
Dir1452619845/
Dir1452619965/
Dir1452620084/
Dir1452621465/
Dir1452622653/
Dir1452623070/
Dir1452623498/
Dir1452625596/
Dir1452625709/
Dir1452625832/
Dir1452626130/
Dir1452626370/
Dir1452629730/
Dir1452630390/
Dir1452630451/
Dir1452632745/
Dir1452633751/
Dir1452634214/
Dir1452634349/
Dir1452634473/
Dir1452634651/
Dir1452635070/
Dir1452636031/
Dir1452637650/
Dir1452637711/
Dir1452638130/
Dir1452638910/
Dir1452639391/
Dir1452639750/
Dir1452641373/
Dir1452641491/
Dir1452641969/
Dir1452642031/
Dir1452643520/
Dir1452643531/
Dir1452643532/
Dir1452644311/
Dir1452645008/
Dir1452645930/
Dir1452646291/
Dir1452646532/
Dir1452647193/
Dir1452647430/
Dir1452647491/
Dir1452649831/
Dir1452650310/
Dir1452651690/
Dir1452653791/
Dir1452656730/
Dir1452659970/
Dir1452666708/
Dir1452669210/
Dir1452674611/
Dir1452676410/
Dir1452676950/
Dir1452677251/
Dir1452677314/
Dir1452677451/
Dir1452680311/
Dir1452680850/
Dir1452682771/
Dir1452684510/
Dir1452686070/
Dir1452688221/
Dir1452690090/
Dir1452690991/
Dir1452693921/
Dir1452696454/
Dir1452697172/
Dir1452699113/
Dir1452699451/
Dir1452699990/
Dir1452700833/
Dir1452704911/
Dir1452705930/
Dir1452706231/
Dir1452709531/
Dir1452709875/
Dir1452711511/
Dir1452711631/
Dir1452712291/
Dir1452712891/
Dir1452714031/
Dir1452714271/
Dir1452714454/
Dir1452715292/
Dir1452716311/
Dir1452717930/
Dir1452717991/
Dir1452718051/
Dir1452718232/
Dir1452718711/
Dir1452718831/
Dir1452719072/
Dir1452719970/
Dir1452720626/
Dir1452722970/
Dir1452724471/
Dir1452726223/
Dir1452726870/
Dir1452727050/
Dir1452728551/
Dir1452728611/
Dir1452728791/
Dir1452729093/
Dir1452730535/
Dir1452731370/
Dir1452732752/
Dir1452734792/
Dir1452734912/
Dir1452735271/
Dir1452738935/
Dir1452739469/
Dir1452740672/
Dir1452742482/
Dir1452742778/
Dir1452744092/
Dir1452745030/
Dir1452746796/
Dir1452748834/
Dir1452750751/
Dir1452751231/
Dir1452751599/
Dir1452753511/
Dir1452754833/
Dir1452755253/
Dir1452755371/
Dir1452755611/
Dir1452756992/
Dir1452758848/
Dir1452761071/
Dir1452762991/
Dir1452763111/
Dir1452763233/
Dir1452763651/
Dir1452763769/
Dir1452763841/
Dir1452764071/
Dir1452764732/
Dir1452768391/
Dir1452769112/
Dir1452770191/
Dir1452774618/
Dir1452774930/
Dir1452777272/
Dir1452780150/
Dir1452780931/
Dir1452781111/
Dir1452781352/
Dir1452781471/
Dir1452781530/
Dir1452781951/
Dir1452785653/
Dir1452787591/
Dir1452788006/
Dir1452788009/
Dir1452788013/
Dir1452788016/
Dir1452789718/
Dir1452793498/
Dir1452794936/
Dir1452796281/
Dir1452796796/
Dir1452797036/
Dir1452797396/
Dir1452798718/
Dir1452799436/
Dir1452800456/
Dir1452800996/
Dir1452801056/
Dir1452803817/
Dir1452803876/
Dir1452803936/
Dir1452804956/
Dir1452805437/
Dir1452806457/
Dir1452807012/
Dir1452807116/
Dir1452807956/
Dir1452808017/
Dir1452808617/
Dir1452809276/
Dir1452809576/
Dir1452811494/
Dir1452811619/
Dir1452812217/
Dir1452812516/
Dir1452812635/
Dir1452813837/
Dir1452817853/
Dir1452818759/
Dir1452820902/
Dir1452825462/
Dir1452826782/
Dir1452828697/
Dir1452839201/
Dir1452842022/
Dir1452842200/
Dir1452843341/
Dir1452844962/
Dir1452845441/
Dir1452846401/
Dir1452846821/
Dir1452847601/
Dir1452848621/
Dir1452850231/
Dir1452851322/
Dir1452853721/
Dir1452854985/
Dir1452861581/
Dir1452866381/
Dir1452868000/
Dir1452870502/
Dir1452872060/
Dir1452872062/
Dir1452872451/
Dir1452874903/
Dir1452875564/
Dir1452876821/
Dir1452876941/
Dir1452878730/
Dir1452879561/
Dir1452880342/
Dir1452881145/
Dir1452881482/
Dir1452881601/
Dir1452881722/
Dir1452881901/
Dir1452882084/
Dir1452882659/
Dir1452882676/
Dir1452882867/
Dir1452883044/
Dir1452883163/
Dir1452884784/
Dir1452886101/
Dir1452887962/
Dir1452888021/
Dir1452888562/
Dir1452888865/
Dir1452889161/
Dir1452891142/
Dir1452891204/
Dir1452892102/
Dir1452892881/
Dir1452893122/
Dir1452896001/
Dir1452896481/
Dir1452899663/
Dir1452902121/
Dir1452902181/
Dir1452904161/
Dir1452904209/
Dir1452905722/
Dir1452908001/
Dir1452915169/
Dir1452918441/
Dir1452918781/
Dir1452926962/
Dir1452927321/
Dir1452927621/
Dir1452936637/
Dir1452938546/
Dir1452947410/
Dir1452961101/
Dir1452969084/
Dir1452982461/
Dir1452983602/
Dir1452984260/
Dir1452996861/
Dir1453000021/
Dir1453001784/
Dir1453050211/
Dir1453051401/
Dir1453053321/
Dir1453055490/
Dir1453055601/
Dir1453056322/
Dir1453058381/
Dir1453061242/
Dir1453066220/
Dir1453068147/
Dir1453071021/
Dir1453077001/
Dir1453079061/
Dir1453086025/
Dir1453086981/
Dir1453087221/
Dir1453087893/
Dir1453092082/
Dir1453094840/
Dir1453098141/
Dir1453102042/
Dir1453102161/
Dir1453103724/
Dir1453105486/
Dir1453108161/
Dir1453108401/
Dir1453109842/
Dir1453115063/
Dir1453117162/
Dir1453119202/
Dir1453120205/
Dir1453123462/
Dir1453125083/
Dir1453133791/
Dir1453133910/
Dir1453137270/
Dir1453138050/
Dir1453138172/
Dir1453138533/
Dir1453138592/
Dir1453139611/
Dir1453140271/
Dir1453141865/
Dir1453141951/
Dir1453142188/
Dir1453147471/
Dir1453148675/
Dir1453148732/
Dir1453152614/
Dir1453153230/
Dir1453155331/
Dir1453157013/
Dir1453157196/
Dir1453157255/
Dir1453158396/
Dir1453158635/
Dir1453160257/
Dir1453167276/
Dir1453171656/
Dir1453179216/
Dir1453180834/
Dir1453182517/
Dir1453185222/
Dir1453185399/
Dir1453189657/
Dir1453190136/
Dir1453190378/
Dir1453191876/
Dir1453193376/
Dir1453193436/
Dir1453198427/
Dir1453199442/
Dir1453201536/
Dir1453205135/
Dir1453207956/
Dir1453212696/
Dir1453212756/
Dir1453213835/
Dir1453213896/
Dir1453214136/
Dir1453216372/
Dir1453216906/
Dir1453217815/
Dir1453219437/
Dir1453220711/
Dir1453221872/
Dir1453223792/
Dir1453225055/
Dir1453225892/
Dir1453226553/
Dir1453226672/
Dir1453228172/
Dir1453228535/
Dir1453230250/
Dir1453230813/
Dir1453230932/
Dir1453231294/
Dir1453232256/
Dir1453232676/
Dir1453235496/
Dir1453236577/
Dir1453237595/
Dir1453239576/
Dir1453240476/
Dir1453240536/
Dir1453240655/
Dir1453242152/
Dir1453242632/
Dir1453243237/
Dir1453243595/
Dir1453243895/
Dir1453244072/
Dir1453244195/
Dir1453244255/
Dir1453244315/
Dir1453244737/
Dir1453247297/
Dir1453248377/
Dir1453248438/
Dir1453248439/
Dir1453249757/
Dir1453250057/
Dir1453251742/
Dir1453251977/
Dir1453252277/
Dir1453256897/
Dir1453261349/
Dir1453261425/
Dir1453261428/
Dir1453261584/
Dir1453261586/
Dir1453261620/
Dir1453261921/
Dir1453262008/
Dir1453262011/
Dir1453262013/
Dir1453262157/
Dir1453262159/
Dir1453262162/
Dir1453262165/
Dir1453262179/
Dir1453262195/
Dir1453262245/
Dir1453262249/
Dir1453262251/
Dir1453262252/
Dir1453262365/
Dir1453262443/
Dir1453262444/
Dir1453262447/
Dir1453262463/
Dir1453262680/
Dir1453262865/
Dir1453262879/
Dir1453262936/
Dir1453263144/
Dir1453263425/
Dir1453263495/
Dir1453263497/
Dir1453263591/
Dir1453263695/
Dir1453263702/
Dir1453263705/
Dir1453263706/
Dir1453263771/
Dir1453263783/
Dir1453263832/
Dir1453264024/
Dir1453264047/
Dir1453264222/
Dir1453264486/
Dir1453264676/
Dir1453264683/
Dir1453264751/
Dir1453264784/
Dir1453264832/
Dir1453264867/
Dir1453279457/
Dir1453279877/
Dir1453280057/
Dir1453280345/
Dir1453280356/
Dir1453280357/
Dir1453280926/
Dir1453280927/
Dir1453281197/
Dir1453281437/
Dir1453281497/
Dir1453282098/
Dir1453282337/
Dir1453282937/
Dir1453283057/
Dir1453283298/
Dir1453284917/
Dir1453286240/
Dir1453286777/
Dir1453286897/
Dir1453287437/
Dir1453287681/
Dir1453289479/
Dir1453294577/
Dir1453295357/
Dir1453295717/
Dir1453296137/
Dir1453297397/
Dir1453297638/
Dir1453297699/
Dir1453298838/
Dir1453299737/
Dir1453300639/
Dir1453300817/
Dir1453300937/
Dir1453302087/
Dir1453302744/
Dir1453303165/
Dir1453304130/
Dir1453305565/
Dir1453310726/
Dir1453312466/
Dir1453312825/
Dir1453313016/
Dir1453313666/
Dir1453314446/
Dir1453314687/
Dir1453314749/
Dir1453314803/
Dir1453314923/
Dir1453315227/
Dir1453315282/
Dir1453315794/
Dir1453316760/
Dir1453317357/
Dir1453317717/
Dir1453322066/
Dir1453322906/
Dir1453323026/
Dir1453323265/
Dir1453323682/
Dir1453323683/
Dir1453325245/
Dir1453326505/
Dir1453335621/
Dir1453335681/
Dir1453335739/
Dir1453335740/
Dir1453335860/
Dir1453335861/
Dir1453335918/
Dir1453336101/
Dir1453336520/
Dir1453344200/
Dir1453344288/
Dir1453347708/
Dir1453352002/
Dir1453352120/
Dir1453352183/
Dir1453352241/
Dir1453353505/
Dir1453354641/
Dir1453357460/
Dir1453358780/
Dir1453358960/
Dir1453359082/
Dir1453362500/
Dir1453363220/
Dir1453363354/
Dir1453364550/
Dir1453364720/
Dir1453364780/
Dir1453364900/
Dir1453371020/
Dir1453374500/
Dir1453375520/
Dir1453375821/
Dir1453377205/
Dir1453378400/
Dir1453380083/
Dir1453381886/
Dir1453382000/
Dir1453382480/
Dir1453382660/
Dir1453382780/
Dir1453382842/
Dir1453382960/
Dir1453383860/
Dir1453384520/
Dir1453385720/
Dir1453388000/
Dir1453388122/
Dir1453390558/
Dir1453390782/
Dir1453391486/
Dir1453395202/
Dir1453395861/
Dir1453396101/
Dir1453396410/
Dir1453396525/
Dir1453399100/
Dir1453399944/
Dir1453400299/
Dir1453400423/
Dir1453403481/
Dir1453403683/
Dir1453405221/
Dir1453406902/
Dir1453408040/
Dir1453408160/
Dir1453412489/
Dir1453413330/
Dir1453413630/
Dir1453413689/
Dir1453414231/
Dir1453414769/
Dir1453414949/
Dir1453415550/
Dir1453416269/
Dir1453418430/
Dir1453418431/
Dir1453418491/
Dir1453418730/
Dir1453419690/
Dir1453420829/
Dir1453421789/
Dir1453422210/
Dir1453424190/
Dir1453424969/
Dir1453426028/
Dir1453426170/
Dir1453426467/
Dir1453426471/
Dir1453426475/
Dir1453426479/
Dir1453426483/
Dir1453426649/
Dir1453427249/
Dir1453427250/
Dir1453428870/
Dir1453430808/
Dir1453430885/
Dir1453431091/
Dir1453432769/
Dir1453432953/
Dir1453433669/
Dir1453435586/
Dir1453435710/
Dir1453444356/
Dir1453445069/
Dir1453445973/
Dir1453446569/
Dir1453447049/
Dir1453448429/
Dir1453448669/
Dir1453448968/
Dir1453449389/
Dir1453450169/
Dir1453453109/
Dir1453453888/
Dir1453454069/
Dir1453454551/
Dir1453454729/
Dir1453455206/
Dir1453457729/
Dir1453457907/
Dir1453459649/
Dir1453463849/
Dir1453465649/
Dir1453465839/
Dir1453465949/
Dir1453466549/
Dir1453467869/
Dir1453468169/
Dir1453468349/
Dir1453470389/
Dir1453472069/
Dir1453473449/
Dir1453474289/
Dir1453474352/
Dir1453477892/
Dir1453477949/
Dir1453478189/
Dir1453478325/
Dir1453478909/
Dir1453479208/
Dir1453480288/
Dir1453480530/
Dir1453481250/
Dir1453482929/
Dir1453483470/
Dir1453483833/
Dir1453484432/
Dir1453485870/
Dir1453485953/
Dir1453486827/
Dir1453487792/
Dir1453487967/
Dir1453488153/
Dir1453488267/
Dir1453488389/
Dir1453489650/
Dir1453490250/
Dir1453494390/
Dir1453494449/
Dir1453494569/
Dir1453494629/
Dir1453494869/
Dir1453496849/
Dir1453498229/
Dir1453498829/
Dir1453499249/
Dir1453499730/
Dir1453500509/
Dir1453502550/
Dir1453502609/
Dir1453505009/
Dir1453506269/
Dir1453507470/
Dir1453508909/
Dir1453511670/
Dir1453512509/
Dir1453513349/
Dir1453513409/
Dir1453513950/
Dir1453514787/
Dir1453518749/
Dir1453520247/
Dir1453527509/
Dir1453527749/
Dir1453532669/
Dir1453533211/
Dir1453534049/
Dir1453535849/
Dir1453552049/
Dir1453563989/
Dir1453564229/
Dir1453565969/
Dir1453568069/
Dir1453569269/
Dir1453578269/
Dir1453583249/
Dir1453589820/
Dir1453589962/
Dir1453589965/
Dir1453589976/
Dir1453589978/
Dir1453590006/
Dir1453590014/
Dir1453590018/
Dir1453590144/
Dir1453590260/
Dir1453590265/
Dir1453590266/
Dir1453590269/
Dir1453590271/
Dir1453590293/
Dir1453590501/
Dir1453590571/
Dir1453590640/
Dir1453590713/
Dir1453590764/
Dir1453590766/
Dir1453590849/
Dir1453590852/
Dir1453590856/
Dir1453590880/
Dir1453590998/
Dir1453590999/
Dir1453591010/
Dir1453591015/
Dir1453591016/
Dir1453591019/
Dir1453591022/
Dir1453591023/
Dir1453591148/
Dir1453591237/
Dir1453591340/
Dir1453591496/
Dir1453591562/
Dir1453591566/
Dir1453591724/
Dir1453591745/
Dir1453591759/
Dir1453591836/
Dir1453591838/
Dir1453591862/
Dir1453591893/
Dir1453591898/
Dir1453591989/
Dir1453592013/
Dir1453592093/
Dir1453592211/
Dir1453592215/
Dir1453592217/
Dir1453592243/
Dir1453592267/
Dir1453592270/
Dir1453592273/
Dir1453592274/
Dir1453592278/
Dir1453592280/
Dir1453592283/
Dir1453592286/
Dir1453592341/
Dir1453592342/
Dir1453592607/
Dir1453592637/
Dir1453592697/
Dir1453592753/
Dir1453592830/
Dir1453592867/
Dir1453592964/
Dir1453593000/
Dir1453593003/
Dir1453593005/
Dir1453593008/
Dir1453593010/
Dir1453593133/
Dir1453593228/
Dir1453593253/
Dir1453593256/
Dir1453593258/
Dir1453593263/
Dir1453593285/
Dir1453593291/
Dir1453593295/
Dir1453593320/
Dir1453593325/
Dir1453593327/
Dir1453593338/
Dir1453593417/
Dir1453593471/
Dir1453593493/
Dir1453593653/
Dir1453598407/
Dir1453600508/
Dir1453600687/
Dir1453602008/
Dir1453602487/
Dir1453603746/
Dir1453623787/
Dir1453629826/
Dir1453647608/
Dir1453670107/
Dir1453670287/
Dir1453672808/
Dir1453675627/
Dir1453677427/
Dir1453680068/
Dir1453682407/
Dir1453682707/
Dir1453683547/
Dir1453683826/
Dir1453685602/
Dir1453690267/
Dir1453691707/
Dir1453693747/
Dir1453693987/
Dir1453695247/
Dir1453695307/
Dir1453696569/
Dir1453697826/
Dir1453704427/
Dir1453705208/
Dir1453705687/
Dir1453711566/
Dir1453721105/
Dir1453722309/
Dir1453732464/
Dir1453733904/
Dir1453734931/
Dir1453734985/
Dir1453735105/
Dir1453737926/
Dir1453738105/
Dir1453739305/
Dir1453739907/
Dir1453743922/
Dir1453747585/
Dir1453748066/
Dir1453748707/
Dir1453748837/
Dir1453752266/
Dir1453752267/
Dir1453752805/
Dir1453753225/
Dir1453756466/
Dir1453757604/
Dir1453759164/
Dir1453759642/
Dir1453760065/
Dir1453762345/
Dir1453763667/
Dir1453763788/
Dir1453768709/
Dir1453769129/
Dir1453771709/
Dir1453772067/
Dir1453775725/
Dir1453779264/
Dir1453787549/
Dir1453790191/
Dir1453793968/
Dir1453794568/
Dir1453795108/
Dir1453795480/
Dir1453800750/
Dir1453802189/
Dir1453802550/
Dir1453802667/
Dir1453802968/
Dir1453803628/
Dir1453804348/
Dir1453804529/
Dir1453805428/
Dir1453806389/
Dir1453807589/
Dir1453807645/
Dir1453808789/
Dir1453809089/
Dir1453809333/
Dir1453811067/
Dir1453812326/
Dir1453812627/
Dir1453813109/
Dir1453813768/
Dir1453814247/
Dir1453815148/
Dir1453816526/
Dir1453818029/
Dir1453818989/
Dir1453821147/
Dir1453822090/
Dir1453824088/
Dir1453824290/
Dir1453826001/
Dir1453826671/
Dir1453827275/
Dir1453828648/
Dir1453829369/
Dir1453830685/
Dir1453830989/
Dir1453831355/
Dir1453831958/
Dir1453833154/
Dir1453833205/
Dir1453833569/
Dir1453834469/
Dir1453835370/
Dir1453835547/
Dir1453835969/
Dir1453838188/
Dir1453838487/
Dir1453838646/
Dir1453840290/
Dir1453841248/
Dir1453841365/
Dir1453841789/
Dir1453842158/
Dir1453842248/
Dir1453842808/
Dir1453843470/
Dir1453844488/
Dir1453844851/
Dir1453848621/
Dir1453850541/
Dir1453851321/
Dir1453857985/
Dir1453862002/
Dir1453862299/
Dir1453862960/
Dir1453865646/
Dir1453867500/
Dir1453867522/
Dir1453873289/
Dir1453873370/
Dir1453873829/
Dir1453874249/
Dir1453874369/
Dir1453874972/
Dir1453875389/
Dir1453875485/
Dir1453875626/
Dir1453875630/
Dir1453875631/
Dir1453875633/
Dir1453875634/
Dir1453875637/
Dir1453875642/
Dir1453875702/
Dir1453875879/
Dir1453875918/
Dir1453876207/
Dir1453876212/
Dir1453876213/
Dir1453876291/
Dir1453876490/
Dir1453876503/
Dir1453876720/
Dir1453876815/
Dir1453876818/
Dir1453876925/
Dir1453876928/
Dir1453876929/
Dir1453876934/
Dir1453877198/
Dir1453877283/
Dir1453877392/
Dir1453877851/
Dir1453877855/
Dir1453877856/
Dir1453877864/
Dir1453878299/
Dir1453878509/
Dir1453878552/
Dir1453879769/
Dir1453881929/
Dir1453883009/
Dir1453883549/
Dir1453884209/
Dir1453889129/
Dir1453889261/
Dir1453889549/
Dir1453890029/
Dir1453890328/
Dir1453890449/
Dir1453890631/
Dir1453890749/
Dir1453890808/
Dir1453890929/
Dir1453890990/
Dir1453891051/
Dir1453891169/
Dir1453891409/
Dir1453892069/
Dir1453892370/
Dir1453892371/
Dir1453892550/
Dir1453893089/
Dir1453897409/
Dir1453898189/
Dir1453898489/
Dir1453899509/
Dir1453905029/
Dir1453905660/
Dir1453906740/
Dir1453907640/
Dir1453907880/
Dir1453908702/
Dir1453908703/
Dir1453909587/
Dir1453910651/
Dir1453910707/
Dir1453911660/
Dir1453915020/
Dir1453915218/
Dir1453915861/
Dir1453916217/
Dir1453916476/
Dir1453916519/
Dir1453916820/
Dir1453917063/
Dir1453917960/
Dir1453919340/
Dir1453922820/
Dir1453922880/
Dir1453926480/
Dir1453927560/
Dir1453927620/
Dir1453927860/
Dir1453929360/
Dir1453929600/
Dir1453930320/
Dir1453933199/
Dir1453933560/
Dir1453934699/
Dir1453935240/
Dir1453935420/
Dir1453935599/
Dir1453936199/
Dir1453936320/
Dir1453937519/
Dir1453938000/
Dir1453939920/
Dir1453942437/
Dir1453944239/
Dir1453944360/
Dir1453945320/
Dir1453945618/
Dir1453947001/
Dir1453948620/
Dir1453949820/
Dir1453951200/
Dir1453951970/
Dir1453955439/
Dir1453955879/
Dir1453959540/
Dir1453960740/
Dir1453967221/
Dir1453967699/
Dir1453968480/
Dir1453968960/
Dir1453969440/
Dir1453969859/
Dir1453969980/
Dir1453971238/
Dir1453973457/
Dir1453973520/
Dir1453976937/
Dir1453977599/
Dir1453977780/
Dir1453978560/
Dir1453980540/
Dir1453988520/
Dir1453989480/
Dir1453994640/
Dir1453994940/
Dir1453995280/
Dir1453995659/
Dir1453995840/
Dir1453997100/
Dir1453999440/
Dir1454001806/
Dir1454003426/
Dir1454003667/
Dir1454004086/
Dir1454006426/
Dir1454011230/
Dir1454011706/
Dir1454012366/
Dir1454014706/
Dir1454014885/
Dir1454015908/
Dir1454018065/
Dir1454021005/
Dir1454021486/
Dir1454021545/
Dir1454022505/
Dir1454022984/
Dir1454023825/
Dir1454024125/
Dir1454027005/
Dir1454029285/
Dir1454031565/
Dir1454032287/
Dir1454032465/
Dir1454033163/
Dir1454033164/
Dir1454036365/
Dir1454037326/
Dir1454037874/
Dir1454039665/
Dir1454042965/
Dir1454043025/
Dir1454043445/
Dir1454044347/
Dir1454049924/
Dir1454053705/
Dir1454054426/
Dir1454056166/
Dir1454057908/
Dir1454059106/
Dir1454064565/
Dir1454064805/
Dir1454064926/
Dir1454065047/
Dir1454065445/
Dir1454066185/
Dir1454071944/
Dir1454072365/
Dir1454075605/
Dir1454077945/
Dir1454078787/
Dir1454081129/
Dir1454081725/
Dir1454082025/
Dir1454086707/
Dir1454091386/
Dir1454091756/
Dir1454092310/
Dir1454100274/
Dir1454100334/
Dir1454100373/
Dir1454100389/
Dir1454100393/
Dir1454100400/
Dir1454100428/
Dir1454100444/
Dir1454100448/
Dir1454100526/
Dir1454100556/
Dir1454100616/
Dir1454100630/
Dir1454100635/
Dir1454100637/
Dir1454100640/
Dir1454100665/
Dir1454100675/
Dir1454100733/
Dir1454100739/
Dir1454100829/
Dir1454100849/
Dir1454100855/
Dir1454100870/
Dir1454100871/
Dir1454100911/
Dir1454100964/
Dir1454100966/
Dir1454100967/
Dir1454100970/
Dir1454100972/
Dir1454100981/
Dir1454101016/
Dir1454101091/
Dir1454101125/
Dir1454101234/
Dir1454101467/
Dir1454101527/
Dir1454101641/
Dir1454101715/
Dir1454101833/
Dir1454101854/
Dir1454101986/
Dir1454102162/
Dir1454102165/
Dir1454102504/
Dir1454102571/
Dir1454102581/
Dir1454102685/
Dir1454102687/
Dir1454102765/
Dir1454103805/
Dir1454104105/
Dir1454104705/
Dir1454105246/
Dir1454106085/
Dir1454106325/
Dir1454106626/
Dir1454106985/
Dir1454107886/
Dir1454108305/
Dir1454108769/
Dir1454108937/
Dir1454109089/
Dir1454109505/
Dir1454109587/
Dir1454109795/
Dir1454110105/
Dir1454110108/
Dir1454110112/
Dir1454110115/
Dir1454110118/
Dir1454110123/
Dir1454110464/
Dir1454110656/
Dir1454110667/
Dir1454110672/
Dir1454110677/
Dir1454110885/
Dir1454111159/
Dir1454111171/
Dir1454113849/
Dir1454115385/
Dir1454118806/
Dir1454125765/
Dir1454126185/
Dir1454126366/
Dir1454142085/
Dir1454146232/
Dir1454171616/
Dir1454173646/
Dir1454175265/
Dir1454175866/
Dir1454177905/
Dir1454178505/
Dir1454185346/
Dir1454185349/
Dir1454185403/
Dir1454185413/
Dir1454185475/
Dir1454185478/
Dir1454185524/
Dir1454185591/
Dir1454185593/
Dir1454185596/
Dir1454185604/
Dir1454185609/
Dir1454185693/
Dir1454185702/
Dir1454185704/
Dir1454185757/
Dir1454185760/
Dir1454185794/
Dir1454185797/
Dir1454185800/
Dir1454185804/
Dir1454185805/
Dir1454185807/
Dir1454185810/
Dir1454185814/
Dir1454185943/
Dir1454185957/
Dir1454186058/
Dir1454186071/
Dir1454186109/
Dir1454186182/
Dir1454186184/
Dir1454186187/
Dir1454186189/
Dir1454186257/
Dir1454186277/
Dir1454186284/
Dir1454186285/
Dir1454186317/
Dir1454186444/
Dir1454186447/
Dir1454186593/
Dir1454186670/
Dir1454186758/
Dir1454186763/
Dir1454186766/
Dir1454186768/
Dir1454186787/
Dir1454186823/
Dir1454186827/
Dir1454186829/
Dir1454186930/
Dir1454186963/
Dir1454186969/
Dir1454186986/
Dir1454186991/
Dir1454187038/
Dir1454187067/
Dir1454187113/
Dir1454187123/
Dir1454187198/
Dir1454187259/
Dir1454187312/
Dir1454187432/
Dir1454187454/
Dir1454187524/
Dir1454187576/
Dir1454187589/
Dir1454187626/
Dir1454187629/
Dir1454187636/
Dir1454187706/
Dir1454187740/
Dir1454187741/
Dir1454187742/
Dir1454187745/
Dir1454187748/
Dir1454187837/
Dir1454187839/
Dir1454187843/
Dir1454187845/
Dir1454187846/
Dir1454187855/
Dir1454187858/
Dir1454187860/
Dir1454187862/
Dir1454187863/
Dir1454187961/
Dir1454202745/
Dir1454228906/
Dir1454230165/
Dir1454245286/
Dir1454252065/
Dir1454253206/
Dir1454263886/
Dir1454269586/
Dir1454270366/
Dir1454281586/
Dir1454281765/
Dir1454285485/
Dir1454286685/
Dir1454289625/
Dir1454290045/
Dir1454291968/
Dir1454295026/
Dir1454295446/
Dir1454297305/
Dir1454301324/
Dir1454309607/
Dir1454313827/
Dir1454314225/
Dir1454314465/
Dir1454314945/
Dir1454315065/
Dir1454315245/
Dir1454316025/
Dir1454316085/
Dir1454317228/
Dir1454317765/
Dir1454317886/
Dir1454329526/
Dir1454337028/
Dir1454337204/
Dir1454339484/
Dir1454339906/
Dir1454339964/
Dir1454340805/
Dir1454342366/
Dir1454343629/
Dir1454345666/
Dir1454345726/
Dir1454345786/
Dir1454346685/
Dir1454348785/
Dir1454351906/
Dir1454354186/
Dir1454356165/
Dir1454358627/
Dir1454360253/
Dir1454360431/
Dir1454361751/
Dir1454362775/
Dir1454363370/
Dir1454364030/
Dir1454364272/
Dir1454364396/
Dir1454366119/
Dir1454366899/
Dir1454367199/
Dir1454367319/
Dir1454367975/
Dir1454369838/
Dir1454371579/
Dir1454371580/
Dir1454371698/
Dir1454371879/
Dir1454372479/
Dir1454372719/
Dir1454373015/
Dir1454374095/
Dir1454374817/
Dir1454380574/
Dir1454380587/
Dir1454380588/
Dir1454380590/
Dir1454380591/
Dir1454380602/
Dir1454380606/
Dir1454380610/
Dir1454380630/
Dir1454380641/
Dir1454380642/
Dir1454380654/
Dir1454380655/
Dir1454380658/
Dir1454380659/
Dir1454380666/
Dir1454380668/
Dir1454380674/
Dir1454380680/
Dir1454380681/
Dir1454380685/
Dir1454380686/
Dir1454380693/
Dir1454380694/
Dir1454380700/
Dir1454380701/
Dir1454380702/
Dir1454380713/
Dir1454380715/
Dir1454380716/
Dir1454380725/
Dir1454380726/
Dir1454380727/
Dir1454380728/
Dir1454380729/
Dir1454380730/
Dir1454380745/
Dir1454380746/
Dir1454380748/
Dir1454380749/
Dir1454380755/
Dir1454380757/
Dir1454380761/
Dir1454380769/
Dir1454380782/
Dir1454380785/
Dir1454380789/
Dir1454380798/
Dir1454380818/
Dir1454380819/
Dir1454380820/
Dir1454380821/
Dir1454380822/
Dir1454380823/
Dir1454380824/
Dir1454380831/
Dir1454380834/
Dir1454380858/
Dir1454380861/
Dir1454380864/
Dir1454380867/
Dir1454380870/
Dir1454380876/
Dir1454380884/
Dir1454380885/
Dir1454380886/
Dir1454380896/
Dir1454380899/
Dir1454380930/
Dir1454380938/
Dir1454380939/
Dir1454380945/
Dir1454380951/
Dir1454380957/
Dir1454380971/
Dir1454380981/
Dir1454380982/
Dir1454381007/
Dir1454381030/
Dir1454381032/
Dir1454381045/
Dir1454381064/
Dir1454382020/
Dir1454382379/
Dir1454385259/
Dir1454388319/
Dir1454390958/
Dir1454392699/
Dir1454400145/
Dir1454400435/
Dir1454403016/
Dir1454403199/
Dir1454404875/
Dir1454405659/
Dir1454406379/
Dir1454406859/
Dir1454408055/
Dir1454409743/
Dir1454410278/
Dir1454410460/
Dir1454410461/
Dir1454411360/
Dir1454411555/
Dir1454418859/
Dir1454418979/
Dir1454419519/
Dir1454423359/
Dir1454426773/
Dir1454427435/
Dir1454427792/
Dir1454431933/
Dir1454436290/
Dir1454436291/
Dir1454436331/
Dir1454436611/
Dir1454437149/
Dir1454437270/
Dir1454440392/
Dir1454440512/
Dir1454443692/
Dir1454445434/
Dir1454447050/
Dir1454447712/
Dir1454449514/
Dir1454450113/
Dir1454450752/
Dir1454451190/
Dir1454451852/
Dir1454453383/
Dir1454453564/
Dir1454454103/
Dir1454454883/
Dir1454456684/
Dir1454457224/
Dir1454458543/
Dir1454460223/
Dir1454460582/
Dir1454461723/
Dir1454464423/
Dir1454467286/
Dir1454467290/
Dir1454467357/
Dir1454467375/
Dir1454467381/
Dir1454467430/
Dir1454467431/
Dir1454467454/
Dir1454467455/
Dir1454467456/
Dir1454467495/
Dir1454467496/
Dir1454467502/
Dir1454467506/
Dir1454467518/
Dir1454467536/
Dir1454467540/
Dir1454467551/
Dir1454467559/
Dir1454467563/
Dir1454467568/
Dir1454467582/
Dir1454467584/
Dir1454467599/
Dir1454467654/
Dir1454467655/
Dir1454467743/
Dir1454467750/
Dir1454467757/
Dir1454467766/
Dir1454467768/
Dir1454467773/
Dir1454467840/
Dir1454468324/
Dir1454468825/
Dir1454468834/
Dir1454468890/
Dir1454468912/
Dir1454468921/
Dir1454468930/
Dir1454468944/
Dir1454468963/
Dir1454468964/
Dir1454468977/
Dir1454468978/
Dir1454468980/
Dir1454468997/
Dir1454468998/
Dir1454469011/
Dir1454469013/
Dir1454469021/
Dir1454469025/
Dir1454469031/
Dir1454469036/
Dir1454469041/
Dir1454469053/
Dir1454469054/
Dir1454469060/
Dir1454469064/
Dir1454469068/
Dir1454469075/
Dir1454469090/
Dir1454469145/
Dir1454469147/
Dir1454469149/
Dir1454469403/
Dir1454470003/
Dir1454474924/
Dir1454481099/
Dir1454491852/
Dir1454493103/
Dir1454493583/
Dir1454496403/
Dir1454496464/
Dir1454496583/
Dir1454498682/
Dir1454498864/
Dir1454499283/
Dir1454499763/
Dir1454499889/
Dir1454499890/
Dir1454500003/
Dir1454500124/
Dir1454500243/
Dir1454507684/
Dir1454508367/
Dir1454509067/
Dir1454509183/
Dir1454509963/
Dir1454510864/
Dir1454513141/
Dir1454513338/
Dir1454513731/
Dir1454514463/
Dir1454516547/
Dir1454517154/
Dir1454517628/
Dir1454521527/
Dir1454522488/
Dir1454522778/
Dir1454524245/
Dir1454525128/
Dir1454526330/
Dir1454526510/
Dir1454526566/
Dir1454526868/
Dir1454526985/
Dir1454527533/
Dir1454530646/
Dir1454531309/
Dir1454531667/
Dir1454531907/
Dir1454532028/
Dir1454532384/
Dir1454535050/
Dir1454535066/
Dir1454535088/
Dir1454535327/
Dir1454536288/
Dir1454536839/
Dir1454536842/
Dir1454536853/
Dir1454537907/
Dir1454539405/
Dir1454539467/
Dir1454541388/
Dir1454543487/
Dir1454544687/
Dir1454544867/
Dir1454545407/
Dir1454545764/
Dir1454545832/
Dir1454546124/
Dir1454546427/
Dir1454546667/
Dir1454547627/
Dir1454548647/
Dir1454549906/
Dir1454551947/
Dir1454553086/
Dir1454556767/
Dir1454556986/
Dir1454557889/
Dir1454558007/
Dir1454559387/
Dir1454559567/
Dir1454560452/
Dir1454564788/
Dir1454565868/
Dir1454566470/
Dir1454567464/
Dir1454570667/
Dir1454570788/
Dir1454571208/
Dir1454572228/
Dir1454573307/
Dir1454573727/
Dir1454573847/
Dir1454575228/
Dir1454575767/
Dir1454578229/
Dir1454580630/
Dir1454580744/
Dir1454583993/
Dir1454585784/
Dir1454587709/
Dir1454589063/
Dir1454594429/
Dir1454595748/
Dir1454595868/
Dir1454596708/
Dir1454598273/
Dir1454599168/
Dir1454599768/
Dir1454600184/
Dir1454600484/
Dir1454601627/
Dir1454606437/
Dir1454606788/
Dir1454609620/
Dir1454609621/
Dir1454609622/
Dir1454609625/
Dir1454609626/
Dir1454609627/
Dir1454609628/
Dir1454609629/
Dir1454609630/
Dir1454609631/
Dir1454609632/
Dir1454609633/
Dir1454609634/
Dir1454609635/
Dir1454609636/
Dir1454609637/
Dir1454609639/
Dir1454609640/
Dir1454609641/
Dir1454609643/
Dir1454609644/
Dir1454609646/
Dir1454609647/
Dir1454609648/
Dir1454609650/
Dir1454609651/
Dir1454609652/
Dir1454609654/
Dir1454609655/
Dir1454609656/
Dir1454609657/
Dir1454609658/
Dir1454609659/
Dir1454609660/
Dir1454609661/
Dir1454609662/
Dir1454609663/
Dir1454609665/
Dir1454609666/
Dir1454609667/
Dir1454609669/
Dir1454609670/
Dir1454609671/
Dir1454609673/
Dir1454609674/
Dir1454609676/
Dir1454609677/
Dir1454609678/
Dir1454609680/
Dir1454609711/
Dir1454609712/
Dir1454609713/
Dir1454609715/
Dir1454609716/
Dir1454609718/
Dir1454609719/
Dir1454609720/
Dir1454609721/
Dir1454609723/
Dir1454609724/
Dir1454609725/
Dir1454609729/
Dir1454609730/
Dir1454609731/
Dir1454609734/
Dir1454609735/
Dir1454609737/
Dir1454609738/
Dir1454609739/
Dir1454609740/
Dir1454609741/
Dir1454609742/
Dir1454609743/
Dir1454609744/
Dir1454609746/
Dir1454609747/
Dir1454609748/
Dir1454609750/
Dir1454609751/
Dir1454609752/
Dir1454609754/
Dir1454609755/
Dir1454609756/
Dir1454609757/
Dir1454609759/
Dir1454609761/
Dir1454609762/
Dir1454609814/
Dir1454609815/
Dir1454609817/
Dir1454609818/
Dir1454609819/
Dir1454610199/
Dir1454610329/
Dir1454610380/
Dir1454610641/
Dir1454610718/
Dir1454610780/
Dir1454610829/
Dir1454611262/
Dir1454611297/
Dir1454611314/
Dir1454611398/
Dir1454611401/
Dir1454611605/
Dir1454611781/
Dir1454611787/
Dir1454611792/
Dir1454611835/
Dir1454612048/
Dir1454612050/
Dir1454612051/
Dir1454612052/
Dir1454612057/
Dir1454612062/
Dir1454612065/
Dir1454612109/
Dir1454615008/
Dir1454621361/
Dir1454621980/
Dir1454621985/
Dir1454622605/
Dir1454622697/
Dir1454635374/
Dir1454641390/
Dir1454641932/
Dir1454642109/
Dir1454642890/
Dir1454643729/
Dir1454643969/
Dir1454644332/
Dir1454644509/
Dir1454647452/
Dir1454649429/
Dir1454652530/
Dir1454653871/
Dir1454653872/
Dir1454653890/
Dir1454656467/
Dir1454658489/
Dir1454662210/
Dir1454664650/
Dir1454667610/
Dir1454668030/
Dir1454668150/
Dir1454668390/
Dir1454668450/
Dir1454669410/
Dir1454670070/
Dir1454671450/
Dir1454672710/
Dir1454675437/
Dir1454676851/
Dir1454677150/
Dir1454677252/
Dir1454677255/
Dir1454677692/
Dir1454678350/
Dir1454679970/
Dir1454681109/
Dir1454682790/
Dir1454683930/
Dir1454685019/
Dir1454686151/
Dir1454686352/
Dir1454686355/
Dir1454686929/
Dir1454687469/
Dir1454687532/
Dir1454689154/
Dir1454689453/
Dir1454695929/
Dir1454696049/
Dir1454696050/
Dir1454697050/
Dir1454697129/
Dir1454697794/
Dir1454701494/
Dir1454704013/
Dir1454707819/
Dir1454707914/
Dir1454708033/
Dir1454708094/
Dir1454708274/
Dir1454708574/
Dir1454708935/
Dir1454709054/
Dir1454710133/
Dir1454710254/
Dir1454712953/
Dir1454713793/
Dir1454714274/
Dir1454715578/
Dir1454715637/
Dir1454716834/
Dir1454719358/
Dir1454719418/
Dir1454720317/
Dir1454720680/
Dir1454724038/
Dir1454728358/
Dir1454729599/
Dir1454729681/
Dir1454730220/
Dir1454732917/
Dir1454733227/
Dir1454734717/
Dir1454736399/
Dir1454740240/
Dir1454740837/
Dir1454741018/
Dir1454742638/
Dir1454751001/
Dir1454767958/
Dir1454780378/
Dir1454781219/
Dir1454787660/
Dir1454794010/
Dir1454794353/
Dir1454795940/
Dir1454805001/
Dir1454812980/
Dir1454814961/
Dir1454818140/
Dir1454820120/
Dir1454821691/
Dir1454827861/
Dir1454840580/
Dir1454841061/
Dir1454842320/
Dir1454847360/
Dir1454856060/
Dir1454863503/
Dir1454865001/
Dir1454872080/
Dir1454872920/
Dir1454874420/
Dir1454874720/
Dir1454890140/
Dir1454892240/
Dir1454893980/
Dir1454894580/
Dir1454897821/
Dir1454899980/
Dir1454902259/
Dir1454910240/
Dir1454911140/
Dir1454912880/
Dir1454913421/
Dir1454921280/
Dir1454921460/
Dir1454925600/
Dir1454926920/
Dir1454929080/
Dir1454929438/
Dir1454933176/
Dir1454933939/
Dir1454934541/
Dir1454937060/
Dir1454937424/
Dir1454937722/
Dir1454941081/
Dir1454941141/
Dir1454941501/
Dir1454941621/
Dir1454942702/
Dir1454943182/
Dir1454943244/
Dir1454944634/
Dir1454944811/
Dir1454949252/
Dir1454949360/
Dir1454949963/
Dir1454950582/
Dir1454952604/
Dir1454953212/
Dir1454954044/
Dir1454957641/
Dir1454959286/
Dir1454959527/
Dir1454961395/
Dir1454962167/
Dir1454974284/
Dir1454975184/
Dir1454975364/
Dir1454976564/
Dir1454977044/
Dir1454978724/
Dir1454980047/
Dir1454981064/
Dir1454981964/
Dir1454984665/
Dir1454987135/
Dir1454988176/
Dir1454994476/
Dir1455000657/
Dir1455002698/
Dir1455003536/
Dir1455004136/
Dir1455006776/
Dir1455011516/
Dir1455011577/
Dir1455014816/
Dir1455015356/
Dir1455016136/
Dir1455019857/
Dir1455022136/
Dir1455023222/
Dir1455025196/
Dir1455025316/
Dir1455026696/
Dir1455028676/
Dir1455028794/
Dir1455029276/
Dir1455029396/
Dir1455031435/
Dir1455032217/
Dir1455034739/
Dir1455036298/
Dir1455037640/
Dir1455056357/
Dir1455056717/
Dir1455056778/
Dir1455056895/
Dir1455056958/
Dir1455057158/
Dir1455057639/
Dir1455057698/
Dir1455057817/
Dir1455057878/
Dir1455058356/
Dir1455058597/
Dir1455058658/
Dir1455059030/
Dir1455059617/
Dir1455059858/
Dir1455060097/
Dir1455060217/
Dir1455060755/
Dir1455060831/
Dir1455061058/
Dir1455062805/
Dir1455063158/
Dir1455065678/
Dir1455065975/
Dir1455066636/
Dir1455067058/
Dir1455067355/
Dir1455067657/
Dir1455068314/
Dir1455072278/
Dir1455072338/
Dir1455072459/
Dir1455072577/
Dir1455073183/
Dir1455075261/
Dir1455076582/
Dir1455077182/
Dir1455080902/
Dir1455081802/
Dir1455085225/
Dir1455088642/
Dir1455088763/
Dir1455088882/
Dir1455089063/
Dir1455089725/
Dir1455090982/
Dir1455091942/
Dir1455095302/
Dir1455095539/
Dir1455097400/
Dir1455097642/
Dir1455098793/
Dir1455099682/
Dir1455100583/
Dir1455100823/
Dir1455103343/
Dir1455105502/
Dir1455105922/
Dir1455106462/
Dir1455106882/
Dir1455107663/
Dir1455108742/
Dir1455110302/
Dir1455110543/
Dir1455111023/
Dir1455114143/
Dir1455114520/
Dir1455115043/
Dir1455115102/
Dir1455116063/
Dir1455116299/
Dir1455117530/
Dir1455117531/
Dir1455117923/
Dir1455118549/
Dir1455119859/
Dir1455119978/
Dir1455120098/
Dir1455121978/
Dir1455121979/
Dir1455122499/
Dir1455123098/
Dir1455123640/
Dir1455124961/
Dir1455125082/
Dir1455125263/
Dir1455125801/
Dir1455126580/
Dir1455127358/
Dir1455128918/
Dir1455128979/
Dir1455129278/
Dir1455130478/
Dir1455130538/
Dir1455130659/
Dir1455132162/
Dir1455134258/
Dir1455137498/
Dir1455137679/
Dir1455137918/
Dir1455139778/
Dir1455139958/
Dir1455140498/
Dir1455143978/
Dir1455143979/
Dir1455144038/
Dir1455144458/
Dir1455144818/
Dir1455144878/
Dir1455145778/
Dir1455146672/
Dir1455148113/
Dir1455156874/
Dir1455157053/
Dir1455163892/
Dir1455165251/
Dir1455165335/
Dir1455172652/
Dir1455178712/
Dir1455179132/
Dir1455179192/
Dir1455179617/
Dir1455180752/
Dir1455180992/
Dir1455185852/
Dir1455186871/
Dir1455188253/
Dir1455188644/
Dir1455189632/
Dir1455191612/
Dir1455191672/
Dir1455197132/
Dir1455198392/
Dir1455200612/
Dir1455203262/
Dir1455204453/
Dir1455204879/
Dir1455205712/
Dir1455206013/
Dir1455206432/
Dir1455206498/
Dir1455206880/
Dir1455210815/
Dir1455212553/
Dir1455212851/
Dir1455213095/
Dir1455213214/
Dir1455214794/
Dir1455215314/
Dir1455216152/
Dir1455216213/
Dir1455217233/
Dir1455217832/
Dir1455218193/
Dir1455218613/
Dir1455219214/
Dir1455219692/
Dir1455219815/
Dir1455219999/
Dir1455220295/
Dir1455221559/
Dir1455222817/
Dir1455222932/
Dir1455224733/
Dir1455225325/
Dir1455225865/
Dir1455226230/
Dir1455226705/
Dir1455227006/
Dir1455227428/
Dir1455228675/
Dir1455228676/
Dir1455228677/
Dir1455229049/
Dir1455229169/
Dir1455229227/
Dir1455229406/
Dir1455230126/
Dir1455230308/
Dir1455230367/
Dir1455230967/
Dir1455231089/
Dir1455231090/
Dir1455233608/
Dir1455234209/
Dir1455236609/
Dir1455237329/
Dir1455237869/
Dir1455238349/
Dir1455239665/
Dir1455250768/
Dir1455251309/
Dir1455252493/
Dir1455252746/
Dir1455252988/
Dir1455255029/
Dir1455255688/
Dir1455259333/
Dir1455262275/
Dir1455262814/
Dir1455262935/
Dir1455263415/
Dir1455263715/
Dir1455264315/
Dir1455265215/
Dir1455265458/
Dir1455265573/
Dir1455270555/
Dir1455270734/
Dir1455271202/
Dir1455271203/
Dir1455275835/
Dir1455279495/
Dir1455281236/
Dir1455283811/
Dir1455283875/
Dir1455284294/
Dir1455284775/
Dir1455285554/
Dir1455286881/
Dir1455287774/
Dir1455291613/
Dir1455293423/
Dir1455296846/
Dir1455297685/
Dir1455298403/
Dir1455317425/
Dir1455317665/
Dir1455317725/
Dir1455317965/
Dir1455320965/
Dir1455322945/
Dir1455323425/
Dir1455327745/
Dir1455330625/
Dir1455334475/
Dir1455342865/
Dir1455346705/
Dir1455365605/
Dir1455370465/
Dir1455375445/
Dir1455379765/
Dir1455385285/
Dir1455395896/
Dir1455400036/
Dir1455413357/
Dir1455420377/
Dir1455456681/
Dir1455460697/
Dir1455482963/
Dir1455489623/
Dir1455496523/
Dir1455500903/
Dir1455520283/
Dir1455523041/
Dir1455525863/
Dir1455527303/
Dir1455531743/
Dir1455533003/
Dir1455535883/
Dir1455537863/
Dir1455539422/
Dir1455542671/
Dir1455545361/
Dir1455546145/
Dir1455546924/
Dir1455550040/
Dir1455551060/
Dir1455556648/
Dir1455560004/
Dir1455561572/
Dir1455562880/
Dir1455564562/
Dir1455564984/
Dir1455582050/
Dir1455595850/
Dir1455603290/
Dir1455603409/
Dir1455603529/
Dir1455603649/
Dir1455606528/
Dir1455608089/
Dir1455609538/
Dir1455609854/
Dir1455611029/
Dir1455613431/
Dir1455616129/
Dir1455616369/
Dir1455619670/
Dir1455621650/
Dir1455623090/
Dir1455623871/
Dir1455629449/
Dir1455633649/
Dir1455634069/
Dir1455637489/
Dir1455637609/
Dir1455637670/
Dir1455637851/
Dir1455638150/
Dir1455638930/
Dir1455639469/
Dir1455640009/
Dir1455640970/
Dir1455642532/
Dir1455643490/
Dir1455645289/
Dir1455646549/
Dir1455646853/
Dir1455649733/
Dir1455650330/
Dir1455651410/
Dir1455651774/
Dir1455652790/
Dir1455653031/
Dir1455653810/
Dir1455654469/
Dir1455655189/
Dir1455656209/
Dir1455658129/
Dir1455658611/
Dir1455658669/
Dir1455659210/
Dir1455659330/
Dir1455659809/
Dir1455661249/
Dir1455661969/
Dir1455663110/
Dir1455663529/
Dir1455664433/
Dir1455669649/
Dir1455669710/
Dir1455670131/
Dir1455671040/
Dir1455674150/
Dir1455676443/
Dir1455677870/
Dir1455678589/
Dir1455678832/
Dir1455681532/
Dir1455682717/
Dir1455683929/
Dir1455684529/
Dir1455685909/
Dir1455686149/
Dir1455689930/
Dir1455697609/
Dir1455697789/
Dir1455698149/
Dir1455699470/
Dir1455701030/
Dir1455701390/
Dir1455702710/
Dir1455703262/
Dir1455704990/
Dir1455705170/
Dir1455706131/
Dir1455707693/
Dir1455707810/
Dir1455708471/
Dir1455710750/
Dir1455716270/
Dir1455717530/
Dir1455717531/
Dir1455721009/
Dir1455722330/
Dir1455723279/
Dir1455723348/
Dir1455723710/
Dir1455723775/
Dir1455724378/
Dir1455729702/
Dir1455730370/
Dir1455731515/
Dir1455731870/
Dir1455732771/
Dir1455732949/
Dir1455733190/
Dir1455733250/
Dir1455733731/
Dir1455736527/
Dir1455737129/
Dir1455737247/
Dir1455738506/
Dir1455739529/
Dir1455739647/
Dir1455741451/
Dir1455743128/
Dir1455743427/
Dir1455744026/
Dir1455745047/
Dir1455745348/
Dir1455746648/
Dir1455749305/
Dir1455753567/
Dir1455755006/
Dir1455755727/
Dir1455756626/
Dir1455758368/
Dir1455759206/
Dir1455759506/
Dir1455764127/
Dir1455764750/
Dir1455765567/
Dir1455767066/
Dir1455767966/
Dir1455769526/
Dir1455772466/
Dir1455772706/
Dir1455776366/
Dir1455778526/
Dir1455780928/
Dir1455782187/
Dir1455783746/
Dir1455784466/
Dir1455784586/
Dir1455788065/
Dir1455788192/
Dir1455788426/
Dir1455788487/
Dir1455788726/
Dir1455788966/
Dir1455789146/
Dir1455791847/
Dir1455791966/
Dir1455792273/
Dir1455792568/
Dir1455794966/
Dir1455795086/
Dir1455799293/
Dir1455801686/
Dir1455803726/
Dir1455810147/
Dir1455810386/
Dir1455810506/
Dir1455810747/
Dir1455810806/
Dir1455811052/
Dir1455811649/
Dir1455812546/
Dir1455812785/
Dir1455813328/
Dir1455813506/
Dir1455813986/
Dir1455815449/
Dir1455815613/
Dir1455817646/
Dir1455818254/
Dir1455821666/
Dir1455821907/
Dir1455822749/
Dir1455823589/
Dir1455824246/
Dir1455825324/
Dir1455825394/
Dir1455826169/
Dir1455826646/
Dir1455826767/
Dir1455828806/
Dir1455831387/
Dir1455831986/
Dir1455832887/
Dir1455833127/
Dir1455833487/
Dir1455835768/
Dir1455836304/
Dir1455836642/
Dir1455837747/
Dir1455838586/
Dir1455838707/
Dir1455843485/
Dir1455844385/
Dir1455844805/
Dir1455845284/
Dir1455845703/
Dir1455847085/
Dir1455847208/
Dir1455860880/
Dir1455862137/
Dir1455863759/
Dir1455866460/
Dir1455867540/
Dir1455868199/
Dir1455869160/
Dir1455869639/
Dir1455870657/
Dir1455871200/
Dir1455871979/
Dir1455873000/
Dir1455875580/
Dir1455878460/
Dir1455878519/
Dir1455878640/
Dir1455878940/
Dir1455879059/
Dir1455880140/
Dir1455881939/
Dir1455882779/
Dir1455888664/
Dir1455889860/
Dir1455891299/
Dir1455892019/
Dir1455896716/
Dir1455898946/
Dir1455899366/
Dir1455899858/
Dir1455900685/
Dir1455905126/
Dir1455905546/
Dir1455905788/
Dir1455906867/
Dir1455907345/
Dir1455912363/
Dir1455912364/
Dir1455912366/
Dir1455912370/
Dir1455912423/
Dir1455912626/
Dir1455914246/
Dir1455914725/
Dir1455915085/
Dir1455915145/
Dir1455916819/
Dir1455916882/
Dir1455917181/
Dir1455917722/
Dir1455918201/
Dir1455922401/
Dir1455922945/
Dir1455923361/
Dir1455923479/
Dir1455934821/
Dir1455934881/
Dir1455936441/
Dir1455937377/
Dir1455937714/
Dir1455938061/
Dir1455945022/
Dir1455964462/
Dir1455976042/
Dir1456012211/
Dir1456018572/
Dir1456019832/
Dir1456020433/
Dir1456026090/
Dir1456033572/
Dir1456047671/
Dir1456056433/
Dir1456076832/
Dir1456078634/
Dir1456085771/
Dir1456087570/
Dir1456089551/
Dir1456094577/
Dir1456101957/
Dir1456110697/
Dir1456113358/
Dir1456127097/
Dir1456131839/
Dir1456136638/
Dir1456139757/
Dir1456145818/
Dir1456148517/
Dir1456152297/
Dir1456153087/
Dir1456156136/
Dir1456156698/
Dir1456156859/
Dir1456157050/
Dir1456158059/
Dir1456158740/
Dir1456159375/
Dir1456160915/
Dir1456161428/
Dir1456161949/
Dir1456162573/
Dir1456163030/
Dir1456164155/
Dir1456164752/
Dir1456167621/
Dir1456173898/
Dir1456174318/
Dir1456175075/
Dir1456175076/
Dir1456175288/
Dir1456175460/
Dir1456176718/
Dir1456178278/
Dir1456178545/
Dir1456179290/
Dir1456182472/
Dir1456183130/
Dir1456185050/
Dir1456186370/
Dir1456186851/
Dir1456186911/
Dir1456189990/
Dir1456195869/
Dir1456209847/
Dir1456237267/
Dir1456237327/
Dir1456237388/
Dir1456237447/
Dir1456238947/
Dir1456239248/
Dir1456239490/
Dir1456239607/
Dir1456239747/
Dir1456239886/
Dir1456240149/
Dir1456240747/
Dir1456241285/
Dir1456241709/
Dir1456243028/
Dir1456243510/
Dir1456246150/
Dir1456246579/
Dir1456249214/
Dir1456249407/
Dir1456250698/
Dir1456251367/
Dir1456251547/
Dir1456251848/
Dir1456252806/
Dir1456253407/
Dir1456254967/
Dir1456255568/
Dir1456256471/
Dir1456256828/
Dir1456257431/
Dir1456257854/
Dir1456257916/
Dir1456261866/
Dir1456262167/
Dir1456262287/
Dir1456262407/
Dir1456262468/
Dir1456262527/
Dir1456262707/
Dir1456265985/
Dir1456268505/
Dir1456270005/
Dir1456270847/
Dir1456271087/
Dir1456271205/
Dir1456272765/
Dir1456273485/
Dir1456273905/
Dir1456274444/
Dir1456276424/
Dir1456276609/
Dir1456277864/
Dir1456285845/
Dir1456291725/
Dir1456294965/
Dir1456297374/
Dir1456301685/
Dir1456303729/
Dir1456304565/
Dir1456305645/
Dir1456307085/
Dir1456307450/
Dir1456308045/
Dir1456310147/
Dir1456312428/
Dir1456312547/
Dir1456312729/
Dir1456312911/
Dir1456313026/
Dir1456314827/
Dir1456314887/
Dir1456315065/
Dir1456315494/
Dir1456315764/
Dir1456316870/
Dir1456318908/
Dir1456321065/
Dir1456322565/
Dir1456323289/
Dir1456323525/
Dir1456324185/
Dir1456328398/
Dir1456329405/
Dir1456330196/
Dir1456331025/
Dir1456331709/
Dir1456333125/
Dir1456337054/
Dir1456337445/
Dir1456338054/
Dir1456338405/
Dir1456339305/
Dir1456340565/
Dir1456340885/
Dir1456340886/
Dir1456342784/
Dir1456343567/
Dir1456343685/
Dir1456343686/
Dir1456344049/
Dir1456344314/
Dir1456345067/
Dir1456345186/
Dir1456345305/
Dir1456345846/
Dir1456347106/
Dir1456347107/
Dir1456347404/
Dir1456347465/
Dir1456347585/
Dir1456347765/
Dir1456348785/
Dir1456349085/
Dir1456350707/
Dir1456351770/
Dir1456352011/
Dir1456352668/
Dir1456352847/
Dir1456355065/
Dir1456357589/
Dir1456358369/
Dir1456358968/
Dir1456358969/
Dir1456359326/
Dir1456359568/
Dir1456361669/
Dir1456362029/
Dir1456364129/
Dir1456365089/
Dir1456366412/
Dir1456366528/
Dir1456366586/
Dir1456366710/
Dir1456367008/
Dir1456368208/
Dir1456369367/
Dir1456369713/
Dir1456370548/
Dir1456371625/
Dir1456372469/
Dir1456377268/
Dir1456381588/
Dir1456381709/
Dir1456386028/
Dir1456386388/
Dir1456386689/
Dir1456386749/
Dir1456386868/
Dir1456388132/
Dir1456388670/
Dir1456388908/
Dir1456389808/
Dir1456393290/
Dir1456393484/
Dir1456397968/
Dir1456402229/
Dir1456402709/
Dir1456402768/
Dir1456403456/
Dir1456404688/
Dir1456406189/
Dir1456408886/
Dir1456409670/
Dir1456410149/
Dir1456410929/
Dir1456414953/
Dir1456415059/
Dir1456415615/
Dir1456416450/
Dir1456416830/
Dir1456417009/
Dir1456417195/
Dir1456417591/
Dir1456418789/
Dir1456419148/
Dir1456419750/
Dir1456422749/
Dir1456424005/
Dir1456424610/
Dir1456424669/
Dir1456425266/
Dir1456425446/
Dir1456425926/
Dir1456426286/
Dir1456427486/
Dir1456427786/
Dir1456428446/
Dir1456429106/
Dir1456429167/
Dir1456429706/
Dir1456431387/
Dir1456432825/
Dir1456434474/
Dir1456434987/
Dir1456435046/
Dir1456436547/
Dir1456437627/
Dir1456438405/
Dir1456439904/
Dir1456440927/
Dir1456442187/
Dir1456442311/
Dir1456444704/
Dir1456446149/
Dir1456446506/
Dir1456447346/
Dir1456447767/
Dir1456451306/
Dir1456451486/
Dir1456453646/
Dir1456453824/
Dir1456453946/
Dir1456455023/
Dir1456455207/
Dir1456455461/
Dir1456456587/
Dir1456458927/
Dir1456459536/
Dir1456461771/
Dir1456462529/
Dir1456462586/
Dir1456468827/
Dir1456472728/
Dir1456475547/
Dir1456476446/
Dir1456478665/
Dir1456481846/
Dir1456482206/
Dir1456484845/
Dir1456489828/
Dir1456491687/
Dir1456494566/
Dir1456494806/
Dir1456496546/
Dir1456497083/
Dir1456497708/
Dir1456498228/
Dir1456498766/
Dir1456498888/
Dir1456500385/
Dir1456500927/
Dir1456502066/
Dir1456502246/
Dir1456502691/
Dir1456502791/
Dir1456503183/
Dir1456504352/
Dir1456504353/
Dir1456504648/
Dir1456504766/
Dir1456505364/
Dir1456505678/
Dir1456506146/
Dir1456508004/
Dir1456508831/
Dir1456509686/
Dir1456509925/
Dir1456510119/
Dir1456510120/
Dir1456511533/
Dir1456511534/
Dir1456511905/
Dir1456512325/
Dir1456515124/
Dir1456515566/
Dir1456516890/
Dir1456517056/
Dir1456517067/
Dir1456518265/
Dir1456518566/
Dir1456519165/
Dir1456519647/
Dir1456519703/
Dir1456519886/
Dir1456519946/
Dir1456520545/
Dir1456521264/
Dir1456521926/
Dir1456523554/
Dir1456524091/
Dir1456526124/
Dir1456526548/
Dir1456527512/
Dir1456528531/
Dir1456529554/
Dir1456530445/
Dir1456535727/
Dir1456537046/
Dir1456537586/
Dir1456539386/
Dir1456541006/
Dir1456549466/
Dir1456550786/
Dir1456557806/
Dir1456563758/
Dir1456565487/
Dir1456569986/
Dir1456570466/
Dir1456577786/
Dir1456583786/
Dir1456590806/
Dir1456599326/
Dir1456604546/
Dir1456609226/
Dir1456613186/
Dir1456613306/
Dir1456613966/
Dir1456614852/
Dir1456623673/
Dir1456631233/
Dir1456633092/
Dir1456647973/
Dir1456650012/
Dir1456677101/
Dir1456690452/
Dir1456696945/
Dir1456699452/
Dir1456699513/
Dir1456700293/
Dir1456702513/
Dir1456703053/
Dir1456705873/
Dir1456706652/
Dir1456717693/
Dir1456722317/
Dir1456722977/
Dir1456728492/
Dir1456729033/
Dir1456729573/
Dir1456729812/
Dir1456731493/
Dir1456733473/
Dir1456734134/
Dir1456737678/
Dir1456740244/
Dir1456742714/
Dir1456744632/
Dir1456750332/
Dir1456750393/
Dir1456751474/
Dir1456751952/
Dir1456752073/
Dir1456752673/
Dir1456753453/
Dir1456753813/
Dir1456755913/
Dir1456756933/
Dir1456757171/
Dir1456757651/
Dir1456758399/
Dir1456758587/
Dir1456758914/
Dir1456759513/
Dir1456760353/
Dir1456760773/
Dir1456761973/
Dir1456763835/
Dir1456764013/
Dir1456764571/
Dir1456764853/
Dir1456765154/
Dir1456765656/
Dir1456766969/
Dir1456767806/
Dir1456767992/
Dir1456769065/
Dir1456769788/
Dir1456770026/
Dir1456770086/
Dir1456770146/
Dir1456770209/
Dir1456770805/
Dir1456771167/
Dir1456772146/
Dir1456772426/
Dir1456773087/
Dir1456773447/
Dir1456773505/
Dir1456774190/
Dir1456774191/
Dir1456774842/
Dir1456775132/
Dir1456775488/
Dir1456775614/
Dir1456777709/
Dir1456778006/
Dir1456778306/
Dir1456779386/
Dir1456779747/
Dir1456781067/
Dir1456781607/
Dir1456781667/
Dir1456781727/
Dir1456782806/
Dir1456783047/
Dir1456783706/
Dir1456784666/
Dir1456784785/
Dir1456787486/
Dir1456790246/
Dir1456790903/
Dir1456792474/
Dir1456794150/
Dir1456801173/
Dir1456810833/
Dir1456811493/
Dir1456814433/
Dir1456815333/
Dir1456817013/
Dir1456820253/
Dir1456820314/
Dir1456821642/
Dir1456822481/
Dir1456823682/
Dir1456823742/
Dir1456825662/
Dir1456826141/
Dir1456832681/
Dir1456832742/
Dir1456833221/
Dir1456834181/
Dir1456838621/
Dir1456841802/
Dir1456841921/
Dir1456842102/
Dir1456842402/
Dir1456842521/
Dir1456842821/
Dir1456842881/
Dir1456843241/
Dir1456844995/
Dir1456845402/
Dir1456847567/
Dir1456847739/
Dir1456847803/
Dir1456848259/
Dir1456848381/
Dir1456853425/
Dir1456855730/
Dir1456856017/
Dir1456856671/
Dir1456857111/
Dir1456858170/
Dir1456858231/
Dir1456859195/
Dir1456860032/
Dir1456860871/
Dir1456860931/
Dir1456861053/
Dir1456862491/
Dir1456862880/
Dir1456867471/
Dir1456867771/
Dir1456869271/
Dir1456869993/
Dir1456873531/
Dir1456874552/
Dir1456875034/
Dir1456875271/
Dir1456875811/
Dir1456878812/
Dir1456882532/
Dir1456883851/
Dir1456884811/
Dir1456888059/
Dir1456889791/
Dir1456891292/
Dir1456892975/
Dir1456893331/
Dir1456902031/
Dir1456903474/
Dir1456904071/
Dir1456907431/
Dir1456910071/
Dir1456910971/
Dir1456914151/
Dir1456916131/
Dir1456916311/
Dir1456916431/
Dir1456916562/
Dir1456916671/
Dir1456917518/
Dir1456918351/
Dir1456920273/
Dir1456920991/
Dir1456929572/
Dir1456930771/
Dir1456930882/
Dir1456931420/
Dir1456931658/
Dir1456932562/
Dir1456934885/
Dir1456935861/
Dir1456936639/
Dir1456937421/
Dir1456937481/
Dir1456938579/
Dir1456940359/
Dir1456941019/
Dir1456941201/
Dir1456941833/
Dir1456942588/
Dir1456943659/
Dir1456944561/
Dir1456947381/
Dir1456947502/
Dir1456949541/
Dir1456949661/
Dir1456949841/
Dir1456950201/
Dir1456950501/
Dir1456951342/
Dir1456951821/
Dir1456952241/
Dir1456953081/
Dir1456953140/
Dir1456954645/
Dir1456954764/
Dir1456954883/
Dir1456955964/
Dir1456956258/
Dir1456956989/
Dir1456957226/
Dir1456958014/
Dir1456958429/
Dir1456959931/
Dir1456960468/
Dir1456960530/
Dir1456960769/
Dir1456961787/
Dir1456964789/
Dir1456965807/
Dir1456967664/
Dir1456970064/
Dir1456973063/
Dir1456973123/
Dir1456976304/
Dir1456977144/
Dir1456977203/
Dir1456978104/
Dir1456979520/
Dir1456980504/
Dir1456983201/
Dir1456986384/
Dir1456986564/
Dir1456992278/
Dir1456993883/
Dir1456994965/
Dir1456995143/
Dir1456995267/
Dir1456999111/
Dir1457002711/
Dir1457003272/
Dir1457003431/
Dir1457004575/
Dir1457005351/
Dir1457006311/
Dir1457009191/
Dir1457012558/
Dir1457013571/
Dir1457014651/
Dir1457015792/
Dir1457018195/
Dir1457019452/
Dir1457020065/
Dir1457020594/
Dir1457021291/
Dir1457021335/
Dir1457022067/
Dir1457023171/
Dir1457026291/
Dir1457026362/
Dir1457026414/
Dir1457027433/
Dir1457028346/
Dir1457028698/
Dir1457028995/
Dir1457030013/
Dir1457030311/
Dir1457031859/
Dir1457034095/
Dir1457034151/
Dir1457034272/
Dir1457035565/
Dir1457036252/
Dir1457038712/
Dir1457039043/
Dir1457039851/
Dir1457040031/
Dir1457040755/
Dir1457041314/
Dir1457041494/
Dir1457041615/
Dir1457041798/
Dir1457041974/
Dir1457042158/
Dir1457042275/
Dir1457045633/
Dir1457047494/
Dir1457047613/
Dir1457051938/
Dir1457051939/
Dir1457053708/
Dir1457053947/
Dir1457054187/
Dir1457057486/
Dir1457057727/
Dir1457059408/
Dir1457060225/
Dir1457060226/
Dir1457061928/
Dir1457064413/
Dir1457064414/
Dir1457065285/
Dir1457066306/
Dir1457067266/
Dir1457068947/
Dir1457070031/
Dir1457076387/
Dir1457083839/
Dir1457084547/
Dir1457084968/
Dir1457088988/
Dir1457090486/
Dir1457095044/
Dir1457095229/
Dir1457096550/
Dir1457097508/
Dir1457105849/
Dir1457107105/
Dir1457108304/
Dir1457110584/
Dir1457110879/
Dir1457111180/
Dir1457111674/
Dir1457112564/
Dir1457113763/
Dir1457120879/
Dir1457130987/
Dir1457131048/
Dir1457131106/
Dir1457131226/
Dir1457131286/
Dir1457131347/
Dir1457131407/
Dir1457131467/
Dir1457131526/
Dir1457131586/
Dir1457131706/
Dir1457131767/
Dir1457131889/
Dir1457131890/
Dir1457132427/
Dir1457132559/
Dir1457132907/
Dir1457133028/
Dir1457133087/
Dir1457133985/
Dir1457135367/
Dir1457135431/
Dir1457135908/
Dir1457136339/
Dir1457142987/
Dir1457144247/
Dir1457149406/
Dir1457149707/
Dir1457150071/
Dir1457152373/
Dir1457152520/
Dir1457154860/
Dir1457163320/
Dir1457164640/
Dir1457171420/
Dir1457184973/
Dir1457185018/
Dir1457185072/
Dir1457186691/
Dir1457186732/
Dir1457186808/
Dir1457186842/
Dir1457186892/
Dir1457186935/
Dir1457188634/
Dir1457188743/
Dir1457188853/
Dir1457188959/
Dir1457190177/
Dir1457190314/
Dir1457191280/
Dir1457198600/
Dir1457198840/
Dir1457200824/
Dir1457200960/
Dir1457201421/
Dir1457202380/
Dir1457205140/
Dir1457211260/
Dir1457211320/
Dir1457212340/
Dir1457222528/
Dir1457222948/
Dir1457223788/
Dir1457223849/
Dir1457224329/
Dir1457236208/
Dir1457236748/
Dir1457248148/
Dir1457262069/
Dir1457271488/
Dir1457289672/
Dir1457294650/
Dir1457295008/
Dir1457295308/
Dir1457296209/
Dir1457298009/
Dir1457301311/
Dir1457303950/
Dir1457308148/
Dir1457308869/
Dir1457311928/
Dir1457321770/
Dir1457322668/
Dir1457325444/
Dir1457329508/
Dir1457329869/
Dir1457334278/
Dir1457337860/
Dir1457341608/
Dir1457342229/
Dir1457343019/
Dir1457344869/
Dir1457347089/
Dir1457349549/
Dir1457351529/
Dir1457355669/
Dir1457358068/
Dir1457359210/
Dir1457359641/
Dir1457362347/
Dir1457363307/
Dir1457364203/
Dir1457364560/
Dir1457364980/
Dir1457365340/
Dir1457365760/
Dir1457366360/
Dir1457367084/
Dir1457368467/
Dir1457369844/
Dir1457370446/
Dir1457370602/
Dir1457371227/
Dir1457374107/
Dir1457374167/
Dir1457374407/
Dir1457374707/
Dir1457375607/
Dir1457380047/
Dir1457385627/
Dir1457385747/
Dir1457385807/
Dir1457385868/
Dir1457385869/
Dir1457385987/
Dir1457386107/
Dir1457386287/
Dir1457386347/
Dir1457386466/
Dir1457386527/
Dir1457387187/
Dir1457387188/
Dir1457388507/
Dir1457388747/
Dir1457389047/
Dir1457389228/
Dir1457389527/
Dir1457389964/
Dir1457399181/
Dir1457400648/
Dir1457401008/
Dir1457401487/
Dir1457401728/
Dir1457402147/
Dir1457402267/
Dir1457402387/
Dir1457405990/
Dir1457407069/
Dir1457407428/
Dir1457418386/
Dir1457419409/
Dir1457419475/
Dir1457419587/
Dir1457421621/
Dir1457422881/
Dir1457423605/
Dir1457423725/
Dir1457423841/
Dir1457424506/
Dir1457424685/
Dir1457424925/
Dir1457425042/
Dir1457425704/
Dir1457428166/
Dir1457430561/
Dir1457431127/
Dir1457431728/
Dir1457431943/
Dir1457432573/
Dir1457432574/
Dir1457436564/
Dir1457437523/
Dir1457437884/
Dir1457438364/
Dir1457438967/
Dir1457440523/
Dir1457441304/
Dir1457441425/
Dir1457441784/
Dir1457442925/
Dir1457443224/
Dir1457443704/
Dir1457444665/
Dir1457444845/
Dir1457446826/
Dir1457447003/
Dir1457447124/
Dir1457447185/
Dir1457448984/
Dir1457449396/
Dir1457449823/
Dir1457449944/
Dir1457450367/
Dir1457451506/
Dir1457451507/
Dir1457452467/
Dir1457453070/
Dir1457453964/
Dir1457453965/
Dir1457454983/
Dir1457455285/
Dir1457457144/
Dir1457458402/
Dir1457459546/
Dir1457461152/
Dir1457461211/
Dir1457462413/
Dir1457464095/
Dir1457464515/
Dir1457465053/
Dir1457465113/
Dir1457465537/
Dir1457465712/
Dir1457466553/
Dir1457468593/
Dir1457470513/
Dir1457470873/
Dir1457472012/
Dir1457472972/
Dir1457474656/
Dir1457474895/
Dir1457475136/
Dir1457476753/
Dir1457480473/
Dir1457482093/
Dir1457482157/
Dir1457482871/
Dir1457482933/
Dir1457482992/
Dir1457483052/
Dir1457483173/
Dir1457483293/
Dir1457485153/
Dir1457488873/
Dir1457490253/
Dir1457490973/
Dir1457491094/
Dir1457491330/
Dir1457492173/
Dir1457493076/
Dir1457494417/
Dir1457495716/
Dir1457495773/
Dir1457496502/
Dir1457496925/
Dir1457498177/
Dir1457498233/
Dir1457498292/
Dir1457500213/
Dir1457501254/
Dir1457502193/
Dir1457507833/
Dir1457509453/
Dir1457509692/
Dir1457512217/
Dir1457514793/
Dir1457516532/
Dir1457518046/
Dir1457518453/
Dir1457518573/
Dir1457520496/
Dir1457521693/
Dir1457522411/
Dir1457522713/
Dir1457528654/
Dir1457530066/
Dir1457530335/
Dir1457530679/
Dir1457531233/
Dir1457531953/
Dir1457532011/
Dir1457532916/
Dir1457538081/
Dir1457538564/
Dir1457538682/
Dir1457539351/
Dir1457539449/
Dir1457543481/
Dir1457543665/
Dir1457547924/
Dir1457548764/
Dir1457549906/
Dir1457549965/
Dir1457550625/
Dir1457551764/
Dir1457552784/
Dir1457552964/
Dir1457553443/
Dir1457554824/
Dir1457555548/
Dir1457556923/
Dir1457558124/
Dir1457558243/
Dir1457559743/
Dir1457559744/
Dir1457560045/
Dir1457560401/
Dir1457560643/
Dir1457561363/
Dir1457562202/
Dir1457562503/
Dir1457562564/
Dir1457562625/
Dir1457562803/
Dir1457563584/
Dir1457563703/
Dir1457563883/
Dir1457564243/
Dir1457565324/
Dir1457566824/
Dir1457566944/
Dir1457567061/
Dir1457567843/
Dir1457567905/
Dir1457568264/
Dir1457569462/
Dir1457571504/
Dir1457573425/
Dir1457575464/
Dir1457579602/
Dir1457580444/
Dir1457580512/
Dir1457582333/
Dir1457583505/
Dir1457583827/
Dir1457585604/
Dir1457585964/
Dir1457587524/
Dir1457588186/
Dir1457588543/
Dir1457591904/
Dir1457597423/
Dir1457597485/
Dir1457597663/
Dir1457600797/
Dir1457601923/
Dir1457603483/
Dir1457603544/
Dir1457603782/
Dir1457603962/
Dir1457604402/
Dir1457606542/
Dir1457607333/
Dir1457608405/
Dir1457611224/
Dir1457612304/
Dir1457612664/
Dir1457613149/
Dir1457614464/
Dir1457616864/
Dir1457617644/
Dir1457621484/
Dir1457621724/
Dir1457622447/
Dir1457623764/
Dir1457627906/
Dir1457629106/
Dir1457630723/
Dir1457633486/
Dir1457634026/
Dir1457634264/
Dir1457637862/
Dir1457642847/
Dir1457647764/
Dir1457648126/
Dir1457648366/
Dir1457648784/
Dir1457648906/
Dir1457649024/
Dir1457649145/
Dir1457649386/
Dir1457649506/
Dir1457650155/
Dir1457650635/
Dir1457650872/
Dir1457650958/
Dir1457651293/
Dir1457651373/
Dir1457652256/
Dir1457652435/
Dir1457653575/
Dir1457654472/
Dir1457655615/
Dir1457656033/
Dir1457656995/
Dir1457657835/
Dir1457658916/
Dir1457659274/
Dir1457662875/
Dir1457662932/
Dir1457663054/
Dir1457663176/
Dir1457663352/
Dir1457663655/
Dir1457664434/
Dir1457665094/
Dir1457666610/
Dir1457667516/
Dir1457669716/
Dir1457672116/
Dir1457672175/
Dir1457674404/
Dir1457677216/
Dir1457678112/
Dir1457680334/
Dir1457683452/
Dir1457683813/
Dir1457685287/
Dir1457688314/
Dir1457690724/
Dir1457690801/
Dir1457691316/
Dir1457692395/
Dir1457694675/
Dir1457696292/
Dir1457697372/
Dir1457697555/
Dir1457699593/
Dir1457702234/
Dir1457704275/
Dir1457704276/
Dir1457706255/
Dir1457707333/
Dir1457707692/
Dir1457707812/
Dir1457708823/
Dir1457708847/
Dir1457709257/
Dir1457711954/
Dir1457712915/
Dir1457714175/
Dir1457714176/
Dir1457714415/
Dir1457715614/
Dir1457715750/
Dir1457716936/
Dir1457719035/
Dir1457719095/
Dir1457721567/
Dir1457721872/
Dir1457722109/
Dir1457722168/
Dir1457723079/
Dir1457723908/
Dir1457724027/
Dir1457724989/
Dir1457725348/
Dir1457726865/
Dir1457728047/
Dir1457728589/
Dir1457730928/
Dir1457732667/
Dir1457733373/
Dir1457733374/
Dir1457733567/
Dir1457733997/
Dir1457736268/
Dir1457736388/
Dir1457737828/
Dir1457738428/
Dir1457739027/
Dir1457739390/
Dir1457739567/
Dir1457741427/
Dir1457741908/
Dir1457742988/
Dir1457743947/
Dir1457745447/
Dir1457748448/
Dir1457748687/
Dir1457749888/
Dir1457750488/
Dir1457758827/
Dir1457760507/
Dir1457761467/
Dir1457769208/
Dir1457772147/
Dir1457792967/
Dir1457798928/
Dir1457799867/
Dir1457803347/
Dir1457811029/
Dir1457812648/
Dir1457814329/
Dir1457821108/
Dir1457825487/
Dir1457826507/
Dir1457832989/
Dir1457842227/
Dir1457876007/
Dir1457876727/
Dir1457890887/
Dir1457896707/
Dir1457910567/
Dir1457923647/
Dir1457924629/
Dir1457933964/
Dir1457938285/
Dir1457939248/
Dir1457945010/
Dir1457949201/
Dir1457951908/
Dir1457953223/
Dir1457954964/
Dir1457955813/
Dir1457962230/
Dir1457963011/
Dir1457963310/
Dir1457963384/
Dir1457966552/
Dir1457969123/
Dir1457970146/
Dir1457970803/
Dir1457970864/
Dir1457971894/
Dir1457972910/
Dir1457973087/
Dir1457974163/
Dir1457976151/
Dir1457976387/
Dir1457976525/
Dir1457977232/
Dir1457977471/
Dir1457977644/
Dir1457978914/
Dir1457979083/
Dir1457979330/
Dir1457980051/
Dir1457980762/
Dir1457980825/
Dir1457982239/
Dir1457982270/
Dir1457982387/
Dir1457983064/
Dir1457985641/
Dir1457985833/
Dir1457985874/
Dir1457986180/
Dir1457986657/
Dir1457986902/
Dir1457987910/
Dir1457988819/
Dir1457988997/
Dir1457989840/
Dir1457990675/
Dir1457990676/
Dir1457990917/
Dir1457991034/
Dir1457991880/
Dir1457993080/
Dir1457994555/
Dir1457994621/
Dir1457994973/
Dir1457995450/
Dir1457997762/
Dir1457999253/
Dir1458000236/
Dir1458001238/
Dir1458002372/
Dir1458002503/
Dir1458002554/
Dir1458002683/
Dir1458003156/
Dir1458003277/
Dir1458006758/
Dir1458007466/
Dir1458007467/
Dir1458007468/
Dir1458007780/
Dir1458008073/
Dir1458008918/
Dir1458009221/
Dir1458009518/
Dir1458010297/
Dir1458012223/
Dir1458012458/
Dir1458014380/
Dir1458014439/
Dir1458014677/
Dir1458014922/
Dir1458016063/
Dir1458017980/
Dir1458018881/
Dir1458019234/
Dir1458019362/
Dir1458021850/
Dir1458025116/
Dir1458027040/
Dir1458027241/
Dir1458027822/
Dir1458027880/
Dir1458028538/
Dir1458030393/
Dir1458033455/
Dir1458035135/
Dir1458036099/
Dir1458036231/
Dir1458037959/
Dir1458038134/
Dir1458040658/
Dir1458044193/
Dir1458047673/
Dir1458049057/
Dir1458050504/
Dir1458050567/
Dir1458051758/
Dir1458051820/
Dir1458052270/
Dir1458052442/
Dir1458054273/
Dir1458054336/
Dir1458054755/
Dir1458056801/
Dir1458057092/
Dir1458058470/
Dir1458058528/
Dir1458058956/
Dir1458060268/
Dir1458060816/
Dir1458060926/
Dir1458060994/
Dir1458061228/
Dir1458061532/
Dir1458062864/
Dir1458063934/
Dir1458064299/
Dir1458064598/
Dir1458064838/
Dir1458064884/
Dir1458065318/
Dir1458067107/
Dir1458067169/
Dir1458067228/
Dir1458067471/
Dir1458068185/
Dir1458068662/
Dir1458069209/
Dir1458069448/
Dir1458069507/
Dir1458073843/
Dir1458076053/
Dir1458077016/
Dir1458077194/
Dir1458077982/
Dir1458079910/
Dir1458080024/
Dir1458080502/
Dir1458081110/
Dir1458081169/
Dir1458081472/
Dir1458081701/
Dir1458082368/
Dir1458083444/
Dir1458084470/
Dir1458085547/
Dir1458086438/
Dir1458087104/
Dir1458087288/
Dir1458088302/
Dir1458088423/
Dir1458090282/
Dir1458092082/
Dir1458093541/
Dir1458093603/
Dir1458095022/
Dir1458099528/
Dir1458099697/
Dir1458103723/
Dir1458103840/
Dir1458107442/
Dir1458107859/
Dir1458108043/
Dir1458108882/
Dir1458109060/
Dir1458111409/
Dir1458114158/
Dir1458114715/
Dir1458115180/
Dir1458115784/
Dir1458116626/
Dir1458117817/
Dir1458120579/
Dir1458120884/
Dir1458121421/
Dir1458121778/
Dir1458122271/
Dir1458122562/
Dir1458123047/
Dir1458123108/
Dir1458123167/
Dir1458124062/
Dir1458128080/
Dir1458129850/
Dir1458132405/
Dir1458132582/
Dir1458134503/
Dir1458135342/
Dir1458135762/
Dir1458136425/
Dir1458136842/
Dir1458137121/
Dir1458137621/
Dir1458138047/
Dir1458138224/
Dir1458138817/
Dir1458140209/
Dir1458140836/
Dir1458141943/
Dir1458142968/
Dir1458143316/
Dir1458143624/
Dir1458144358/
Dir1458145237/
Dir1458145300/
Dir1458145301/
Dir1458145420/
Dir1458146219/
Dir1458146450/
Dir1458146496/
Dir1458147401/
Dir1458147854/
Dir1458149685/
Dir1458152375/
Dir1458152504/
Dir1458152856/
Dir1458153284/
Dir1458153412/
Dir1458154368/
Dir1458155503/
Dir1458156702/
Dir1458158255/
Dir1458158387/
Dir1458158502/
Dir1458160006/
Dir1458160426/
Dir1458160670/
Dir1458160908/
Dir1458161028/
Dir1458161146/
Dir1458161208/
Dir1458161323/
Dir1458163959/
Dir1458165040/
Dir1458165588/
Dir1458166989/
Dir1458167957/
Dir1458168186/
Dir1458168672/
Dir1458169095/
Dir1458169211/
Dir1458169267/
Dir1458169461/
Dir1458172338/
Dir1458176950/
Dir1458178330/
Dir1458179708/
Dir1458181091/
Dir1458181390/
Dir1458181571/
Dir1458183008/
Dir1458183675/
Dir1458184048/
Dir1458185169/
Dir1458185776/
Dir1458190689/
Dir1458191475/
Dir1458195494/
Dir1458196099/
Dir1458199810/
Dir1458200835/
Dir1458204367/
Dir1458204554/
Dir1458204797/
Dir1458205147/
Dir1458205459/
Dir1458206953/
Dir1458207910/
Dir1458208818/
Dir1458209255/
Dir1458209718/
Dir1458213137/
Dir1458215299/
Dir1458216016/
Dir1458216475/
Dir1458216855/
Dir1458218949/
Dir1458221352/
Dir1458223211/
Dir1458223987/
Dir1458226508/
Dir1458227254/
Dir1458227745/
Dir1458230545/
Dir1458230681/
Dir1458232156/
Dir1458232516/
Dir1458232631/
Dir1458234687/
Dir1458236773/
Dir1458240975/
Dir1458242061/
Dir1458243192/
Dir1458243609/
Dir1458243673/
Dir1458243851/
Dir1458244513/
Dir1458246367/
Dir1458246492/
Dir1458247219/
Dir1458249137/
Dir1458249378/
Dir1458251232/
Dir1458252488/
Dir1458254467/
Dir1458254589/
Dir1458255316/
Dir1458257647/
Dir1458258369/
Dir1458259763/
Dir1458259764/
Dir1458259937/
Dir1458260894/
Dir1458262030/
Dir1458262954/
Dir1458263891/
Dir1458265875/
Dir1458271507/
Dir1458272172/
Dir1458273873/
Dir1458275288/
Dir1458275419/
Dir1458276372/
Dir1458280033/
Dir1458280959/
Dir1458284477/
Dir1458284678/
Dir1458285794/
Dir1458289757/
Dir1458290347/
Dir1458291006/
Dir1458291222/
Dir1458291432/
Dir1458291620/
Dir1458294491/
Dir1458294859/
Dir1458296168/
Dir1458296778/
Dir1458297912/
Dir1458300833/
Dir1458301271/
Dir1458305109/
Dir1458306446/
Dir1458308352/
Dir1458308840/
Dir1458311484/
Dir1458312256/
Dir1458313643/
Dir1458313869/
Dir1458314046/
Dir1458314227/
Dir1458315070/
Dir1458315372/
Dir1458317293/
Dir1458317888/
Dir1458319394/
Dir1458319531/
Dir1458319709/
Dir1458319865/
Dir1458319868/
Dir1458319870/
Dir1458319877/
Dir1458319878/
Dir1458319883/
Dir1458320043/
Dir1458320048/
Dir1458320052/
Dir1458320055/
Dir1458320057/
Dir1458320061/
Dir1458320205/
Dir1458320207/
Dir1458320210/
Dir1458320217/
Dir1458320360/
Dir1458320361/
Dir1458320364/
Dir1458320370/
Dir1458320372/
Dir1458320374/
Dir1458320508/
Dir1458320553/
Dir1458320557/
Dir1458320560/
Dir1458320565/
Dir1458320572/
Dir1458320580/
Dir1458320709/
Dir1458320793/
Dir1458320829/
Dir1458320831/
Dir1458320919/
Dir1458320922/
Dir1458320928/
Dir1458321063/
Dir1458321065/
Dir1458321068/
Dir1458321076/
Dir1458321080/
Dir1458321088/
Dir1458322258/
Dir1458322575/
Dir1458323115/
Dir1458323241/
Dir1458323545/
Dir1458323720/
Dir1458324500/
Dir1458325333/
Dir1458325512/
Dir1458327188/
Dir1458327491/
Dir1458328525/
Dir1458329660/
Dir1458330434/
Dir1458330616/
Dir1458331293/
Dir1458331772/
Dir1458332087/
Dir1458332502/
Dir1458332561/
Dir1458333058/
Dir1458333159/
Dir1458333349/
Dir1458334416/
Dir1458334772/
Dir1458335863/
Dir1458336758/
Dir1458337423/
Dir1458338733/
Dir1458341322/
Dir1458342105/
Dir1458342333/
Dir1458342490/
Dir1458344676/
Dir1458346361/
Dir1458346475/
Dir1458347499/
Dir1458348344/
Dir1458351097/
Dir1458351344/
Dir1458351638/
Dir1458354867/
Dir1458356865/
Dir1458357697/
Dir1458360153/
Dir1458361838/
Dir1458372993/
Dir1458382244/
Dir1458385775/
Dir1458387084/
Dir1458394606/
Dir1458401189/
Dir1458402994/
Dir1458404909/
Dir1458408673/
Dir1458409177/
Dir1458415105/
Dir1458419430/
Dir1458423087/
Dir1458430202/
Dir1458436769/
Dir1458437312/
Dir1458440311/
Dir1458441932/
Dir1458447996/
Dir1458451992/
Dir1458461850/
Dir1458466710/
Dir1458468731/
Dir1458471633/
Dir1458473297/
Dir1458473405/
Dir1458490167/
Dir1458519938/
Dir1458520293/
Dir1458520356/
Dir1458527193/
Dir1458527547/
Dir1458528392/
Dir1458531460/
Dir1458534029/
Dir1458534637/
Dir1458538250/
Dir1458538530/
Dir1458538602/
Dir1458538830/
Dir1458539194/
Dir1458539436/
Dir1458539551/
Dir1458540513/
Dir1458543511/
Dir1458544597/
Dir1458545487/
Dir1458548493/
Dir1458549022/
Dir1458552454/
Dir1458557560/
Dir1458560793/
Dir1458562023/
Dir1458562661/
Dir1458562707/
Dir1458562828/
Dir1458562887/
Dir1458565231/
Dir1458565449/
Dir1458566679/
Dir1458566916/
Dir1458569385/
Dir1458569971/
Dir1458570268/
Dir1458570939/
Dir1458571737/
Dir1458571854/
Dir1458572547/
Dir1458574475/
Dir1458575555/
Dir1458575791/
Dir1458576319/
Dir1458576595/
Dir1458576699/
Dir1458576810/
Dir1458577110/
Dir1458577295/
Dir1458577528/
Dir1458577987/
Dir1458579159/
Dir1458580655/
Dir1458581358/
Dir1458581493/
Dir1458581673/
Dir1458581850/
Dir1458582693/
Dir1458583070/
Dir1458583236/
Dir1458583447/
Dir1458584195/
Dir1458584373/
Dir1458584548/
Dir1458588167/
Dir1458589416/
Dir1458589594/
Dir1458589989/
Dir1458590667/
Dir1458591148/
Dir1458591538/
Dir1458592307/
Dir1458593439/
Dir1458595023/
Dir1458595472/
Dir1458596021/
Dir1458596456/
Dir1458597753/
Dir1458601276/
Dir1458601651/
Dir1458602247/
Dir1458602899/
Dir1458603041/
Dir1458603805/
Dir1458604346/
Dir1458604395/
Dir1458605417/
Dir1458606444/
Dir1458609049/
Dir1458610783/
Dir1458611872/
Dir1458613728/
Dir1458615160/
Dir1458616357/
Dir1458616849/
Dir1458619836/
Dir1458620379/
Dir1458622846/
Dir1458624679/
Dir1458626740/
Dir1458627345/
Dir1458631723/
Dir1458632855/
Dir1458633276/
Dir1458633459/
Dir1458636936/
Dir1458641261/
Dir1458641324/
Dir1458642199/
Dir1458642530/
Dir1458642645/
Dir1458645661/
Dir1458646252/
Dir1458646357/
Dir1458649365/
Dir1458650076/
Dir1458650373/
Dir1458653014/
Dir1458653078/
Dir1458655126/
Dir1458656076/
Dir1458656978/
Dir1458658306/
Dir1458659465/
Dir1458663145/
Dir1458667893/
Dir1458668726/
Dir1458669560/
Dir1458669924/
Dir1458677543/
Dir1458678026/
Dir1458678083/
Dir1458678139/
Dir1458678140/
Dir1458678198/
Dir1458678320/
Dir1458679217/
Dir1458680360/
Dir1458680426/
Dir1458680712/
Dir1458681220/
Dir1458681405/
Dir1458681876/
Dir1458682314/
Dir1458683445/
Dir1458683449/
Dir1458683570/
Dir1458684766/
Dir1458687632/
Dir1458687870/
Dir1458688039/
Dir1458688401/
Dir1458688702/
Dir1458689301/
Dir1458689431/
Dir1458690320/
Dir1458690979/
Dir1458691096/
Dir1458692482/
Dir1458692899/
Dir1458693082/
Dir1458693685/
Dir1458694106/
Dir1458695612/
Dir1458696978/
Dir1458697722/
Dir1458698870/
Dir1458699654/
Dir1458700398/
Dir1458701258/
Dir1458707241/
Dir1458708201/
Dir1458708976/
Dir1458709158/
Dir1458709505/
Dir1458710068/
Dir1458711083/
Dir1458713428/
Dir1458716944/
Dir1458718876/
Dir1458721858/
Dir1458722252/
Dir1458723449/
Dir1458725848/
Dir1458726267/
Dir1458727025/
Dir1458729559/
Dir1458730198/
Dir1458730470/
Dir1458731319/
Dir1458732708/
Dir1458732724/
Dir1458733769/
Dir1458737079/
Dir1458738987/
Dir1458739350/
Dir1458739544/
Dir1458739720/
Dir1458740451/
Dir1458742958/
Dir1458743535/
Dir1458743553/
Dir1458743977/
Dir1458744040/
Dir1458745527/
Dir1458746278/
Dir1458746969/
Dir1458747655/
Dir1458747656/
Dir1458747940/
Dir1458748185/
Dir1458748515/
Dir1458748767/
Dir1458749142/
Dir1458750687/
Dir1458750936/
Dir1458752564/
Dir1458752863/
Dir1458754001/
Dir1458754262/
Dir1458754477/
Dir1458754596/
Dir1458755938/
Dir1458756239/
Dir1458756451/
Dir1458757060/
Dir1458757309/
Dir1458757541/
Dir1458759883/
Dir1458760650/
Dir1458761259/
Dir1458763183/
Dir1458765022/
Dir1458766246/
Dir1458766866/
Dir1458769176/
Dir1458769177/
Dir1458769370/
Dir1458769483/
Dir1458769668/
Dir1458769956/
Dir1458770198/
Dir1458770650/
Dir1458771589/
Dir1458771641/
Dir1458771830/
Dir1458773738/
Dir1458775960/
Dir1458777186/
Dir1458777189/
Dir1458777192/
Dir1458777317/
Dir1458777407/
Dir1458778070/
Dir1458778118/
Dir1458779558/
Dir1458780442/
Dir1458780810/
Dir1458781487/
Dir1458781750/
Dir1458782051/
Dir1458782499/
Dir1458783585/
Dir1458783703/
Dir1458785746/
Dir1458786432/
Dir1458786863/
Dir1458791567/
Dir1458792528/
Dir1458792529/
Dir1458792726/
Dir1458793209/
Dir1458794674/
Dir1458794684/
Dir1458795283/
Dir1458795797/
Dir1458796101/
Dir1458796419/
Dir1458796880/
Dir1458797390/
Dir1458797737/
Dir1458798343/
Dir1458798715/
Dir1458798893/
Dir1458801518/
Dir1458801949/
Dir1458802372/
Dir1458805012/
Dir1458805540/
Dir1458805705/
Dir1458808007/
Dir1458808187/
Dir1458808283/
Dir1458811666/
Dir1458813224/
Dir1458815578/
Dir1458816562/
Dir1458819088/
Dir1458819427/
Dir1458819436/
Dir1458819562/
Dir1458819567/
Dir1458819714/
Dir1458819718/
Dir1458819720/
Dir1458819840/
Dir1458819846/
Dir1458819985/
Dir1458819989/
Dir1458819990/
Dir1458820115/
Dir1458820120/
Dir1458820127/
Dir1458820247/
Dir1458820255/
Dir1458820380/
Dir1458820384/
Dir1458820520/
Dir1458820522/
Dir1458820525/
Dir1458820643/
Dir1458820645/
Dir1458825471/
Dir1458826674/
Dir1458827208/
Dir1458827342/
Dir1458827383/
Dir1458827736/
Dir1458828639/
Dir1458829001/
Dir1458829592/
Dir1458830852/
Dir1458831335/
Dir1458832169/
Dir1458832534/
Dir1458832843/
Dir1458833679/
Dir1458833803/
Dir1458834158/
Dir1458834330/
Dir1458834399/
Dir1458834577/
Dir1458834632/
Dir1458834722/
Dir1458834838/
Dir1458835379/
Dir1458835512/
Dir1458836034/
Dir1458839021/
Dir1458839460/
Dir1458839461/
Dir1458839462/
Dir1458840666/
Dir1458841311/
Dir1458841759/
Dir1458845239/
Dir1458845868/
Dir1458846090/
Dir1458846346/
Dir1458847538/
Dir1458848017/
Dir1458848496/
Dir1458849935/
Dir1458850084/
Dir1458850262/
Dir1458850669/
Dir1458851437/
Dir1458851737/
Dir1458853539/
Dir1458856291/
Dir1458856536/
Dir1458857976/
Dir1458858574/
Dir1458859232/
Dir1458860137/
Dir1458860434/
Dir1458860672/
Dir1458862234/
Dir1458863678/
Dir1458864518/
Dir1458873093/
Dir1458877894/
Dir1458884498/
Dir1458892328/
Dir1458892333/
Dir1458892334/
Dir1458892337/
Dir1458892344/
Dir1458892473/
Dir1458892475/
Dir1458892481/
Dir1458892484/
Dir1458892490/
Dir1458892626/
Dir1458892631/
Dir1458892632/
Dir1458892637/
Dir1458892638/
Dir1458892646/
Dir1458894647/
Dir1458895267/
Dir1458895536/
Dir1458895915/
Dir1458900940/
Dir1458905254/
Dir1458905406/
Dir1458908848/
Dir1458912270/
Dir1458913230/
Dir1458913289/
Dir1458913349/
Dir1458916474/
Dir1458918637/
Dir1458918759/
Dir1458920309/
Dir1458921468/
Dir1458921471/
Dir1458921472/
Dir1458924819/
Dir1458925183/
Dir1458927070/
Dir1458927582/
Dir1458928076/
Dir1458931061/
Dir1458931666/
Dir1458931868/
Dir1458932252/
Dir1458933170/
Dir1458936327/
Dir1458937719/
Dir1458937827/
Dir1458937840/
Dir1458938375/
Dir1458939208/
Dir1458939450/
Dir1458939938/
Dir1458941008/
Dir1458941249/
Dir1458942006/
Dir1458942633/
Dir1458943121/
Dir1458943774/
Dir1458944380/
Dir1458945093/
Dir1458945535/
Dir1458948668/
Dir1458948738/
Dir1458952972/
Dir1458956203/
Dir1458957037/
Dir1458957697/
Dir1458958304/
Dir1458958536/
Dir1458970060/
Dir1458970420/
Dir1458970532/
Dir1458972272/
Dir1458974140/
Dir1458980023/
Dir1458995008/
Dir1458995737/
Dir1458995790/
Dir1458995912/
Dir1458995913/
Dir1458996091/
Dir1458996216/
Dir1458996696/
Dir1458999150/
Dir1459001727/
Dir1459002710/
Dir1459008489/
Dir1459009660/
Dir1459013497/
Dir1459018530/
Dir1459036764/
Dir1459046092/
Dir1459047090/
Dir1459056206/
Dir1459061676/
Dir1459067413/
Dir1459069231/
Dir1459080027/
Dir1459089227/
Dir1459108052/
Dir1459108585/
Dir1459110387/
Dir1459114407/
Dir1459115553/
Dir1459120049/
Dir1459121401/
Dir1459122693/
Dir1459122748/
Dir1459132303/
Dir1459132984/
Dir1459143066/
Dir1459147230/
Dir1459155204/
Dir1459155272/
Dir1459162115/
Dir1459162191/
Dir1459164606/
Dir1459170417/
Dir1459170931/
Dir1459171172/
Dir1459172844/
Dir1459175501/
Dir1459178967/
Dir1459180822/
Dir1459182142/
Dir1459184071/
Dir1459186172/
Dir1459186315/
Dir1459186897/
Dir1459187374/
Dir1459188563/
Dir1459188811/
Dir1459192407/
Dir1459192826/
Dir1459194929/
Dir1459195502/
Dir1459195797/
Dir1459196613/
Dir1459197031/
Dir1459197571/
Dir1459202427/
Dir1459202859/
Dir1459203098/
Dir1459203281/
Dir1459203519/
Dir1459204724/
Dir1459207881/
Dir1459208266/
Dir1459209275/
Dir1459209877/
Dir1459213302/
Dir1459213887/
Dir1459214873/
Dir1459220157/
Dir1459229476/
Dir1459231609/
Dir1459232010/
Dir1459232514/
Dir1459232810/
Dir1459233217/
Dir1459237900/
Dir1459239818/
Dir1459240291/
Dir1459241071/
Dir1459242463/
Dir1459245692/
Dir1459247138/
Dir1459248915/
Dir1459251023/
Dir1459251216/
Dir1459253551/
Dir1459254625/
Dir1459256738/
Dir1459257698/
Dir1459259070/
Dir1459259640/
Dir1459259729/
Dir1459261295/
Dir1459264503/
Dir1459264652/
Dir1459265128/
Dir1459265614/
Dir1459268160/
Dir1459272710/
Dir1459274314/
Dir1459275931/
Dir1459276530/
Dir1459278633/
Dir1459279801/
Dir1459281293/
Dir1459283083/
Dir1459283376/
Dir1459283478/
Dir1459284692/
Dir1459286375/
Dir1459287356/
Dir1459289380/
Dir1459289438/
Dir1459289494/
Dir1459289560/
Dir1459289801/
Dir1459290157/
Dir1459290582/
Dir1459293556/
Dir1459294222/
Dir1459294657/
Dir1459294716/
Dir1459295074/
Dir1459295262/
Dir1459298017/
Dir1459305169/
Dir1459305945/
Dir1459306123/
Dir1459306420/
Dir1459306472/
Dir1459310980/
Dir1459313914/
Dir1459315061/
Dir1459315930/
Dir1459317034/
Dir1459318773/
Dir1459320456/
Dir1459320698/
Dir1459320813/
Dir1459321061/
Dir1459321175/
Dir1459321371/
Dir1459321594/
Dir1459333657/
Dir1459333760/
Dir1459333881/
Dir1459334000/
Dir1459334048/
Dir1459334114/
Dir1459334184/
Dir1459334228/
Dir1459334336/
Dir1459334443/
Dir1459335690/
Dir1459335876/
Dir1459336357/
Dir1459336835/
Dir1459337798/
Dir1459338038/
Dir1459338701/
Dir1459338764/
Dir1459338873/
Dir1459338982/
Dir1459339089/
Dir1459339472/
Dir1459339656/
Dir1459339710/
Dir1459340986/
Dir1459341403/
Dir1459344117/
Dir1459344752/
Dir1459346710/
Dir1459347047/
Dir1459347544/
Dir1459349317/
Dir1459350142/
Dir1459350474/
Dir1459351057/
Dir1459352141/
Dir1459353520/
Dir1459354931/
Dir1459355621/
Dir1459355995/
Dir1459356266/
Dir1459356541/
Dir1459357216/
Dir1459357425/
Dir1459358629/
Dir1459359059/
Dir1459438828/
Dir1459438831/
Dir1459438834/
Dir1459438835/
Dir1459438836/
Dir1459438840/
Dir1459438841/
Dir1459438842/
Dir1459438847/
Dir1459438848/
Dir1459438849/
Dir1459438851/
Dir1459438853/
Dir1459438854/
Dir1459438855/
Dir1459438856/
Dir1459438861/
Dir1459438862/
Dir1459438864/
Dir1459454977/
Dir1459456539/
Dir1459458519/
Dir1459459719/
Dir1459460676/
Dir1459467011/
Dir1459469022/
Dir1459469196/
Dir1459469263/
Dir1459469264/
Dir1459469319/
Dir1459469441/
Dir1459469554/
Dir1459469675/
Dir1459469737/
Dir1459469738/
Dir1459469793/
Dir1459469881/
Dir1459469937/
Dir1459469982/
Dir1459470096/
Dir1459470153/
Dir1459470275/
Dir1459470336/
Dir1459470393/
Dir1459470455/
Dir1459470523/
Dir1459471479/
Dir1459471667/
Dir1459471719/
Dir1459472082/
Dir1459473279/
Dir1459473757/
Dir1459473818/
Dir1459474537/
Dir1459474719/
Dir1459475006/
Dir1459477041/
Dir1459478075/
Dir1459478209/
Dir1459478933/
Dir1459479289/
Dir1459480167/
Dir1459480240/
Dir1459482763/
Dir1459483000/
Dir1459484378/
Dir1459487324/
Dir1459491110/
Dir1459491227/
Dir1459491760/
Dir1459492119/
Dir1459492602/
Dir1459493567/
Dir1459496575/
Dir1459496926/
Dir1459497107/
Dir1459497157/
Dir1459497224/
Dir1459498362/
Dir1459500462/
Dir1459503588/
Dir1459504720/
Dir1459506047/
Dir1459507123/
Dir1459507850/
Dir1459510668/
Dir1459512236/
Dir1459512281/
Dir1459512602/
Dir1459512715/
Dir1459512884/
Dir1459513661/
Dir1459513799/
Dir1459516907/
Dir1459517199/
Dir1459517322/
Dir1459517443/
Dir1459517995/
Dir1459522544/
Dir1459522667/
Dir1459522724/
Dir1459523330/
Dir1459523390/
Dir1459523868/
Dir1459527175/
Dir1459527942/
Dir1459529872/
Dir1459529983/
Dir1459531250/
Dir1459531359/
Dir1459531482/
Dir1459531665/
Dir1459532687/
Dir1459532741/
Dir1459533165/
Dir1459533220/
Dir1459533347/
Dir1459534360/
Dir1459534841/
Dir1459535034/
Dir1459535383/
Dir1459537187/
Dir1459538261/
Dir1459538461/
Dir1459541143/
Dir1459542169/
Dir1459543365/
Dir1459544929/
Dir1459546298/
Dir1459547440/
Dir1459549180/
Dir1459552005/
Dir1459552423/
Dir1459552909/
Dir1459553430/
Dir1459558800/
Dir1459560228/
Dir1459563347/
Dir1459564365/
Dir1459568274/
Dir1459575221/
Dir1459580089/
Dir1459601449/
Dir1459612600/
Dir1459618012/
Dir1459618306/
Dir1459620224/
Dir1459623228/
Dir1459625630/
Dir1459631200/
Dir1459631861/
Dir1459658174/
Dir1459658223/
Dir1459658224/
Dir1459661233/
Dir1459665254/
Dir1459668682/
Dir1459671134/
Dir1459681036/
Dir1459683435/
Dir1459686861/
Dir1459691632/
Dir1459693960/
Dir1459694835/
Dir1459703720/
Dir1459719915/
Dir1459729340/
Dir1459730478/
Dir1459732517/
Dir1459734132/
Dir1459742417/
Dir1459756818/
Dir1459757059/
Dir1459759099/
Dir1459764212/
Dir1459765282/
Dir1459767532/
Dir1459767920/
Dir1459770676/
Dir1459774115/
Dir1459776747/
Dir1459785448/
Dir1459786478/
Dir1459788456/
Dir1459789711/
Dir1459789829/
Dir1459789889/
Dir1459790133/
Dir1459790190/
Dir1459790247/
Dir1459792044/
Dir1459792289/
Dir1459795823/
Dir1459796965/
Dir1459798167/
Dir1459798414/
Dir1459799364/
Dir1459800253/
Dir1459800254/
Dir1459800256/
Dir1459800323/
Dir1459801015/
Dir1459801132/
Dir1459801278/
Dir1459801390/
Dir1459801465/
Dir1459801498/
Dir1459801541/
Dir1459801615/
Dir1459801725/
Dir1459801779/
Dir1459801910/
Dir1459802734/
Dir1459804845/
Dir1459807067/
Dir1459807562/
Dir1459807778/
Dir1459808595/
Dir1459809765/
Dir1459810183/
Dir1459811795/
Dir1459820011/
Dir1459820012/
Dir1459821311/
Dir1459824198/
Dir1459825512/
Dir1459827499/
Dir1459827620/
Dir1459828217/
Dir1459828337/
Dir1459830250/
Dir1459830432/
Dir1459830556/
Dir1459830612/
Dir1459830665/
Dir1459830856/
Dir1459831266/
Dir1459836959/
Dir1459838057/
Dir1459843214/
Dir1459844108/
Dir1459844225/
Dir1459845309/
Dir1459849218/
Dir1459849337/
Dir1459849820/
Dir1459856533/
Dir1459861089/
Dir1459866563/
Dir1459868116/
Dir1459868229/
Dir1459869621/
Dir1459870394/
Dir1459871771/
Dir1459879033/
Dir1459879223/
Dir1459880113/
Dir1459880168/
Dir1459880286/
Dir1459881315/
Dir1459881919/
Dir1459882326/
Dir1459883711/
Dir1459886353/
Dir1459886416/
Dir1459887191/
Dir1459887312/
Dir1459887376/
Dir1459888929/
Dir1459889834/
Dir1459891869/
Dir1459892118/
Dir1459892179/
Dir1459892957/
Dir1459894275/
Dir1459894337/
Dir1459895226/
Dir1459896078/
Dir1459897880/
Dir1459899487/
Dir1459899613/
Dir1459900866/
Dir1459903751/
Dir1459905076/
Dir1459912929/
Dir1459913614/
Dir1459914500/
Dir1459915871/
Dir1459917628/
Dir1459924040/
Dir1459925466/
Dir1459926435/
Dir1459926676/
Dir1459927697/
Dir1459929306/
Dir1459931597/
Dir1459932554/
Dir1459934890/
Dir1459935625/
Dir1459937239/
Dir1459937288/
Dir1459938611/
Dir1459940952/
Dir1459942276/
Dir1459943836/
Dir1459944140/
Dir1459949047/
Dir1459949647/
Dir1459950493/
Dir1459951394/
Dir1459951767/
Dir1459952300/
Dir1459953442/
Dir1459956493/
Dir1459958653/
Dir1459959070/
Dir1459959616/
Dir1459960027/
Dir1459960211/
Dir1459963340/
Dir1459963928/
Dir1459969986/
Dir1459970359/
Dir1459971071/
Dir1459971650/
Dir1459971851/
Dir1459973420/
Dir1459974475/
Dir1459975784/
Dir1459977290/
Dir1459977708/
Dir1459978966/
Dir1459979925/
Dir1459982383/
Dir1459984734/
Dir1459986773/
Dir1459987915/
Dir1459988028/
Dir1459991657/
Dir1459993190/
Dir1459993493/
Dir1459997631/
Dir1459997992/
Dir1460009865/
Dir1460012142/
Dir1460013302/
Dir1460014195/
Dir1460014914/
Dir1460015212/
Dir1460017565/
Dir1460017729/
Dir1460017970/
Dir1460018630/
Dir1460018870/
Dir1460019835/
Dir1460022109/
Dir1460023043/
Dir1460023491/
Dir1460026185/
Dir1460028352/
Dir1460028582/
Dir1460029195/
Dir1460029196/
Dir1460029198/
Dir1460029199/
Dir1460029200/
Dir1460029202/
Dir1460029206/
Dir1460029207/
Dir1460029210/
Dir1460029211/
Dir1460029213/
Dir1460029218/
Dir1460029221/
Dir1460029222/
Dir1460029223/
Dir1460029224/
Dir1460029225/
Dir1460029228/
Dir1460029229/
Dir1460029232/
Dir1460029234/
Dir1460029236/
Dir1460029279/
Dir1460029281/
Dir1460029287/
Dir1460029288/
Dir1460029291/
Dir1460029297/
Dir1460029298/
Dir1460029299/
Dir1460029300/
Dir1460029311/
Dir1460029312/
Dir1460029318/
Dir1460029320/
Dir1460029321/
Dir1460029615/
Dir1460030685/
Dir1460031537/
Dir1460032604/
Dir1460034225/
Dir1460034830/
Dir1460035850/
Dir1460035975/
Dir1460036747/
Dir1460036880/
Dir1460036970/
Dir1460037050/
Dir1460043217/
Dir1460044513/
Dir1460044980/
Dir1460044982/
Dir1460044986/
Dir1460044988/
Dir1460044989/
Dir1460044996/
Dir1460045001/
Dir1460045005/
Dir1460047913/
Dir1460054333/
Dir1460054334/
Dir1460054335/
Dir1460054340/
Dir1460054343/
Dir1460054346/
Dir1460054347/
Dir1460054348/
Dir1460054349/
Dir1460054372/
Dir1460054374/
Dir1460054375/
Dir1460055533/
Dir1460056552/
Dir1460061541/
Dir1460062192/
Dir1460062999/
Dir1460064010/
Dir1460065621/
Dir1460065751/
Dir1460066641/
Dir1460066966/
Dir1460071321/
Dir1460071396/
Dir1460071478/
Dir1460071847/
Dir1460074598/
Dir1460078137/
Dir1460079253/
Dir1460080787/
Dir1460080844/
Dir1460083424/
Dir1460084148/
Dir1460088646/
Dir1460096079/
Dir1460101362/
Dir1460102925/
Dir1460105500/
Dir1460106947/
Dir1460108627/
Dir1460109240/
Dir1460110918/
Dir1460111219/
Dir1460112239/
Dir1460115540/
Dir1460118418/
Dir1460118966/
Dir1460119205/
Dir1460119679/
Dir1460121238/
Dir1460123519/
Dir1460125741/
Dir1460126177/
Dir1460126639/
Dir1460127248/
Dir1460128318/
Dir1460130233/
Dir1460133418/
Dir1460134079/
Dir1460134799/
Dir1460136956/
Dir1460141766/
Dir1460142775/
Dir1460142989/
Dir1460142992/
Dir1460143988/
Dir1460145153/
Dir1460145193/
Dir1460145204/
Dir1460146446/
Dir1460148025/
Dir1460148366/
Dir1460148367/
Dir1460148369/
Dir1460148371/
Dir1460148372/
Dir1460148373/
Dir1460148375/
Dir1460148390/
Dir1460148391/
Dir1460148394/
Dir1460148426/
Dir1460148427/
Dir1460148428/
Dir1460148429/
Dir1460148437/
Dir1460148438/
Dir1460148440/
Dir1460148448/
Dir1460148449/
Dir1460148451/
Dir1460148453/
Dir1460148454/
Dir1460148455/
Dir1460148457/
Dir1460149808/
Dir1460150580/
Dir1460152136/
Dir1460153630/
Dir1460154349/
Dir1460154770/
Dir1460155426/
Dir1460156685/
Dir1460156805/
Dir1460157015/
Dir1460158250/
Dir1460159295/
Dir1460159712/
Dir1460161780/
Dir1460165218/
Dir1460171750/
Dir1460206305/
Dir1460209916/
Dir1460211035/
Dir1460211881/
Dir1460225448/
Dir1460225915/
Dir1460228685/
Dir1460229824/
Dir1460230717/
Dir1460231075/
Dir1460231959/
Dir1460233906/
Dir1460256610/
Dir1460258057/
Dir1460258175/
Dir1460263626/
Dir1460319731/
Dir1460320204/
Dir1460320566/
Dir1460322975/
Dir1460327597/
Dir1460328915/
Dir1460334192/
Dir1460335152/
Dir1460336114/
Dir1460339832/
Dir1460339892/
Dir1460340554/
Dir1460343124/
Dir1460349966/
Dir1460353872/
Dir1460354286/
Dir1460355919/
Dir1460360719/
Dir1460360895/
Dir1460363056/
Dir1460366053/
Dir1460367130/
Dir1460367854/
Dir1460368086/
Dir1460370981/
Dir1460371578/
Dir1460373196/
Dir1460380384/
Dir1460380567/
Dir1460381896/
Dir1460382557/
Dir1460382856/
Dir1460383336/
Dir1460385681/
Dir1460385852/
Dir1460386873/
Dir1460387350/
Dir1460387839/
Dir1460388081/
Dir1460390364/
Dir1460390590/
Dir1460390954/
Dir1460391435/
Dir1460391555/
Dir1460391918/
Dir1460393121/
Dir1460393651/
Dir1460393778/
Dir1460394019/
Dir1460395272/
Dir1460395571/
Dir1460396704/
Dir1460398956/
Dir1460398958/
Dir1460399156/
Dir1460399662/
Dir1460399920/
Dir1460400150/
Dir1460401189/
Dir1460401832/
Dir1460401963/
Dir1460403921/
Dir1460404365/
Dir1460408754/
Dir1460409654/
Dir1460410658/
Dir1460412175/
Dir1460412920/
Dir1460413075/
Dir1460413488/
Dir1460414631/
Dir1460415955/
Dir1460418105/
Dir1460418232/
Dir1460418770/
Dir1460425007/
Dir1460425244/
Dir1460426036/
Dir1460427472/
Dir1460430112/
Dir1460430524/
Dir1460430767/
Dir1460431248/
Dir1460431551/
Dir1460432096/
Dir1460434069/
Dir1460434557/
Dir1460438814/
Dir1460438984/
Dir1460440431/
Dir1460441267/
Dir1460441385/
Dir1460442892/
Dir1460446250/
Dir1460447030/
Dir1460450094/
Dir1460450400/
Dir1460450689/
Dir1460450813/
Dir1460452544/
Dir1460455973/
Dir1460457533/
Dir1460459206/
Dir1460462035/
Dir1460464909/
Dir1460465574/
Dir1460466712/
Dir1460466948/
Dir1460468457/
Dir1460469591/
Dir1460470123/
Dir1460470548/
Dir1460470735/
Dir1460470736/
Dir1460470850/
Dir1460471215/
Dir1460472945/
Dir1460474529/
Dir1460476618/
Dir1460477214/
Dir1460477692/
Dir1460479604/
Dir1460481476/
Dir1460481648/
Dir1460482733/
Dir1460485193/
Dir1460486036/
Dir1460488556/
Dir1460488967/
Dir1460489564/
Dir1460490587/
Dir1460491791/
Dir1460492210/
Dir1460492267/
Dir1460492867/
Dir1460493528/
Dir1460494123/
Dir1460494369/
Dir1460495564/
Dir1460495983/
Dir1460497208/
Dir1460498152/
Dir1460498153/
Dir1460498333/
Dir1460498766/
Dir1460499468/
Dir1460500614/
Dir1460500845/
Dir1460505054/
Dir1460506969/
Dir1460507206/
Dir1460509785/
Dir1460509907/
Dir1460510749/
Dir1460511890/
Dir1460516267/
Dir1460521072/
Dir1460521906/
Dir1460526170/
Dir1460530247/
Dir1460530664/
Dir1460532893/
Dir1460534212/
Dir1460535165/
Dir1460536727/
Dir1460537687/
Dir1460538888/
Dir1460539014/
Dir1460541357/
Dir1460542074/
Dir1460544047/
Dir1460544406/
Dir1460546207/
Dir1460547950/
Dir1460548386/
Dir1460548390/
Dir1460548394/
Dir1460548396/
Dir1460548618/
Dir1460548619/
Dir1460548620/
Dir1460548621/
Dir1460548622/
Dir1460548774/
Dir1460548775/
Dir1460548776/
Dir1460548778/
Dir1460548779/
Dir1460548782/
Dir1460550114/
Dir1460550895/
Dir1460551904/
Dir1460552096/
Dir1460552756/
Dir1460552987/
Dir1460553165/
Dir1460554401/
Dir1460554402/
Dir1460554403/
Dir1460554404/
Dir1460554407/
Dir1460554408/
Dir1460554409/
Dir1460554410/
Dir1460554420/
Dir1460554421/
Dir1460554422/
Dir1460554424/
Dir1460554427/
Dir1460554428/
Dir1460554446/
Dir1460554447/
Dir1460554449/
Dir1460554499/
Dir1460554500/
Dir1460554501/
Dir1460554505/
Dir1460554506/
Dir1460554507/
Dir1460554508/
Dir1460554513/
Dir1460554514/
Dir1460554515/
Dir1460554516/
Dir1460554520/
Dir1460554521/
Dir1460554522/
Dir1460554524/
Dir1460554529/
Dir1460554530/
Dir1460554531/
Dir1460554533/
Dir1460554534/
Dir1460554536/
Dir1460554537/
Dir1460554538/
Dir1460554539/
Dir1460554542/
Dir1460554543/
Dir1460554544/
Dir1460554545/
Dir1460554885/
Dir1460554904/
Dir1460555157/
Dir1460555452/
Dir1460556396/
Dir1460556592/
Dir1460557378/
Dir1460557956/
Dir1460559409/
Dir1460561023/
Dir1460562460/
Dir1460567861/
Dir1460568821/
Dir1460570144/
Dir1460571470/
Dir1460572484/
Dir1460573146/
Dir1460579683/
Dir1460579988/
Dir1460581841/
Dir1460582022/
Dir1460582319/
Dir1460583287/
Dir1460583476/
Dir1460584604/
Dir1460585451/
Dir1460585748/
Dir1460586520/
Dir1460586702/
Dir1460587002/
Dir1460587250/
Dir1460587600/
Dir1460590127/
Dir1460590314/
Dir1460590362/
Dir1460591803/
Dir1460591869/
Dir1460592643/
Dir1460600858/
Dir1460600986/
Dir1460606269/
Dir1460607828/
Dir1460609449/
Dir1460609571/
Dir1460613880/
Dir1460614839/
Dir1460615089/
Dir1460617120/
Dir1460617515/
Dir1460619402/
Dir1460619762/
Dir1460621629/
Dir1460623846/
Dir1460625703/
Dir1460627084/
Dir1460627507/
Dir1460628374/
Dir1460630395/
Dir1460634051/
Dir1460634471/
Dir1460636203/
Dir1460643222/
Dir1460645138/
Dir1460646945/
Dir1460648025/
Dir1460648151/
Dir1460648742/
Dir1460649228/
Dir1460649287/
Dir1460650246/
Dir1460651042/
Dir1460653368/
Dir1460655283/
Dir1460655476/
Dir1460655698/
Dir1460656000/
Dir1460657183/
Dir1460657184/
Dir1460659120/
Dir1460660084/
Dir1460660505/
Dir1460662069/
Dir1460662487/
Dir1460663441/
Dir1460664710/
Dir1460665242/
Dir1460665300/
Dir1460666269/
Dir1460666869/
Dir1460667041/
Dir1460670948/
Dir1460672321/
Dir1460675741/
Dir1460675927/
Dir1460677609/
Dir1460681259/
Dir1460681678/
Dir1460689059/
Dir1460689306/
Dir1460689544/
Dir1460689798/
Dir1460691114/
Dir1460691459/
Dir1460692373/
Dir1460693143/
Dir1460693988/
Dir1460695149/
Dir1460695543/
Dir1460695730/
Dir1460700642/
Dir1460701671/
Dir1460701966/
Dir1460704073/
Dir1460705454/
Dir1460711499/
Dir1460711989/
Dir1460712411/
Dir1460714629/
Dir1460715170/
Dir1460716839/
Dir1460718764/
Dir1460719738/
Dir1460721461/
Dir1460721588/
Dir1460723536/
Dir1460723554/
Dir1460723555/
Dir1460726146/
Dir1460726328/
Dir1460727711/
Dir1460729424/
Dir1460729764/
Dir1460729918/
Dir1460730000/
Dir1460730017/
Dir1460731733/
Dir1460734122/
Dir1460737121/
Dir1460738750/
Dir1460739224/
Dir1460743850/
Dir1460746839/
Dir1460747208/
Dir1460748882/
Dir1460752647/
Dir1460757255/
Dir1460758461/
Dir1460758944/
Dir1460760017/
Dir1460760641/
Dir1460761095/
Dir1460763314/
Dir1460763615/
Dir1460764165/
Dir1460765901/
Dir1460766076/
Dir1460771361/
Dir1460772365/
Dir1460775991/
Dir1460776346/
Dir1460790320/
Dir1460798657/
Dir1460802202/
Dir1460811759/
Dir1460823438/
Dir1460824345/
Dir1460828959/
Dir1460864844/
Dir1460865142/
Dir1460897846/
Dir1460903062/
Dir1460907501/
Dir1460911047/
Dir1460929635/
Dir1460930478/
Dir1460938038/
Dir1460938698/
Dir1460959215/
Dir1460962340/
Dir1460964140/
Dir1460964861/
Dir1460966558/
Dir1460966775/
Dir1460966971/
Dir1460968104/
Dir1460968878/
Dir1460969126/
Dir1460970559/
Dir1460970903/
Dir1460971225/
Dir1460971760/
Dir1460975189/
Dir1460978115/
Dir1460978183/
Dir1460982198/
Dir1460982498/
Dir1460982801/
Dir1460983398/
Dir1460984803/
Dir1460985874/
Dir1460988978/
Dir1460990302/
Dir1460991382/
Dir1460992650/
Dir1460993136/
Dir1460993313/
Dir1460997031/
Dir1460997222/
Dir1460998230/
Dir1460999565/
Dir1461000225/
Dir1461001255/
Dir1461002926/
Dir1461003405/
Dir1461003470/
Dir1461005383/
Dir1461006170/
Dir1461008695/
Dir1461009992/
Dir1461010669/
Dir1461012982/
Dir1461013107/
Dir1461013953/
Dir1461013954/
Dir1461014487/
Dir1461014540/
Dir1461014603/
Dir1461014782/
Dir1461015260/
Dir1461016894/
Dir1461017723/
Dir1461020425/
Dir1461021687/
Dir1461021872/
Dir1461024381/
Dir1461032840/
Dir1461033202/
Dir1461034346/
Dir1461034835/
Dir1461035606/
Dir1461035660/
Dir1461035962/
Dir1461044998/
Dir1461044999/
Dir1461045001/
Dir1461046311/
Dir1461051480/
Dir1461051582/
Dir1461052969/
Dir1461057043/
Dir1461058123/
Dir1461058185/
Dir1461058314/
Dir1461058603/
Dir1461059203/
Dir1461059265/
Dir1461059336/
Dir1461060109/
Dir1461060523/
Dir1461060524/
Dir1461062212/
Dir1461063408/
Dir1461065148/
Dir1461065273/
Dir1461067548/
Dir1461067852/
Dir1461068508/
Dir1461068868/
Dir1461070370/
Dir1461071742/
Dir1461074151/
Dir1461074392/
Dir1461075395/
Dir1461075822/
Dir1461076001/
Dir1461076060/
Dir1461076115/
Dir1461077198/
Dir1461077434/
Dir1461079510/
Dir1461079511/
Dir1461080313/
Dir1461081171/
Dir1461082358/
Dir1461082474/
Dir1461085123/
Dir1461086860/
Dir1461090161/
Dir1461091177/
Dir1461091897/
Dir1461093572/
Dir1461096823/
Dir1461098023/
Dir1461100120/
Dir1461100661/
Dir1461101617/
Dir1461104795/
Dir1461106176/
Dir1461106416/
Dir1461107432/
Dir1461107974/
Dir1461108211/
Dir1461108277/
Dir1461108877/
Dir1461110017/
Dir1461111693/
Dir1461111937/
Dir1461114267/
Dir1461114585/
Dir1461118904/
Dir1461124178/
Dir1461124419/
Dir1461124594/
Dir1461128432/
Dir1461129049/
Dir1461133722/
Dir1461135456/
Dir1461136291/
Dir1461136358/
Dir1461138349/
Dir1461139054/
Dir1461142355/
Dir1461142903/
Dir1461143265/
Dir1461143320/
Dir1461144639/
Dir1461145233/
Dir1461145776/
Dir1461145968/
Dir1461146260/
Dir1461147224/
Dir1461148899/
Dir1461151122/
Dir1461153460/
Dir1461154500/
Dir1461156511/
Dir1461157292/
Dir1461159394/
Dir1461159698/
Dir1461161313/
Dir1461161317/
Dir1461161918/
Dir1461162522/
Dir1461162858/
Dir1461165703/
Dir1461166965/
Dir1461167621/
Dir1461170504/
Dir1461170623/
Dir1461172249/
Dir1461172672/
Dir1461173562/
Dir1461173924/
Dir1461174341/
Dir1461174828/
Dir1461176385/
Dir1461176566/
Dir1461177888/
Dir1461178901/
Dir1461179260/
Dir1461180464/
Dir1461181008/
Dir1461184849/
Dir1461185622/
Dir1461186423/
Dir1461187205/
Dir1461188099/
Dir1461189066/
Dir1461189429/
Dir1461189545/
Dir1461190024/
Dir1461192119/
Dir1461192370/
Dir1461196020/
Dir1461196201/
Dir1461196262/
Dir1461200766/
Dir1461203645/
Dir1461206463/
Dir1461206590/
Dir1461211086/
Dir1461212828/
Dir1461213190/
Dir1461214505/
Dir1461217124/
Dir1461217441/
Dir1461217996/
Dir1461219423/
Dir1461224104/
Dir1461226382/
Dir1461226981/
Dir1461230707/
Dir1461231428/
Dir1461233218/
Dir1461233298/
Dir1461234240/
Dir1461238802/
Dir1461238989/
Dir1461239109/
Dir1461240549/
Dir1461245081/
Dir1461246083/
Dir1461247028/
Dir1461247934/
Dir1461248345/
Dir1461249445/
Dir1461250829/
Dir1461251776/
Dir1461252490/
Dir1461252799/
Dir1461252833/
Dir1461252973/
Dir1461253380/
Dir1461253572/
Dir1461253828/
Dir1461253889/
Dir1461255193/
Dir1461257291/
Dir1461257926/
Dir1461258000/
Dir1461258402/
Dir1461259986/
Dir1461260100/
Dir1461260590/
Dir1461261243/
Dir1461261617/
Dir1461262394/
Dir1461263948/
Dir1461264241/
Dir1461265984/
Dir1461266882/
Dir1461267243/
Dir1461268213/
Dir1461269185/
Dir1461272165/
Dir1461272227/
Dir1461272656/
Dir1461273313/
Dir1461276377/
Dir1461276378/
Dir1461277449/
Dir1461277511/
Dir1461278527/
Dir1461280210/
Dir1461280932/
Dir1461281524/
Dir1461283564/
Dir1461285366/
Dir1461285548/
Dir1461285902/
Dir1461289115/
Dir1461289632/
Dir1461290781/
Dir1461292082/
Dir1461296586/
Dir1461297435/
Dir1461297436/
Dir1461297904/
Dir1461300429/
Dir1461301485/
Dir1461302284/
Dir1461304506/
Dir1461304684/
Dir1461308219/
Dir1461309243/
Dir1461309802/
Dir1461310510/
Dir1461310511/
Dir1461315883/
Dir1461316035/
Dir1461316931/
Dir1461317804/
Dir1461317805/
Dir1461317806/
Dir1461317808/
Dir1461317809/
Dir1461317814/
Dir1461317815/
Dir1461317816/
Dir1461317817/
Dir1461317818/
Dir1461317821/
Dir1461317825/
Dir1461317826/
Dir1461317840/
Dir1461317841/
Dir1461317842/
Dir1461317843/
Dir1461317844/
Dir1461318088/
Dir1461318089/
Dir1461318090/
Dir1461318091/
Dir1461318094/
Dir1461318100/
Dir1461318101/
Dir1461318102/
Dir1461318103/
Dir1461318106/
Dir1461318107/
Dir1461318108/
Dir1461318109/
Dir1461318111/
Dir1461318125/
Dir1461318126/
Dir1461318127/
Dir1461318128/
Dir1461318129/
Dir1461318371/
Dir1461318372/
Dir1461318374/
Dir1461318382/
Dir1461318383/
Dir1461318386/
Dir1461318388/
Dir1461318389/
Dir1461318391/
Dir1461318407/
Dir1461318408/
Dir1461318409/
Dir1461318410/
Dir1461318415/
Dir1461318694/
Dir1461318695/
Dir1461318696/
Dir1461318699/
Dir1461318706/
Dir1461318708/
Dir1461318709/
Dir1461322440/
Dir1461325259/
Dir1461327848/
Dir1461328324/
Dir1461329286/
Dir1461330570/
Dir1461332339/
Dir1461333192/
Dir1461333244/
Dir1461333543/
Dir1461334163/
Dir1461335226/
Dir1461335887/
Dir1461337631/
Dir1461338464/
Dir1461338644/
Dir1461338707/
Dir1461339305/
Dir1461343505/
Dir1461343680/
Dir1461343748/
Dir1461343749/
Dir1461343862/
Dir1461343922/
Dir1461343923/
Dir1461343981/
Dir1461344112/
Dir1461344284/
Dir1461344343/
Dir1461344807/
Dir1461345547/
Dir1461347022/
Dir1461348454/
Dir1461348692/
Dir1461349849/
Dir1461350069/
Dir1461354830/
Dir1461355308/
Dir1461355452/
Dir1461355579/
Dir1461356082/
Dir1461359807/
Dir1461362452/
Dir1461365453/
Dir1461366895/
Dir1461369532/
Dir1461370730/
Dir1461385912/
Dir1461390065/
Dir1461401574/
Dir1461401802/
Dir1461403788/
Dir1461404082/
Dir1461404153/
Dir1461404154/
Dir1461404155/
Dir1461405414/
Dir1461406906/
Dir1461407027/
Dir1461407028/
Dir1461407116/
Dir1461407151/
Dir1461407189/
Dir1461407190/
Dir1461407204/
Dir1461407205/
Dir1461407272/
Dir1461407273/
Dir1461407274/
Dir1461407324/
Dir1461407325/
Dir1461407395/
Dir1461407396/
Dir1461407453/
Dir1461408122/
Dir1461409565/
Dir1461409965/
Dir1461414942/
Dir1461431102/
Dir1461435115/
Dir1461442734/
Dir1461442791/
Dir1461443692/
Dir1461445963/
Dir1461446388/
Dir1461459230/
Dir1461459289/
Dir1461460131/
Dir1461467206/
Dir1461467207/
Dir1461472552/
Dir1461485155/
Dir1461507275/
Dir1461510707/
Dir1461522883/
Dir1461524402/
Dir1461538302/
Dir1461547074/
Dir1461548445/
Dir1461552582/
Dir1461555069/
Dir1461556487/
Dir1461563693/
Dir1461569027/
Dir1461569385/
Dir1461570232/
Dir1461571363/
Dir1461576651/
Dir1461577605/
Dir1461578266/
Dir1461580908/
Dir1461584155/
Dir1461586308/
Dir1461588534/
Dir1461589551/
Dir1461589743/
Dir1461589968/
Dir1461592012/
Dir1461592401/
Dir1461594595/
Dir1461595548/
Dir1461596106/
Dir1461596813/
Dir1461598313/
Dir1461598915/
Dir1461599323/
Dir1461600588/
Dir1461602656/
Dir1461603671/
Dir1461604277/
Dir1461605542/
Dir1461605785/
Dir1461609070/
Dir1461609550/
Dir1461612425/
Dir1461613395/
Dir1461614660/
Dir1461615497/
Dir1461616516/
Dir1461618245/
Dir1461619867/
Dir1461624550/
Dir1461625214/
Dir1461625806/
Dir1461630185/
Dir1461630300/
Dir1461631856/
Dir1461632343/
Dir1461634443/
Dir1461635819/
Dir1461635937/
Dir1461636971/
Dir1461638084/
Dir1461638586/
Dir1461640203/
Dir1461644701/
Dir1461645007/
Dir1461647575/
Dir1461652694/
Dir1461653404/
Dir1461653576/
Dir1461657479/
Dir1461658088/
Dir1461659045/
Dir1461660364/
Dir1461660720/
Dir1461662105/
Dir1461662407/
Dir1461663046/
Dir1461663246/
Dir1461666120/
Dir1461669181/
Dir1461672258/
Dir1461672377/
Dir1461672535/
Dir1461673211/
Dir1461674276/
Dir1461674705/
Dir1461679612/
Dir1461681267/
Dir1461681778/
Dir1461681913/
Dir1461682196/
Dir1461682809/
Dir1461683103/
Dir1461683224/
Dir1461685503/
Dir1461685615/
Dir1461685805/
Dir1461686516/
Dir1461688334/
Dir1461689876/
Dir1461690559/
Dir1461690903/
Dir1461691628/
Dir1461692286/
Dir1461692637/
Dir1461694573/
Dir1461694618/
Dir1461695465/
Dir1461695701/
Dir1461696417/
Dir1461696724/
Dir1461699244/
Dir1461700203/
Dir1461701582/
Dir1461702966/
Dir1461703083/
Dir1461703204/
Dir1461703922/
Dir1461704738/
Dir1461704888/
Dir1461705058/
Dir1461705598/
Dir1461706138/
Dir1461706199/
Dir1461708904/
Dir1461713413/
Dir1461723779/
Dir1461724446/
Dir1461727558/
Dir1461728645/
Dir1461729481/
Dir1461730985/
Dir1461736266/
Dir1461736746/
Dir1461739204/
Dir1461740465/
Dir1461743413/
Dir1461745284/
Dir1461746939/
Dir1461750777/
Dir1461751627/
Dir1461753415/
Dir1461753540/
Dir1461757616/
Dir1461758161/
Dir1461761578/
Dir1461763375/
Dir1461763864/
Dir1461766322/
Dir1461767773/
Dir1461767890/
Dir1461768363/
Dir1461769088/
Dir1461769316/
Dir1461773131/
Dir1461773266/
Dir1461773399/
Dir1461775020/
Dir1461775330/
Dir1461775688/
Dir1461775885/
Dir1461776239/
Dir1461776398/
Dir1461776827/
Dir1461777601/
Dir1461778087/
Dir1461780591/
Dir1461781786/
Dir1461783120/
Dir1461785510/
Dir1461785569/
Dir1461788096/
Dir1461790619/
Dir1461791808/
Dir1461791930/
Dir1461792231/
Dir1461792647/
Dir1461797512/
Dir1461799376/
Dir1461800688/
Dir1461802018/
Dir1461811253/
Dir1461811427/
Dir1461811793/
Dir1461813958/
Dir1461820007/
Dir1461820132/
Dir1461822534/
Dir1461823134/
Dir1461825534/
Dir1461826015/
Dir1461827465/
Dir1461828048/
Dir1461831420/
Dir1461831655/
Dir1461832131/
Dir1461832248/
Dir1461832442/
Dir1461832498/
Dir1461833932/
Dir1461834266/
Dir1461834955/
Dir1461835370/
Dir1461836290/
Dir1461838136/
Dir1461838192/
Dir1461840892/
Dir1461841257/
Dir1461843595/
Dir1461844653/
Dir1461844795/
Dir1461845183/
Dir1461849835/
Dir1461850246/
Dir1461852168/
Dir1461854434/
Dir1461854435/
Dir1461854568/
Dir1461854994/
Dir1461857627/
Dir1461859319/
Dir1461859933/
Dir1461861721/
Dir1461862259/
Dir1461862918/
Dir1461863647/
Dir1461864181/
Dir1461865802/
Dir1461871310/
Dir1461872507/
Dir1461872697/
Dir1461874062/
Dir1461874246/
Dir1461874789/
Dir1461875146/
Dir1461875205/
Dir1461876287/
Dir1461877566/
Dir1461877791/
Dir1461879881/
Dir1461880246/
Dir1461881747/
Dir1461882293/
Dir1461883613/
Dir1461886130/
Dir1461886133/
Dir1461886138/
Dir1461886191/
Dir1461886192/
Dir1461886194/
Dir1461886543/
Dir1461887564/
Dir1461891839/
Dir1461894601/
Dir1461898603/
Dir1461899301/
Dir1461899639/
Dir1461899930/
Dir1461903705/
Dir1461906112/
Dir1461909281/
Dir1461910303/
Dir1461910544/
Dir1461911151/
Dir1461916730/
Dir1461917690/
Dir1461921949/
Dir1461923321/
Dir1461927530/
Dir1461929990/
Dir1461931246/
Dir1461931553/
Dir1461931670/
Dir1461932813/
Dir1461934304/
Dir1461935204/
Dir1461935501/
Dir1461935863/
Dir1461939897/
Dir1461942282/
Dir1461945412/
Dir1461945521/
Dir1461945970/
Dir1461945971/
Dir1461949354/
Dir1461949779/
Dir1461950015/
Dir1461950077/
Dir1461950628/
Dir1461951575/
Dir1461952661/
Dir1461953620/
Dir1461955360/
Dir1461958961/
Dir1461959431/
Dir1461962016/
Dir1461962373/
Dir1461964230/
Dir1461964542/
Dir1461966510/
Dir1461967293/
Dir1461967471/
Dir1461967780/
Dir1461967891/
Dir1461968796/
Dir1461969400/
Dir1461970411/
Dir1461970907/
Dir1461972518/
Dir1461974433/
Dir1461974665/
Dir1461975814/
Dir1461978357/
Dir1461978522/
Dir1461982951/
Dir1461985666/
Dir1461986136/
Dir1461991838/
Dir1462002939/
Dir1462005815/
Dir1462009649/
Dir1462019141/
Dir1462029100/
Dir1462055982/
Dir1462085013/
Dir1462104932/
Dir1462108238/
Dir1462108239/
Dir1462108290/
Dir1462108291/
Dir1462108292/
Dir1462108293/
Dir1462108294/
Dir1462108356/
Dir1462108357/
Dir1462108358/
Dir1462108359/
Dir1462108360/
Dir1462108409/
Dir1462108410/
Dir1462108411/
Dir1462108412/
Dir1462108413/
Dir1462108476/
Dir1462108477/
Dir1462108478/
Dir1462108479/
Dir1462108480/
Dir1462108530/
Dir1462108531/
Dir1462108532/
Dir1462108533/
Dir1462108534/
Dir1462108596/
Dir1462108597/
Dir1462108598/
Dir1462108599/
Dir1462108600/
Dir1462108661/
Dir1462108662/
Dir1462108663/
Dir1462108664/
Dir1462108665/
Dir1462108715/
Dir1462108716/
Dir1462108717/
Dir1462108718/
Dir1462112937/
Dir1462113150/
Dir1462114721/
Dir1462114722/
Dir1462114723/
Dir1462114724/
Dir1462114790/
Dir1462114825/
Dir1462114826/
Dir1462124016/
Dir1462127381/
Dir1462143449/
Dir1462143940/
Dir1462149031/
Dir1462151913/
Dir1462153293/
Dir1462154189/
Dir1462158509/
Dir1462160554/
Dir1462160677/
Dir1462161454/
Dir1462164518/
Dir1462169199/
Dir1462171126/
Dir1462172865/
Dir1462173157/
Dir1462173391/
Dir1462177537/
Dir1462182038/
Dir1462191030/
Dir1462198036/
Dir1462198596/
Dir1462199678/
Dir1462203632/
Dir1462203751/
Dir1462205439/
Dir1462205448/
Dir1462205612/
Dir1462205960/
Dir1462208193/
Dir1462210110/
Dir1462210495/
Dir1462211024/
Dir1462211800/
Dir1462211979/
Dir1462213454/
Dir1462213722/
Dir1462214442/
Dir1462215291/
Dir1462216254/
Dir1462216255/
Dir1462216309/
Dir1462217206/
Dir1462218462/
Dir1462219032/
Dir1462220613/
Dir1462221032/
Dir1462222782/
Dir1462224292/
Dir1462225311/
Dir1462227342/
Dir1462228663/
Dir1462230799/
Dir1462232904/
Dir1462234960/
Dir1462235261/
Dir1462235379/
Dir1462239040/
Dir1462242967/
Dir1462244026/
Dir1462246727/
Dir1462247320/
Dir1462249621/
Dir1462249726/
Dir1462249776/
Dir1462250085/
Dir1462253018/
Dir1462253516/
Dir1462257100/
Dir1462258360/
Dir1462259269/
Dir1462259503/
Dir1462262434/
Dir1462263641/
Dir1462263642/
Dir1462263762/
Dir1462264721/
Dir1462264907/
Dir1462265322/
Dir1462265564/
Dir1462266263/
Dir1462266822/
Dir1462267957/
Dir1462268135/
Dir1462269231/
Dir1462269957/
Dir1462270065/
Dir1462270475/
Dir1462270703/
Dir1462271105/
Dir1462271375/
Dir1462273002/
Dir1462274138/
Dir1462275038/
Dir1462275056/
Dir1462278101/
Dir1462279069/
Dir1462280667/
Dir1462281278/
Dir1462281418/
Dir1462281462/
Dir1462283330/
Dir1462284411/
Dir1462285185/
Dir1462286075/
Dir1462286533/
Dir1462287528/
Dir1462288656/
Dir1462291067/
Dir1462291717/
Dir1462293053/
Dir1462293997/
Dir1462294128/
Dir1462295747/
Dir1462296281/
Dir1462296409/
Dir1462296538/
Dir1462296723/
Dir1462301506/
Dir1462301868/
Dir1462303490/
Dir1462305403/
Dir1462305950/
Dir1462306908/
Dir1462306909/
Dir1462307318/
Dir1462307454/
Dir1462307919/
Dir1462307988/
Dir1462309460/
Dir1462310395/
Dir1462310481/
Dir1462311095/
Dir1462311340/
Dir1462313858/
Dir1462315122/
Dir1462316261/
Dir1462316646/
Dir1462318225/
Dir1462321716/
Dir1462321898/
Dir1462322319/
Dir1462322497/
Dir1462323525/
Dir1462323701/
Dir1462328775/
Dir1462329386/
Dir1462337388/
Dir1462338706/
Dir1462338824/
Dir1462338877/
Dir1462339357/
Dir1462339916/
Dir1462340323/
Dir1462340506/
Dir1462341964/
Dir1462342907/
Dir1462346021/
Dir1462347224/
Dir1462347522/
Dir1462347996/
Dir1462348658/
Dir1462349801/
Dir1462350587/
Dir1462350624/
Dir1462351485/
Dir1462353048/
Dir1462354957/
Dir1462355985/
Dir1462358921/
Dir1462361972/
Dir1462361973/
Dir1462362952/
Dir1462366969/
Dir1462368048/
Dir1462368247/
Dir1462371056/
Dir1462373983/
Dir1462376086/
Dir1462376738/
Dir1462377095/
Dir1462377521/
Dir1462377842/
Dir1462378128/
Dir1462378479/
Dir1462379617/
Dir1462380396/
Dir1462381185/
Dir1462381300/
Dir1462383079/
Dir1462383168/
Dir1462384009/
Dir1462384303/
Dir1462384662/
Dir1462384865/
Dir1462385077/
Dir1462386220/
Dir1462387296/
Dir1462393885/
Dir1462394031/
Dir1462396418/
Dir1462396485/
Dir1462397082/
Dir1462398157/
Dir1462398583/
Dir1462398584/
Dir1462399847/
Dir1462401336/
Dir1462402545/
Dir1462404630/
Dir1462406198/
Dir1462407458/
Dir1462408965/
Dir1462410401/
Dir1462415700/
Dir1462415813/
Dir1462416284/
Dir1462417692/
Dir1462417913/
Dir1462418920/
Dir1462419822/
Dir1462420055/
Dir1462424561/
Dir1462425695/
Dir1462425822/
Dir1462426066/
Dir1462429914/
Dir1462434852/
Dir1462434853/
Dir1462434854/
Dir1462434859/
Dir1462434860/
Dir1462434861/
Dir1462434862/
Dir1462434866/
Dir1462434869/
Dir1462434871/
Dir1462434872/
Dir1462434875/
Dir1462434877/
Dir1462434878/
Dir1462434881/
Dir1462434883/
Dir1462434884/
Dir1462434885/
Dir1462434889/
Dir1462434890/
Dir1462434891/
Dir1462434892/
Dir1462434893/
Dir1462434896/
Dir1462434897/
Dir1462434899/
Dir1462434900/
Dir1462439866/
Dir1462440891/
Dir1462442324/
Dir1462442573/
Dir1462443586/
Dir1462445208/
Dir1462447814/
Dir1462448393/
Dir1462449758/
Dir1462449982/
Dir1462457395/
Dir1462457396/
Dir1462459183/
Dir1462459299/
Dir1462459366/
Dir1462459659/
Dir1462460440/
Dir1462460912/
Dir1462463312/
Dir1462465906/
Dir1462465969/
Dir1462466394/
Dir1462466799/
Dir1462466868/
Dir1462466987/
Dir1462466988/
Dir1462468915/
Dir1462469390/
Dir1462469690/
Dir1462470706/
Dir1462471002/
Dir1462472989/
Dir1462473342/
Dir1462473822/
Dir1462477610/
Dir1462478500/
Dir1462478862/
Dir1462479039/
Dir1462479279/
Dir1462480546/
Dir1462480667/
Dir1462481686/
Dir1462483260/
Dir1462486362/
Dir1462487862/
Dir1462488887/
Dir1462490800/
Dir1462493453/
Dir1462499902/
Dir1462501042/
Dir1462501583/
Dir1462501758/
Dir1462502712/
Dir1462503995/
Dir1462504167/
Dir1462505125/
Dir1462506442/
Dir1462509329/
Dir1462510646/
Dir1462518623/
Dir1462519395/
Dir1462519641/
Dir1462519939/
Dir1462520443/
Dir1462526263/
Dir1462529078/
Dir1462530504/
Dir1462536343/
Dir1462537992/
Dir1462537993/
Dir1462539872/
Dir1462540460/
Dir1462542741/
Dir1462545674/
Dir1462546277/
Dir1462547484/
Dir1462549216/
Dir1462551155/
Dir1462553722/
Dir1462555231/
Dir1462555913/
Dir1462556262/
Dir1462557284/
Dir1462557883/
Dir1462558611/
Dir1462560162/
Dir1462561061/
Dir1462561980/
Dir1462562332/
Dir1462563240/
Dir1462563298/
Dir1462563538/
Dir1462564190/
Dir1462564260/
Dir1462564581/
Dir1462564613/
Dir1462565079/
Dir1462565192/
Dir1462565390/
Dir1462565460/
Dir1462567490/
Dir1462567623/
Dir1462568280/
Dir1462569718/
Dir1462570674/
Dir1462572775/
Dir1462575120/
Dir1462575543/
Dir1462576310/
Dir1462576666/
Dir1462578890/
Dir1462580390/
Dir1462583057/
Dir1462584772/
Dir1462586793/
Dir1462587102/
Dir1462596947/
Dir1462600247/
Dir1462602285/
Dir1462608408/
Dir1462612660/
Dir1462623710/
Dir1462638114/
Dir1462654554/
Dir1462673624/
Dir1462693497/
Dir1462694267/
Dir1462696488/
Dir1462702732/
Dir1462708008/
Dir1462714017/
Dir1462718515/
Dir1462732315/
Dir1462757440/
Dir1462759129/
Dir1462761284/
Dir1462762846/
Dir1462765007/
Dir1462771059/
Dir1462771604/
Dir1462772389/
Dir1462775086/
Dir1462784082/
Dir1462784449/
Dir1462785051/
Dir1462785101/
Dir1462785229/
Dir1462785767/
Dir1462786781/
Dir1462787086/
Dir1462787332/
Dir1462787509/
Dir1462787685/
Dir1462788769/
Dir1462789853/
Dir1462791296/
Dir1462791946/
Dir1462792907/
Dir1462794048/
Dir1462794590/
Dir1462797583/
Dir1462798726/
Dir1462801846/
Dir1462801972/
Dir1462802958/
Dir1462804360/
Dir1462804501/
Dir1462805183/
Dir1462806289/
Dir1462807000/
Dir1462807428/
Dir1462808031/
Dir1462811748/
Dir1462811981/
Dir1462812942/
Dir1462813188/
Dir1462814021/
Dir1462814143/
Dir1462814391/
Dir1462815460/
Dir1462816027/
Dir1462816862/
Dir1462818365/
Dir1462818477/
Dir1462819616/
Dir1462820282/
Dir1462820394/
Dir1462823943/
Dir1462824753/
Dir1462824793/
Dir1462825148/
Dir1462825451/
Dir1462826701/
Dir1462827247/
Dir1462828198/
Dir1462833365/
Dir1462837257/
Dir1462837738/
Dir1462840017/
Dir1462840927/
Dir1462841405/
Dir1462842367/
Dir1462843505/
Dir1462843622/
Dir1462844708/
Dir1462845954/
Dir1462847226/
Dir1462850279/
Dir1462851537/
Dir1462852820/
Dir1462853277/
Dir1462853418/
Dir1462854136/
Dir1462863136/
Dir1462868944/
Dir1462869845/
Dir1462869909/
Dir1462869970/
Dir1462870084/
Dir1462870337/
Dir1462870444/
Dir1462871066/
Dir1462872258/
Dir1462872552/
Dir1462873267/
Dir1462874045/
Dir1462874884/
Dir1462874954/
Dir1462875365/
Dir1462875553/
Dir1462875983/
Dir1462876930/
Dir1462877108/
Dir1462877169/
Dir1462877587/
Dir1462877777/
Dir1462877957/
Dir1462882089/
Dir1462883587/
Dir1462884068/
Dir1462885595/
Dir1462889256/
Dir1462891393/
Dir1462891572/
Dir1462918985/
Dir1462920064/
Dir1462920376/
Dir1462920784/
Dir1462920908/
Dir1462921031/
Dir1462922233/
Dir1462922357/
Dir1462923854/
Dir1462924819/
Dir1462927151/
Dir1462928171/
Dir1462928299/
Dir1462934230/
Dir1462938194/
Dir1462939145/
Dir1462939274/
Dir1462939884/
Dir1462939990/
Dir1462940113/
Dir1462942956/
Dir1462944367/
Dir1462945987/
Dir1462949898/
Dir1462950077/
Dir1462952113/
Dir1462953896/
Dir1462953899/
Dir1462954266/
Dir1462956190/
Dir1462956379/
Dir1462956552/
Dir1462957792/
Dir1462958768/
Dir1462958834/
Dir1462960027/
Dir1462960334/
Dir1462961778/
Dir1462961885/
Dir1462963420/
Dir1462963421/
Dir1462963423/
Dir1462963424/
Dir1462963425/
Dir1462963426/
Dir1462963427/
Dir1462963429/
Dir1462963430/
Dir1462963431/
Dir1462963432/
Dir1462963435/
Dir1462963436/
Dir1462963437/
Dir1462963439/
Dir1462963441/
Dir1462963443/
Dir1462963445/
Dir1462963446/
Dir1462963449/
Dir1462963450/
Dir1462963451/
Dir1462963452/
Dir1462963453/
Dir1462963455/
Dir1462963456/
Dir1462963457/
Dir1462963458/
Dir1462963459/
Dir1462963461/
Dir1462964297/
Dir1462964353/
Dir1462965005/
Dir1462965006/
Dir1462965376/
Dir1462967174/
Dir1462968148/
Dir1462968730/
Dir1462971491/
Dir1462972988/
Dir1462973297/
Dir1462974551/
Dir1462974731/
Dir1462975583/
Dir1462975929/
Dir1462976178/
Dir1462976534/
Dir1462977784/
Dir1462977966/
Dir1462978029/
Dir1462980907/
Dir1462981147/
Dir1462981337/
Dir1462981421/
Dir1462982111/
Dir1462983308/
Dir1462984474/
Dir1462984477/
Dir1462987843/
Dir1462987985/
Dir1462988110/
Dir1462988111/
Dir1462988647/
Dir1462989250/
Dir1462990735/
Dir1462991351/
Dir1462992016/
Dir1462992425/
Dir1462993331/
Dir1462993692/
Dir1462993929/
Dir1462994052/
Dir1462999270/
Dir1463000766/
Dir1463002144/
Dir1463002874/
Dir1463003407/
Dir1463005925/
Dir1463006595/
Dir1463010378/
Dir1463010974/
Dir1463011873/
Dir1463012175/
Dir1463013006/
Dir1463018046/
Dir1463019134/
Dir1463020994/
Dir1463021706/
Dir1463025244/
Dir1463025496/
Dir1463025676/
Dir1463026153/
Dir1463027047/
Dir1463027657/
Dir1463028844/
Dir1463030831/
Dir1463030850/
Dir1463031507/
Dir1463034078/
Dir1463035336/
Dir1463036516/
Dir1463036790/
Dir1463039767/
Dir1463041338/
Dir1463041934/
Dir1463041992/
Dir1463042467/
Dir1463043258/
Dir1463043754/
Dir1463044036/
Dir1463044988/
Dir1463045529/
Dir1463045778/
Dir1463045886/
Dir1463047093/
Dir1463048390/
Dir1463052052/
Dir1463052479/
Dir1463052586/
Dir1463052705/
Dir1463052767/
Dir1463053308/
Dir1463055645/
Dir1463056433/
Dir1463056603/
Dir1463056660/
Dir1463057920/
Dir1463058770/
Dir1463059421/
Dir1463059547/
Dir1463059846/
Dir1463059907/
Dir1463060091/
Dir1463060809/
Dir1463063073/
Dir1463063074/
Dir1463063694/
Dir1463063695/
Dir1463063872/
Dir1463064048/
Dir1463064461/
Dir1463064463/
Dir1463064946/
Dir1463065541/
Dir1463068124/
Dir1463068731/
Dir1463073465/
Dir1463074359/
Dir1463074957/
Dir1463075019/
Dir1463075080/
Dir1463075260/
Dir1463075321/
Dir1463075748/
Dir1463079098/
Dir1463079405/
Dir1463080245/
Dir1463081735/
Dir1463086122/
Dir1463086247/
Dir1463088396/
Dir1463088580/
Dir1463089719/
Dir1463091345/
Dir1463091400/
Dir1463092894/
Dir1463093505/
Dir1463093684/
Dir1463094874/
Dir1463095064/
Dir1463096498/
Dir1463097514/
Dir1463098069/
Dir1463099873/
Dir1463100101/
Dir1463103099/
Dir1463103516/
Dir1463107421/
Dir1463108437/
Dir1463109159/
Dir1463110656/
Dir1463111745/
Dir1463115704/
Dir1463118466/
Dir1463118715/
Dir1463122598/
Dir1463125182/
Dir1463125305/
Dir1463129558/
Dir1463132203/
Dir1463132327/
Dir1463132495/
Dir1463134001/
Dir1463134002/
Dir1463134070/
Dir1463137061/
Dir1463138024/
Dir1463139636/
Dir1463140431/
Dir1463142399/
Dir1463143180/
Dir1463143968/
Dir1463146535/
Dir1463148643/
Dir1463149002/
Dir1463150566/
Dir1463152006/
Dir1463152901/
Dir1463154466/
Dir1463155302/
Dir1463157274/
Dir1463157997/
Dir1463158421/
Dir1463161359/
Dir1463162860/
Dir1463164599/
Dir1463164728/
Dir1463165607/
Dir1463166412/
Dir1463167538/
Dir1463168139/
Dir1463169661/
Dir1463171304/
Dir1463171431/
Dir1463172463/
Dir1463172797/
Dir1463174449/
Dir1463175414/
Dir1463175580/
Dir1463176423/
Dir1463176660/
Dir1463177436/
Dir1463178049/
Dir1463179897/
Dir1463180756/
Dir1463180979/
Dir1463183197/
Dir1463183810/
Dir1463184376/
Dir1463184647/
Dir1463185596/
Dir1463188323/
Dir1463190577/
Dir1463193161/
Dir1463209308/
Dir1463214948/
Dir1463219566/
Dir1463227549/
Dir1463256465/
Dir1463256875/
Dir1463258495/
Dir1463275474/
Dir1463321066/
Dir1463333549/
Dir1463337033/
Dir1463361331/
Dir1463361933/
Dir1463362353/
Dir1463363126/
Dir1463365047/
Dir1463365475/
Dir1463367447/
Dir1463370152/
Dir1463371239/
Dir1463372798/
Dir1463379517/
Dir1463380950/
Dir1463381485/
Dir1463382330/
Dir1463384315/
Dir1463391691/
Dir1463393313/
Dir1463399795/
Dir1463402198/
Dir1463405738/
Dir1463406147/
Dir1463406330/
Dir1463408251/
Dir1463408437/
Dir1463409072/
Dir1463409571/
Dir1463409625/
Dir1463412986/
Dir1463414930/
Dir1463415464/
Dir1463416784/
Dir1463418227/
Dir1463419191/
Dir1463419547/
Dir1463419612/
Dir1463419786/
Dir1463421345/
Dir1463421527/
Dir1463422188/
Dir1463423802/
Dir1463423923/
Dir1463424055/
Dir1463424763/
Dir1463425065/
Dir1463426861/
Dir1463430165/
Dir1463430587/
Dir1463430604/
Dir1463433836/
Dir1463434115/
Dir1463434175/
Dir1463434539/
Dir1463436642/
Dir1463436817/
Dir1463436886/
Dir1463437124/
Dir1463437844/
Dir1463439879/
Dir1463441403/
Dir1463441687/
Dir1463442104/
Dir1463442819/
Dir1463445294/
Dir1463450017/
Dir1463450318/
Dir1463451633/
Dir1463451634/
Dir1463453207/
Dir1463453920/
Dir1463454397/
Dir1463463039/
Dir1463463050/
Dir1463463460/
Dir1463467115/
Dir1463469214/
Dir1463470838/
Dir1463470891/
Dir1463471014/
Dir1463471432/
Dir1463471488/
Dir1463472276/
Dir1463472873/
Dir1463473808/
Dir1463474081/
Dir1463475637/
Dir1463476529/
Dir1463477197/
Dir1463479774/
Dir1463480069/
Dir1463485355/
Dir1463485836/
Dir1463487697/
Dir1463488169/
Dir1463488651/
Dir1463488777/
Dir1463489672/
Dir1463490273/
Dir1463490696/
Dir1463490999/
Dir1463491291/
Dir1463491773/
Dir1463495467/
Dir1463496818/
Dir1463496992/
Dir1463497653/
Dir1463498023/
Dir1463499041/
Dir1463499152/
Dir1463501191/
Dir1463501488/
Dir1463501611/
Dir1463502162/
Dir1463502939/
Dir1463503720/
Dir1463505403/
Dir1463506249/
Dir1463508475/
Dir1463508648/
Dir1463508762/
Dir1463509716/
Dir1463510147/
Dir1463510276/
Dir1463511111/
Dir1463511406/
Dir1463511520/
Dir1463514105/
Dir1463514817/
Dir1463515007/
Dir1463515381/
Dir1463515382/
Dir1463515383/
Dir1463515384/
Dir1463515386/
Dir1463515388/
Dir1463515389/
Dir1463515390/
Dir1463515393/
Dir1463515413/
Dir1463515415/
Dir1463515416/
Dir1463515418/
Dir1463515438/
Dir1463515439/
Dir1463515441/
Dir1463515442/
Dir1463515602/
Dir1463515717/
Dir1463515861/
Dir1463515862/
Dir1463515863/
Dir1463515866/
Dir1463515867/
Dir1463515868/
Dir1463515869/
Dir1463515872/
Dir1463515875/
Dir1463515876/
Dir1463515877/
Dir1463515879/
Dir1463515886/
Dir1463515888/
Dir1463515889/
Dir1463515892/
Dir1463516205/
Dir1463516206/
Dir1463516208/
Dir1463516210/
Dir1463516211/
Dir1463516212/
Dir1463516216/
Dir1463516217/
Dir1463516218/
Dir1463516220/
Dir1463516223/
Dir1463516228/
Dir1463516230/
Dir1463516231/
Dir1463516233/
Dir1463516234/
Dir1463518059/
Dir1463519923/
Dir1463520401/
Dir1463521247/
Dir1463522079/
Dir1463522200/
Dir1463523337/
Dir1463525085/
Dir1463525324/
Dir1463525685/
Dir1463525862/
Dir1463526045/
Dir1463526654/
Dir1463526952/
Dir1463527364/
Dir1463527830/
Dir1463527902/
Dir1463528691/
Dir1463534745/
Dir1463534943/
Dir1463534947/
Dir1463535110/
Dir1463535324/
Dir1463535460/
Dir1463535648/
Dir1463536661/
Dir1463538767/
Dir1463539844/
Dir1463540713/
Dir1463540714/
Dir1463540912/
Dir1463541054/
Dir1463541349/
Dir1463542127/
Dir1463542541/
Dir1463543750/
Dir1463544369/
Dir1463545408/
Dir1463547710/
Dir1463547934/
Dir1463549329/
Dir1463549521/
Dir1463549681/
Dir1463553099/
Dir1463553700/
Dir1463554368/
Dir1463554486/
Dir1463555037/
Dir1463555328/
Dir1463557480/
Dir1463559643/
Dir1463559948/
Dir1463560219/
Dir1463560787/
Dir1463561029/
Dir1463562877/
Dir1463563064/
Dir1463563302/
Dir1463563427/
Dir1463563778/
Dir1463564567/
Dir1463566852/
Dir1463567323/
Dir1463568590/
Dir1463569011/
Dir1463570383/
Dir1463571020/
Dir1463571999/
Dir1463572186/
Dir1463572248/
Dir1463573629/
Dir1463581604/
Dir1463588085/
Dir1463588389/
Dir1463588447/
Dir1463588448/
Dir1463588505/
Dir1463588561/
Dir1463588627/
Dir1463588682/
Dir1463588862/
Dir1463594155/
Dir1463594327/
Dir1463594328/
Dir1463594386/
Dir1463594754/
Dir1463594755/
Dir1463594756/
Dir1463594864/
Dir1463594924/
Dir1463594925/
Dir1463595047/
Dir1463595937/
Dir1463601401/
Dir1463601522/
Dir1463601945/
Dir1463602137/
Dir1463603689/
Dir1463603815/
Dir1463606270/
Dir1463607464/
Dir1463607525/
Dir1463607771/
Dir1463608062/
Dir1463609801/
Dir1463610340/
Dir1463614058/
Dir1463615563/
Dir1463616578/
Dir1463617725/
Dir1463618746/
Dir1463619578/
Dir1463620484/
Dir1463622106/
Dir1463622765/
Dir1463624438/
Dir1463624439/
Dir1463629182/
Dir1463630557/
Dir1463631220/
Dir1463632189/
Dir1463632371/
Dir1463632728/
Dir1463632908/
Dir1463633204/
Dir1463634226/
Dir1463634343/
Dir1463638311/
Dir1463641003/
Dir1463642200/
Dir1463642318/
Dir1463642562/
Dir1463642981/
Dir1463643945/
Dir1463644308/
Dir1463645145/
Dir1463647120/
Dir1463649290/
Dir1463649700/
Dir1463650362/
Dir1463650486/
Dir1463650604/
Dir1463650718/
Dir1463650910/
Dir1463651378/
Dir1463654560/
Dir1463655047/
Dir1463655287/
Dir1463657264/
Dir1463658522/
Dir1463660806/
Dir1463661888/
Dir1463662429/
Dir1463663146/
Dir1463663439/
Dir1463663507/
Dir1463664284/
Dir1463664650/
Dir1463665129/
Dir1463665303/
Dir1463666017/
Dir1463666508/
Dir1463667049/
Dir1463667101/
Dir1463668369/
Dir1463668778/
Dir1463670469/
Dir1463676645/
Dir1463678331/
Dir1463679467/
Dir1463679886/
Dir1463679949/
Dir1463679999/
Dir1463680118/
Dir1463680119/
Dir1463680238/
Dir1463680658/
Dir1463680791/
Dir1463681139/
Dir1463682762/
Dir1463682995/
Dir1463683072/
Dir1463683493/
Dir1463683955/
Dir1463684199/
Dir1463684562/
Dir1463685464/
Dir1463689716/
Dir1463708651/
Dir1463723525/
Dir1463737733/
Dir1463737734/
Dir1463737735/
Dir1463737736/
Dir1463737739/
Dir1463737740/
Dir1463737741/
Dir1463737742/
Dir1463737743/
Dir1463737747/
Dir1463737750/
Dir1463737753/
Dir1463737754/
Dir1463737755/
Dir1463737758/
Dir1463737761/
Dir1463737762/
Dir1463737763/
Dir1463737765/
Dir1463737769/
Dir1463737770/
Dir1463737771/
Dir1463737772/
Dir1463737778/
Dir1463737779/
Dir1463737780/
Dir1463737781/
Dir1463739706/
Dir1463739911/
Dir1463740271/
Dir1463740464/
Dir1463740641/
Dir1463740853/
Dir1463780312/
Dir1463781626/
Dir1463781751/
Dir1463782056/
Dir1463785591/
Dir1463788599/
Dir1463788961/
Dir1463788962/
Dir1463789008/
Dir1463789077/
Dir1463789134/
Dir1463789192/
Dir1463789193/
Dir1463789318/
Dir1463789374/
Dir1463789375/
Dir1463789499/
Dir1463789500/
Dir1463789555/
Dir1463789611/
Dir1463789670/
Dir1463792435/
Dir1463793215/
Dir1463797774/
Dir1463797872/
Dir1463797949/
Dir1463798013/
Dir1463798193/
Dir1463798372/
Dir1463798428/
Dir1463799509/
Dir1463799692/
Dir1463800471/
Dir1463800890/
Dir1463802458/
Dir1463802571/
Dir1463803658/
Dir1463804553/
Dir1463804738/
Dir1463805583/
Dir1463805875/
Dir1463806480/
Dir1463812721/
Dir1463819616/
Dir1463819914/
Dir1463822317/
Dir1463830355/
Dir1463838819/
Dir1463843135/
Dir1463843195/
Dir1463843853/
Dir1463844029/
Dir1463845475/
Dir1463847037/
Dir1463847160/
Dir1463850273/
Dir1463850334/
Dir1463850450/
Dir1463851001/
Dir1463852256/
Dir1463852488/
Dir1463853991/
Dir1463854293/
Dir1463856942/
Dir1463862511/
Dir1463868090/
Dir1463868508/
Dir1463873677/
Dir1463906560/
Dir1463910039/
Dir1463916212/
Dir1463920239/
Dir1463921252/
Dir1463927313/
Dir1463928157/
Dir1463947891/
Dir1463949093/
Dir1463954196/
Dir1463957738/
Dir1463958156/
Dir1463958209/
Dir1463958330/
Dir1463959528/
Dir1463961880/
Dir1463963918/
Dir1463965119/
Dir1463969675/
Dir1463970576/
Dir1463970700/
Dir1463974289/
Dir1463975376/
Dir1463977413/
Dir1463979628/
Dir1463982160/
Dir1463982270/
Dir1463982760/
Dir1463984492/
Dir1463984556/
Dir1463985170/
Dir1463985220/
Dir1463985993/
Dir1463987071/
Dir1463987668/
Dir1463988402/
Dir1463988640/
Dir1463988700/
Dir1463989473/
Dir1463989711/
Dir1463990380/
Dir1463990677/
Dir1463991091/
Dir1463991333/
Dir1463992159/
Dir1463992828/
Dir1463994159/
Dir1463994275/
Dir1463994579/
Dir1463995473/
Dir1463996320/
Dir1464006271/
Dir1464012216/
Dir1464012270/
Dir1464012336/
Dir1464012392/
Dir1464012633/
Dir1464012929/
Dir1464013051/
Dir1464013234/
Dir1464013361/
Dir1464013417/
Dir1464013654/
Dir1464013779/
Dir1464014317/
Dir1464015816/
Dir1464017069/
Dir1464017675/
Dir1464018155/
Dir1464018394/
Dir1464021281/
Dir1464032875/
Dir1464033713/
Dir1464044411/
Dir1464053744/
Dir1464054226/
Dir1464055194/
Dir1464056227/
Dir1464056294/
Dir1464056410/
Dir1464056464/
Dir1464056526/
Dir1464056597/
Dir1464056598/
Dir1464056720/
Dir1464056779/
Dir1464056836/
Dir1464057037/
Dir1464057106/
Dir1464057245/
Dir1464057486/
Dir1464057675/
Dir1464057725/
Dir1464058033/
Dir1464060139/
Dir1464061864/
Dir1464062291/
Dir1464062465/
Dir1464063006/
Dir1464064450/
Dir1464064503/
Dir1464064997/
Dir1464066006/
Dir1464068643/
Dir1464070690/
Dir1464070807/
Dir1464073149/
Dir1464074943/
Dir1464075555/
Dir1464075725/
Dir1464076385/
Dir1464077709/
Dir1464078365/
Dir1464078485/
Dir1464079205/
Dir1464079689/
Dir1464080343/
Dir1464080531/
Dir1464080704/
Dir1464081014/
Dir1464081303/
Dir1464081794/
Dir1464082219/
Dir1464082220/
Dir1464082265/
Dir1464082991/
Dir1464083178/
Dir1464083595/
Dir1464086223/
Dir1464087424/
Dir1464087852/
Dir1464090307/
Dir1464091566/
Dir1464092767/
Dir1464093605/
Dir1464094986/
Dir1464095765/
Dir1464096906/
Dir1464097148/
Dir1464097870/
Dir1464098236/
Dir1464099497/
Dir1464099555/
Dir1464099663/
Dir1464100236/
Dir1464101899/
Dir1464102198/
Dir1464102434/
Dir1464103505/
Dir1464104175/
Dir1464107837/
Dir1464108008/
Dir1464110714/
Dir1464111315/
Dir1464111736/
Dir1464112276/
Dir1464112330/
Dir1464113142/
Dir1464113511/
Dir1464114163/
Dir1464114289/
Dir1464114401/
Dir1464115060/
Dir1464117099/
Dir1464118779/
Dir1464119264/
Dir1464123288/
Dir1464124125/
Dir1464125137/
Dir1464125210/
Dir1464126166/
Dir1464126401/
Dir1464126941/
Dir1464127004/
Dir1464127185/
Dir1464127539/
Dir1464127903/
Dir1464128207/
Dir1464129168/
Dir1464130000/
Dir1464130129/
Dir1464130357/
Dir1464130785/
Dir1464131024/
Dir1464131810/
Dir1464132351/
Dir1464132942/
Dir1464133123/
Dir1464133358/
Dir1464134136/
Dir1464134209/
Dir1464140803/
Dir1464141889/
Dir1464142902/
Dir1464143025/
Dir1464143270/
Dir1464146090/
Dir1464150405/
Dir1464157900/
Dir1464158448/
Dir1464159349/
Dir1464159461/
Dir1464159524/
Dir1464160247/
Dir1464161812/
Dir1464162226/
Dir1464163721/
Dir1464163899/
Dir1464164685/
Dir1464165647/
Dir1464166190/
Dir1464167798/
Dir1464169188/
Dir1464169847/
Dir1464170091/
Dir1464170630/
Dir1464172246/
Dir1464172487/
Dir1464172717/
Dir1464172909/
Dir1464173023/
Dir1464174098/
Dir1464175361/
Dir1464176741/
Dir1464176981/
Dir1464177227/
Dir1464177336/
Dir1464177399/
Dir1464178599/
Dir1464181067/
Dir1464182197/
Dir1464182198/
Dir1464182330/
Dir1464182443/
Dir1464182508/
Dir1464183790/
Dir1464185812/
Dir1464185981/
Dir1464186279/
Dir1464186528/
Dir1464186829/
Dir1464188205/
Dir1464188924/
Dir1464189530/
Dir1464189578/
Dir1464191803/
Dir1464191861/
Dir1464192165/
Dir1464193249/
Dir1464202064/
Dir1464204521/
Dir1464204769/
Dir1464204770/
Dir1464204771/
Dir1464204827/
Dir1464205006/
Dir1464205422/
Dir1464205786/
Dir1464205844/
Dir1464206021/
Dir1464207520/
Dir1464207819/
Dir1464208730/
Dir1464208904/
Dir1464209204/
Dir1464209392/
Dir1464210711/
Dir1464211781/
Dir1464212149/
Dir1464212330/
Dir1464212691/
Dir1464213952/
Dir1464215930/
Dir1464216041/
Dir1464218379/
Dir1464219108/
Dir1464224089/
Dir1464224739/
Dir1464227629/
Dir1464228109/
Dir1464232077/
Dir1464232190/
Dir1464233451/
Dir1464234349/
Dir1464235191/
Dir1464235242/
Dir1464239279/
Dir1464241789/
Dir1464244851/
Dir1464244968/
Dir1464245738/
Dir1464246287/
Dir1464250961/
Dir1464251092/
Dir1464251634/
Dir1464251739/
Dir1464252406/
Dir1464253129/
Dir1464254690/
Dir1464255409/
Dir1464257140/
Dir1464258404/
Dir1464259550/
Dir1464259786/
Dir1464264290/
Dir1464264435/
Dir1464264532/
Dir1464265060/
Dir1464265910/
Dir1464266746/
Dir1464269989/
Dir1464270883/
Dir1464271312/
Dir1464271540/
Dir1464271779/
Dir1464271906/
Dir1464272029/
Dir1464272080/
Dir1464273767/
Dir1464273884/
Dir1464274781/
Dir1464274899/
Dir1464275148/
Dir1464276229/
Dir1464276460/
Dir1464277431/
Dir1464280540/
Dir1464280858/
Dir1464280923/
Dir1464280983/
Dir1464281268/
Dir1464282710/
Dir1464285220/
Dir1464286606/
Dir1464291770/
Dir1464295006/
Dir1464305571/
Dir1464305631/
Dir1464305687/
Dir1464305744/
Dir1464305745/
Dir1464305803/
Dir1464305875/
Dir1464305928/
Dir1464305984/
Dir1464306281/
Dir1464306472/
Dir1464307789/
Dir1464307843/
Dir1464308209/
Dir1464309403/
Dir1464313183/
Dir1464313908/
Dir1464316485/
Dir1464317273/
Dir1464320090/
Dir1464321346/
Dir1464322781/
Dir1464323093/
Dir1464326450/
Dir1464328727/
Dir1464329332/
Dir1464329567/
Dir1464332750/
Dir1464333280/
Dir1464335567/
Dir1464336831/
Dir1464340857/
Dir1464341154/
Dir1464343850/
Dir1464344323/
Dir1464348881/
Dir1464350093/
Dir1464353149/
Dir1464355306/
Dir1464357345/
Dir1464358124/
Dir1464358903/
Dir1464360651/
Dir1464360764/
Dir1464362688/
Dir1464364179/
Dir1464365143/
Dir1464367004/
Dir1464368336/
Dir1464369107/
Dir1464370354/
Dir1464370969/
Dir1464371677/
Dir1464373368/
Dir1464375278/
Dir1464375640/
Dir1464380688/
Dir1464380809/
Dir1464380866/
Dir1464381162/
Dir1464381282/
Dir1464381409/
Dir1464383028/
Dir1464383212/
Dir1464383513/
Dir1464383985/
Dir1464384945/
Dir1464385426/
Dir1464386144/
Dir1464391181/
Dir1464392389/
Dir1464394426/
Dir1464394969/
Dir1464395267/
Dir1464405693/
Dir1464409538/
Dir1464414760/
Dir1464422069/
Dir1464423005/
Dir1464425010/
Dir1464425012/
Dir1464425558/
Dir1464426999/
Dir1464427863/
Dir1464431763/
Dir1464431902/
Dir1464432030/
Dir1464432153/
Dir1464432298/
Dir1464434252/
Dir1464440372/
Dir1464444695/
Dir1464444820/
Dir1464448169/
Dir1464451713/
Dir1464476010/
Dir1464490416/
Dir1464501217/
Dir1464501758/
Dir1464505900/
Dir1464549392/
Dir1464557562/
Dir1464559182/
Dir1464562665/
Dir1464564043/
Dir1464564340/
Dir1464570464/
Dir1464575385/
Dir1464576467/
Dir1464581684/
Dir1464584022/
Dir1464591157/
Dir1464591789/
Dir1464591791/
Dir1464591990/
Dir1464592897/
Dir1464593873/
Dir1464593916/
Dir1464597045/
Dir1464598182/
Dir1464599084/
Dir1464599136/
Dir1464601840/
Dir1464601969/
Dir1464602451/
Dir1464602567/
Dir1464605925/
Dir1464607788/
Dir1464607900/
Dir1464608628/
Dir1464608693/
Dir1464609880/
Dir1464611678/
Dir1464612106/
Dir1464612820/
Dir1464614685/
Dir1464615050/
Dir1464615108/
Dir1464616306/
Dir1464616487/
Dir1464616961/
Dir1464617200/
Dir1464618049/
Dir1464621284/
Dir1464621520/
Dir1464624708/
Dir1464626203/
Dir1464627707/
Dir1464630644/
Dir1464631369/
Dir1464635317/
Dir1464637121/
Dir1464638146/
Dir1464643182/
Dir1464645465/
Dir1464645518/
Dir1464651279/
Dir1464651468/
Dir1464654161/
Dir1464654766/
Dir1464661004/
Dir1464661302/
Dir1464663335/
Dir1464664842/
Dir1464666278/
Dir1464666398/
Dir1464666586/
Dir1464666700/
Dir1464667902/
Dir1464675224/
Dir1464676661/
Dir1464679608/
Dir1464682180/
Dir1464684644/
Dir1464687348/
Dir1464688726/
Dir1464690936/
Dir1464692148/
Dir1464695027/
Dir1464695806/
Dir1464696165/
Dir1464696524/
Dir1464696945/
Dir1464698623/
Dir1464701739/
Dir1464701925/
Dir1464702515/
Dir1464702892/
Dir1464703066/
Dir1464703301/
Dir1464706547/
Dir1464706719/
Dir1464708229/
Dir1464708279/
Dir1464708584/
Dir1464709546/
Dir1464709661/
Dir1464710506/
Dir1464710736/
Dir1464710985/
Dir1464711886/
Dir1464712127/
Dir1464713752/
Dir1464714052/
Dir1464715245/
Dir1464717819/
Dir1464718598/
Dir1464719561/
Dir1464725375/
Dir1464725438/
Dir1464725562/
Dir1464725626/
Dir1464725740/
Dir1464726396/
Dir1464727424/
Dir1464729049/
Dir1464729526/
Dir1464729766/
Dir1464731139/
Dir1464731986/
Dir1464732101/
Dir1464733357/
Dir1464734323/
Dir1464734438/
Dir1464736116/
Dir1464736604/
Dir1464738519/
Dir1464738646/
Dir1464738815/
Dir1464739552/
Dir1464740400/
Dir1464742672/
Dir1464743454/
Dir1464745063/
Dir1464745064/
Dir1464745706/
Dir1464746015/
Dir1464746731/
Dir1464747394/
Dir1464747817/
Dir1464748663/
Dir1464749571/
Dir1464752446/
Dir1464752745/
Dir1464753051/
Dir1464755875/
Dir1464756051/
Dir1464756644/
Dir1464759102/
Dir1464763008/
Dir1464763074/
Dir1464763674/
Dir1464763845/
Dir1464763911/
Dir1464764145/
Dir1464765649/
Dir1464766009/
Dir1464766010/
Dir1464767928/
Dir1464770148/
Dir1464770209/
Dir1464770388/
Dir1464770752/
Dir1464773870/
Dir1464773925/
Dir1464775134/
Dir1464775843/
Dir1464776213/
Dir1464776332/
Dir1464776385/
Dir1464776987/
Dir1464777290/
Dir1464783527/
Dir1464783586/
Dir1464784124/
Dir1464786234/
Dir1464787011/
Dir1464787546/
Dir1464787664/
Dir1464787730/
Dir1464787852/
Dir1464788088/
Dir1464788687/
Dir1464789044/
Dir1464789291/
Dir1464792301/
Dir1464796849/
Dir1464797813/
Dir1464797814/
Dir1464798044/
Dir1464798173/
Dir1464798232/
Dir1464800145/
Dir1464801228/
Dir1464803262/
Dir1464803569/
Dir1464803863/
Dir1464805968/
Dir1464806094/
Dir1464806151/
Dir1464807222/
Dir1464807650/
Dir1464808303/
Dir1464809147/
Dir1464809565/
Dir1464810530/
Dir1464812268/
Dir1464812335/
Dir1464812625/
Dir1464814674/
Dir1464815033/
Dir1464815330/
Dir1464815875/
Dir1464816822/
Dir1464818812/
Dir1464819107/
Dir1464819292/
Dir1464821393/
Dir1464822774/
Dir1464823008/
Dir1464824812/
Dir1464824988/
Dir1464826672/
Dir1464829364/
Dir1464847124/
Dir1464848085/
Dir1464849043/
Dir1464849348/
Dir1464850070/
Dir1464850188/
Dir1464851027/
Dir1464852824/
Dir1464853123/
Dir1464853848/
Dir1464854329/
Dir1464854930/
Dir1464855284/
Dir1464856612/
Dir1464856678/
Dir1464858107/
Dir1464859246/
Dir1464859494/
Dir1464859670/
Dir1464860034/
Dir1464860204/
Dir1464861291/
Dir1464861764/
Dir1464862552/
Dir1464862967/
Dir1464864709/
Dir1464864942/
Dir1464867137/
Dir1464867139/
Dir1464867145/
Dir1464867147/
Dir1464867150/
Dir1464867151/
Dir1464867152/
Dir1464867153/
Dir1464867157/
Dir1464867160/
Dir1464867162/
Dir1464867163/
Dir1464867164/
Dir1464867166/
Dir1464867167/
Dir1464867169/
Dir1464867170/
Dir1464867172/
Dir1464867175/
Dir1464867176/
Dir1464867178/
Dir1464867183/
Dir1464867186/
Dir1464867188/
Dir1464867190/
Dir1464867191/
Dir1464867193/
Dir1464867194/
Dir1464867196/
Dir1464867482/
Dir1464867483/
Dir1464867488/
Dir1464867489/
Dir1464867490/
Dir1464867494/
Dir1464867495/
Dir1464867496/
Dir1464867499/
Dir1464867501/
Dir1464867502/
Dir1464867504/
Dir1464867506/
Dir1464867507/
Dir1464867508/
Dir1464867510/
Dir1464867511/
Dir1464867512/
Dir1464867513/
Dir1464867514/
Dir1464867516/
Dir1464867517/
Dir1464867518/
Dir1464867519/
Dir1464867520/
Dir1464867522/
Dir1464867523/
Dir1464867524/
Dir1464867525/
Dir1464867526/
Dir1464867527/
Dir1464867531/
Dir1464867533/
Dir1464867534/
Dir1464867537/
Dir1464867539/
Dir1464867542/
Dir1464868010/
Dir1464873112/
Dir1464874903/
Dir1464875326/
Dir1464875722/
Dir1464875723/
Dir1464875728/
Dir1464875729/
Dir1464875730/
Dir1464875731/
Dir1464875734/
Dir1464875735/
Dir1464875736/
Dir1464875739/
Dir1464875741/
Dir1464875742/
Dir1464875750/
Dir1464875751/
Dir1464875752/
Dir1464875810/
Dir1464877546/
Dir1464878146/
Dir1464878694/
Dir1464879231/
Dir1464879648/
Dir1464880011/
Dir1464880366/
Dir1464880612/
Dir1464880785/
Dir1464881385/
Dir1464882470/
Dir1464883836/
Dir1464884135/
Dir1464884436/
Dir1464887495/
Dir1464888215/
Dir1464888458/
Dir1464890794/
Dir1464890915/
Dir1464892417/
Dir1464893317/
Dir1464895181/
Dir1464895596/
Dir1464896445/
Dir1464896915/
Dir1464898537/
Dir1464899617/
Dir1464900217/
Dir1464900457/
Dir1464900938/
Dir1464901057/
Dir1464901417/
Dir1464904237/
Dir1464905197/
Dir1464905377/
Dir1464905437/
Dir1464906397/
Dir1464907297/
Dir1464908017/
Dir1464909577/
Dir1464910209/
Dir1464912216/
Dir1464915370/
Dir1464915431/
Dir1464915490/
Dir1464918912/
Dir1464920950/
Dir1464921371/
Dir1464921670/
Dir1464923230/
Dir1464925090/
Dir1464930311/
Dir1464930368/
Dir1464930431/
Dir1464930551/
Dir1464931150/
Dir1464931391/
Dir1464931450/
Dir1464933045/
Dir1464933358/
Dir1464936310/
Dir1464936550/
Dir1464937329/
Dir1464938710/
Dir1464940871/
Dir1464941950/
Dir1464942687/
Dir1464943571/
Dir1464945250/
Dir1464946090/
Dir1464946571/
Dir1464948731/
Dir1464950591/
Dir1464952452/
Dir1464953531/
Dir1464953891/
Dir1464954550/
Dir1464957251/
Dir1464959769/
Dir1464960008/
Dir1464960670/
Dir1464960851/
Dir1464963610/
Dir1464964326/
Dir1464964391/
Dir1464964451/
Dir1464965538/
Dir1464967870/
Dir1464971170/
Dir1464973692/
Dir1464973871/
Dir1464975048/
Dir1464975078/
Dir1464975194/
Dir1464976571/
Dir1464976691/
Dir1464978206/
Dir1464979827/
Dir1464980427/
Dir1464981267/
Dir1464982046/
Dir1464982466/
Dir1464982946/
Dir1464983426/
Dir1464985818/
Dir1464985886/
Dir1464987926/
Dir1464988166/
Dir1464988406/
Dir1464990986/
Dir1464995546/
Dir1464996026/
Dir1464996206/
Dir1464996604/
Dir1464996746/
Dir1464998365/
Dir1465001906/
Dir1465002146/
Dir1465007457/
Dir1465009766/
Dir1465011506/
Dir1465025126/
Dir1465025606/
Dir1465025786/
Dir1465025966/
Dir1465026026/
Dir1465029014/
Dir1465036586/
Dir1465039803/
Dir1465043486/
Dir1465047306/
Dir1465052046/
Dir1465055707/
Dir1465061453/
Dir1465071066/
Dir1465078447/
Dir1465083011/
Dir1465088286/
Dir1465090807/
Dir1465093855/
Dir1465112442/
Dir1465113522/
Dir1465113762/
Dir1465113882/
Dir1465114182/
Dir1465114302/
Dir1465118862/
Dir1465126205/
Dir1465147602/
Dir1465155882/
Dir1465158611/
Dir1465160682/
Dir1465168662/
Dir1465169802/
Dir1465174062/
Dir1465175848/
Dir1465177168/
Dir1465177948/
Dir1465179389/
Dir1465180288/
Dir1465183529/
Dir1465184249/
Dir1465187468/
Dir1465188185/
Dir1465188634/
Dir1465188809/
Dir1465190368/
Dir1465190943/
Dir1465191520/
Dir1465193729/
Dir1465195108/
Dir1465196128/
Dir1465197273/
Dir1465200210/
Dir1465202249/
Dir1465204468/
Dir1465204668/
Dir1465204771/
Dir1465204829/
Dir1465205188/
Dir1465206090/
Dir1465206688/
Dir1465207408/
Dir1465210888/
Dir1465212570/
Dir1465212638/
Dir1465212808/
Dir1465214909/
Dir1465216349/
Dir1465217309/
Dir1465217428/
Dir1465217488/
Dir1465218028/
Dir1465218088/
Dir1465218213/
Dir1465219048/
Dir1465221150/
Dir1465221268/
Dir1465222890/
Dir1465223191/
Dir1465223790/
Dir1465224929/
Dir1465227446/
Dir1465229186/
Dir1465229666/
Dir1465229845/
Dir1465229906/
Dir1465230446/
Dir1465230506/
Dir1465232491/
Dir1465233747/
Dir1465234271/
Dir1465234709/
Dir1465235427/
Dir1465235608/
Dir1465235668/
Dir1465236253/
Dir1465237346/
Dir1465238187/
Dir1465240226/
Dir1465240646/
Dir1465245030/
Dir1465248571/
Dir1465252173/
Dir1465252174/
Dir1465252231/
Dir1465252290/
Dir1465252410/
Dir1465252472/
Dir1465252771/
Dir1465252950/
Dir1465253130/
Dir1465253253/
Dir1465253372/
Dir1465253790/
Dir1465253910/
Dir1465254871/
Dir1465255770/
Dir1465255806/
Dir1465256370/
Dir1465258352/
Dir1465258532/
Dir1465258592/
Dir1465259011/
Dir1465261711/
Dir1465262132/
Dir1465265138/
Dir1465265310/
Dir1465266155/
Dir1465266391/
Dir1465266675/
Dir1465268611/
Dir1465269091/
Dir1465269511/
Dir1465272511/
Dir1465277250/
Dir1465279474/
Dir1465279770/
Dir1465279891/
Dir1465280790/
Dir1465280910/
Dir1465281091/
Dir1465281211/
Dir1465284272/
Dir1465284632/
Dir1465285712/
Dir1465285831/
Dir1465286491/
Dir1465287991/
Dir1465288223/
Dir1465290091/
Dir1465291409/
Dir1465291533/
Dir1465292851/
Dir1465292973/
Dir1465294290/
Dir1465295733/
Dir1465295911/
Dir1465298191/
Dir1465299060/
Dir1465299391/
Dir1465301070/
Dir1465301851/
Dir1465304671/
Dir1465305090/
Dir1465305210/
Dir1465305511/
Dir1465305751/
Dir1465306296/
Dir1465306410/
Dir1465307490/
Dir1465307671/
Dir1465309591/
Dir1465309769/
Dir1465309878/
Dir1465310131/
Dir1465310190/
Dir1465310790/
Dir1465311152/
Dir1465313068/
Dir1465313371/
Dir1465313971/
Dir1465315470/
Dir1465315533/
Dir1465315830/
Dir1465316516/
Dir1465317869/
Dir1465320634/
Dir1465320700/
Dir1465322131/
Dir1465322431/
Dir1465323091/
Dir1465324110/
Dir1465324176/
Dir1465324471/
Dir1465324591/
Dir1465324652/
Dir1465325010/
Dir1465326086/
Dir1465326386/
Dir1465331467/
Dir1465334484/
Dir1465334485/
Dir1465334544/
Dir1465334664/
Dir1465334665/
Dir1465334785/
Dir1465335030/
Dir1465335147/
Dir1465335504/
Dir1465336164/
Dir1465337064/
Dir1465337124/
Dir1465337185/
Dir1465337304/
Dir1465338746/
Dir1465340603/
Dir1465342045/
Dir1465347084/
Dir1465347205/
Dir1465347564/
Dir1465351105/
Dir1465352309/
Dir1465352429/
Dir1465352609/
Dir1465353026/
Dir1465353629/
Dir1465356870/
Dir1465356989/
Dir1465360049/
Dir1465361189/
Dir1465362749/
Dir1465363108/
Dir1465363589/
Dir1465363805/
Dir1465368332/
Dir1465368451/
Dir1465371809/
Dir1465372169/
Dir1465372589/
Dir1465373369/
Dir1465373609/
Dir1465374869/
Dir1465375950/
Dir1465376969/
Dir1465378409/
Dir1465380569/
Dir1465380870/
Dir1465380871/
Dir1465381109/
Dir1465381409/
Dir1465381531/
Dir1465381709/
Dir1465383031/
Dir1465385402/
Dir1465385613/
Dir1465386511/
Dir1465390049/
Dir1465390770/
Dir1465390949/
Dir1465391729/
Dir1465392153/
Dir1465392810/
Dir1465393169/
Dir1465393949/
Dir1465394429/
Dir1465395149/
Dir1465395449/
Dir1465397969/
Dir1465400849/
Dir1465401029/
Dir1465401449/
Dir1465401990/
Dir1465402109/
Dir1465402291/
Dir1465403849/
Dir1465404569/
Dir1465405289/
Dir1465406969/
Dir1465407005/
Dir1465407989/
Dir1465407990/
Dir1465408349/
Dir1465408829/
Dir1465409069/
Dir1465411529/
Dir1465412670/
Dir1465412969/
Dir1465413509/
Dir1465413749/
Dir1465415849/
Dir1465416030/
Dir1465416209/
Dir1465418429/
Dir1465419269/
Dir1465420229/
Dir1465421490/
Dir1465421909/
Dir1465422329/
Dir1465422869/
Dir1465422929/
Dir1465423829/
Dir1465424729/
Dir1465428606/
Dir1465428809/
Dir1465429050/
Dir1465429351/
Dir1465429829/
Dir1465430970/
Dir1465431631/
Dir1465432169/
Dir1465432710/
Dir1465434750/
Dir1465434989/
Dir1465436248/
Dir1465436850/
Dir1465443450/
Dir1465444829/
Dir1465446268/
Dir1465446509/
Dir1465446629/
Dir1465447050/
Dir1465448729/
Dir1465449089/
Dir1465450304/
Dir1465453048/
Dir1465454549/
Dir1465454848/
Dir1465455329/
Dir1465455429/
Dir1465461053/
Dir1465464389/
Dir1465465889/
Dir1465467270/
Dir1465467809/
Dir1465468049/
Dir1465468529/
Dir1465469130/
Dir1465470929/
Dir1465471886/
Dir1465472069/
Dir1465473390/
Dir1465473689/
Dir1465474949/
Dir1465477649/
Dir1465478009/
Dir1465478369/
Dir1465478969/
Dir1465480049/
Dir1465480050/
Dir1465480548/
Dir1465482682/
Dir1465482989/
Dir1465483168/
Dir1465483590/
Dir1465484609/
Dir1465484850/
Dir1465485090/
Dir1465486530/
Dir1465486709/
Dir1465489771/
Dir1465490195/
Dir1465490729/
Dir1465491990/
Dir1465492769/
Dir1465493309/
Dir1465493470/
Dir1465497091/
Dir1465497329/
Dir1465497509/
Dir1465497568/
Dir1465498229/
Dir1465500448/
Dir1465502011/
Dir1465502069/
Dir1465504223/
Dir1465505790/
Dir1465506451/
Dir1465507530/
Dir1465508369/
Dir1465508429/
Dir1465509149/
Dir1465509390/
Dir1465512208/
Dir1465512869/
Dir1465513290/
Dir1465514008/
Dir1465515010/
Dir1465519649/
Dir1465520249/
Dir1465520309/
Dir1465526969/
Dir1465532070/
Dir1465532491/
Dir1465532608/
Dir1465536652/
Dir1465539269/
Dir1465539989/
Dir1465543289/
Dir1465543529/
Dir1465543829/
Dir1465548329/
Dir1465550009/
Dir1465552109/
Dir1465552589/
Dir1465558251/
Dir1465560090/
Dir1465560389/
Dir1465565909/
Dir1465566089/
Dir1465568249/
Dir1465568609/
Dir1465569043/
Dir1465569870/
Dir1465575510/
Dir1465575749/
Dir1465576529/
Dir1465576709/
Dir1465577849/
Dir1465578384/
Dir1465579818/
Dir1465580246/
Dir1465581863/
Dir1465582584/
Dir1465583604/
Dir1465583723/
Dir1465585763/
Dir1465589304/
Dir1465590323/
Dir1465590608/
Dir1465591343/
Dir1465592604/
Dir1465592783/
Dir1465592964/
Dir1465593204/
Dir1465594284/
Dir1465594343/
Dir1465596143/
Dir1465597283/
Dir1465599743/
Dir1465601663/
Dir1465603283/
Dir1465606164/
Dir1465609824/
Dir1465610664/
Dir1465610784/
Dir1465611504/
Dir1465612366/
Dir1465612644/
Dir1465612944/
Dir1465614684/
Dir1465623074/
Dir1465623075/
Dir1465631244/
Dir1465633104/
Dir1465634543/
Dir1465639585/
Dir1465644605/
Dir1465650323/
Dir1465650683/
Dir1465659143/
Dir1465662503/
Dir1465662683/
Dir1465662923/
Dir1465666255/
Dir1465670543/
Dir1465677043/
Dir1465692743/
Dir1465698658/
Dir1465704444/
Dir1465713143/
Dir1465719023/
Dir1465719563/
Dir1465723944/
Dir1465725444/
Dir1465741464/
Dir1465741704/
Dir1465743744/
Dir1465743923/
Dir1465752648/
Dir1465754723/
Dir1465758203/
Dir1465763416/
Dir1465765731/
Dir1465765732/
Dir1465765733/
Dir1465765734/
Dir1465765739/
Dir1465765740/
Dir1465765742/
Dir1465765759/
Dir1465765760/
Dir1465765761/
Dir1465765772/
Dir1465765773/
Dir1465765775/
Dir1465766185/
Dir1465766186/
Dir1465766187/
Dir1465766189/
Dir1465766192/
Dir1465766193/
Dir1465766194/
Dir1465766213/
Dir1465766215/
Dir1465766218/
Dir1465766226/
Dir1465766228/
Dir1465766229/
Dir1465802124/
Dir1465803924/
Dir1465804524/
Dir1465805124/
Dir1465806263/
Dir1465814724/
Dir1465817461/
Dir1465821264/
Dir1465827864/
Dir1465828260/
Dir1465829124/
Dir1465829303/
Dir1465830503/
Dir1465831524/
Dir1465831944/
Dir1465832184/
Dir1465832603/
Dir1465834764/
Dir1465839044/
Dir1465845983/
Dir1465849808/
Dir1465854083/
Dir1465859966/
Dir1465885884/
Dir1465895304/
Dir1465900763/
Dir1465901363/
Dir1465901543/
Dir1465901723/
Dir1465902203/
Dir1465902323/
Dir1465902446/
Dir1465903283/
Dir1465903703/
Dir1465903806/
Dir1465904724/
Dir1465904784/
Dir1465905381/
Dir1465906284/
Dir1465907663/
Dir1465907785/
Dir1465908623/
Dir1465909707/
Dir1465911387/
Dir1465911564/
Dir1465912045/
Dir1465912283/
Dir1465914756/
Dir1465915344/
Dir1465915583/
Dir1465915884/
Dir1465917743/
Dir1465918248/
Dir1465919543/
Dir1465922423/
Dir1465925429/
Dir1465928843/
Dir1465936254/
Dir1465938203/
Dir1465940543/
Dir1465941265/
Dir1465941983/
Dir1465942283/
Dir1465944623/
Dir1465948703/
Dir1465949063/
Dir1465949123/
Dir1465957815/
Dir1465960044/
Dir1465961064/
Dir1465967483/
Dir1465968504/
Dir1465970483/
Dir1465976281/
Dir1465979405/
Dir1465979483/
Dir1465980264/
Dir1465980383/
Dir1465981644/
Dir1465981943/
Dir1465983084/
Dir1465984403/
Dir1465984824/
Dir1465986383/
Dir1465987163/
Dir1465987823/
Dir1465988003/
Dir1465988303/
Dir1465990163/
Dir1465990204/
Dir1465995023/
Dir1465995623/
Dir1465997844/
Dir1465999703/
Dir1466000244/
Dir1466001122/
Dir1466001503/
Dir1466005343/
Dir1466005463/
Dir1466006003/
Dir1466006123/
Dir1466006243/
Dir1466006543/
Dir1466008163/
Dir1466008765/
Dir1466009964/
Dir1466011284/
Dir1466011866/
Dir1466025083/
Dir1466025923/
Dir1466027065/
Dir1466027363/
Dir1466029464/
Dir1466030244/
Dir1466045063/
Dir1466046803/
Dir1466061323/
Dir1466061443/
Dir1466062043/
Dir1466062764/
Dir1466062834/
Dir1466063063/
Dir1466063303/
Dir1466068886/
Dir1466070683/
Dir1466075424/
Dir1466075903/
Dir1466079084/
Dir1466080043/
Dir1466081124/
Dir1466085504/
Dir1466087064/
Dir1466087243/
Dir1466087428/
Dir1466087963/
Dir1466088804/
Dir1466088863/
Dir1466095466/
Dir1466095883/
Dir1466096003/
Dir1466098223/
Dir1466098702/
Dir1466109005/
Dir1466118923/
Dir1466121683/
Dir1466121804/
Dir1466124863/
Dir1466150363/
Dir1466157563/
Dir1466159183/
Dir1466160143/
Dir1466165483/
Dir1466166083/
Dir1466166863/
Dir1466168063/
Dir1466169994/
Dir1466169995/
Dir1466173944/
Dir1466178329/
Dir1466181203/
Dir1466181863/
Dir1466187444/
Dir1466201183/
Dir1466217383/
Dir1466221044/
Dir1466235323/
Dir1466243663/
Dir1466247263/
Dir1466252303/
Dir1466254283/
Dir1466265863/
Dir1466280923/
Dir1466287583/
Dir1466292683/
Dir1466324903/
Dir1466325623/
Dir1466332645/
Dir1466371043/
Dir1466390543/
Dir1466410762/
Dir1466411363/
Dir1466414003/
Dir1466414723/
Dir1466418203/
Dir1466418323/
Dir1466419823/
Dir1466422101/
Dir1466423423/
Dir1466424023/
Dir1466424203/
Dir1466424324/
Dir1466424563/
Dir1466429347/
Dir1466429439/
Dir1466429441/
Dir1466429444/
Dir1466429448/
Dir1466429537/
Dir1466430562/
Dir1466430924/
Dir1466432136/
Dir1466432603/
Dir1466433145/
Dir1466433623/
Dir1466436985/
Dir1466442023/
Dir1466442383/
Dir1466443103/
Dir1466444422/
Dir1466445385/
Dir1466446344/
Dir1466448684/
Dir1466448744/
Dir1466449823/
Dir1466450483/
Dir1466452343/
Dir1466453183/
Dir1466453664/
Dir1466455163/
Dir1466458923/
Dir1466461203/
Dir1466461863/
Dir1466463783/
Dir1466471582/
Dir1466473803/
Dir1466475603/
Dir1466482204/
Dir1466488143/
Dir1466491739/
Dir1466491863/
Dir1466492342/
Dir1466494383/
Dir1466495583/
Dir1466495883/
Dir1466497323/
Dir1466500561/
Dir1466500920/
Dir1466501722/
Dir1466501723/
Dir1466504100/
Dir1466506743/
Dir1466506980/
Dir1466508244/
Dir1466509322/
Dir1466510219/
Dir1466511125/
Dir1466512260/
Dir1466513580/
Dir1466513820/
Dir1466515860/
Dir1466516764/
Dir1466519595/
Dir1466520059/
Dir1466520844/
Dir1466520901/
Dir1466521083/
Dir1466521263/
Dir1466522403/
Dir1466523119/
Dir1466524079/
Dir1466529182/
Dir1466541723/
Dir1466541840/
Dir1466541963/
Dir1466541964/
Dir1466542023/
Dir1466542082/
Dir1466542144/
Dir1466542263/
Dir1466542923/
Dir1466543041/
Dir1466543160/
Dir1466543463/
Dir1466543944/
Dir1466546042/
Dir1466547543/
Dir1466549043/
Dir1466549220/
Dir1466552280/
Dir1466553480/
Dir1466554080/
Dir1466557203/
Dir1466557619/
Dir1466559603/
Dir1466561280/
Dir1466561403/
Dir1466563623/
Dir1466563743/
Dir1466565603/
Dir1466567703/
Dir1466568359/
Dir1466572563/
Dir1466574063/
Dir1466576103/
Dir1466578143/
Dir1466579882/
Dir1466580003/
Dir1466580902/
Dir1466581803/
Dir1466582163/
Dir1466583783/
Dir1466583784/
Dir1466589244/
Dir1466591523/
Dir1466594583/
Dir1466596081/
Dir1466596261/
Dir1466598363/
Dir1466600163/
Dir1466600940/
Dir1466601000/
Dir1466601359/
Dir1466603580/
Dir1466605889/
Dir1466616605/
Dir1466617224/
Dir1466636425/
Dir1466636544/
Dir1466636604/
Dir1466636664/
Dir1466636724/
Dir1466637444/
Dir1466637744/
Dir1466638203/
Dir1466638404/
Dir1466643146/
Dir1466643325/
Dir1466646385/
Dir1466652984/
Dir1466653224/
Dir1466653284/
Dir1466653344/
Dir1466653584/
Dir1466655504/
Dir1466656464/
Dir1466657664/
Dir1466661624/
Dir1466663185/
Dir1466668164/
Dir1466668284/
Dir1466669124/
Dir1466669683/
Dir1466669724/
Dir1466670085/
Dir1466671403/
Dir1466672064/
Dir1466673325/
Dir1466674709/
Dir1466675964/
Dir1466678546/
Dir1466679805/
Dir1466682263/
Dir1466683584/
Dir1466684964/
Dir1466685745/
Dir1466685925/
Dir1466687726/
Dir1466687784/
Dir1466687906/
Dir1466688084/
Dir1466688206/
Dir1466688446/
Dir1466688865/
Dir1466688924/
Dir1466689765/
Dir1466693064/
Dir1466693307/
Dir1466694084/
Dir1466696063/
Dir1466697155/
Dir1466697924/
Dir1466703046/
Dir1466724418/
Dir1466724478/
Dir1466724538/
Dir1466724598/
Dir1466724646/
Dir1466724656/
Dir1466725259/
Dir1466726638/
Dir1466733661/
Dir1466734018/
Dir1466735458/
Dir1466739418/
Dir1466743558/
Dir1466751118/
Dir1466751238/
Dir1466751538/
Dir1466752498/
Dir1466754358/
Dir1466754478/
Dir1466760304/
Dir1466767071/
Dir1466767768/
Dir1466770080/
Dir1466770678/
Dir1466771471/
Dir1466773499/
Dir1466774398/
Dir1466774459/
Dir1466778700/
Dir1466783140/
Dir1466783158/
Dir1466787058/
Dir1466790478/
Dir1466791498/
Dir1466791738/
Dir1466792459/
Dir1466796538/
Dir1466796898/
Dir1466797678/
Dir1466798159/
Dir1466799476/
Dir1466799778/
Dir1466800798/
Dir1466800920/
Dir1466804638/
Dir1466811010/
Dir1466820264/
Dir1466821880/
Dir1466859384/
Dir1466860284/
Dir1466869884/
Dir1466874924/
Dir1466878224/
Dir1466888664/
Dir1466890464/
Dir1466890644/
Dir1466894544/
Dir1466897724/
Dir1466957184/
Dir1466958744/
Dir1466959884/
Dir1466961984/
Dir1466970144/
Dir1466973084/
Dir1466978124/
Dir1466979444/
Dir1466981544/
Dir1466982144/
Dir1466988204/
Dir1466988444/
Dir1466992824/
Dir1467000084/
Dir1467002363/
Dir1467003324/
Dir1467009264/
Dir1467010403/
Dir1467012924/
Dir1467016825/
Dir1467020124/
Dir1467028359/
Dir1467029904/
Dir1467039113/
Dir1467039695/
Dir1467040279/
Dir1467041179/
Dir1467043517/
Dir1467045799/
Dir1467046397/
Dir1467047177/
Dir1467047717/
Dir1467047837/
Dir1467048377/
Dir1467049340/
Dir1467051077/
Dir1467051918/
Dir1467051977/
Dir1467052238/
Dir1467052338/
Dir1467052578/
Dir1467052999/
Dir1467053298/
Dir1467053657/
Dir1467054259/
Dir1467061819/
Dir1467065418/
Dir1467066140/
Dir1467066729/
Dir1467067602/
Dir1467072197/
Dir1467072379/
Dir1467073639/
Dir1467074239/
Dir1467074780/
Dir1467076401/
Dir1467077119/
Dir1467079039/
Dir1467080062/
Dir1467080422/
Dir1467080962/
Dir1467081059/
Dir1467081443/
Dir1467081862/
Dir1467083002/
Dir1467092011/
Dir1467092137/
Dir1467092140/
Dir1467092963/
Dir1467093562/
Dir1467094222/
Dir1467097882/
Dir1467098242/
Dir1467099683/
Dir1467099863/
Dir1467100823/
Dir1467101363/
Dir1467101423/
Dir1467101542/
Dir1467101914/
Dir1467102323/
Dir1467106228/
Dir1467108086/
Dir1467108443/
Dir1467114861/
Dir1467115644/
Dir1467118163/
Dir1467119543/
Dir1467120863/
Dir1467121103/
Dir1467123324/
Dir1467123385/
Dir1467123984/
Dir1467124282/
Dir1467124403/
Dir1467125123/
Dir1467125842/
Dir1467126080/
Dir1467126321/
Dir1467127224/
Dir1467127225/
Dir1467128963/
Dir1467129803/
Dir1467129879/
Dir1467131182/
Dir1467133284/
Dir1467134075/
Dir1467134970/
Dir1467135089/
Dir1467136524/
Dir1467136643/
Dir1467137244/
Dir1467137783/
Dir1467138444/
Dir1467138563/
Dir1467139343/
Dir1467139883/
Dir1467140721/
Dir1467141983/
Dir1467142465/
Dir1467143063/
Dir1467143433/
Dir1467145104/
Dir1467145893/
Dir1467148102/
Dir1467159206/
Dir1467160286/
Dir1467164906/
Dir1467168146/
Dir1467170668/
Dir1467171266/
Dir1467175226/
Dir1467177266/
Dir1467179487/
Dir1467179906/
Dir1467180086/
Dir1467180266/
Dir1467181406/
Dir1467181766/
Dir1467181886/
Dir1467182366/
Dir1467182486/
Dir1467186567/
Dir1467187586/
Dir1467190889/
Dir1467191666/
Dir1467191966/
Dir1467192927/
Dir1467194006/
Dir1467195447/
Dir1467197786/
Dir1467197906/
Dir1467198029/
Dir1467199769/
Dir1467201146/
Dir1467203054/
Dir1467204626/
Dir1467204687/
Dir1467205946/
Dir1467206186/
Dir1467206426/
Dir1467210091/
Dir1467212308/
Dir1467213087/
Dir1467215186/
Dir1467216566/
Dir1467216867/
Dir1467217226/
Dir1467225567/
Dir1467226886/
Dir1467227606/
Dir1467229767/
Dir1467230366/
Dir1467230606/
Dir1467230908/
Dir1467231146/
Dir1467233246/
Dir1467233444/
Dir1467237926/
Dir1467240266/
Dir1467240627/
Dir1467242787/
Dir1467244587/
Dir1467244946/
Dir1467245426/
Dir1467250467/
Dir1467250647/
Dir1467252865/
Dir1467252986/
Dir1467254187/
Dir1467260666/
Dir1467261026/
Dir1467261266/
Dir1467261746/
Dir1467262767/
Dir1467264386/
Dir1467268586/
Dir1467269306/
Dir1467271346/
Dir1467272306/
Dir1467273026/
Dir1467275966/
Dir1467282087/
Dir1467283886/
Dir1467284186/
Dir1467285746/
Dir1467288326/
Dir1467288686/
Dir1467288926/
Dir1467289408/
Dir1467297253/
Dir1467315809/
Dir1467316529/
Dir1467316648/
Dir1467317669/
Dir1467317789/
Dir1467318029/
Dir1467319961/
Dir1467320069/
Dir1467320249/
Dir1467320485/
Dir1467322283/
Dir1467322822/
Dir1467323432/
Dir1467323731/
Dir1467325046/
Dir1467326183/
Dir1467326841/
Dir1467326900/
Dir1467327140/
Dir1467330920/
Dir1467333563/
Dir1467338422/
Dir1467340702/
Dir1467341842/
Dir1467343102/
Dir1467345202/
Dir1467346413/
Dir1467354382/
Dir1467360983/
Dir1467362300/
Dir1467362482/
Dir1467362722/
Dir1467362962/
Dir1467363080/
Dir1467363143/
Dir1467363560/
Dir1467364761/
Dir1467370161/
Dir1467370884/
Dir1467371842/
Dir1467372085/
Dir1467375023/
Dir1467376222/
Dir1467376342/
Dir1467380662/
Dir1467381028/
Dir1467383663/
Dir1467387260/
Dir1467389242/
Dir1467391523/
Dir1467392182/
Dir1467395420/
Dir1467396382/
Dir1467399382/
Dir1467399802/
Dir1467404183/
Dir1467417862/
Dir1467427582/
Dir1467427822/
Dir1467437481/
Dir1467451222/
Dir1467454762/
Dir1467459982/
Dir1467506902/
Dir1467521362/
Dir1467564802/
Dir1467567263/
Dir1467586942/
Dir1467604768/
Dir1467604886/
Dir1467605006/
Dir1467613226/
Dir1467614664/
Dir1467618146/
Dir1467618686/
Dir1467620426/
Dir1467621506/
Dir1467630506/
Dir1467630686/
Dir1467630687/
Dir1467637886/
Dir1467640225/
Dir1467640297/
Dir1467640646/
Dir1467641546/
Dir1467642158/
Dir1467642446/
Dir1467644308/
Dir1467645146/
Dir1467645626/
Dir1467648206/
Dir1467652345/
Dir1467652948/
Dir1467654446/
Dir1467654507/
Dir1467656004/
Dir1467656362/
Dir1467657922/
Dir1467661582/
Dir1467670164/
Dir1467690622/
Dir1467690802/
Dir1467690922/
Dir1467696142/
Dir1467697518/
Dir1467702022/
Dir1467705922/
Dir1467709644/
Dir1467710783/
Dir1467714383/
Dir1467714742/
Dir1467722305/
Dir1467724043/
Dir1467725962/
Dir1467726263/
Dir1467726802/
Dir1467727703/
Dir1467729682/
Dir1467730282/
Dir1467730523/
Dir1467731725/
Dir1467737066/
Dir1467739522/
Dir1467740963/
Dir1467742548/
Dir1467742643/
Dir1467744683/
Dir1467745463/
Dir1467746062/
Dir1467748403/
Dir1467748946/
Dir1467750803/
Dir1467752424/
Dir1467757883/
Dir1467759262/
Dir1467759742/
Dir1467763886/
Dir1467764002/
Dir1467769361/
Dir1467773963/
Dir1467776962/
Dir1467777202/
Dir1467777622/
Dir1467780983/
Dir1467787043/
Dir1467787523/
Dir1467796283/
Dir1467796702/
Dir1467798322/
Dir1467798682/
Dir1467804746/
Dir1467812123/
Dir1467812244/
Dir1467812782/
Dir1467813922/
Dir1467814702/
Dir1467816082/
Dir1467816201/
Dir1467816923/
Dir1467821123/
Dir1467824543/
Dir1467826284/
Dir1467828625/
Dir1467829582/
Dir1467831743/
Dir1467832824/
Dir1467836782/
Dir1467842183/
Dir1467846682/
Dir1467848542/
Dir1467854843/
Dir1467855143/
Dir1467856343/
Dir1467858923/
Dir1467858924/
Dir1467862232/
Dir1467862958/
Dir1467863302/
Dir1467863482/
Dir1467863843/
Dir1467864804/
Dir1467864922/
Dir1467865042/
Dir1467869477/
Dir1467870015/
Dir1467872062/
Dir1467872182/
Dir1467872482/
Dir1467872522/
Dir1467878183/
Dir1467880044/
Dir1467880260/
Dir1467882083/
Dir1467882922/
Dir1467884243/
Dir1467884724/
Dir1467886643/
Dir1467891065/
Dir1467895103/
Dir1467895585/
Dir1467900743/
Dir1467901887/
Dir1467902663/
Dir1467903263/
Dir1467903684/
Dir1467904523/
Dir1467906144/
Dir1467908105/
Dir1467908111/
Dir1467908112/
Dir1467908113/
Dir1467908114/
Dir1467908115/
Dir1467908116/
Dir1467908117/
Dir1467908118/
Dir1467908119/
Dir1467908120/
Dir1467908121/
Dir1467908122/
Dir1467908123/
Dir1467908124/
Dir1467908125/
Dir1467908126/
Dir1467908127/
Dir1467908128/
Dir1467908129/
Dir1467908130/
Dir1467908131/
Dir1467908132/
Dir1467908133/
Dir1467908134/
Dir1467908135/
Dir1467908136/
Dir1467908137/
Dir1467908138/
Dir1467908139/
Dir1467908140/
Dir1467908141/
Dir1467908142/
Dir1467908143/
Dir1467908144/
Dir1467908145/
Dir1467908146/
Dir1467908147/
Dir1467908148/
Dir1467908150/
Dir1467908152/
Dir1467908153/
Dir1467908154/
Dir1467908155/
Dir1467908157/
Dir1467908158/
Dir1467908159/
Dir1467908160/
Dir1467908161/
Dir1467908162/
Dir1467908163/
Dir1467908164/
Dir1467908165/
Dir1467908166/
Dir1467908167/
Dir1467908168/
Dir1467908170/
Dir1467908171/
Dir1467908173/
Dir1467908174/
Dir1467908175/
Dir1467908176/
Dir1467908177/
Dir1467908178/
Dir1467908179/
Dir1467908180/
Dir1467908181/
Dir1467908182/
Dir1467908183/
Dir1467908184/
Dir1467908186/
Dir1467908187/
Dir1467908189/
Dir1467908190/
Dir1467908191/
Dir1467908193/
Dir1467908194/
Dir1467908200/
Dir1467908202/
Dir1467908203/
Dir1467908205/
Dir1467908206/
Dir1467908207/
Dir1467908208/
Dir1467908209/
Dir1467908210/
Dir1467908212/
Dir1467908213/
Dir1467908214/
Dir1467908215/
Dir1467908216/
Dir1467908217/
Dir1467908219/
Dir1467908220/
Dir1467908222/
Dir1467908223/
Dir1467908224/
Dir1467908227/
Dir1467908230/
Dir1467908232/
Dir1467908235/
Dir1467908237/
Dir1467908239/
Dir1467908242/
Dir1467908244/
Dir1467908247/
Dir1467908249/
Dir1467908251/
Dir1467908254/
Dir1467908256/
Dir1467908258/
Dir1467908261/
Dir1467908263/
Dir1467908544/
Dir1467908603/
Dir1467909803/
Dir1467910766/
Dir1467910941/
Dir1467912442/
Dir1467912652/
Dir1467913224/
Dir1467916283/
Dir1467917723/
Dir1467918685/
Dir1467919405/
Dir1467919466/
Dir1467923459/
Dir1467923786/
Dir1467925826/
Dir1467926786/
Dir1467927985/
Dir1467931886/
Dir1467934218/
Dir1467936806/
Dir1467938186/
Dir1467941666/
Dir1467943106/
Dir1467944725/
Dir1467945086/
Dir1467952106/
Dir1467952705/
Dir1467955585/
Dir1467955886/
Dir1467957505/
Dir1467958646/
Dir1467958885/
Dir1467961165/
Dir1467961827/
Dir1467962185/
Dir1467963147/
Dir1467965306/
Dir1467966653/
Dir1467968305/
Dir1467969805/
Dir1467973046/
Dir1467974794/
Dir1467978446/
Dir1467982886/
Dir1467986245/
Dir1467988337/
Dir1467991226/
Dir1467991945/
Dir1467993445/
Dir1467995368/
Dir1467998065/
Dir1467999625/
Dir1468005505/
Dir1468009894/
Dir1468015526/
Dir1468016546/
Dir1468016665/
Dir1468016785/
Dir1468017266/
Dir1468017807/
Dir1468018165/
Dir1468020085/
Dir1468020628/
Dir1468022005/
Dir1468023866/
Dir1468029686/
Dir1468030889/
Dir1468031465/
Dir1468032866/
Dir1468036165/
Dir1468038026/
Dir1468042263/
Dir1468043605/
Dir1468046605/
Dir1468048345/
Dir1468051346/
Dir1468056146/
Dir1468063225/
Dir1468063835/
Dir1468076305/
Dir1468079185/
Dir1468080146/
Dir1468083505/
Dir1468099586/
Dir1468099765/
Dir1468107003/
Dir1468107685/
Dir1468113685/
Dir1468117913/
Dir1468130965/
Dir1468139453/
Dir1468149145/
Dir1468150243/
Dir1468189885/
Dir1468199546/
Dir1468203985/
Dir1468223965/
Dir1468224745/
Dir1468225286/
Dir1468226126/
Dir1468226306/
Dir1468226425/
Dir1468226606/
Dir1468227206/
Dir1468228766/
Dir1468229186/
Dir1468230627/
Dir1468233658/
Dir1468235546/
Dir1468236792/
Dir1468237825/
Dir1468239386/
Dir1468239505/
Dir1468242746/
Dir1468243046/
Dir1468243527/
Dir1468245385/
Dir1468245866/
Dir1468247125/
Dir1468249946/
Dir1468251926/
Dir1468255766/
Dir1468258272/
Dir1468258886/
Dir1468259245/
Dir1468264465/
Dir1468265185/
Dir1468266266/
Dir1468267705/
Dir1468267825/
Dir1468267945/
Dir1468268365/
Dir1468268785/
Dir1468269112/
Dir1468270465/
Dir1468271367/
Dir1468271907/
Dir1468273529/
Dir1468279879/
Dir1468280785/
Dir1468285105/
Dir1468301845/
Dir1468302565/
Dir1468304006/
Dir1468304725/
Dir1468307487/
Dir1468308626/
Dir1468308926/
Dir1468312272/
Dir1468314445/
Dir1468314566/
Dir1468314926/
Dir1468315170/
Dir1468315345/
Dir1468315525/
Dir1468315828/
Dir1468316005/
Dir1468316248/
Dir1468316485/
Dir1468317126/
Dir1468320327/
Dir1468322011/
Dir1468323110/
Dir1468325246/
Dir1468325905/
Dir1468331126/
Dir1468331187/
Dir1468332864/
Dir1468333527/
Dir1468334186/
Dir1468337065/
Dir1468339165/
Dir1468339166/
Dir1468339525/
Dir1468344205/
Dir1468346005/
Dir1468346065/
Dir1468346786/
Dirlatest/
Filemozilla-inbound-win32-pgo-bm71-build1-build5.txt.gz701K15-Jan-2016 22:36
Filemozilla-inbound-win32-pgo-bm72-build1-build202.txt.gz574K18-May-2016 14:14
Filemozilla-inbound-win32-pgo-bm73-build1-build218.txt.gz614K26-Mar-2016 13:09
Filemozilla-inbound-win32-pgo-bm74-build1-build140.txt.gz579K17-May-2016 18:25
Filemozilla-inbound-win32-pgo-bm91-build1-build191.txt.gz572K26-May-2016 22:49
Filemozilla-inbound_win7-ix_test-chromez-bm110-tests1-windows-build2478.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_win7-ix_test-dromaeojs-e10s-bm109-tests1-windows-build1907.txt.gz46K08-Apr-2016 21:07
Filemozilla-inbound_win7-ix_test-g1-bm111-tests1-windows-build1066.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_win7-ix_test-mochitest-1-bm126-tests1-windows-build96.txt.gz84K05-Mar-2016 16:10
Filemozilla-inbound_win7-ix_test-other_nol64-bm110-tests1-windows-build1297.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_win7-ix_test-other_nol64-bm110-tests1-windows-build1298.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_win7-ix_test-svgr-bm110-tests1-windows-build2614.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_win7-ix_test-svgr-bm110-tests1-windows-build2616.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_win7-ix_test-tp5o-bm110-tests1-windows-build2394.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_win7-ix_test-xperf-bm112-tests1-windows-build1264.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_win8_test-chromez-bm110-tests1-windows-build2478.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_win8_test-chromez-bm111-tests1-windows-build2156.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_win8_test-dromaeojs-bm111-tests1-windows-build2156.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_win8_test-g1-bm112-tests1-windows-build622.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_win8_test-other_nol64-bm109-tests1-windows-build1352.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_win8_test-svgr-bm110-tests1-windows-build2417.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_win8_test-tp5o-bm110-tests1-windows-build2444.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_win8_test-tp5o-bm110-tests1-windows-build2446.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_xp-ix_test-chromez-bm109-tests1-windows-build2126.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_xp-ix_test-chromez-bm110-tests1-windows-build2446.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_xp-ix_test-g1-bm110-tests1-windows-build1410.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_xp-ix_test-g2-e10s-bm111-tests1-windows-build1705.txt.gz26K24-Mar-2016 15:18
Filemozilla-inbound_xp-ix_test-g2-e10s-bm112-tests1-windows-build1549.txt.gz26K24-Mar-2016 15:18
Filemozilla-inbound_xp-ix_test-g2-e10s-bm112-tests1-windows-build1550.txt.gz26K24-Mar-2016 15:24
Filemozilla-inbound_xp-ix_test-g2-e10s-bm112-tests1-windows-build1551.txt.gz26K24-Mar-2016 15:24
Filemozilla-inbound_xp-ix_test-g2-e10s-bm112-tests1-windows-build1552.txt.gz26K24-Mar-2016 15:25
Filemozilla-inbound_xp-ix_test-g2-e10s-bm119-tests1-windows-build1752.txt.gz26K24-Mar-2016 15:25
Filemozilla-inbound_xp-ix_test-g2-e10s-bm126-tests1-windows-build852.txt.gz26K24-Mar-2016 15:23
Filemozilla-inbound_xp-ix_test-g2-e10s-bm126-tests1-windows-build853.txt.gz26K24-Mar-2016 15:25
Filemozilla-inbound_xp-ix_test-other_nol64-bm110-tests1-windows-build1386.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_xp-ix_test-svgr-bm109-tests1-windows-build1998.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_xp-ix_test-svgr-bm112-tests1-windows-build1122.txt.gz3K23-Oct-2015 12:40
Filemozilla-inbound_xp-ix_test-tp5o-e10s-bm109-tests1-windows-build1892.txt.gz82K15-Apr-2016 16:04
Filemozilla-inbound_xp-ix_test-tp5o-e10s-bm110-tests1-windows-build1585.txt.gz82K04-Apr-2016 23:11
Filemozilla-inbound_xp-ix_test-tp5o-e10s-bm111-tests1-windows-build1739.txt.gz82K15-Apr-2016 15:33
Filemozilla-central-win32-bm70-build1-build10.txt.gz565K14-Jan-2016 21:19mozilla-inbound_xp-ix_test-tp5o-e10s-bm119-tests1-windows-build1674.txt.gz82K15-Apr-2016 16:04
Filemozilla-central-win32-bm73-build1-build20.txt.gz576K17-Dec-2015 16:27mozilla-inbound_xp-ix_test-tp5o-e10s-bm127-tests1-windows-build874.txt.gz82K15-Apr-2016 16:04
Filemozilla-central-win32-pgo-bm73-build1-build18.txt.gz656K17-Dec-2015 18:25mozilla-inbound_xp-ix_test-tp5o-e10s-bm127-tests1-windows-build875.txt.gz82K15-Apr-2016 16:06
Filemozilla-central_xp-ix_test-mochitest-devtools-chrome-6-bm126-tests1-windows-build35.txt.gz117K14-Jan-2016 21:29mozilla-inbound_xp_ix_test-mochitest-devtools-chrome-1-bm110-tests1-windows-build55.txt.gz58K26-May-2016 14:03
- - + diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-1.html thunderbird-49.0~b1+build5/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-1.html --- thunderbird-49.0~b1+build4/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-1.html 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-1.html 2016-09-02 05:35:09.000000000 +0000 @@ -0,0 +1,14 @@ + + + +
+
+
+
+ + diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-1-ref.html thunderbird-49.0~b1+build5/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-1-ref.html --- thunderbird-49.0~b1+build4/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-1-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-1-ref.html 2016-09-02 05:35:08.000000000 +0000 @@ -0,0 +1,11 @@ + + + +
+
+ + diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-2.html thunderbird-49.0~b1+build5/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-2.html --- thunderbird-49.0~b1+build4/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-2.html 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-2.html 2016-09-02 05:35:09.000000000 +0000 @@ -0,0 +1,12 @@ + + + +
+
+
+ + diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-2-ref.html thunderbird-49.0~b1+build5/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-2-ref.html --- thunderbird-49.0~b1+build4/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-2-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-2-ref.html 2016-09-02 05:35:08.000000000 +0000 @@ -0,0 +1,7 @@ + + + +
+ + + diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling.html thunderbird-49.0~b1+build5/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling.html --- thunderbird-49.0~b1+build4/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling.html 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ - - - -
-
-
-
- - diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-ref.html thunderbird-49.0~b1+build5/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-ref.html --- thunderbird-49.0~b1+build4/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-ref.html 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/layout/reftests/async-scrolling/bg-fixed-child-no-culling-ref.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ - - - -
-
- - diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/reftests/async-scrolling/reftest.list thunderbird-49.0~b1+build5/mozilla/layout/reftests/async-scrolling/reftest.list --- thunderbird-49.0~b1+build4/mozilla/layout/reftests/async-scrolling/reftest.list 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/layout/reftests/async-scrolling/reftest.list 2016-09-02 05:35:09.000000000 +0000 @@ -7,7 +7,8 @@ skip-if(!asyncPan) == bg-fixed-child-clip-2.html bg-fixed-child-clip-ref.html fuzzy(1,246) fuzzy-if(skiaContent,2,160) fuzzy-if(browserIsRemote&&d2d,53,185) skip-if(!asyncPan) == bg-fixed-child-mask.html bg-fixed-child-mask-ref.html skip-if(!asyncPan) == bg-fixed-in-opacity.html bg-fixed-in-opacity-ref.html -skip-if(!asyncPan) == bg-fixed-child-no-culling.html bg-fixed-child-no-culling-ref.html +skip-if(!asyncPan) == bg-fixed-child-no-culling-1.html bg-fixed-child-no-culling-1-ref.html +skip-if(!asyncPan) == bg-fixed-child-no-culling-2.html bg-fixed-child-no-culling-2-ref.html fuzzy-if(B2G,2,5366) fuzzy-if(Android,2,4000) fuzzy-if(browserIsRemote&&cocoaWidget,2,179524) fuzzy-if(browserIsRemote&&winWidget,1,74590) skip-if(!asyncPan) == bg-fixed-transformed-image.html bg-fixed-transformed-image-ref.html skip-if(!asyncPan) == element-1.html element-1-ref.html pref(layers.force-active,true) skip-if(!asyncPan) == iframe-1.html iframe-1-ref.html diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/reftests/bugs/1294102-1.html thunderbird-49.0~b1+build5/mozilla/layout/reftests/bugs/1294102-1.html --- thunderbird-49.0~b1+build4/mozilla/layout/reftests/bugs/1294102-1.html 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/layout/reftests/bugs/1294102-1.html 2016-09-02 05:35:09.000000000 +0000 @@ -0,0 +1,6 @@ + + + + + + diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/reftests/bugs/1294102-1-ref.html thunderbird-49.0~b1+build5/mozilla/layout/reftests/bugs/1294102-1-ref.html --- thunderbird-49.0~b1+build4/mozilla/layout/reftests/bugs/1294102-1-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/layout/reftests/bugs/1294102-1-ref.html 2016-09-02 05:35:09.000000000 +0000 @@ -0,0 +1,6 @@ + + + + + + diff -Nru thunderbird-49.0~b1+build4/mozilla/layout/reftests/bugs/reftest.list thunderbird-49.0~b1+build5/mozilla/layout/reftests/bugs/reftest.list --- thunderbird-49.0~b1+build4/mozilla/layout/reftests/bugs/reftest.list 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/layout/reftests/bugs/reftest.list 2016-09-02 05:35:09.000000000 +0000 @@ -1957,3 +1957,8 @@ random-if(!winWidget) == 1273154-2.html 1273154-2-ref.html # depends on Windows font == 1274368-1.html 1274368-1-ref.html == 1275411-1.html 1275411-1-ref.html +# Buttons in 2 pages have different position and the rendering result can be +# different, but they should use the same button style and the background color +# should be same. |fuzzy()| here allows the difference in border, but not +# background color. +fuzzy(255,1000) skip-if(!cocoaWidget) == 1294102-1.html 1294102-1-ref.html diff -Nru thunderbird-49.0~b1+build4/mozilla/media/webrtc/trunk/webrtc/modules/video_capture/android/java/src/org/webrtc/videoengine/VideoCaptureAndroid.java thunderbird-49.0~b1+build5/mozilla/media/webrtc/trunk/webrtc/modules/video_capture/android/java/src/org/webrtc/videoengine/VideoCaptureAndroid.java --- thunderbird-49.0~b1+build4/mozilla/media/webrtc/trunk/webrtc/modules/video_capture/android/java/src/org/webrtc/videoengine/VideoCaptureAndroid.java 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/media/webrtc/trunk/webrtc/modules/video_capture/android/java/src/org/webrtc/videoengine/VideoCaptureAndroid.java 2016-09-02 05:35:11.000000000 +0000 @@ -106,6 +106,7 @@ if (camera != null) { mResumeCapture = true; stopCapture(); + GeckoAppShell.notifyObservers("VideoCapture:Paused", null); } } @@ -114,6 +115,7 @@ if (mResumeCapture) { startCapture(mCaptureWidth, mCaptureHeight, mCaptureMinFPS, mCaptureMaxFPS); mResumeCapture = false; + GeckoAppShell.notifyObservers("VideoCapture:Resumed", null); } } diff -Nru thunderbird-49.0~b1+build4/mozilla/mobile/android/base/java/org/mozilla/gecko/distribution/ReferrerReceiver.java thunderbird-49.0~b1+build5/mozilla/mobile/android/base/java/org/mozilla/gecko/distribution/ReferrerReceiver.java --- thunderbird-49.0~b1+build4/mozilla/mobile/android/base/java/org/mozilla/gecko/distribution/ReferrerReceiver.java 2016-08-26 06:25:51.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/mobile/android/base/java/org/mozilla/gecko/distribution/ReferrerReceiver.java 2016-09-02 05:35:11.000000000 +0000 @@ -69,6 +69,12 @@ if (TextUtils.equals(referrer.campaign, DISTRIBUTION_UTM_CAMPAIGN)) { Distribution.onReceivedReferrer(context, referrer); + // We want Adjust information for OTA distributions as well + try { + AdjustConstants.getAdjustHelper().onReceive(context, intent); + } catch (Exception e) { + Log.e(LOGTAG, "Got exception in Adjust's onReceive for distribution.", e); + } } else { Log.d(LOGTAG, "Not downloading distribution: non-matching campaign."); // If this is a Mozilla campaign, pass the campaign along to Gecko. diff -Nru thunderbird-49.0~b1+build4/mozilla/mobile/android/base/java/org/mozilla/gecko/toolbar/BrowserToolbar.java thunderbird-49.0~b1+build5/mozilla/mobile/android/base/java/org/mozilla/gecko/toolbar/BrowserToolbar.java --- thunderbird-49.0~b1+build4/mozilla/mobile/android/base/java/org/mozilla/gecko/toolbar/BrowserToolbar.java 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/mobile/android/base/java/org/mozilla/gecko/toolbar/BrowserToolbar.java 2016-09-02 05:35:11.000000000 +0000 @@ -162,8 +162,9 @@ } public static BrowserToolbar create(final Context context, final AttributeSet attrs) { + final boolean isLargeResource = context.getResources().getBoolean(R.bool.is_large_resource); final BrowserToolbar toolbar; - if (HardwareUtils.isTablet()) { + if (isLargeResource) { toolbar = new BrowserToolbarTablet(context, attrs); } else { toolbar = new BrowserToolbarPhone(context, attrs); diff -Nru thunderbird-49.0~b1+build4/mozilla/mobile/android/base/resources/values/bool.xml thunderbird-49.0~b1+build5/mozilla/mobile/android/base/resources/values/bool.xml --- thunderbird-49.0~b1+build4/mozilla/mobile/android/base/resources/values/bool.xml 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/mobile/android/base/resources/values/bool.xml 2016-09-02 05:35:11.000000000 +0000 @@ -0,0 +1,18 @@ + + + + + + false + diff -Nru thunderbird-49.0~b1+build4/mozilla/mobile/android/base/resources/values-large/bool.xml thunderbird-49.0~b1+build5/mozilla/mobile/android/base/resources/values-large/bool.xml --- thunderbird-49.0~b1+build4/mozilla/mobile/android/base/resources/values-large/bool.xml 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/mobile/android/base/resources/values-large/bool.xml 2016-09-02 05:35:11.000000000 +0000 @@ -0,0 +1,11 @@ + + + + + + true + diff -Nru thunderbird-49.0~b1+build4/mozilla/mobile/android/chrome/content/browser.js thunderbird-49.0~b1+build5/mozilla/mobile/android/chrome/content/browser.js --- thunderbird-49.0~b1+build4/mozilla/mobile/android/chrome/content/browser.js 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/mobile/android/chrome/content/browser.js 2016-09-02 05:35:11.000000000 +0000 @@ -169,7 +169,9 @@ lazilyLoadedObserverScripts.push( ["WebrtcUI", ["getUserMedia:request", "PeerConnection:request", - "recording-device-events"], "chrome://browser/content/WebrtcUI.js"]) + "recording-device-events", + "VideoCapture:Paused", + "VideoCapture:Resumed"], "chrome://browser/content/WebrtcUI.js"]) } lazilyLoadedObserverScripts.forEach(function (aScript) { diff -Nru thunderbird-49.0~b1+build4/mozilla/mobile/android/chrome/content/WebrtcUI.js thunderbird-49.0~b1+build5/mozilla/mobile/android/chrome/content/WebrtcUI.js --- thunderbird-49.0~b1+build4/mozilla/mobile/android/chrome/content/WebrtcUI.js 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/mobile/android/chrome/content/WebrtcUI.js 2016-09-02 05:35:11.000000000 +0000 @@ -46,6 +46,13 @@ this.notify(); break; } + } else if (aTopic === "VideoCapture:Paused") { + if (this._notificationId) { + Notifications.cancel(this._notificationId); + this._notificationId = null; + } + } else if (aTopic === "VideoCapture:Resumed") { + this.notify(); } }, diff -Nru thunderbird-49.0~b1+build4/mozilla/modules/libpref/init/all.js thunderbird-49.0~b1+build5/mozilla/modules/libpref/init/all.js --- thunderbird-49.0~b1+build4/mozilla/modules/libpref/init/all.js 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/modules/libpref/init/all.js 2016-09-02 05:36:11.000000000 +0000 @@ -487,7 +487,7 @@ #elif defined(XP_WIN) pref("media.peerconnection.capture_delay", 50); pref("media.getusermedia.playout_delay", 40); -pref("media.navigator.audio.full_duplex", true); +pref("media.navigator.audio.full_duplex", false); #elif defined(ANDROID) pref("media.peerconnection.capture_delay", 100); pref("media.getusermedia.playout_delay", 100); diff -Nru thunderbird-49.0~b1+build4/mozilla/netwerk/protocol/http/HttpChannelChild.cpp thunderbird-49.0~b1+build5/mozilla/netwerk/protocol/http/HttpChannelChild.cpp --- thunderbird-49.0~b1+build4/mozilla/netwerk/protocol/http/HttpChannelChild.cpp 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/netwerk/protocol/http/HttpChannelChild.cpp 2016-09-02 05:35:12.000000000 +0000 @@ -522,6 +522,13 @@ HttpChannelChild::DoOnStartRequest(nsIRequest* aRequest, nsISupports* aContext) { LOG(("HttpChannelChild::DoOnStartRequest [this=%p]\n", this)); + + // In theory mListener should not be null, but in practice sometimes it is. + MOZ_ASSERT(mListener); + if (!mListener) { + Cancel(NS_ERROR_FAILURE); + return; + } nsresult rv = mListener->OnStartRequest(aRequest, aContext); if (NS_FAILED(rv)) { Cancel(rv); @@ -944,7 +951,12 @@ MOZ_ASSERT(!mOnStopRequestCalled, "We should not call OnStopRequest twice"); - mListener->OnStopRequest(aRequest, aContext, mStatus); + + // In theory mListener should not be null, but in practice sometimes it is. + MOZ_ASSERT(mListener); + if (mListener) { + mListener->OnStopRequest(aRequest, aContext, mStatus); + } mOnStopRequestCalled = true; mListener = 0; diff -Nru thunderbird-49.0~b1+build4/mozilla/netwerk/sctp/src/netinet/sctputil.c thunderbird-49.0~b1+build5/mozilla/netwerk/sctp/src/netinet/sctputil.c --- thunderbird-49.0~b1+build4/mozilla/netwerk/sctp/src/netinet/sctputil.c 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/netwerk/sctp/src/netinet/sctputil.c 2016-09-02 05:35:12.000000000 +0000 @@ -4064,12 +4064,8 @@ vtag = 0; if (stcb != NULL) { - /* We have a TCB to abort, send notification too */ vtag = stcb->asoc.peer_vtag; - sctp_abort_notification(stcb, 0, 0, NULL, SCTP_SO_NOT_LOCKED); - /* get the assoc vrf id and table id */ vrf_id = stcb->asoc.vrf_id; - stcb->asoc.state |= SCTP_STATE_WAS_ABORTED; } sctp_send_abort(m, iphlen, src, dst, sh, vtag, op_err, #if defined(__FreeBSD__) @@ -4077,6 +4073,9 @@ #endif vrf_id, port); if (stcb != NULL) { + /* We have a TCB to abort, send notification too */ + sctp_abort_notification(stcb, 0, 0, NULL, SCTP_SO_NOT_LOCKED); + stcb->asoc.state |= SCTP_STATE_WAS_ABORTED; /* Ok, now lets free it */ #if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) so = SCTP_INP_SO(inp); @@ -4204,10 +4203,6 @@ } else { stcb->asoc.state |= SCTP_STATE_WAS_ABORTED; } - /* notify the ulp */ - if ((inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) == 0) { - sctp_abort_notification(stcb, 0, 0, NULL, so_locked); - } /* notify the peer */ sctp_send_abort_tcb(stcb, op_err, so_locked); SCTP_STAT_INCR_COUNTER32(sctps_aborted); @@ -4215,6 +4210,10 @@ (SCTP_GET_STATE(&stcb->asoc) == SCTP_STATE_SHUTDOWN_RECEIVED)) { SCTP_STAT_DECR_GAUGE32(sctps_currestab); } + /* notify the ulp */ + if ((inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) == 0) { + sctp_abort_notification(stcb, 0, 0, NULL, so_locked); + } /* now free the asoc */ #ifdef SCTP_ASOCLOG_OF_TSNS sctp_print_out_track_log(stcb); diff -Nru thunderbird-49.0~b1+build4/mozilla/testing/marionette/driver.js thunderbird-49.0~b1+build5/mozilla/testing/marionette/driver.js --- thunderbird-49.0~b1+build4/mozilla/testing/marionette/driver.js 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/testing/marionette/driver.js 2016-09-02 05:36:11.000000000 +0000 @@ -207,7 +207,6 @@ * Command ID to ensure synchronisity. */ GeckoDriver.prototype.sendAsync = function(name, msg, cmdId) { - logger.info(`sendAsync ${this.sessionId}`) let curRemoteFrame = this.curBrowser.frameManager.currentRemoteFrame; name = "Marionette:" + name; diff -Nru thunderbird-49.0~b1+build4/mozilla/testing/mozharness/configs/builds/branch_specifics.py thunderbird-49.0~b1+build5/mozilla/testing/mozharness/configs/builds/branch_specifics.py --- thunderbird-49.0~b1+build4/mozilla/testing/mozharness/configs/builds/branch_specifics.py 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/testing/mozharness/configs/builds/branch_specifics.py 2016-09-02 05:35:13.000000000 +0000 @@ -87,6 +87,9 @@ 'linux64-tsan': { 'update_channel': 'default', }, + 'linux64-add-on-devel': { + 'update_channel': 'default', + }, 'macosx64-debug': { 'update_channel': 'default', }, @@ -99,15 +102,24 @@ 'macosx64-st-an-debug': { 'update_channel': 'default', }, + 'macosx64-add-on-devel': { + 'update_channel': 'default', + }, 'win32-debug': { 'update_channel': 'default', }, 'win32-mulet': { 'update_channel': 'default', }, + 'win32-add-on-devel': { + 'update_channel': 'default', + }, 'win64-debug': { 'update_channel': 'default', }, + 'win64-add-on-devel': { + 'update_channel': 'default', + }, }, }, 'mozilla-beta': { @@ -161,6 +173,9 @@ 'linux64-tsan': { 'update_channel': 'default', }, + 'linux64-add-on-devel': { + 'update_channel': 'default', + }, 'macosx64-debug': { 'update_channel': 'default', }, @@ -173,15 +188,24 @@ 'macosx64-st-an-debug': { 'update_channel': 'default', }, + 'macosx64-add-on-devel': { + 'update_channel': 'default', + }, 'win32-debug': { 'update_channel': 'default', }, 'win32-mulet': { 'update_channel': 'default', }, + 'win32-add-on-devel': { + 'update_channel': 'default', + }, 'win64-debug': { 'update_channel': 'default', }, + 'win64-add-on-devel': { + 'update_channel': 'default', + }, }, }, 'mozilla-esr45': { diff -Nru thunderbird-49.0~b1+build4/mozilla/testing/mozharness/configs/releases/dev_postrelease_firefox_beta.py thunderbird-49.0~b1+build5/mozilla/testing/mozharness/configs/releases/dev_postrelease_firefox_beta.py --- thunderbird-49.0~b1+build4/mozilla/testing/mozharness/configs/releases/dev_postrelease_firefox_beta.py 2016-08-26 06:25:52.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/testing/mozharness/configs/releases/dev_postrelease_firefox_beta.py 2016-09-02 05:35:13.000000000 +0000 @@ -14,4 +14,6 @@ "ignore_no_changes": True, "ssh_user": "ffxbld", "ssh_key": "~/.ssh/ffxbld_rsa", + "ship_it_root": "https://ship-it-dev.allizom.org", + "ship_it_username": "stage-ffxbld", } diff -Nru thunderbird-49.0~b1+build4/mozilla/testing/mozharness/configs/releases/dev_postrelease_firefox_release.py thunderbird-49.0~b1+build5/mozilla/testing/mozharness/configs/releases/dev_postrelease_firefox_release.py --- thunderbird-49.0~b1+build4/mozilla/testing/mozharness/configs/releases/dev_postrelease_firefox_release.py 2016-08-26 06:25:53.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/testing/mozharness/configs/releases/dev_postrelease_firefox_release.py 2016-09-02 05:35:13.000000000 +0000 @@ -16,4 +16,6 @@ "ignore_no_changes": True, "ssh_user": "ffxbld", "ssh_key": "~/.ssh/ffxbld_rsa", + "ship_it_root": "https://ship-it-dev.allizom.org", + "ship_it_username": "stage-ffxbld", } diff -Nru thunderbird-49.0~b1+build4/mozilla/testing/mozharness/configs/releases/postrelease_firefox_beta.py thunderbird-49.0~b1+build5/mozilla/testing/mozharness/configs/releases/postrelease_firefox_beta.py --- thunderbird-49.0~b1+build4/mozilla/testing/mozharness/configs/releases/postrelease_firefox_beta.py 2016-08-26 06:25:53.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/testing/mozharness/configs/releases/postrelease_firefox_beta.py 2016-09-02 05:35:13.000000000 +0000 @@ -12,4 +12,6 @@ "ignore_no_changes": True, "ssh_user": "ffxbld", "ssh_key": "~/.ssh/ffxbld_rsa", + "ship_it_root": "https://ship-it.mozilla.org", + "ship_it_username": "ffxbld", } diff -Nru thunderbird-49.0~b1+build4/mozilla/testing/mozharness/configs/releases/postrelease_firefox_esr45.py thunderbird-49.0~b1+build5/mozilla/testing/mozharness/configs/releases/postrelease_firefox_esr45.py --- thunderbird-49.0~b1+build4/mozilla/testing/mozharness/configs/releases/postrelease_firefox_esr45.py 2016-08-26 06:25:52.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/testing/mozharness/configs/releases/postrelease_firefox_esr45.py 2016-09-02 05:35:13.000000000 +0000 @@ -16,4 +16,6 @@ "ignore_no_changes": True, "ssh_user": "ffxbld", "ssh_key": "~/.ssh/ffxbld_rsa", + "ship_it_root": "https://ship-it.mozilla.org", + "ship_it_username": "ffxbld", } diff -Nru thunderbird-49.0~b1+build4/mozilla/testing/mozharness/configs/releases/postrelease_firefox_release.py thunderbird-49.0~b1+build5/mozilla/testing/mozharness/configs/releases/postrelease_firefox_release.py --- thunderbird-49.0~b1+build4/mozilla/testing/mozharness/configs/releases/postrelease_firefox_release.py 2016-08-26 06:25:52.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/testing/mozharness/configs/releases/postrelease_firefox_release.py 2016-09-02 05:35:13.000000000 +0000 @@ -16,4 +16,6 @@ "ignore_no_changes": True, "ssh_user": "ffxbld", "ssh_key": "~/.ssh/ffxbld_rsa", + "ship_it_root": "https://ship-it.mozilla.org", + "ship_it_username": "ffxbld", } diff -Nru thunderbird-49.0~b1+build4/mozilla/testing/mozharness/scripts/release/postrelease_mark_as_shipped.py thunderbird-49.0~b1+build5/mozilla/testing/mozharness/scripts/release/postrelease_mark_as_shipped.py --- thunderbird-49.0~b1+build4/mozilla/testing/mozharness/scripts/release/postrelease_mark_as_shipped.py 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/testing/mozharness/scripts/release/postrelease_mark_as_shipped.py 2016-09-02 05:36:11.000000000 +0000 @@ -0,0 +1,110 @@ +#!/usr/bin/env python +# lint_ignore=E501 +# ***** BEGIN LICENSE BLOCK ***** +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this file, +# You can obtain one at http://mozilla.org/MPL/2.0/. +# ***** END LICENSE BLOCK ***** +""" postrelease_mark_as_shipped.py + +A script to automate the manual way of updating a release as shipped in Ship-it +following its successful ship-to-the-door opertion. +""" +import os +import sys +from datetime import datetime + +sys.path.insert(1, os.path.dirname(os.path.dirname(sys.path[0]))) + +from mozharness.base.python import VirtualenvMixin, virtualenv_config_options +from mozharness.base.script import BaseScript +from mozharness.mozilla.buildbot import BuildbotMixin + + +def build_release_name(product, version, buildno): + """Function to reconstruct the name of the release based on product, + version and buildnumber + """ + return "{}-{}-build{}".format(product.capitalize(), + str(version), str(buildno)) + + +class MarkReleaseAsShipped(BaseScript, VirtualenvMixin, BuildbotMixin): + config_options = virtualenv_config_options + + def __init__(self, require_config_file=True): + super(MarkReleaseAsShipped, self).__init__( + config_options=self.config_options, + require_config_file=require_config_file, + config={ + "virtualenv_modules": [ + "shipitapi", + ], + "virtualenv_path": "venv", + "credentials_file": "oauth.txt", + "buildbot_json_path": "buildprops.json", + "timeout": 60, + }, + all_actions=[ + "create-virtualenv", + "activate-virtualenv", + "mark-as-shipped", + ], + default_actions=[ + "create-virtualenv", + "activate-virtualenv", + "mark-as-shipped", + ], + ) + + def _pre_config_lock(self, rw_config): + super(MarkReleaseAsShipped, self)._pre_config_lock(rw_config) + # override properties from buildbot properties here as defined by + # taskcluster properties + self.read_buildbot_config() + if not self.buildbot_config: + self.warning("Skipping buildbot properties overrides") + return + props = self.buildbot_config['properties'] + mandatory_props = ['product', 'version', 'buildnumber'] + missing_props = [] + for prop in mandatory_props: + if props.get(prop): + self.info("Overriding %s with %s" % (prop, props[prop])) + self.config[prop] = props.get(prop) + else: + self.warning("%s could not be found within buildprops" % prop) + missing_props.append(prop) + + if missing_props: + raise Exception("%s not found in configs" % missing_props) + + self.config['name'] = build_release_name(self.config['product'], + self.config['version'], + self.config['buildnumber']) + + def mark_as_shipped(self): + """Method to make a simple call to Ship-it API to change a release + status to 'shipped' + """ + credentials_file = os.path.join(os.getcwd(), + self.config["credentials_file"]) + credentials = {} + execfile(credentials_file, credentials) + ship_it_credentials = credentials["ship_it_credentials"] + auth = (self.config["ship_it_username"], + ship_it_credentials.get(self.config["ship_it_username"])) + api_root = self.config['ship_it_root'] + + from shipitapi import Release + release_api = Release(auth, api_root=api_root, + timeout=self.config['timeout']) + shipped_at = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S') + + self.info("Mark the release as shipped with %s timestamp" % shipped_at) + release_api.update(self.config['name'], + status='shipped', shippedAt=shipped_at) + + +if __name__ == '__main__': + MarkReleaseAsShipped().run_and_exit() diff -Nru thunderbird-49.0~b1+build4/mozilla/testing/mozharness/scripts/release/push-candidate-to-releases.py thunderbird-49.0~b1+build5/mozilla/testing/mozharness/scripts/release/push-candidate-to-releases.py --- thunderbird-49.0~b1+build4/mozilla/testing/mozharness/scripts/release/push-candidate-to-releases.py 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/testing/mozharness/scripts/release/push-candidate-to-releases.py 2016-09-02 05:35:13.000000000 +0000 @@ -149,19 +149,30 @@ source, destination = item def copy_key(): - dest_key = bucket.get_key(destination) source_key = bucket.get_key(source) + dest_key = bucket.get_key(destination) + # According to http://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonResponseHeaders.html + # S3 key MD5 is represented as ETag, except when objects are + # uploaded using multipart method. In this case objects's ETag + # is constructed using its MD5, minus symbol, and number of + # part. See http://stackoverflow.com/questions/12186993/what-is-the-algorithm-to-compute-the-amazon-s3-etag-for-a-file-larger-than-5gb#answer-19896823 + source_md5 = source_key.etag.split("-")[0] + if dest_key: + dest_md5 = dest_key.etag.split("-")[0] + else: + dest_md5 = None + if not dest_key: self.info("Copying {} to {}".format(source, destination)) bucket.copy_key(destination, self.config["bucket_name"], source) - elif source_key.etag == dest_key.etag: + elif source_md5 == dest_md5: self.warning( "{} already exists with the same content ({}), skipping copy".format( - destination, dest_key.etag)) + destination, dest_md5)) else: self.fatal( - "{} already exists with the different content (src: {}, dest: {}), aborting".format( + "{} already exists with the different content (src ETag: {}, dest ETag: {}), aborting".format( destination, source_key.etag, dest_key.etag)) return retry(copy_key, sleeptime=5, max_sleeptime=60, diff -Nru thunderbird-49.0~b1+build4/mozilla/toolkit/components/extensions/Extension.jsm thunderbird-49.0~b1+build5/mozilla/toolkit/components/extensions/Extension.jsm --- thunderbird-49.0~b1+build4/mozilla/toolkit/components/extensions/Extension.jsm 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/toolkit/components/extensions/Extension.jsm 2016-09-02 05:36:11.000000000 +0000 @@ -891,7 +891,7 @@ }; if (this.localeData) { - context.preprocessors.localize = this.localize.bind(this); + context.preprocessors.localize = (value, context) => this.localize(value); } let normalized = Schemas.normalize(this.manifest, "manifest.WebExtensionManifest", context); @@ -1503,6 +1503,6 @@ }, get name() { - return this.localize(this.manifest.name); + return this.manifest.name; }, }); diff -Nru thunderbird-49.0~b1+build4/mozilla/toolkit/components/passwordmgr/test/browser/browser.ini thunderbird-49.0~b1+build5/mozilla/toolkit/components/passwordmgr/test/browser/browser.ini --- thunderbird-49.0~b1+build4/mozilla/toolkit/components/passwordmgr/test/browser/browser.ini 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/toolkit/components/passwordmgr/test/browser/browser.ini 2016-09-02 05:35:14.000000000 +0000 @@ -44,6 +44,8 @@ [browser_hasInsecureLoginForms_streamConverter.js] [browser_insecurePasswordWarning.js] [browser_notifications.js] +[browser_notifications_username.js] +[browser_notifications_password.js] [browser_notifications_2.js] [browser_passwordmgr_editing.js] skip-if = os == "linux" diff -Nru thunderbird-49.0~b1+build4/mozilla/toolkit/components/passwordmgr/test/browser/browser_notifications.js thunderbird-49.0~b1+build5/mozilla/toolkit/components/passwordmgr/test/browser/browser_notifications.js --- thunderbird-49.0~b1+build4/mozilla/toolkit/components/passwordmgr/test/browser/browser_notifications.js 2016-08-26 06:26:49.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/toolkit/components/passwordmgr/test/browser/browser_notifications.js 2016-09-02 05:35:14.000000000 +0000 @@ -76,263 +76,3 @@ Services.logins.removeAllLogins(); } }); - -/** - * Test changing the username inside the doorhanger notification for passwords. - * - * We have to test combination of existing and non-existing logins both for - * the original one from the webpage and the final one used by the dialog. - * - * We also check switching to and from empty usernames. - */ -add_task(function* test_edit_username() { - let testCases = [{ - usernameInPage: "username", - usernameChangedTo: "newUsername", - }, { - usernameInPage: "username", - usernameInPageExists: true, - usernameChangedTo: "newUsername", - }, { - usernameInPage: "username", - usernameChangedTo: "newUsername", - usernameChangedToExists: true, - }, { - usernameInPage: "username", - usernameInPageExists: true, - usernameChangedTo: "newUsername", - usernameChangedToExists: true, - }, { - usernameInPage: "", - usernameChangedTo: "newUsername", - }, { - usernameInPage: "newUsername", - usernameChangedTo: "", - }, { - usernameInPage: "", - usernameChangedTo: "newUsername", - usernameChangedToExists: true, - }, { - usernameInPage: "newUsername", - usernameChangedTo: "", - usernameChangedToExists: true, - }]; - - for (let testCase of testCases) { - info("Test case: " + JSON.stringify(testCase)); - - // Create the pre-existing logins when needed. - if (testCase.usernameInPageExists) { - Services.logins.addLogin(LoginTestUtils.testData.formLogin({ - hostname: "https://example.com", - formSubmitURL: "https://example.com", - username: testCase.usernameInPage, - password: "old password", - })); - } - - if (testCase.usernameChangedToExists) { - Services.logins.addLogin(LoginTestUtils.testData.formLogin({ - hostname: "https://example.com", - formSubmitURL: "https://example.com", - username: testCase.usernameChangedTo, - password: "old password", - })); - } - - yield BrowserTestUtils.withNewTab({ - gBrowser, - url: "https://example.com/browser/toolkit/components/" + - "passwordmgr/test/browser/form_basic.html", - }, function* (browser) { - // Submit the form in the content page with the credentials from the test - // case. This will cause the doorhanger notification to be displayed. - let promiseShown = BrowserTestUtils.waitForEvent(PopupNotifications.panel, - "Shown"); - yield ContentTask.spawn(browser, testCase.usernameInPage, - function* (usernameInPage) { - let doc = content.document; - doc.getElementById("form-basic-username").value = usernameInPage; - doc.getElementById("form-basic-password").value = "password"; - doc.getElementById("form-basic").submit(); - }); - yield promiseShown; - - let notificationElement = PopupNotifications.panel.childNodes[0]; - // Modify the username in the dialog if requested. - if (testCase.usernameChangedTo) { - notificationElement.querySelector("#password-notification-username") - .setAttribute("value", testCase.usernameChangedTo); - } - - // We expect a modifyLogin notification if the final username used by the - // dialog exists in the logins database, otherwise an addLogin one. - let expectModifyLogin = testCase.usernameChangedTo - ? testCase.usernameChangedToExists - : testCase.usernameInPageExists; - - // Simulate the action on the notification to request the login to be - // saved, and wait for the data to be updated or saved based on the type - // of operation we expect. - let expectedNotification = expectModifyLogin ? "modifyLogin" : "addLogin"; - let promiseLogin = TestUtils.topicObserved("passwordmgr-storage-changed", - (_, data) => data == expectedNotification); - notificationElement.button.doCommand(); - let [result] = yield promiseLogin; - - // Check that the values in the database match the expected values. - let login = expectModifyLogin ? result.QueryInterface(Ci.nsIArray) - .queryElementAt(1, Ci.nsILoginInfo) - : result.QueryInterface(Ci.nsILoginInfo); - Assert.equal(login.username, testCase.usernameChangedTo || - testCase.usernameInPage); - Assert.equal(login.password, "password"); - }); - - // Clean up the database before the next test case is executed. - Services.logins.removeAllLogins(); - } -}); - -/** - * Test changing the password inside the doorhanger notification for passwords. - * - * We check the following cases: - * - Editing the password of a new login. - * - Editing the password of an existing login. - * - Changing both username and password to an existing login. - * - Changing the username to an existing login. - * - Editing username to an empty one and a new password. - * - * If both the username and password matches an already existing login, we should not - * update it's password, but only it's usage timestamp and count. - */ -add_task(function* test_edit_password() { - let testCases = [{ - usernameInPage: "username", - passwordInPage: "password", - passwordChangedTo: "newPassword", - timesUsed: 1, - }, { - usernameInPage: "username", - usernameInPageExists: true, - passwordInPage: "password", - passwordInStorage: "oldPassword", - passwordChangedTo: "newPassword", - timesUsed: 2, - }, { - usernameInPage: "username", - usernameChangedTo: "newUsername", - usernameChangedToExists: true, - passwordInPage: "password", - passwordChangedTo: "newPassword", - timesUsed: 2, - }, { - usernameInPage: "username", - usernameChangedTo: "newUsername", - usernameChangedToExists: true, - passwordInPage: "password", - passwordChangedTo: "password", - timesUsed: 2, - checkPasswordNotUpdated: true, - }, { - usernameInPage: "newUsername", - usernameChangedTo: "", - usernameChangedToExists: true, - passwordInPage: "password", - passwordChangedTo: "newPassword", - timesUsed: 2, - }]; - - for (let testCase of testCases) { - info("Test case: " + JSON.stringify(testCase)); - - // Create the pre-existing logins when needed. - if (testCase.usernameInPageExists) { - Services.logins.addLogin(LoginTestUtils.testData.formLogin({ - hostname: "https://example.com", - formSubmitURL: "https://example.com", - username: testCase.usernameInPage, - password: testCase.passwordInStorage, - })); - } - - if (testCase.usernameChangedToExists) { - Services.logins.addLogin(LoginTestUtils.testData.formLogin({ - hostname: "https://example.com", - formSubmitURL: "https://example.com", - username: testCase.usernameChangedTo, - password: testCase.passwordChangedTo, - })); - } - - yield BrowserTestUtils.withNewTab({ - gBrowser, - url: "https://example.com/browser/toolkit/components/" + - "passwordmgr/test/browser/form_basic.html", - }, function* (browser) { - // Submit the form in the content page with the credentials from the test - // case. This will cause the doorhanger notification to be displayed. - let promiseShown = BrowserTestUtils.waitForEvent(PopupNotifications.panel, - "popupshown"); - yield ContentTask.spawn(browser, testCase, - function* (testCase) { - let doc = content.document; - doc.getElementById("form-basic-username").value = testCase.usernameInPage; - doc.getElementById("form-basic-password").value = testCase.passwordInPage; - doc.getElementById("form-basic").submit(); - }); - yield promiseShown; - - let notificationElement = PopupNotifications.panel.childNodes[0]; - // Modify the username in the dialog if requested. - if (testCase.usernameChangedTo) { - notificationElement.querySelector("#password-notification-username") - .setAttribute("value", testCase.usernameChangedTo); - } - - // Modify the password in the dialog if requested. - if (testCase.passwordChangedTo) { - notificationElement.querySelector("#password-notification-password") - .setAttribute("value", testCase.passwordChangedTo); - } - - // We expect a modifyLogin notification if the final username used by the - // dialog exists in the logins database, otherwise an addLogin one. - let expectModifyLogin = typeof testCase.usernameChangedTo !== "undefined" - ? testCase.usernameChangedToExists - : testCase.usernameInPageExists; - - // Simulate the action on the notification to request the login to be - // saved, and wait for the data to be updated or saved based on the type - // of operation we expect. - let expectedNotification = expectModifyLogin ? "modifyLogin" : "addLogin"; - let promiseLogin = TestUtils.topicObserved("passwordmgr-storage-changed", - (_, data) => data == expectedNotification); - notificationElement.button.doCommand(); - let [result] = yield promiseLogin; - - // Check that the values in the database match the expected values. - let login = expectModifyLogin ? result.QueryInterface(Ci.nsIArray) - .queryElementAt(1, Ci.nsILoginInfo) - : result.QueryInterface(Ci.nsILoginInfo); - - Assert.equal(login.username, testCase.usernameChangedTo || - testCase.usernameInPage); - Assert.equal(login.password, testCase.passwordChangedTo || - testCase.passwordInPage); - - let meta = login.QueryInterface(Ci.nsILoginMetaInfo); - Assert.equal(meta.timesUsed, testCase.timesUsed); - - // Check that the password was not updated if the user is empty - if (testCase.checkPasswordNotUpdated) { - Assert.ok(meta.timeLastUsed > meta.timeCreated); - Assert.ok(meta.timeCreated == meta.timePasswordChanged); - } - }); - - // Clean up the database before the next test case is executed. - Services.logins.removeAllLogins(); - } -}); diff -Nru thunderbird-49.0~b1+build4/mozilla/toolkit/components/passwordmgr/test/browser/browser_notifications_password.js thunderbird-49.0~b1+build5/mozilla/toolkit/components/passwordmgr/test/browser/browser_notifications_password.js --- thunderbird-49.0~b1+build4/mozilla/toolkit/components/passwordmgr/test/browser/browser_notifications_password.js 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/toolkit/components/passwordmgr/test/browser/browser_notifications_password.js 2016-09-02 05:35:14.000000000 +0000 @@ -0,0 +1,142 @@ +/** + * Test changing the password inside the doorhanger notification for passwords. + * + * We check the following cases: + * - Editing the password of a new login. + * - Editing the password of an existing login. + * - Changing both username and password to an existing login. + * - Changing the username to an existing login. + * - Editing username to an empty one and a new password. + * + * If both the username and password matches an already existing login, we should not + * update it's password, but only it's usage timestamp and count. + */ +add_task(function* test_edit_password() { + let testCases = [{ + usernameInPage: "username", + passwordInPage: "password", + passwordChangedTo: "newPassword", + timesUsed: 1, + }, { + usernameInPage: "username", + usernameInPageExists: true, + passwordInPage: "password", + passwordInStorage: "oldPassword", + passwordChangedTo: "newPassword", + timesUsed: 2, + }, { + usernameInPage: "username", + usernameChangedTo: "newUsername", + usernameChangedToExists: true, + passwordInPage: "password", + passwordChangedTo: "newPassword", + timesUsed: 2, + }, { + usernameInPage: "username", + usernameChangedTo: "newUsername", + usernameChangedToExists: true, + passwordInPage: "password", + passwordChangedTo: "password", + timesUsed: 2, + checkPasswordNotUpdated: true, + }, { + usernameInPage: "newUsername", + usernameChangedTo: "", + usernameChangedToExists: true, + passwordInPage: "password", + passwordChangedTo: "newPassword", + timesUsed: 2, + }]; + + for (let testCase of testCases) { + info("Test case: " + JSON.stringify(testCase)); + + // Create the pre-existing logins when needed. + if (testCase.usernameInPageExists) { + Services.logins.addLogin(LoginTestUtils.testData.formLogin({ + hostname: "https://example.com", + formSubmitURL: "https://example.com", + username: testCase.usernameInPage, + password: testCase.passwordInStorage, + })); + } + + if (testCase.usernameChangedToExists) { + Services.logins.addLogin(LoginTestUtils.testData.formLogin({ + hostname: "https://example.com", + formSubmitURL: "https://example.com", + username: testCase.usernameChangedTo, + password: testCase.passwordChangedTo, + })); + } + + yield BrowserTestUtils.withNewTab({ + gBrowser, + url: "https://example.com/browser/toolkit/components/" + + "passwordmgr/test/browser/form_basic.html", + }, function* (browser) { + // Submit the form in the content page with the credentials from the test + // case. This will cause the doorhanger notification to be displayed. + let promiseShown = BrowserTestUtils.waitForEvent(PopupNotifications.panel, + "popupshown"); + yield ContentTask.spawn(browser, testCase, + function* (testCase) { + let doc = content.document; + doc.getElementById("form-basic-username").value = testCase.usernameInPage; + doc.getElementById("form-basic-password").value = testCase.passwordInPage; + doc.getElementById("form-basic").submit(); + }); + yield promiseShown; + + let notificationElement = PopupNotifications.panel.childNodes[0]; + // Modify the username in the dialog if requested. + if (testCase.usernameChangedTo) { + notificationElement.querySelector("#password-notification-username") + .setAttribute("value", testCase.usernameChangedTo); + } + + // Modify the password in the dialog if requested. + if (testCase.passwordChangedTo) { + notificationElement.querySelector("#password-notification-password") + .setAttribute("value", testCase.passwordChangedTo); + } + + // We expect a modifyLogin notification if the final username used by the + // dialog exists in the logins database, otherwise an addLogin one. + let expectModifyLogin = typeof testCase.usernameChangedTo !== "undefined" + ? testCase.usernameChangedToExists + : testCase.usernameInPageExists; + + // Simulate the action on the notification to request the login to be + // saved, and wait for the data to be updated or saved based on the type + // of operation we expect. + let expectedNotification = expectModifyLogin ? "modifyLogin" : "addLogin"; + let promiseLogin = TestUtils.topicObserved("passwordmgr-storage-changed", + (_, data) => data == expectedNotification); + notificationElement.button.doCommand(); + let [result] = yield promiseLogin; + + // Check that the values in the database match the expected values. + let login = expectModifyLogin ? result.QueryInterface(Ci.nsIArray) + .queryElementAt(1, Ci.nsILoginInfo) + : result.QueryInterface(Ci.nsILoginInfo); + + Assert.equal(login.username, testCase.usernameChangedTo || + testCase.usernameInPage); + Assert.equal(login.password, testCase.passwordChangedTo || + testCase.passwordInPage); + + let meta = login.QueryInterface(Ci.nsILoginMetaInfo); + Assert.equal(meta.timesUsed, testCase.timesUsed); + + // Check that the password was not updated if the user is empty + if (testCase.checkPasswordNotUpdated) { + Assert.ok(meta.timeLastUsed > meta.timeCreated); + Assert.ok(meta.timeCreated == meta.timePasswordChanged); + } + }); + + // Clean up the database before the next test case is executed. + Services.logins.removeAllLogins(); + } +}); diff -Nru thunderbird-49.0~b1+build4/mozilla/toolkit/components/passwordmgr/test/browser/browser_notifications_username.js thunderbird-49.0~b1+build5/mozilla/toolkit/components/passwordmgr/test/browser/browser_notifications_username.js --- thunderbird-49.0~b1+build4/mozilla/toolkit/components/passwordmgr/test/browser/browser_notifications_username.js 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/toolkit/components/passwordmgr/test/browser/browser_notifications_username.js 2016-09-02 05:35:15.000000000 +0000 @@ -0,0 +1,116 @@ +/** + * Test changing the username inside the doorhanger notification for passwords. + * + * We have to test combination of existing and non-existing logins both for + * the original one from the webpage and the final one used by the dialog. + * + * We also check switching to and from empty usernames. + */ +add_task(function* test_edit_username() { + let testCases = [{ + usernameInPage: "username", + usernameChangedTo: "newUsername", + }, { + usernameInPage: "username", + usernameInPageExists: true, + usernameChangedTo: "newUsername", + }, { + usernameInPage: "username", + usernameChangedTo: "newUsername", + usernameChangedToExists: true, + }, { + usernameInPage: "username", + usernameInPageExists: true, + usernameChangedTo: "newUsername", + usernameChangedToExists: true, + }, { + usernameInPage: "", + usernameChangedTo: "newUsername", + }, { + usernameInPage: "newUsername", + usernameChangedTo: "", + }, { + usernameInPage: "", + usernameChangedTo: "newUsername", + usernameChangedToExists: true, + }, { + usernameInPage: "newUsername", + usernameChangedTo: "", + usernameChangedToExists: true, + }]; + + for (let testCase of testCases) { + info("Test case: " + JSON.stringify(testCase)); + + // Create the pre-existing logins when needed. + if (testCase.usernameInPageExists) { + Services.logins.addLogin(LoginTestUtils.testData.formLogin({ + hostname: "https://example.com", + formSubmitURL: "https://example.com", + username: testCase.usernameInPage, + password: "old password", + })); + } + + if (testCase.usernameChangedToExists) { + Services.logins.addLogin(LoginTestUtils.testData.formLogin({ + hostname: "https://example.com", + formSubmitURL: "https://example.com", + username: testCase.usernameChangedTo, + password: "old password", + })); + } + + yield BrowserTestUtils.withNewTab({ + gBrowser, + url: "https://example.com/browser/toolkit/components/" + + "passwordmgr/test/browser/form_basic.html", + }, function* (browser) { + // Submit the form in the content page with the credentials from the test + // case. This will cause the doorhanger notification to be displayed. + let promiseShown = BrowserTestUtils.waitForEvent(PopupNotifications.panel, + "Shown"); + yield ContentTask.spawn(browser, testCase.usernameInPage, + function* (usernameInPage) { + let doc = content.document; + doc.getElementById("form-basic-username").value = usernameInPage; + doc.getElementById("form-basic-password").value = "password"; + doc.getElementById("form-basic").submit(); + }); + yield promiseShown; + + let notificationElement = PopupNotifications.panel.childNodes[0]; + // Modify the username in the dialog if requested. + if (testCase.usernameChangedTo) { + notificationElement.querySelector("#password-notification-username") + .setAttribute("value", testCase.usernameChangedTo); + } + + // We expect a modifyLogin notification if the final username used by the + // dialog exists in the logins database, otherwise an addLogin one. + let expectModifyLogin = testCase.usernameChangedTo + ? testCase.usernameChangedToExists + : testCase.usernameInPageExists; + + // Simulate the action on the notification to request the login to be + // saved, and wait for the data to be updated or saved based on the type + // of operation we expect. + let expectedNotification = expectModifyLogin ? "modifyLogin" : "addLogin"; + let promiseLogin = TestUtils.topicObserved("passwordmgr-storage-changed", + (_, data) => data == expectedNotification); + notificationElement.button.doCommand(); + let [result] = yield promiseLogin; + + // Check that the values in the database match the expected values. + let login = expectModifyLogin ? result.QueryInterface(Ci.nsIArray) + .queryElementAt(1, Ci.nsILoginInfo) + : result.QueryInterface(Ci.nsILoginInfo); + Assert.equal(login.username, testCase.usernameChangedTo || + testCase.usernameInPage); + Assert.equal(login.password, "password"); + }); + + // Clean up the database before the next test case is executed. + Services.logins.removeAllLogins(); + } +}); diff -Nru thunderbird-49.0~b1+build4/mozilla/toolkit/components/telemetry/Histograms.json thunderbird-49.0~b1+build5/mozilla/toolkit/components/telemetry/Histograms.json --- thunderbird-49.0~b1+build4/mozilla/toolkit/components/telemetry/Histograms.json 2016-08-26 06:26:50.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/toolkit/components/telemetry/Histograms.json 2016-09-02 05:36:11.000000000 +0000 @@ -4448,6 +4448,39 @@ "releaseChannelCollection": "opt-out", "description": "Whether the homepage was imported during browser migration. Only available on release builds during firstrun." }, + "FX_MIGRATION_BOOKMARKS_IMPORT_MS": { + "bug_numbers": [1289436], + "alert_emails": ["gijs@mozilla.com"], + "expires_in_version": "54", + "kind": "exponential", + "n_buckets": 70, + "high": 100000, + "releaseChannelCollection": "opt-out", + "keyed": true, + "description": "How long it took to import bookmarks from another browser, keyed by the name of the browser." + }, + "FX_MIGRATION_HISTORY_IMPORT_MS": { + "bug_numbers": [1289436], + "alert_emails": ["gijs@mozilla.com"], + "expires_in_version": "54", + "kind": "exponential", + "n_buckets": 70, + "high": 100000, + "releaseChannelCollection": "opt-out", + "keyed": true, + "description": "How long it took to import history from another browser, keyed by the name of the browser." + }, + "FX_MIGRATION_LOGINS_IMPORT_MS": { + "bug_numbers": [1289436], + "alert_emails": ["gijs@mozilla.com"], + "expires_in_version": "54", + "kind": "exponential", + "n_buckets": 70, + "high": 100000, + "releaseChannelCollection": "opt-out", + "keyed": true, + "description": "How long it took to import logins (passwords) from another browser, keyed by the name of the browser." + }, "FX_STARTUP_MIGRATION_BROWSER_COUNT": { "bug_numbers": [1275114], "alert_emails": ["gijs@mozilla.com"], @@ -4466,6 +4499,34 @@ "releaseChannelCollection": "opt-out", "description": "The browser that was the default on the initial profile migration. The values correspond to the internal browser ID (see MigrationUtils.jsm)" }, + "FX_STARTUP_MIGRATION_AUTOMATED_IMPORT_PROCESS_SUCCESS": { + "bug_numbers": [1271775], + "alert_emails": ["gijs@mozilla.com"], + "expires_in_version": "53", + "kind": "enumerated", + "n_values": 27, + "releaseChannelCollection": "opt-out", + "description": "Where automatic migration was attempted, indicates to what degree we succeeded. Values 0-25 indicate progress through the automatic migration sequence, with 25 indicating the migration finished. 26 is only used when the migration produced errors before it finished." + }, + "FX_STARTUP_MIGRATION_AUTOMATED_IMPORT_UNDO": { + "bug_numbers": [1283565], + "alert_emails": ["gijs@mozilla.com"], + "expires_in_version": "53", + "kind": "enumerated", + "n_values": 31, + "releaseChannelCollection": "opt-out", + "description": "Where undo of the automatic migration was attempted, indicates to what degree we succeeded to undo. 0 means we started to undo, 5 means we bailed out from the undo because it was not possible to complete it (there was nothing to undo or the user was signed in to sync). All higher values indicate progression through the undo sequence, with 30 indicating we finished the undo without exceptions in the middle." + }, + "FX_STARTUP_MIGRATION_UNDO_REASON": { + "bug_numbers": [1289906], + "alert_emails": ["gijs@mozilla.com"], + "expires_in_version": "54", + "keyed": true, + "kind": "enumerated", + "n_values": 10, + "releaseChannelCollection": "opt-out", + "description": "Why the undo functionality of an automatic migration was disabled: 0 means we used undo, 1 means the user signed in to sync, 2 means the user created/modified a password, 3 means the user created/modified a bookmark (item or folder), 4 means we showed an undo option repeatedly and the user did not use it, 5 means we showed an undo option and the user actively elected to keep the data. The whole thing is keyed to the identifiers of different browsers (so 'chrome', 'ie', 'edge', 'safari', etc.)." + }, "FX_STARTUP_EXTERNAL_CONTENT_HANDLER": { "bug_numbers": [1276027], "alert_emails": ["jaws@mozilla.com"], diff -Nru thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/docs/SystemAddons.rst thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/docs/SystemAddons.rst --- thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/docs/SystemAddons.rst 2016-08-26 06:26:50.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/docs/SystemAddons.rst 2016-09-02 05:35:15.000000000 +0000 @@ -10,7 +10,8 @@ -------------- System add-ons: -* Are add-ons that ship with Firefox and cannot be disabled +* Are add-ons that ship with Firefox, are hidden from the UI, and cannot be + disabled * Can be updated by Firefox depending on the AUS response to Firefox's update request * Are stored in two locations: @@ -56,7 +57,7 @@ - + @@ -87,11 +88,10 @@ After receiving the update response, Firefox modifies the **update** add-ons according to the following algorithm: -1. If the ```` tag is missing in the response, - **disable all system add-ons**, including both the **update** and **default** - sets. -2. If no add-ons were specified in the response (i.e. the ```` tag has - no children but is present), do nothing and finish. +1. If the ```` tag is empty (````) in the response, + **remove all system add-on updates**. +2. If no add-ons were specified in the response (i.e. the ```` tag + is not present), do nothing and finish. 3. If the **update** add-on set is equal to the set of add-ons specified in the update response, do nothing and finish. 4. If the set of **default** add-ons is equal to the set of add-ons specified in @@ -116,7 +116,6 @@ 6. Once all downloaded add-ons are validated, install them into the profile directory as part of the **update** set. -7. Disable any **default** add-ons that were not present in the update response. Notes on the update process: @@ -128,44 +127,45 @@ into and how the protocol described above handles them. For simplicity, unless otherwise specified, all examples assume that there are -two system add-ons in existence: **Loop** and **Pocket**. +two system add-ons in existence: **FlyWeb** and **Pocket**. Basic ~~~~~ -A user has Firefox 45, which shipped with Loop 1.0 and Pocket 1.0. We want to -update users to Loop 2.0. AUS sends out the following update response: +A user has Firefox 45, which shipped with FlyWeb 1.0 and Pocket 1.0. We want to +update users to FlyWeb 2.0. AUS sends out the following update response: .. code-block:: xml - + -Firefox will download Loop 2.0 and Pocket 1.0 and store them in the profile directory. +Firefox will download FlyWeb 2.0 and Pocket 1.0 and store them in the profile directory. Missing Add-on ~~~~~~~~~~~~~~ -A user has Firefox 45, which shipped with Loop 1.0 and Pocket 1.0. We want to -update users to Loop 2.0, but accidentally forget to specify Pocket in the +A user has Firefox 45, which shipped with FlyWeb 1.0 and Pocket 1.0. We want to +update users to FlyWeb 2.0, but accidentally forget to specify Pocket in the update response. AUS sends out the following: .. code-block:: xml - + -Firefox will download Loop 2.0 and store it in the profile directory. It will -disable Pocket completely. +Firefox will download FlyWeb 2.0 and store it in the profile directory. Pocket +1.0 from the **default** location will be used. -Disable all system add-ons -~~~~~~~~~~~~~~~~~~~~~~~~~~ -A response from AUS with an empty add-on set will *disable all system add-ons*: +Remove all system add-on updates +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +A response from AUS with an empty add-on set will *remove all system add-on +updates*: .. code-block:: xml @@ -175,19 +175,19 @@ Rollout ~~~~~~~ -A user has Firefox 45, which shipped with Loop 1.0 and Pocket 1.0. We want to -rollout Loop 2.0 at a 10% sample rate. 10% of the time, AUS sends out: +A user has Firefox 45, which shipped with FlyWeb 1.0 and Pocket 1.0. We want to +rollout FlyWeb 2.0 at a 10% sample rate. 10% of the time, AUS sends out: .. code-block:: xml - + -With this response, Firefox will download Pocket 1.0 and Loop 2.0 and install +With this response, Firefox will download Pocket 1.0 and FlyWeb 2.0 and install them into the profile directory. The other 90% of the time, AUS sends out an empty response: @@ -197,44 +197,28 @@ With the empty response, Firefox will not make any changes. This means users who -haven’t seen the 10% update response will stay on Loop 1.0, and users who have -seen it will stay on Loop 2.0. +haven’t seen the 10% update response will stay on FlyWeb 1.0, and users who have +seen it will stay on FlyWeb 2.0. Once we’re happy with the rollout and want to switch to 100%, AUS will send the -10% update response to 100% of users, upgrading everyone to Loop 2.0. +10% update response to 100% of users, upgrading everyone to FlyWeb 2.0. Rollback ~~~~~~~~ This example continues from the “Rollout” example. If, during the 10% rollout, -we find a major issue with Loop 2.0, we want to roll all users back to Loop 1.0. +we find a major issue with FlyWeb 2.0, we want to roll all users back to FlyWeb 1.0. AUS sends out the following: .. code-block:: xml - + -For users who have updated, Firefox will download Loop 1.0 and Pocket 1.0 and +For users who have updated, Firefox will download FlyWeb 1.0 and Pocket 1.0 and install them into the profile directory. For users that haven’t yet updated, Firefox will see that the **default** add-on set matches the set in the update ping and clear the **update** add-on set. - -Disable an Add-on -~~~~~~~~~~~~~~~~~ -A user has Firefox 45, with Pocket 1.0 and Loop 1.0. Loop 1.0 ends up having a -serious bug, and we want to disable the add-on completely while we work on a -fix. AUS sends out the following: - -.. code-block:: xml - - - - - - - -Firefox will download Pocket 1.0 and install it to the profile directory, and disable Loop. diff -Nru thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/internal/XPIProvider.jsm thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/internal/XPIProvider.jsm --- thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/internal/XPIProvider.jsm 2016-08-26 06:26:50.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/internal/XPIProvider.jsm 2016-09-02 05:35:15.000000000 +0000 @@ -3044,7 +3044,6 @@ } // Download all the add-ons - // Bug 1204158: If we already have some of these locally then just use those let downloadAddon = Task.async(function*(item) { try { let sourceAddon = updatedAddons.get(item.spec.id); diff -Nru thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/internal/XPIProviderUtils.js thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/internal/XPIProviderUtils.js --- thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/internal/XPIProviderUtils.js 2016-08-26 06:26:50.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/internal/XPIProviderUtils.js 2016-09-02 05:35:16.000000000 +0000 @@ -2034,14 +2034,10 @@ let addons = currentAddons.get(KEY_APP_SYSTEM_ADDONS) || new Map(); let hideLocation; - if (systemAddonLocation.isActive() && systemAddonLocation.isValid(addons)) { - // Hide the system add-on defaults - logger.info("Hiding the default system add-ons."); - hideLocation = KEY_APP_SYSTEM_DEFAULTS; - } - else { - // Hide the system add-on updates - logger.info("Hiding the updated system add-ons."); + + if (!systemAddonLocation.isValid(addons)) { + // Hide the system add-on updates if any are invalid. + logger.info("One or more updated system add-ons invalid, falling back to defaults."); hideLocation = KEY_APP_SYSTEM_ADDONS; } diff -Nru thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/nsBlocklistService.js thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/nsBlocklistService.js --- thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/nsBlocklistService.js 2016-08-26 06:26:50.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/nsBlocklistService.js 2016-09-02 05:35:16.000000000 +0000 @@ -1385,8 +1385,15 @@ // If the add-on is already disabled for some reason then don't warn // about it - if (!addon.isActive) + if (!addon.isActive) { + // But mark it as softblocked if necessary. Note that we avoid setting + // softDisabled at the same time as userDisabled to make it clear + // which was the original cause of the add-on becoming disabled in a + // way that the user can change. + if (state == Ci.nsIBlocklistService.STATE_SOFTBLOCKED && !addon.userDisabled) + addon.softDisabled = true; continue; + } addonList.push({ name: addon.name, diff -Nru thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/test/xpcshell/data/test_softblocked1.xml thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/test/xpcshell/data/test_softblocked1.xml --- thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/test/xpcshell/data/test_softblocked1.xml 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/test/xpcshell/data/test_softblocked1.xml 2016-09-02 05:35:16.000000000 +0000 @@ -0,0 +1,9 @@ + + + + + + + + + diff -Nru thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/test/xpcshell/test_bug455906.js thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/test/xpcshell/test_bug455906.js --- thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/test/xpcshell/test_bug455906.js 2016-08-26 06:26:50.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/test/xpcshell/test_bug455906.js 2016-09-02 05:35:15.000000000 +0000 @@ -342,6 +342,7 @@ // The blocked add-on should have changed to soft disabled do_check_eq(check_addon_state(addons[5]), "true,true,false"); + do_check_eq(check_addon_state(addons[6]), "true,true,true"); do_check_eq(check_plugin_state(PLUGINS[5]), "true,false"); // These should have been unchanged @@ -349,7 +350,6 @@ do_check_eq(check_addon_state(addons[1]), "false,false,false"); do_check_eq(check_addon_state(addons[3]), "true,true,false"); do_check_eq(check_addon_state(addons[4]), "false,false,false"); - do_check_eq(check_addon_state(addons[6]), "false,false,true"); do_check_eq(check_plugin_state(PLUGINS[0]), "true,false"); do_check_eq(check_plugin_state(PLUGINS[1]), "false,false"); do_check_eq(check_plugin_state(PLUGINS[3]), "true,false"); diff -Nru thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/test/xpcshell/test_softblocked.js thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/test/xpcshell/test_softblocked.js --- thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/test/xpcshell/test_softblocked.js 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/test/xpcshell/test_softblocked.js 2016-09-02 05:35:15.000000000 +0000 @@ -0,0 +1,109 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +const { utils: Cu, interfaces: Ci, classes: Cc, results: Cr } = Components; + +const URI_EXTENSION_BLOCKLIST_DIALOG = "chrome://mozapps/content/extensions/blocklist.xul"; + +Cu.import("resource://gre/modules/NetUtil.jsm"); +Cu.import("resource://testing-common/MockRegistrar.jsm"); + +// Allow insecure updates +Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false) + +const testserver = createHttpServer(); +gPort = testserver.identity.primaryPort; +testserver.registerDirectory("/data/", do_get_file("data")); + +// Don't need the full interface, attempts to call other methods will just +// throw which is just fine +var WindowWatcher = { + openWindow: function(parent, url, name, features, openArgs) { + // Should be called to list the newly blocklisted items + do_check_eq(url, URI_EXTENSION_BLOCKLIST_DIALOG); + + // Simulate auto-disabling any softblocks + var list = openArgs.wrappedJSObject.list; + list.forEach(function(aItem) { + if (!aItem.blocked) + aItem.disable = true; + }); + + //run the code after the blocklist is closed + Services.obs.notifyObservers(null, "addon-blocklist-closed", null); + }, + + QueryInterface: function(iid) { + if (iid.equals(Ci.nsIWindowWatcher) + || iid.equals(Ci.nsISupports)) + return this; + + throw Cr.NS_ERROR_NO_INTERFACE; + } +}; + +MockRegistrar.register("@mozilla.org/embedcomp/window-watcher;1", WindowWatcher); + +const profileDir = gProfD.clone(); +profileDir.append("extensions"); + +function load_blocklist(aFile) { + return new Promise((resolve, reject) => { + Services.obs.addObserver(function() { + Services.obs.removeObserver(arguments.callee, "blocklist-updated"); + + resolve(); + }, "blocklist-updated", false); + + Services.prefs.setCharPref("extensions.blocklist.url", `http://localhost:${gPort}/data/${aFile}`); + var blocklist = Cc["@mozilla.org/extensions/blocklist;1"]. + getService(Ci.nsITimerCallback); + blocklist.notify(null); + }); +} + +function run_test() { + createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1"); + run_next_test(); +} + +// Tests that an appDisabled add-on that becomes softBlocked remains disabled +// when becoming appEnabled +add_task(function* () { + writeInstallRDFForExtension({ + id: "softblock1@tests.mozilla.org", + version: "1.0", + name: "Softblocked add-on", + targetApplications: [{ + id: "xpcshell@tests.mozilla.org", + minVersion: "2", + maxVersion: "3" + }] + }, profileDir); + + startupManager(); + + let s1 = yield promiseAddonByID("softblock1@tests.mozilla.org"); + + // Make sure to mark it as previously enabled. + s1.userDisabled = false; + + do_check_false(s1.softDisabled); + do_check_true(s1.appDisabled); + do_check_false(s1.isActive); + + yield load_blocklist("test_softblocked1.xml"); + + do_check_true(s1.softDisabled); + do_check_true(s1.appDisabled); + do_check_false(s1.isActive); + + yield promiseRestartManager("2"); + + s1 = yield promiseAddonByID("softblock1@tests.mozilla.org"); + + do_check_true(s1.softDisabled); + do_check_false(s1.appDisabled); + do_check_false(s1.isActive); +}); diff -Nru thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/test/xpcshell/test_system_reset.js thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/test/xpcshell/test_system_reset.js --- thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/test/xpcshell/test_system_reset.js 2016-08-26 06:26:50.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/test/xpcshell/test_system_reset.js 2016-09-02 05:35:16.000000000 +0000 @@ -4,7 +4,7 @@ BootstrapMonitor.init(); -const featureDir = FileUtils.getDir("ProfD", ["features"]); +const updatesDir = FileUtils.getDir("ProfD", ["features"]); // Build the test sets var dir = FileUtils.getDir("ProfD", ["sysfeatures", "app1"], true); @@ -30,17 +30,24 @@ return uuidGen.generateUUID().toString(); } -function* check_installed(inProfile, ...versions) { - let expectedDir = inProfile ? featureDir : distroDir; - - for (let i = 0; i < versions.length; i++) { +function* check_installed(conditions) { + for (let i = 0; i < conditions.length; i++) { + let condition = conditions[i]; let id = "system" + (i + 1) + "@tests.mozilla.org"; let addon = yield promiseAddonByID(id); - if (versions[i]) { + if (!("isUpgrade" in condition) || !("version" in condition)) { + throw Error("condition must contain isUpgrade and version"); + } + let isUpgrade = conditions[i].isUpgrade; + let version = conditions[i].version; + + let expectedDir = isUpgrade ? updatesDir : distroDir; + + if (version) { // Add-on should be installed do_check_neq(addon, null); - do_check_eq(addon.version, versions[i]); + do_check_eq(addon.version, version); do_check_true(addon.isActive); do_check_false(addon.foreignInstall); do_check_false(hasFlag(addon.permissions, AddonManager.PERM_CAN_UPGRADE)); @@ -58,15 +65,15 @@ do_check_true(uri instanceof AM_Ci.nsIFileURL); do_check_eq(uri.file.path, file.path); - if (inProfile) { + if (isUpgrade) { do_check_eq(addon.signedState, AddonManager.SIGNEDSTATE_SYSTEM); } // Verify the add-on actually started - BootstrapMonitor.checkAddonStarted(id, versions[i]); + BootstrapMonitor.checkAddonStarted(id, version); } else { - if (inProfile) { + if (isUpgrade) { // Add-on should not be installed do_check_eq(addon, null); } @@ -89,9 +96,15 @@ add_task(function* test_missing_app_dir() { startupManager(); - yield check_installed(false, null, null, null); + let conditions = [ + { isUpgrade: false, version: null }, + { isUpgrade: false, version: null }, + { isUpgrade: false, version: null }, + ]; + + yield check_installed(conditions); - do_check_false(featureDir.exists()); + do_check_false(updatesDir.exists()); yield promiseShutdownManager(); }); @@ -102,9 +115,15 @@ distroDir.leafName = "app1"; startupManager(); - yield check_installed(false, "1.0", "1.0", null); + let conditions = [ + { isUpgrade: false, version: "1.0" }, + { isUpgrade: false, version: "1.0" }, + { isUpgrade: false, version: null }, + ]; + + yield check_installed(conditions); - do_check_false(featureDir.exists()); + do_check_false(updatesDir.exists()); yield promiseShutdownManager(); }); @@ -115,9 +134,15 @@ distroDir.leafName = "app2"; startupManager(); - yield check_installed(false, "2.0", null, "1.0"); + let conditions = [ + { isUpgrade: false, version: "2.0" }, + { isUpgrade: false, version: null }, + { isUpgrade: false, version: "1.0" }, + ]; - do_check_false(featureDir.exists()); + yield check_installed(conditions); + + do_check_false(updatesDir.exists()); yield promiseShutdownManager(); }); @@ -128,9 +153,15 @@ distroDir.leafName = "app1"; startupManager(); - yield check_installed(false, "1.0", "1.0", null); + let conditions = [ + { isUpgrade: false, version: "1.0" }, + { isUpgrade: false, version: "1.0" }, + { isUpgrade: false, version: null }, + ]; + + yield check_installed(conditions); - do_check_false(featureDir.exists()); + do_check_false(updatesDir.exists()); yield promiseShutdownManager(); }); @@ -140,24 +171,24 @@ // Create a random dir to install into let dirname = makeUUID(); FileUtils.getDir("ProfD", ["features", dirname], true); - featureDir.append(dirname); + updatesDir.append(dirname); // Copy in the system add-ons - let file = do_get_file("data/system_addons/system2_1.xpi"); - file.copyTo(featureDir, "system2@tests.mozilla.org.xpi"); - file = do_get_file("data/system_addons/system3_1.xpi"); - file.copyTo(featureDir, "system3@tests.mozilla.org.xpi"); + let file = do_get_file("data/system_addons/system2_2.xpi"); + file.copyTo(updatesDir, "system2@tests.mozilla.org.xpi"); + file = do_get_file("data/system_addons/system3_2.xpi"); + file.copyTo(updatesDir, "system3@tests.mozilla.org.xpi"); // Inject it into the system set let addonSet = { schema: 1, - directory: featureDir.leafName, + directory: updatesDir.leafName, addons: { "system2@tests.mozilla.org": { - version: "1.0" + version: "2.0" }, "system3@tests.mozilla.org": { - version: "1.0" + version: "2.0" }, } }; @@ -165,7 +196,13 @@ startupManager(false); - yield check_installed(true, null, "1.0", "1.0"); + let conditions = [ + { isUpgrade: false, version: "1.0" }, + { isUpgrade: true, version: "2.0" }, + { isUpgrade: true, version: "2.0" }, + ]; + + yield check_installed(conditions); yield promiseShutdownManager(); }); @@ -176,7 +213,13 @@ gAppInfo.inSafeMode = true; startupManager(false); - yield check_installed(false, "1.0", "1.0", null); + let conditions = [ + { isUpgrade: false, version: "1.0" }, + { isUpgrade: false, version: "1.0" }, + { isUpgrade: false, version: null }, + ]; + + yield check_installed(conditions); yield promiseShutdownManager(); }); @@ -186,7 +229,13 @@ gAppInfo.inSafeMode = false; startupManager(false); - yield check_installed(true, null, "1.0", "1.0"); + let conditions = [ + { isUpgrade: false, version: "1.0" }, + { isUpgrade: true, version: "2.0" }, + { isUpgrade: true, version: "2.0" }, + ]; + + yield check_installed(conditions); yield promiseShutdownManager(); }); @@ -194,19 +243,25 @@ // An additional add-on in the directory should be ignored add_task(function* test_skips_additional() { // Copy in the system add-ons - let file = do_get_file("data/system_addons/system1_1.xpi"); - file.copyTo(featureDir, "system1@tests.mozilla.org.xpi"); + let file = do_get_file("data/system_addons/system4_1.xpi"); + file.copyTo(updatesDir, "system4@tests.mozilla.org.xpi"); startupManager(false); - yield check_installed(true, null, "1.0", "1.0"); + let conditions = [ + { isUpgrade: false, version: "1.0" }, + { isUpgrade: true, version: "2.0" }, + { isUpgrade: true, version: "2.0" }, + ]; + + yield check_installed(conditions); yield promiseShutdownManager(); }); // Missing add-on should revert to the default set add_task(function* test_revert() { - manuallyUninstall(featureDir, "system2@tests.mozilla.org"); + manuallyUninstall(updatesDir, "system2@tests.mozilla.org"); // With the add-on physically gone from disk we won't see uninstall events BootstrapMonitor.clear("system2@tests.mozilla.org"); @@ -215,19 +270,31 @@ // With system add-on 2 gone the updated set is now invalid so it reverts to // the default set which is system add-ons 1 and 2. - yield check_installed(false, "1.0", "1.0", null); + let conditions = [ + { isUpgrade: false, version: "1.0" }, + { isUpgrade: false, version: "1.0" }, + { isUpgrade: false, version: null }, + ]; + + yield check_installed(conditions); yield promiseShutdownManager(); }); // Putting it back will make the set work again add_task(function* test_reuse() { - let file = do_get_file("data/system_addons/system2_1.xpi"); - file.copyTo(featureDir, "system2@tests.mozilla.org.xpi"); + let file = do_get_file("data/system_addons/system2_2.xpi"); + file.copyTo(updatesDir, "system2@tests.mozilla.org.xpi"); startupManager(false); - yield check_installed(true, null, "1.0", "1.0"); + let conditions = [ + { isUpgrade: false, version: "1.0" }, + { isUpgrade: true, version: "2.0" }, + { isUpgrade: true, version: "2.0" }, + ]; + + yield check_installed(conditions); yield promiseShutdownManager(); }); @@ -238,7 +305,13 @@ startupManager(false); - yield check_installed(false, "1.0", "1.0", null); + let conditions = [ + { isUpgrade: false, version: "1.0" }, + { isUpgrade: false, version: "1.0" }, + { isUpgrade: false, version: null }, + ]; + + yield check_installed(conditions); yield promiseShutdownManager(); }); @@ -246,12 +319,12 @@ // An add-on with a bad certificate should cause us to use the default set add_task(function* test_bad_profile_cert() { let file = do_get_file("data/system_addons/system1_1_badcert.xpi"); - file.copyTo(featureDir, "system1@tests.mozilla.org.xpi"); + file.copyTo(updatesDir, "system1@tests.mozilla.org.xpi"); // Inject it into the system set let addonSet = { schema: 1, - directory: featureDir.leafName, + directory: updatesDir.leafName, addons: { "system1@tests.mozilla.org": { version: "2.0" @@ -268,7 +341,13 @@ startupManager(false); - yield check_installed(false, "1.0", "1.0", null); + let conditions = [ + { isUpgrade: false, version: "1.0" }, + { isUpgrade: false, version: "1.0" }, + { isUpgrade: false, version: null }, + ]; + + yield check_installed(conditions); yield promiseShutdownManager(); }); @@ -284,7 +363,13 @@ do_check_neq(addon, null); do_check_eq(addon.signedState, AddonManager.SIGNEDSTATE_NOT_REQUIRED); - yield check_installed(false, "1.0", null, "1.0"); + let conditions = [ + { isUpgrade: false, version: "1.0" }, + { isUpgrade: false, version: null }, + { isUpgrade: false, version: "1.0" }, + ]; + + yield check_installed(conditions); yield promiseShutdownManager(); }); diff -Nru thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/test/xpcshell/test_system_update.js thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/test/xpcshell/test_system_update.js --- thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/test/xpcshell/test_system_update.js 2016-08-26 06:26:50.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/test/xpcshell/test_system_update.js 2016-09-02 05:35:15.000000000 +0000 @@ -10,25 +10,25 @@ BootstrapMonitor.init(); -const featureDir = FileUtils.getDir("ProfD", ["features"], false); +const updatesDir = FileUtils.getDir("ProfD", ["features"], false); -function getCurrentFeatureDir() { - let dir = featureDir.clone(); +function getCurrentUpdatesDir() { + let dir = updatesDir.clone(); let set = JSON.parse(Services.prefs.getCharPref(PREF_SYSTEM_ADDON_SET)); dir.append(set.directory); return dir; } -function clearFeatureDir() { +function clearUpdatesDir() { // Delete any existing directories - if (featureDir.exists()) - featureDir.remove(true); + if (updatesDir.exists()) + updatesDir.remove(true); Services.prefs.clearUserPref(PREF_SYSTEM_ADDON_SET); } -function buildPrefilledFeatureDir() { - clearFeatureDir(); +function buildPrefilledUpdatesDir() { + clearUpdatesDir(); // Build the test set let dir = FileUtils.getDir("ProfD", ["features", "prefilled"], true); @@ -146,19 +146,26 @@ return xml; } -function* check_installed(inProfile, ...versions) { - let expectedDir = inProfile ? getCurrentFeatureDir() : distroDir; - - for (let i = 0; i < versions.length; i++) { +function* check_installed(conditions) { + for (let i = 0; i < conditions.length; i++) { + let condition = conditions[i]; let id = "system" + (i + 1) + "@tests.mozilla.org"; let addon = yield promiseAddonByID(id); - if (versions[i]) { - do_print(`Checking state of add-on ${id}, expecting version ${versions[i]}`); + if (!("isUpgrade" in condition) || !("version" in condition)) { + throw Error("condition must contain isUpgrade and version"); + } + let isUpgrade = conditions[i].isUpgrade; + let version = conditions[i].version; + + let expectedDir = isUpgrade ? getCurrentUpdatesDir() : distroDir; + + if (version) { + do_print(`Checking state of add-on ${id}, expecting version ${version}`); // Add-on should be installed do_check_neq(addon, null); - do_check_eq(addon.version, versions[i]); + do_check_eq(addon.version, version); do_check_true(addon.isActive); do_check_false(addon.foreignInstall); do_check_true(addon.hidden); @@ -174,24 +181,20 @@ do_check_true(uri instanceof AM_Ci.nsIFileURL); do_check_eq(uri.file.path, file.path); - if (inProfile) { + if (isUpgrade) { do_check_eq(addon.signedState, AddonManager.SIGNEDSTATE_SYSTEM); } // Verify the add-on actually started - BootstrapMonitor.checkAddonStarted(id, versions[i]); + BootstrapMonitor.checkAddonStarted(id, version); } else { do_print(`Checking state of add-on ${id}, expecting it to be missing`); - if (inProfile) { + if (isUpgrade) { // Add-on should not be installed do_check_eq(addon, null); } - else { - // Either add-on should not be installed or it shouldn't be active - do_check_true(!addon || !addon.isActive); - } BootstrapMonitor.checkAddonNotStarted(id); @@ -215,37 +218,60 @@ // Runs tests with no updated or default system add-ons initially installed blank: { setup: function*() { - clearFeatureDir(); + clearUpdatesDir(); distroDir.leafName = "empty"; }, - initialState: [false, null, null, null, null, null], + initialState: [ + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null} + ], }, - // Runs tests with default system add-ons installed withAppSet: { setup: function*() { - clearFeatureDir(); + clearUpdatesDir(); distroDir.leafName = "prefilled"; }, - initialState: [false, null, "2.0", "2.0", null, null], + initialState: [ + { isUpgrade: false, version: null}, + { isUpgrade: false, version: "2.0"}, + { isUpgrade: false, version: "2.0"}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null} + ] }, // Runs tests with updated system add-ons installed withProfileSet: { setup: function*() { - buildPrefilledFeatureDir(); + buildPrefilledUpdatesDir(); distroDir.leafName = "empty"; }, - initialState: [true, null, "2.0", "2.0", null, null], + initialState: [ + { isUpgrade: false, version: null}, + { isUpgrade: true, version: "2.0"}, + { isUpgrade: true, version: "2.0"}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null} + ] }, // Runs tests with both default and updated system add-ons installed withBothSets: { setup: function*() { - buildPrefilledFeatureDir(); + buildPrefilledUpdatesDir(); distroDir.leafName = "hidden"; }, - initialState: [true, null, "2.0", "2.0", null, null], + initialState: [ + { isUpgrade: false, version: "1.0"}, + { isUpgrade: true, version: "2.0"}, + { isUpgrade: true, version: "2.0"}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null} + ] }, }; @@ -281,19 +307,77 @@ updateList: null, }, - // Test that an empty list updates to an empty set of system add-ons + // Test that an empty list removes existing updates, leaving defaults. empty: { updateList: [], - finalState: [true, null, null, null, null, null] + finalState: { + blank: [ + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null} + ], + withAppSet: [ + { isUpgrade: false, version: null}, + { isUpgrade: false, version: "2.0"}, + { isUpgrade: false, version: "2.0"}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null} + ], + withProfileSet: [ + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null} + ], + withBothSets: [ + { isUpgrade: false, version: "1.0"}, + { isUpgrade: false, version: "1.0"}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null}, + // Set this to `true` to so `verify_state()` expects a blank profile dir + { isUpgrade: true, version: null} + ] + }, }, - // Tests that a new set of system add-ons gets installed newset: { updateList: [ { id: "system4@tests.mozilla.org", version: "1.0", path: "system4_1.xpi" }, { id: "system5@tests.mozilla.org", version: "1.0", path: "system5_1.xpi" } ], - finalState: [true, null, null, null, "1.0", "1.0"] + finalState: { + blank: [ + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null}, + { isUpgrade: true, version: "1.0"}, + { isUpgrade: true, version: "1.0"} + ], + withAppSet: [ + { isUpgrade: false, version: null}, + { isUpgrade: false, version: "2.0"}, + { isUpgrade: false, version: "2.0"}, + { isUpgrade: true, version: "1.0"}, + { isUpgrade: true, version: "1.0"} + ], + withProfileSet: [ + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null}, + { isUpgrade: true, version: "1.0"}, + { isUpgrade: true, version: "1.0"} + ], + withBothSets: [ + { isUpgrade: false, version: "1.0"}, + { isUpgrade: false, version: "1.0"}, + { isUpgrade: false, version: null}, + { isUpgrade: true, version: "1.0"}, + { isUpgrade: true, version: "1.0"} + ] + } }, // Tests that an upgraded set of system add-ons gets installed @@ -302,18 +386,76 @@ { id: "system2@tests.mozilla.org", version: "3.0", path: "system2_3.xpi" }, { id: "system3@tests.mozilla.org", version: "3.0", path: "system3_3.xpi" } ], - finalState: [true, null, "3.0", "3.0", null, null] + finalState: { + blank: [ + { isUpgrade: false, version: null}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null} + ], + withAppSet: [ + { isUpgrade: false, version: null}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null} + ], + withProfileSet: [ + { isUpgrade: false, version: null}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null} + ], + withBothSets: [ + { isUpgrade: false, version: "1.0"}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: false, version: null}, + { isUpgrade: false, version: null} + ] + } }, // Tests that a set of system add-ons, some new, some existing gets installed overlapping: { updateList: [ - { id: "system1@tests.mozilla.org", version: "1.0", path: "system1_2.xpi" }, - { id: "system2@tests.mozilla.org", version: "1.0", path: "system2_2.xpi" }, - { id: "system3@tests.mozilla.org", version: "1.0", path: "system3_3.xpi" }, + { id: "system1@tests.mozilla.org", version: "2.0", path: "system1_2.xpi" }, + { id: "system2@tests.mozilla.org", version: "2.0", path: "system2_2.xpi" }, + { id: "system3@tests.mozilla.org", version: "3.0", path: "system3_3.xpi" }, { id: "system4@tests.mozilla.org", version: "1.0", path: "system4_1.xpi" } ], - finalState: [true, "2.0", "2.0", "3.0", "1.0", null] + finalState: { + blank: [ + { isUpgrade: true, version: "2.0"}, + { isUpgrade: true, version: "2.0"}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: true, version: "1.0"}, + { isUpgrade: false, version: null} + ], + withAppSet: [ + { isUpgrade: true, version: "2.0"}, + { isUpgrade: true, version: "2.0"}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: true, version: "1.0"}, + { isUpgrade: false, version: null} + ], + withProfileSet: [ + { isUpgrade: true, version: "2.0"}, + { isUpgrade: true, version: "2.0"}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: true, version: "1.0"}, + { isUpgrade: false, version: null} + ], + withBothSets: [ + { isUpgrade: true, version: "2.0"}, + { isUpgrade: true, version: "2.0"}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: true, version: "1.0"}, + { isUpgrade: false, version: null} + ] + } }, // Specifying an incorrect version should stop us updating anything @@ -350,7 +492,36 @@ { id: "system3@tests.mozilla.org", version: "3.0", path: "system3_3.xpi", hashFunction: "sha1", hashValue: "2df604b37b13766c0e04f1b7f59800e038f46cd5" }, { id: "system5@tests.mozilla.org", version: "1.0", path: "system5_1.xpi", size: 4671, hashFunction: "sha1", hashValue: "f13dcaa8bfacaa222189bcbb0074972c05ceb621" } ], - finalState: [true, null, "3.0", "3.0", null, "1.0"] + finalState: { + blank: [ + { isUpgrade: false, version: null}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: false, version: null}, + { isUpgrade: true, version: "1.0"} + ], + withAppSet: [ + { isUpgrade: false, version: null}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: false, version: null}, + { isUpgrade: true, version: "1.0"} + ], + withProfileSet: [ + { isUpgrade: false, version: null}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: false, version: null}, + { isUpgrade: true, version: "1.0"} + ], + withBothSets: [ + { isUpgrade: false, version: "1.0"}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: true, version: "3.0"}, + { isUpgrade: false, version: null}, + { isUpgrade: true, version: "1.0"} + ] + } }, // A bad certificate should stop updates @@ -372,8 +543,8 @@ function* get_directories() { let subdirs = []; - if (yield OS.File.exists(featureDir.path)) { - let iterator = new OS.File.DirectoryIterator(featureDir.path); + if (yield OS.File.exists(updatesDir.path)) { + let iterator = new OS.File.DirectoryIterator(updatesDir.path); yield iterator.forEach(entry => { if (entry.isDir) { subdirs.push(entry); @@ -399,7 +570,7 @@ // Make sure the initial state is correct do_print("Checking initial state."); - yield check_installed(...setup.initialState); + yield check_installed(setup.initialState); } function* verify_state(initialState, finalState = undefined) { @@ -407,16 +578,17 @@ // If the initial state was using the profile set then that directory will // still exist. - if (initialState[0]) + + if (initialState.some(a => a.isUpgrade)) { expectedDirs++; + } if (finalState == undefined) { finalState = initialState; } - else { + else if (finalState.some(a => a.isUpgrade)) { // If the new state is using the profile then that directory will exist. - if (finalState[0]) - expectedDirs++; + expectedDirs++; } do_print("Checking final state."); @@ -429,10 +601,13 @@ // Check that the new state is active after a restart yield promiseRestartManager(); - yield check_installed(...finalState); + yield check_installed(finalState); } -function* exec_test(setup, test) { +function* exec_test(setupName, testName) { + let setup = TEST_CONDITIONS[setupName]; + let test = TESTS[testName]; + yield setup_conditions(setup); try { @@ -453,23 +628,29 @@ } } - yield verify_state(setup.initialState, test.finalState); + // some tests have a different expected combination of default + // and updated add-ons. + if (test.finalState && setupName in test.finalState) { + yield verify_state(setup.initialState, test.finalState[setupName]); + } + else { + yield verify_state(setup.initialState, test.finalState); + } yield promiseShutdownManager(); } -for (let setup of Object.keys(TEST_CONDITIONS)) { - for (let test of Object.keys(TESTS)) { - add_task(function*() { - do_print("Running test " + setup + " " + test); +add_task(function*() { + for (let setup of Object.keys(TEST_CONDITIONS)) { + for (let test of Object.keys(TESTS)) { + do_print("Running test " + setup + " " + test); - yield exec_test(TEST_CONDITIONS[setup], TESTS[test]); - }); + yield exec_test(setup, test); + } } -} +}); // Some custom tests - // Test that the update check is performed as part of the regular add-on update // check add_task(function* test_addon_update() { @@ -480,8 +661,13 @@ { id: "system3@tests.mozilla.org", version: "2.0", path: "system3_2.xpi" } ])); - yield verify_state(TEST_CONDITIONS.blank.initialState, - [true, null, "2.0", "2.0", null, null]); + yield verify_state(TEST_CONDITIONS.blank.initialState, [ + {isUpgrade: false, version: null}, + {isUpgrade: true, version: "2.0"}, + {isUpgrade: true, version: "2.0"}, + {isUpgrade: false, version: null}, + {isUpgrade: false, version: null} + ]); yield promiseShutdownManager(); }); @@ -548,8 +734,13 @@ // This should revert to the default set instead of installing new versions // into an updated set. - yield verify_state(TEST_CONDITIONS.withBothSets.initialState, - [false, "1.0", "1.0", null, null, null]); + yield verify_state(TEST_CONDITIONS.withBothSets.initialState, [ + {isUpgrade: false, version: "1.0"}, + {isUpgrade: false, version: "1.0"}, + {isUpgrade: false, version: null}, + {isUpgrade: false, version: null}, + {isUpgrade: false, version: null} + ]); yield promiseShutdownManager(); }); @@ -582,8 +773,13 @@ { id: "system4@tests.mozilla.org", version: "1.0", path: "system4_1.xpi" } ])); - yield verify_state(TEST_CONDITIONS.withBothSets.initialState, - [true, null, "2.0", null, "1.0", null]); + yield verify_state(TEST_CONDITIONS.withBothSets.initialState, [ + {isUpgrade: false, version: "1.0"}, + {isUpgrade: true, version: "2.0"}, + {isUpgrade: false, version: null}, + {isUpgrade: true, version: "1.0"}, + {isUpgrade: false, version: null} + ]); yield promiseShutdownManager(); }); @@ -602,8 +798,13 @@ { id: "system4@tests.mozilla.org", version: "1.0", path: "system4_1.xpi" } ])); - yield verify_state(TEST_CONDITIONS.withAppSet.initialState, - [true, null, null, "2.0", "1.0", null]); + yield verify_state(TEST_CONDITIONS.withAppSet.initialState, [ + {isUpgrade: false, version: null}, + {isUpgrade: false, version: "2.0"}, + {isUpgrade: true, version: "2.0"}, + {isUpgrade: true, version: "1.0"}, + {isUpgrade: false, version: null} + ]); yield promiseShutdownManager(); }); @@ -617,8 +818,13 @@ { id: "system3@tests.mozilla.org", version: "1.0", path: "system3_1.xpi" } ])); - yield verify_state(TEST_CONDITIONS.withBothSets.initialState, - [true, null, "2.0", "1.0", null, null]); + yield verify_state(TEST_CONDITIONS.withBothSets.initialState, [ + {isUpgrade: false, version: "1.0"}, + {isUpgrade: true, version: "2.0"}, + {isUpgrade: true, version: "1.0"}, + {isUpgrade: false, version: null}, + {isUpgrade: false, version: null} + ]); yield install_system_addons(yield build_xml(null)); @@ -627,4 +833,3 @@ yield promiseShutdownManager(); }); - diff -Nru thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini --- thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini 2016-08-26 06:26:50.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini 2016-09-02 05:35:15.000000000 +0000 @@ -37,5 +37,4 @@ [test_proxy.js] [test_pass_symbol.js] - [include:xpcshell-shared.ini] diff -Nru thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/test/xpcshell/xpcshell-shared.ini thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/test/xpcshell/xpcshell-shared.ini --- thunderbird-49.0~b1+build4/mozilla/toolkit/mozapps/extensions/test/xpcshell/xpcshell-shared.ini 2016-08-26 06:26:50.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/toolkit/mozapps/extensions/test/xpcshell/xpcshell-shared.ini 2016-09-02 05:35:15.000000000 +0000 @@ -316,3 +316,4 @@ [test_switch_os.js] # Bug 1246231 skip-if = os == "mac" && debug +[test_softblocked.js] diff -Nru thunderbird-49.0~b1+build4/mozilla/toolkit/moz.configure thunderbird-49.0~b1+build5/mozilla/toolkit/moz.configure --- thunderbird-49.0~b1+build4/mozilla/toolkit/moz.configure 2016-08-26 06:25:54.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/toolkit/moz.configure 2016-09-02 05:35:15.000000000 +0000 @@ -344,7 +344,19 @@ default=eme_default, help='Enable support for Encrypted Media Extensions') -@depends('--enable-eme', fmp4) +@depends('--enable-eme', target) +def enable_eme(value, target): + # Widevine EME by default enabled on desktop Windows, MacOS and Linux, + # x86 and x64 builds. + if (target.kernel in ('Darwin', 'WINNT', 'Linux') and + target.os not in ('Android', 'iOS') and + target.cpu in ('x86', 'x86_64')): + return value + elif value and value.origin != 'default': + die('%s is not supported on %s' % (value.format('--enable-eme'), target.alias)) + return value + +@depends(enable_eme, fmp4) def eme(value, fmp4): enabled = bool(value) if value.origin == 'default': @@ -355,7 +367,7 @@ if enabled: return True -@depends('--enable-eme') +@depends(enable_eme) def eme_modules(value): # Theoretically, we could pass `value` directly when it is a # PositiveOptionValue, but somehow, the JSON serialization in configure.py diff -Nru thunderbird-49.0~b1+build4/mozilla/widget/cocoa/nsColorPicker.mm thunderbird-49.0~b1+build5/mozilla/widget/cocoa/nsColorPicker.mm --- thunderbird-49.0~b1+build4/mozilla/widget/cocoa/nsColorPicker.mm 2016-08-26 06:26:50.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/widget/cocoa/nsColorPicker.mm 2016-09-02 05:35:15.000000000 +0000 @@ -136,7 +136,14 @@ nsColorPicker::GetHexStringFromNSColor(NSColor* aColor, nsAString& aResult) { CGFloat redFloat, greenFloat, blueFloat; - [aColor getRed: &redFloat green: &greenFloat blue: &blueFloat alpha: nil]; + + NSColor* color = aColor; + @try { + [color getRed:&redFloat green:&greenFloat blue:&blueFloat alpha: nil]; + } @catch (NSException* e) { + color = [color colorUsingColorSpace:[NSColorSpace genericRGBColorSpace]]; + [color getRed:&redFloat green:&greenFloat blue:&blueFloat alpha: nil]; + } nsCocoaUtils::GetStringForNSString([NSString stringWithFormat:@"#%02x%02x%02x", (int)(redFloat * 255), diff -Nru thunderbird-49.0~b1+build4/mozilla/widget/cocoa/nsNativeThemeCocoa.h thunderbird-49.0~b1+build5/mozilla/widget/cocoa/nsNativeThemeCocoa.h --- thunderbird-49.0~b1+build4/mozilla/widget/cocoa/nsNativeThemeCocoa.h 2016-08-26 06:26:50.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/widget/cocoa/nsNativeThemeCocoa.h 2016-09-02 05:35:15.000000000 +0000 @@ -123,7 +123,7 @@ nsIFrame* aFrame, mozilla::EventStates inState); void DrawPushButton(CGContextRef cgContext, const HIRect& inBoxRect, mozilla::EventStates inState, uint8_t aWidgetType, - nsIFrame* aFrame); + nsIFrame* aFrame, float aOriginalHeight); void DrawMenuIcon(CGContextRef cgContext, const CGRect& aRect, mozilla::EventStates inState, nsIFrame* aFrame, const NSSize& aIconSize, NSString* aImageName, diff -Nru thunderbird-49.0~b1+build4/mozilla/widget/cocoa/nsNativeThemeCocoa.mm thunderbird-49.0~b1+build5/mozilla/widget/cocoa/nsNativeThemeCocoa.mm --- thunderbird-49.0~b1+build4/mozilla/widget/cocoa/nsNativeThemeCocoa.mm 2016-08-26 06:26:50.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/widget/cocoa/nsNativeThemeCocoa.mm 2016-09-02 05:35:15.000000000 +0000 @@ -1214,7 +1214,7 @@ void nsNativeThemeCocoa::DrawPushButton(CGContextRef cgContext, const HIRect& inBoxRect, EventStates inState, uint8_t aWidgetType, - nsIFrame* aFrame) + nsIFrame* aFrame, float aOriginalHeight) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK; @@ -1244,7 +1244,10 @@ // If the button is tall enough, draw the square button style so that // buttons with non-standard content look good. Otherwise draw normal // rounded aqua buttons. - if (inBoxRect.size.height > DO_SQUARE_BUTTON_HEIGHT) { + // This comparison is done based on the height that is calculated without + // the top, because the snapped height can be affected by the top of the + // rect and that may result in different height depending on the top value. + if (aOriginalHeight > DO_SQUARE_BUTTON_HEIGHT) { [cell setBezelStyle:NSShadowlessSquareBezelStyle]; DrawCellWithScaling(cell, cgContext, inBoxRect, NSRegularControlSize, NSZeroSize, NSMakeSize(14, 0), NULL, mCellDrawView, @@ -2419,6 +2422,7 @@ gfx::Rect nativeDirtyRect = NSRectToRect(aDirtyRect, p2a); gfxRect nativeWidgetRect(aRect.x, aRect.y, aRect.width, aRect.height); nativeWidgetRect.ScaleInverse(gfxFloat(p2a)); + float nativeWidgetHeight = round(nativeWidgetRect.Height()); nativeWidgetRect.Round(); if (nativeWidgetRect.IsEmpty()) return NS_OK; // Don't attempt to draw invisible widgets. @@ -2429,6 +2433,7 @@ if (hidpi) { // Use high-resolution drawing. nativeWidgetRect.Scale(0.5f); + nativeWidgetHeight *= 0.5f; nativeDirtyRect.Scale(0.5f); aDrawTarget.SetTransform(aDrawTarget.GetTransform().PreScale(2.0f, 2.0f)); } @@ -2607,7 +2612,8 @@ } else if (IsButtonTypeMenu(aFrame)) { DrawDropdown(cgContext, macRect, eventState, aWidgetType, aFrame); } else { - DrawPushButton(cgContext, macRect, eventState, aWidgetType, aFrame); + DrawPushButton(cgContext, macRect, eventState, aWidgetType, aFrame, + nativeWidgetHeight); } break; @@ -2618,7 +2624,8 @@ case NS_THEME_MAC_HELP_BUTTON: case NS_THEME_MAC_DISCLOSURE_BUTTON_OPEN: case NS_THEME_MAC_DISCLOSURE_BUTTON_CLOSED: - DrawPushButton(cgContext, macRect, eventState, aWidgetType, aFrame); + DrawPushButton(cgContext, macRect, eventState, aWidgetType, aFrame, + nativeWidgetHeight); break; case NS_THEME_BUTTON_BEVEL: diff -Nru thunderbird-49.0~b1+build4/mozilla/widget/gtk/mozgtk/mozgtk.c thunderbird-49.0~b1+build5/mozilla/widget/gtk/mozgtk/mozgtk.c --- thunderbird-49.0~b1+build4/mozilla/widget/gtk/mozgtk/mozgtk.c 2016-08-26 06:26:50.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/widget/gtk/mozgtk/mozgtk.c 2016-09-02 05:35:15.000000000 +0000 @@ -7,7 +7,6 @@ STUB(gdk_atom_intern) STUB(gdk_atom_name) STUB(gdk_beep) -STUB(gdk_cairo_create) STUB(gdk_color_free) STUB(gdk_cursor_new_for_display) STUB(gdk_cursor_new_from_name) diff -Nru thunderbird-49.0~b1+build4/mozilla/widget/gtk/nsLookAndFeel.cpp thunderbird-49.0~b1+build5/mozilla/widget/gtk/nsLookAndFeel.cpp --- thunderbird-49.0~b1+build4/mozilla/widget/gtk/nsLookAndFeel.cpp 2016-08-26 06:26:50.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/widget/gtk/nsLookAndFeel.cpp 2016-09-02 05:35:16.000000000 +0000 @@ -32,6 +32,7 @@ #if MOZ_WIDGET_GTK != 2 #include #include "WidgetStyleCache.h" +#include "prenv.h" #endif using mozilla::LookAndFeel; @@ -1106,7 +1107,7 @@ gboolean dark; g_object_get(settings, dark_setting, &dark, nullptr); - if (dark) { + if (dark && !PR_GetEnv("MOZ_ALLOW_GTK_DARK_THEME")) { g_object_set(settings, dark_setting, FALSE, nullptr); } diff -Nru thunderbird-49.0~b1+build4/mozilla/widget/gtk/nsWindow.cpp thunderbird-49.0~b1+build5/mozilla/widget/gtk/nsWindow.cpp --- thunderbird-49.0~b1+build4/mozilla/widget/gtk/nsWindow.cpp 2016-08-26 06:26:50.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/widget/gtk/nsWindow.cpp 2016-09-02 05:35:15.000000000 +0000 @@ -112,7 +112,6 @@ #include "Layers.h" #include "GLContextProvider.h" #include "mozilla/gfx/2D.h" -#include "mozilla/gfx/HelpersCairo.h" #include "mozilla/layers/CompositorBridgeParent.h" #ifdef MOZ_X11 @@ -476,7 +475,6 @@ mLastScrollEventTime = GDK_CURRENT_TIME; #endif - mFallbackSurface = nullptr; mPendingConfigures = 0; } @@ -799,11 +797,6 @@ } #endif - if (mFallbackSurface) { - cairo_surface_destroy(mFallbackSurface); - mFallbackSurface = nullptr; - } - // Save until last because OnDestroy() may cause us to be deleted. OnDestroy(); @@ -2252,7 +2245,7 @@ } BufferMode layerBuffering = BufferMode::BUFFERED; - RefPtr dt = StartRemoteDrawingInRegion(region, &layerBuffering); + RefPtr dt = GetDrawTarget(region, &layerBuffering); if (!dt || !dt->IsValid()) { return FALSE; } @@ -2347,10 +2340,13 @@ ctx = nullptr; dt->PopClip(); +# ifdef MOZ_HAVE_SHMIMAGE + if (mBackShmImage && MOZ_LIKELY(!mIsDestroyed)) { + mBackShmImage->Put(region); + } +# endif // MOZ_HAVE_SHMIMAGE #endif // MOZ_X11 - EndRemoteDrawingInRegion(dt, region); - listener->DidPaintWindow(); // Synchronously flush any new dirty areas @@ -6562,23 +6558,11 @@ RefPtr dt; #ifdef MOZ_X11 - bool useXRender = false; -#ifdef MOZ_WIDGET_GTK - useXRender = gfxPlatformGtk::GetPlatform()->UseXRender(); -#endif - - if (useXRender) { - LayoutDeviceIntRect bounds = aRegion.GetBounds(); - LayoutDeviceIntSize size(bounds.XMost(), bounds.YMost()); - RefPtr surf = new gfxXlibSurface(mXDisplay, mXWindow, mXVisual, size.ToUnknownSize()); - if (!surf->CairoStatus()) { - dt = gfxPlatform::GetPlatform()->CreateDrawTargetForSurface(surf.get(), surf->GetSize()); - *aBufferMode = BufferMode::BUFFERED; - } - } - # ifdef MOZ_HAVE_SHMIMAGE - if (!dt && nsShmImage::UseShm()) { +# ifdef MOZ_WIDGET_GTK + if (!gfxPlatformGtk::GetPlatform()->UseXRender()) +# endif + if (nsShmImage::UseShm()) { mBackShmImage.swap(mFrontShmImage); if (!mBackShmImage) { mBackShmImage = new nsShmImage(mXDisplay, mXWindow, mXVisual, mXDepth); @@ -6590,54 +6574,16 @@ } } # endif // MOZ_HAVE_SHMIMAGE -#endif // MOZ_X11 - - // If MIT-SHM and XRender are unavailable, buffer to an image surface. if (!dt) { - IntRect bounds = aRegion.GetBounds().ToUnknownRect(); - IntSize size(bounds.XMost(), bounds.YMost()); - - // Recreate the fallback surface if there is unsufficient space to render. - if (!mFallbackSurface || - cairo_image_surface_get_width(mFallbackSurface) < size.width || - cairo_image_surface_get_height(mFallbackSurface) < size.height) - { - if (mFallbackSurface) - cairo_surface_destroy(mFallbackSurface); - - GdkScreen* screen = gdk_screen_get_default(); - bool argb = gdk_window_get_visual(mGdkWindow) == - gdk_screen_get_rgba_visual(screen); - cairo_format_t cairo_format = argb ? CAIRO_FORMAT_ARGB32 - : CAIRO_FORMAT_RGB24; - mFallbackSurface = cairo_image_surface_create(cairo_format, - bounds.XMost(), - bounds.YMost()); - - // Set the appropriate device scale so that our surface can be used - // as a source without transforming to the GDK window's scale. - static auto sCairoSurfaceSetDeviceScale = - (void (*)(cairo_surface_t*, double, double)) - dlsym(RTLD_DEFAULT, "cairo_surface_set_device_scale"); - if (sCairoSurfaceSetDeviceScale) { - gint scale = GdkScaleFactor(); - sCairoSurfaceSetDeviceScale(mFallbackSurface, scale, scale); - } - - cairo_surface_flush(mFallbackSurface); + LayoutDeviceIntRect bounds = aRegion.GetBounds(); + LayoutDeviceIntSize size(bounds.XMost(), bounds.YMost()); + RefPtr surf = new gfxXlibSurface(mXDisplay, mXWindow, mXVisual, size.ToUnknownSize()); + if (!surf->CairoStatus()) { + dt = gfxPlatform::GetPlatform()->CreateDrawTargetForSurface(surf.get(), surf->GetSize()); + *aBufferMode = BufferMode::BUFFERED; } - - SurfaceFormat format = CairoFormatToGfxFormat( - cairo_image_surface_get_format(mFallbackSurface)); - dt = gfxPlatform::GetPlatform()->CreateDrawTargetForData( - cairo_image_surface_get_data(mFallbackSurface) - + bounds.x * BytesPerPixel(format) - + bounds.y * cairo_image_surface_get_stride(mFallbackSurface), - bounds.Size(), - cairo_image_surface_get_stride(mFallbackSurface), - format); - *aBufferMode = BufferMode::BUFFER_NONE; } +#endif // MOZ_X11 return dt.forget(); } @@ -6654,32 +6600,13 @@ { #ifdef MOZ_X11 # ifdef MOZ_HAVE_SHMIMAGE - if (!mGdkWindow) { + if (!mGdkWindow || !mBackShmImage) { return; } - if (mBackShmImage) { - mBackShmImage->Put(aInvalidRegion); - } + mBackShmImage->Put(aInvalidRegion); # endif // MOZ_HAVE_SHMIMAGE #endif // MOZ_X11 - - if (mFallbackSurface) { - cairo_t* cr = gdk_cairo_create(mGdkWindow); - cairo_surface_mark_dirty(mFallbackSurface); - cairo_set_source_surface(cr, mFallbackSurface, 0, 0); - - for (auto iter = aInvalidRegion.RectIter(); !iter.Done(); iter.Next()) { - // Transform our path into the window's coordinate system. - const IntRectTyped & r = iter.Get(); - cairo_rectangle(cr, DevicePixelsToGdkCoordRoundDown(r.x), - DevicePixelsToGdkCoordRoundDown(r.y), - DevicePixelsToGdkCoordRoundUp(r.width), - DevicePixelsToGdkCoordRoundUp(r.height)); - } - cairo_fill(cr); - cairo_destroy(cr); - } } // Code shared begin BeginMoveDrag and BeginResizeDrag diff -Nru thunderbird-49.0~b1+build4/mozilla/widget/gtk/nsWindow.h thunderbird-49.0~b1+build5/mozilla/widget/gtk/nsWindow.h --- thunderbird-49.0~b1+build4/mozilla/widget/gtk/nsWindow.h 2016-08-26 06:26:50.000000000 +0000 +++ thunderbird-49.0~b1+build5/mozilla/widget/gtk/nsWindow.h 2016-09-02 05:35:15.000000000 +0000 @@ -469,9 +469,6 @@ RefPtr mBackShmImage; #endif - // A fallback image surface when a SHM surface is unavailable. - cairo_surface_t* mFallbackSurface; - // Upper bound on pending ConfigureNotify events to be dispatched to the // window. See bug 1225044. int mPendingConfigures; diff -Nru thunderbird-49.0~b1+build4/suite/browser/tabbrowser.xml thunderbird-49.0~b1+build5/suite/browser/tabbrowser.xml --- thunderbird-49.0~b1+build4/suite/browser/tabbrowser.xml 2016-08-26 06:12:44.000000000 +0000 +++ thunderbird-49.0~b1+build5/suite/browser/tabbrowser.xml 2016-09-02 05:22:07.000000000 +0000 @@ -1109,6 +1109,8 @@ { + + for (var i = 0; i < blockedPopups.length; i++) { - var str = gUtilityBundle.getFormattedString("popupMenuShow", [URI.spec]); - // Check for duplicates and reuse the old menuitem. - var menuitem = parent.getElementsByAttribute("label", str).item(0); - if (!menuitem) { - menuitem = document.createElement("menuitem"); - menuitem.setAttribute("label", str); + let blockedPopup = blockedPopups[i]; + // popupWindowURI will be null if the file picker popup is blocked. + if (!blockedPopup.popupWindowURIspec) + continue; + + let str = gUtilityBundle.getFormattedString("popupMenuShow", [blockedPopup.popupWindowURIspec]); + // Check for duplicates in the blockedPopups list and reuse the old menuitem. + let menuitem = parent.getElementsByAttribute("label", str).item(0); + if (!menuitem) { + menuitem = document.createElement("menuitem"); + menuitem.setAttribute("label", str); + } + menuitem.setAttribute("popupReportIndex", i); + parent.appendChild(menuitem); } - menuitem.setAttribute("popupReportIndex", i); - parent.appendChild(menuitem); - } + }, null); return parent.getElementsByAttribute("popupReportIndex", "*").item(0) != null; } @@ -1670,9 +1673,7 @@ // No opened tab has that url. if (aOpenNew) { - let newWindowPref = Services.prefs.getIntPref("browser.link.open_external"); - let where = newWindowPref == kNewTab ? "tabfocused" : "window"; - let browserWin = openUILinkIn(aURI.spec, where); + let browserWin = openUILinkIn(aURI.spec, "tabfocused"); if (aCallback) { browserWin.addEventListener("pageshow", function browserWinPageShow(event) { if (event.target.location.href != aURI.spec) diff -Nru thunderbird-49.0~b1+build4/suite/installer/package-manifest.in thunderbird-49.0~b1+build5/suite/installer/package-manifest.in --- thunderbird-49.0~b1+build4/suite/installer/package-manifest.in 2016-08-26 06:12:44.000000000 +0000 +++ thunderbird-49.0~b1+build5/suite/installer/package-manifest.in 2016-09-02 05:22:07.000000000 +0000 @@ -146,6 +146,13 @@ #ifdef UNIX_BUT_NOT_MAC @RESPATH@/run-mozilla.sh #endif +#ifdef XP_WIN +#ifdef _AMD64_ +@BINPATH@/@DLL_PREFIX@qipcap64@DLL_SUFFIX@ +#else +@BINPATH@/@DLL_PREFIX@qipcap@DLL_SUFFIX@ +#endif +#endif ; [Components] ; Although components.manifest ends up being shipped inside omni.jar diff -Nru thunderbird-49.0~b1+build4/suite/mailnews/compose/addressingWidgetOverlay.js thunderbird-49.0~b1+build5/suite/mailnews/compose/addressingWidgetOverlay.js --- thunderbird-49.0~b1+build4/suite/mailnews/compose/addressingWidgetOverlay.js 2016-08-26 06:12:44.000000000 +0000 +++ thunderbird-49.0~b1+build5/suite/mailnews/compose/addressingWidgetOverlay.js 2016-09-02 05:22:07.000000000 +0000 @@ -136,7 +136,7 @@ case "addr_other": let headerName = awGetPopupElement(i).selectedItem.getAttribute("label"); headerName = headerName.substring(0, headerName.indexOf(':')); - msgCompFields.setHeader(headerName, fieldValue); + msgCompFields.setRawHeader(headerName, fieldValue, null); break; } }