From e891841ccc98417ac2c7dfe6fbde2abb482cbff4 Mon Sep 17 00:00:00 2001 From: Federico Cappelli Date: Thu, 22 Aug 2024 12:38:14 +0100 Subject: [PATCH 01/10] Logging refactoring #2 --- Core/BookmarksImporter.swift | 1 + Core/ContentBlocking.swift | 6 +- Core/CookieStorage.swift | 3 +- Core/DebugUserScript.swift | 3 +- Core/DefaultVariantManager.swift | 7 +- Core/EtagStorage.swift | 3 +- Core/HistoryManager.swift | 1 + Core/Logger+Multiple.swift | 51 + Core/Logging.swift | 73 - Core/Pixel.swift | 7 +- Core/PrivacyFeatures.swift | 7 +- Core/StatisticsLoader.swift | 9 +- Core/SyncBookmarksAdapter.swift | 15 +- Core/SyncErrorHandler.swift | 3 +- Core/SyncMetadataDatabase.swift | 1 + Core/WebCacheManager.swift | 3 +- DuckDuckGo.xcodeproj/project.pbxproj | 12 +- .../xcshareddata/swiftpm/Package.resolved | 4 +- .../AdAttribution/AdAttributionFetcher.swift | 6 +- DuckDuckGo/AppDelegate+Attribution.swift | 9 +- DuckDuckGo/AppDelegate.swift | 16 +- DuckDuckGo/AppIconManager.swift | 5 +- DuckDuckGo/AppRatingPrompt.swift | 4 +- .../Autoconsent/AutoconsentUserScript.swift | 37 +- DuckDuckGo/AutofillDebugViewController.swift | 4 +- DuckDuckGo/AutofillLoginListViewModel.swift | 3 +- ...ofillLoginSettingsListViewController.swift | 3 +- DuckDuckGo/BookmarksDatabase.swift | 3 +- DuckDuckGo/BookmarksViewController.swift | 5 +- .../Configuration/ConfigurationManager.swift | 7 +- DuckDuckGo/DatabaseMigration.swift | 11 +- DuckDuckGo/DebugEtagStorage.swift | 3 +- DuckDuckGo/DownloadManager.swift | 7 +- DuckDuckGo/DownloadsListViewModel.swift | 19 +- .../DuckPlayerNavigationHandler.swift | 25 +- DuckDuckGo/DuckPlayer/DuckPlayerStorage.swift | 5 +- DuckDuckGo/Favicons.swift | 1 + DuckDuckGo/FeedbackSender.swift | 6 +- .../ImageCacheDebugViewController.swift | 3 +- DuckDuckGo/MainViewController+Segues.swift | 41 +- DuckDuckGo/MainViewController.swift | 13 +- DuckDuckGo/OmniBar.swift | 3 +- DuckDuckGo/PassKitPreviewHelper.swift | 3 +- .../PrivacyDashboardViewController.swift | 3 +- ...otDebugViewController+VanillaBrowser.swift | 3 +- DuckDuckGo/SecureVaultReporter.swift | 6 +- DuckDuckGo/SyncSettingsViewController.swift | 3 +- DuckDuckGo/TabManager.swift | 3 +- DuckDuckGo/TabSwitcherViewController.swift | 3 +- DuckDuckGo/TabViewController.swift | 9 +- .../TabsModelPersistenceExtension.swift | 6 +- DuckDuckGo/UserAuthenticator.swift | 3 +- DuckDuckGo/WebContainerViewController.swift | 3 +- DuckDuckGo/ZippedPassKitPreviewHelper.swift | 5 +- DuckDuckGo/en.lproj/Localizable.strings | 2727 +---------------- OpenAction/ActionViewController.swift | 3 +- .../NetworkProtection/VPNLogger.swift | 57 +- ShareExtension/ShareViewController.swift | 3 +- Widgets/Widgets.swift | 13 +- 59 files changed, 285 insertions(+), 3016 deletions(-) create mode 100644 Core/Logger+Multiple.swift delete mode 100644 Core/Logging.swift diff --git a/Core/BookmarksImporter.swift b/Core/BookmarksImporter.swift index b2398fa173..2cf3c2016e 100644 --- a/Core/BookmarksImporter.swift +++ b/Core/BookmarksImporter.swift @@ -22,6 +22,7 @@ import Common import Foundation import Persistence import SwiftSoup +import os.log public enum BookmarksImportError: Error { case invalidHtmlNoDLTag diff --git a/Core/ContentBlocking.swift b/Core/ContentBlocking.swift index b63e7ca23b..c407713296 100644 --- a/Core/ContentBlocking.swift +++ b/Core/ContentBlocking.swift @@ -138,8 +138,7 @@ public final class ContentBlocking { AdClickAttributionDetection(feature: adClickAttribution, tld: tld, eventReporting: attributionEvents, - errorReporting: attributionDebugEvents, - log: .adAttributionLog) + errorReporting: attributionDebugEvents) } public func makeAdClickAttributionLogic(tld: TLD) -> AdClickAttributionLogic { @@ -147,8 +146,7 @@ public final class ContentBlocking { rulesProvider: adClickAttributionRulesProvider, tld: tld, eventReporting: attributionEvents, - errorReporting: attributionDebugEvents, - log: .adAttributionLog) + errorReporting: attributionDebugEvents) } private let attributionEvents = EventMapping { event, _, parameters, _ in diff --git a/Core/CookieStorage.swift b/Core/CookieStorage.swift index 0cfc79c970..aca9ce7975 100644 --- a/Core/CookieStorage.swift +++ b/Core/CookieStorage.swift @@ -19,6 +19,7 @@ import Common import Foundation +import os.log /// Class for persisting cookies for fire proofed sites to work around a WKWebView / DataStore bug which does not let data get persisted until the webview has loaded. /// @@ -56,7 +57,7 @@ public class CookieStorage { }) if let cookie = HTTPCookie(properties: properties) { - os_log("read cookie %s %s %s", log: .generalLog, type: .debug, cookie.domain, cookie.name, cookie.value) + Logger.general.debug("read cookie \(cookie.domain) \(cookie.name) \(cookie.value)") storedCookies.append(cookie) } } diff --git a/Core/DebugUserScript.swift b/Core/DebugUserScript.swift index 1c7ee0ea47..118ee72186 100644 --- a/Core/DebugUserScript.swift +++ b/Core/DebugUserScript.swift @@ -20,6 +20,7 @@ import Common import WebKit import UserScript +import os.log public class DebugUserScript: NSObject, UserScript { @@ -56,7 +57,7 @@ public class DebugUserScript: NSObject, UserScript { } private func handleLog(message: WKScriptMessage) { - os_log("%s", log: .generalLog, type: .debug, String(describing: message.body)) + Logger.general.debug("\(String(describing: message.body))") } private func handleSignpost(message: WKScriptMessage) { diff --git a/Core/DefaultVariantManager.swift b/Core/DefaultVariantManager.swift index cd483bda3d..5ce128d6ec 100644 --- a/Core/DefaultVariantManager.swift +++ b/Core/DefaultVariantManager.swift @@ -21,6 +21,7 @@ import Common import Foundation import Speech import BrowserServicesKit +import os.log extension FeatureName { // Define your feature e.g.: @@ -127,17 +128,17 @@ public class DefaultVariantManager: VariantManager { public func assignVariantIfNeeded(_ newInstallCompletion: (VariantManager) -> Void) { guard !storage.hasInstallStatistics else { - os_log("no new variant needed for existing user", log: .generalLog, type: .debug) + Logger.general.debug("no new variant needed for existing user") return } if let variant = currentVariant { - os_log("already assigned variant: %s", log: .generalLog, type: .debug, String(describing: variant)) + Logger.general.debug("already assigned variant: \(String(describing: variant))") return } guard let variant = selectVariant() else { - os_log("Failed to assign variant", log: .generalLog, type: .debug) + Logger.general.debug("Failed to assign variant") // it's possible this failed because there are none to assign, we should still let new install logic execute _ = newInstallCompletion(self) diff --git a/Core/EtagStorage.swift b/Core/EtagStorage.swift index 3b02fe96e7..7e0cc1fd29 100644 --- a/Core/EtagStorage.swift +++ b/Core/EtagStorage.swift @@ -20,6 +20,7 @@ import Common import Foundation import Configuration +import os.log public protocol BlockerListETagStorage { @@ -36,7 +37,7 @@ public struct UserDefaultsETagStorage: BlockerListETagStorage { public func loadEtag(for configuration: Configuration) -> String? { let etag = defaults?.string(forKey: configuration.storeKey) - os_log("stored etag for %s %s", log: .generalLog, type: .debug, configuration.storeKey, etag ?? "nil") + Logger.general.debug("Stored etag for \(configuration.storeKey) \(etag ?? "nil")") return etag } diff --git a/Core/HistoryManager.swift b/Core/HistoryManager.swift index 1923612682..31491bac9a 100644 --- a/Core/HistoryManager.swift +++ b/Core/HistoryManager.swift @@ -23,6 +23,7 @@ import BrowserServicesKit import History import Common import Persistence +import os.log public protocol HistoryManaging { diff --git a/Core/Logger+Multiple.swift b/Core/Logger+Multiple.swift new file mode 100644 index 0000000000..9462a637a8 --- /dev/null +++ b/Core/Logger+Multiple.swift @@ -0,0 +1,51 @@ +// +// Logger+Multiple.swift +// +// Copyright © 2017 DuckDuckGo. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation +import os.log + +public extension Logger { + static var adAttribution = { Logger(subsystem: "AD Attribution", category: "") }() + static var lifecycle = { Logger(subsystem: "Lifecycle", category: "") }() + static var autoconsent = { Logger(subsystem: "Autoconsent", category: "") }() + static var configuration = { Logger(subsystem: "Configuration", category: "") }() + static var duckPlayer = { Logger(subsystem: "DuckPlayer", category: "") }() +} +// +// +// public extension OSLog { +// +// enum AppCategories: String, CaseIterable { +//// case generalLog = "DDG General" // BSK .general +//// case adAttributionLog = "DDG AdAttribution" +//// case lifecycleLog = "DDG Lifecycle" +//// case autoconsentLog = "DDG Autoconsent" +// case /*configuration*/Log = "DDG Configuration" +// case syncLog = "DDG Sync" +// case duckPlayerLog = "Duck Player" +// } +// +// @OSLogWrapper(.generalLog) static var generalLog +// @OSLogWrapper(.adAttributionLog) static var adAttributionLog +// @OSLogWrapper(.lifecycleLog) static var lifecycleLog +// @OSLogWrapper(.autoconsentLog) static var autoconsentLog +// @OSLogWrapper(.configurationLog) static var configurationLog +// @OSLogWrapper(.syncLog) static var syncLog +// @OSLogWrapper(.duckPlayerLog) static var duckPlayerLog +// +// } diff --git a/Core/Logging.swift b/Core/Logging.swift deleted file mode 100644 index ad8057f979..0000000000 --- a/Core/Logging.swift +++ /dev/null @@ -1,73 +0,0 @@ -// -// Logging.swift -// DuckDuckGo -// -// Copyright © 2017 DuckDuckGo. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation -import BrowserServicesKit -import Common - - -public extension OSLog { - - enum AppCategories: String, CaseIterable { - case generalLog = "DDG General" - case adAttributionLog = "DDG AdAttribution" - case lifecycleLog = "DDG Lifecycle" - case autoconsentLog = "DDG Autoconsent" - case configurationLog = "DDG Configuration" - case syncLog = "DDG Sync" - case duckPlayerLog = "Duck Player" - } - - @OSLogWrapper(.generalLog) static var generalLog - @OSLogWrapper(.adAttributionLog) static var adAttributionLog - @OSLogWrapper(.lifecycleLog) static var lifecycleLog - @OSLogWrapper(.autoconsentLog) static var autoconsentLog - @OSLogWrapper(.configurationLog) static var configurationLog - @OSLogWrapper(.syncLog) static var syncLog - @OSLogWrapper(.duckPlayerLog) static var duckPlayerLog - - // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - // To activate Logging Categories add categories here: -#if DEBUG - static var enabledCategories: Set = [ - .generalLog, - .adAttributionLog, - .lifecycleLog, - .configurationLog, - .syncLog, - .duckPlayerLog - ] -#endif - -} - -public extension OSLog.OSLogWrapper { - - private static let enableLoggingCategoriesOnce: Void = { -#if DEBUG - OSLog.enabledLoggingCategories = Set(OSLog.enabledCategories.map(\.rawValue)) -#endif - }() - - init(_ category: OSLog.AppCategories) { - _=Self.enableLoggingCategoriesOnce - self.init(rawValue: category.rawValue) - } - -} diff --git a/Core/Pixel.swift b/Core/Pixel.swift index c2ee1ee14c..9f87a0dec6 100644 --- a/Core/Pixel.swift +++ b/Core/Pixel.swift @@ -21,6 +21,7 @@ import Foundation import BrowserServicesKit import Common import Networking +import os.log public struct PixelParameters { public static let url = "url" @@ -223,9 +224,7 @@ public class Pixel { } guard !isDryRun else { - os_log(.debug, log: .generalLog, "Pixel fired %{public}@ %{public}@", - pixelName.replacingOccurrences(of: "_", with: "."), - params.count > 0 ? "\(params)" : "") + Logger.general.debug("Pixel fired \(pixelName.replacingOccurrences(of: "_", with: "."), privacy: .public) \(params.count > 0 ? "\(params)" : "", privacy: .public)") // simulate server response time for Dry Run mode DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { onComplete(nil) @@ -256,7 +255,7 @@ public class Pixel { headers: headers) let request = APIRequest(configuration: configuration, urlSession: .session(useMainThreadCallbackQueue: true)) request.fetch { _, error in - os_log("Pixel fired %{public}s %{public}s", log: .generalLog, type: .debug, pixelName, "\(params)") + Logger.general.debug("Pixel fired \(pixelName, privacy: .public) \(params, privacy: .public)") onComplete(error) } } diff --git a/Core/PrivacyFeatures.swift b/Core/PrivacyFeatures.swift index 422484ce5b..a4a7abd883 100644 --- a/Core/PrivacyFeatures.swift +++ b/Core/PrivacyFeatures.swift @@ -19,6 +19,7 @@ import BrowserServicesKit import Common +import os.log public final class PrivacyFeatures { @@ -54,9 +55,11 @@ public final class PrivacyFeatures { AppHTTPSUpgradeStore(database: Database.shared, bloomFilterDataURL: bloomFilterDataURL, embeddedResources: embeddedBloomFilterResources, - errorEvents: httpsUpgradeDebugEvents) + errorEvents: httpsUpgradeDebugEvents, + logger: Logger.general) } - public static let httpsUpgrade = HTTPSUpgrade(store: httpsUpgradeStore, privacyManager: ContentBlocking.shared.privacyConfigurationManager) + public static let httpsUpgrade = HTTPSUpgrade(store: httpsUpgradeStore, privacyManager: ContentBlocking.shared.privacyConfigurationManager, + logger: Logger.general) } diff --git a/Core/StatisticsLoader.swift b/Core/StatisticsLoader.swift index 60b5fe14dc..7d718b11ed 100644 --- a/Core/StatisticsLoader.swift +++ b/Core/StatisticsLoader.swift @@ -21,6 +21,7 @@ import Common import Foundation import BrowserServicesKit import Networking +import os.log public class StatisticsLoader { @@ -52,7 +53,7 @@ public class StatisticsLoader { request.fetch { response, error in if let error = error { - os_log("Initial atb request failed with error %s", log: .generalLog, type: .debug, error.localizedDescription) + Logger.general.error("Initial atb request failed with error: \(error.localizedDescription, privacy: .public)") completion() return } @@ -74,7 +75,7 @@ public class StatisticsLoader { request.fetch { _, error in if let error = error { - os_log("Exti request failed with error %s", log: .generalLog, type: .debug, error.localizedDescription) + Logger.general.error("Exit request failed with error: \(error.localizedDescription, privacy: .public)") completion() return } @@ -96,7 +97,7 @@ public class StatisticsLoader { request.fetch { response, error in if let error = error { - os_log("Search atb request failed with error %s", log: .generalLog, type: .debug, error.localizedDescription) + Logger.general.error("Search atb request failed with error: \(error.localizedDescription, privacy: .public)") completion() return } @@ -121,7 +122,7 @@ public class StatisticsLoader { request.fetch { response, error in if let error = error { - os_log("App atb request failed with error %s", log: .generalLog, type: .debug, error.localizedDescription) + Logger.general.error("App atb request failed with error: \(error.localizedDescription, privacy: .public)") completion() return } diff --git a/Core/SyncBookmarksAdapter.swift b/Core/SyncBookmarksAdapter.swift index af82db7be1..a50d7315c8 100644 --- a/Core/SyncBookmarksAdapter.swift +++ b/Core/SyncBookmarksAdapter.swift @@ -25,6 +25,7 @@ import Foundation import Persistence import SyncDataProviders import WidgetKit +import os.log public protocol FavoritesDisplayModeStoring: AnyObject { var favoritesDisplayMode: FavoritesDisplayMode { get set } @@ -94,8 +95,7 @@ public final class SyncBookmarksAdapter { syncDidCompletePublisher = syncDidCompleteSubject.eraseToAnyPublisher() databaseCleaner = BookmarkDatabaseCleaner( bookmarkDatabase: database, - errorEvents: BookmarksCleanupErrorHandling(), - log: .generalLog + errorEvents: BookmarksCleanupErrorHandling() ) widgetRefreshCancellable = syncDidCompletePublisher.sink { _ in WidgetCenter.shared.reloadAllTimelines() @@ -164,7 +164,7 @@ public final class SyncBookmarksAdapter { stateStore = try BookmarksFaviconsFetcherStateStore(applicationSupportURL: url) } catch { Pixel.fire(pixel: .bookmarksFaviconsFetcherStateStoreInitializationFailed, error: error) - os_log(.error, log: .syncLog, "Failed to initialize BookmarksFaviconsFetcherStateStore: %{public}s", String(reflecting: error)) + Logger.sync.error("Failed to initialize BookmarksFaviconsFetcherStateStore:: \(error.localizedDescription, privacy: .public)") return nil } @@ -173,8 +173,7 @@ public final class SyncBookmarksAdapter { stateStore: stateStore, fetcher: FaviconFetcher(), faviconStore: Favicons.shared, - errorEvents: BookmarksFaviconsFetcherErrorHandler(), - log: .syncLog + errorEvents: BookmarksFaviconsFetcherErrorHandler() ) } @@ -190,11 +189,11 @@ public final class SyncBookmarksAdapter { return } if faviconsFetcher.isFetchingInProgress == true { - os_log(.debug, log: .syncLog, "Favicons Fetching is in progress. Starting background task to allow it to gracefully complete.") + Logger.sync.debug("Favicons Fetching is in progress. Starting background task to allow it to gracefully complete.") var taskID: UIBackgroundTaskIdentifier! taskID = application.beginBackgroundTask(withName: "Cancelled Favicons Fetching Completion Task") { - os_log(.debug, log: .syncLog, "Forcing background task completion") + Logger.sync.debug("Forcing background task completion") application.endBackgroundTask(taskID) } faviconsFetchingDidFinishCancellable?.cancel() @@ -202,7 +201,7 @@ public final class SyncBookmarksAdapter { .prefix(1) .receive(on: DispatchQueue.main) .sink { _ in - os_log(.debug, log: .syncLog, "Ending background task") + Logger.sync.debug("Ending background task") application.endBackgroundTask(taskID) } } diff --git a/Core/SyncErrorHandler.swift b/Core/SyncErrorHandler.swift index ec929c8fbd..3c29fb3a99 100644 --- a/Core/SyncErrorHandler.swift +++ b/Core/SyncErrorHandler.swift @@ -24,6 +24,7 @@ import Persistence import Foundation import SyncUI import SyncDataProviders +import os.log public enum AsyncErrorType: String { case bookmarksCountLimitExceeded @@ -176,7 +177,7 @@ extension SyncErrorHandler { } } let modelTypeString = modelType.rawValue.capitalized - os_log(.error, log: OSLog.syncLog, "%{public}@ Sync error: %{public}s", modelTypeString, String(reflecting: error)) + Logger.sync.error("\(modelTypeString, privacy: .public) Sync error: \(error.localizedDescription, privacy: .public)") } private func handleSyncError(_ syncError: SyncError, modelType: ModelType) { diff --git a/Core/SyncMetadataDatabase.swift b/Core/SyncMetadataDatabase.swift index a714176eab..b208847491 100644 --- a/Core/SyncMetadataDatabase.swift +++ b/Core/SyncMetadataDatabase.swift @@ -22,6 +22,7 @@ import CoreData import DDGSync import Persistence import Common +import os.log public final class SyncMetadataDatabase { diff --git a/Core/WebCacheManager.swift b/Core/WebCacheManager.swift index a93c079020..356eac3c0d 100644 --- a/Core/WebCacheManager.swift +++ b/Core/WebCacheManager.swift @@ -20,6 +20,7 @@ import Common import WebKit import GRDB +import os.log extension WKWebsiteDataStore { @@ -161,7 +162,7 @@ extension WebCacheManager { if let pool = getValidDatabasePool() { removeObservationsData(from: pool) } else { - os_log("Could not find valid pool to clear observations data", log: .generalLog, type: .debug) + Logger.general.debug("Could not find valid pool to clear observations data") } } diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 9fb06fa79d..2b6047db3e 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -1009,7 +1009,7 @@ F143C2EC1E4A4CD400CFDE3A /* Core.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F143C2E41E4A4CD400CFDE3A /* Core.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; F143C3171E4A99D200CFDE3A /* AppURLs.swift in Sources */ = {isa = PBXBuildFile; fileRef = F143C3151E4A99D200CFDE3A /* AppURLs.swift */; }; F143C3181E4A99D200CFDE3A /* Link.swift in Sources */ = {isa = PBXBuildFile; fileRef = F143C3161E4A99D200CFDE3A /* Link.swift */; }; - F143C3271E4A9A0E00CFDE3A /* Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = F143C3231E4A9A0E00CFDE3A /* Logging.swift */; }; + F143C3271E4A9A0E00CFDE3A /* Logger+Multiple.swift in Sources */ = {isa = PBXBuildFile; fileRef = F143C3231E4A9A0E00CFDE3A /* Logger+Multiple.swift */; }; F143C3281E4A9A0E00CFDE3A /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F143C3241E4A9A0E00CFDE3A /* StringExtension.swift */; }; F143C3291E4A9A0E00CFDE3A /* URLExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F143C3251E4A9A0E00CFDE3A /* URLExtension.swift */; }; F14E491F1E391CE900DC037C /* URLExtensionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F14E491E1E391CE900DC037C /* URLExtensionTests.swift */; }; @@ -2789,7 +2789,7 @@ F143C2E71E4A4CD400CFDE3A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; F143C3151E4A99D200CFDE3A /* AppURLs.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppURLs.swift; sourceTree = ""; }; F143C3161E4A99D200CFDE3A /* Link.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Link.swift; sourceTree = ""; }; - F143C3231E4A9A0E00CFDE3A /* Logging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Logging.swift; sourceTree = ""; }; + F143C3231E4A9A0E00CFDE3A /* Logger+Multiple.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Logger+Multiple.swift"; sourceTree = ""; }; F143C3241E4A9A0E00CFDE3A /* StringExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringExtension.swift; sourceTree = ""; }; F143C3251E4A9A0E00CFDE3A /* URLExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLExtension.swift; sourceTree = ""; }; F143C32B1E4A9A4800CFDE3A /* RoundedRectangleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RoundedRectangleView.swift; path = ../Core/RoundedRectangleView.swift; sourceTree = ""; }; @@ -5564,7 +5564,7 @@ 9887DC242354D2AA005C85F5 /* Database.swift */, 85200FA01FBC5BB5001AF290 /* DDGPersistenceContainer.swift */, F16393FE1ECCB9CC00DDD653 /* FileLoader.swift */, - F143C3231E4A9A0E00CFDE3A /* Logging.swift */, + F143C3231E4A9A0E00CFDE3A /* Logger+Multiple.swift */, F10E522C1E946F8800CE1253 /* NSAttributedStringExtension.swift */, F143C3241E4A9A0E00CFDE3A /* StringExtension.swift */, F1D477CA1F2149C40031ED49 /* Type.swift */, @@ -7815,7 +7815,7 @@ 85BDC3192436161C0053DB07 /* LoginFormDetectionUserScript.swift in Sources */, 37DF000A29F9C416002B7D3E /* SyncMetadataDatabase.swift in Sources */, F143C3291E4A9A0E00CFDE3A /* URLExtension.swift in Sources */, - F143C3271E4A9A0E00CFDE3A /* Logging.swift in Sources */, + F143C3271E4A9A0E00CFDE3A /* Logger+Multiple.swift in Sources */, 85372447220DD103009D09CD /* UIKeyCommandExtension.swift in Sources */, 85A1B3B220C6CD9900C18F15 /* CookieStorage.swift in Sources */, 9856A1992933D2EB00ACB44F /* BookmarksModelsErrorHandling.swift in Sources */, @@ -10538,8 +10538,8 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/DuckDuckGo/BrowserServicesKit"; requirement = { - kind = exactVersion; - version = 185.0.0; + branch = fcappelli/os_log_to_logger_2; + kind = branch; }; }; 9F8FE9472BAE50E50071E372 /* XCRemoteSwiftPackageReference "lottie-spm" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index b43be26e96..28a050745a 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -32,8 +32,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/DuckDuckGo/BrowserServicesKit", "state" : { - "revision" : "2efee14db4d30ac73916794de4d262b745a5f413", - "version" : "185.0.0" + "branch" : "fcappelli/os_log_to_logger_2", + "revision" : "0d2493e8cf1593213f655befdd07818719238ebf" } }, { diff --git a/DuckDuckGo/AdAttribution/AdAttributionFetcher.swift b/DuckDuckGo/AdAttribution/AdAttributionFetcher.swift index b052a0c127..f5be720417 100644 --- a/DuckDuckGo/AdAttribution/AdAttributionFetcher.swift +++ b/DuckDuckGo/AdAttribution/AdAttributionFetcher.swift @@ -18,7 +18,7 @@ // import AdServices -import Common +import os.log protocol AdAttributionFetcher { func fetch() async -> AdServicesAttributionResponse? @@ -56,7 +56,7 @@ struct DefaultAdAttributionFetcher: AdAttributionFetcher { lastToken = token return try await fetchAttributionData(using: token) } catch let error as AdAttributionFetcherError { - os_log("AdAttributionFetcher failed to fetch attribution data: %@. Retrying.", log: .adAttributionLog, error.localizedDescription) + Logger.adAttribution.error("AdAttributionFetcher failed to fetch attribution data: \(error.localizedDescription, privacy: .public). Retrying.") if error == .invalidToken { lastToken = nil @@ -69,7 +69,7 @@ struct DefaultAdAttributionFetcher: AdAttributionFetcher { break } } catch { - os_log("AdAttributionFetcher failed to fetch attribution data: %@", log: .adAttributionLog, error.localizedDescription) + Logger.adAttribution.error("AdAttributionFetcher failed to fetch attribution data: \(error.localizedDescription, privacy: .public)") // Do not retry break diff --git a/DuckDuckGo/AppDelegate+Attribution.swift b/DuckDuckGo/AppDelegate+Attribution.swift index fef1e31449..e82dd002e3 100644 --- a/DuckDuckGo/AppDelegate+Attribution.swift +++ b/DuckDuckGo/AppDelegate+Attribution.swift @@ -21,6 +21,7 @@ import Foundation import Common import StoreKit import AdAttributionKit +import os.log extension AppDelegate { @@ -40,9 +41,9 @@ extension AppDelegate { private func updateAdAttributionKitPostback(conversionValue: Int) async { do { try await AdAttributionKit.Postback.updateConversionValue(conversionValue, coarseConversionValue: .high, lockPostback: true) - os_log("Attribution: AdAttributionKit postback succeeded", type: .debug) + Logger.general.debug("Attribution: AdAttributionKit postback succeeded") } catch { - os_log("Attribution: AdAttributionKit postback failed %@", type: .error, error.localizedDescription) + Logger.general.error("Attribution: AdAttributionKit postback failed \(error.localizedDescription, privacy: .public)") } } @@ -50,9 +51,9 @@ extension AppDelegate { private func updateSKANPostback(conversionValue: Int) async { do { try await SKAdNetwork.updatePostbackConversionValue(conversionValue, coarseValue: .high, lockWindow: true) - os_log("Attribution: SKAN 4 postback succeeded", type: .debug) + Logger.general.debug("Attribution: SKAN 4 postback succeeded") } catch { - os_log("Attribution: SKAN 4 postback failed %@", type: .error, error.localizedDescription) + Logger.general.error("Attribution: SKAN 4 postback failed \(error.localizedDescription, privacy: .public)") } } diff --git a/DuckDuckGo/AppDelegate.swift b/DuckDuckGo/AppDelegate.swift index a3b5df16eb..c849cdbc6b 100644 --- a/DuckDuckGo/AppDelegate.swift +++ b/DuckDuckGo/AppDelegate.swift @@ -37,6 +37,7 @@ import SyncDataProviders import Subscription import NetworkProtection import WebKit +import os.log @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { @@ -79,7 +80,7 @@ import WebKit private var syncStateCancellable: AnyCancellable? private var isSyncInProgressCancellable: AnyCancellable? - private let crashCollection = CrashCollection(platform: .iOS, log: .generalLog) + private let crashCollection = CrashCollection(platform: .iOS) private var crashReportUploaderOnboarding: CrashCollectionOnboarding? private var autofillPixelReporter: AutofillPixelReporter? @@ -271,7 +272,6 @@ import WebKit dataProvidersSource: syncDataProviders, errorEvents: SyncErrorHandler(), privacyConfigurationManager: ContentBlocking.shared.privacyConfigurationManager, - log: .syncLog, environment: environment ) syncService.initializeIfNeeded() @@ -677,11 +677,11 @@ import WebKit private func suspendSync() { if syncService.isSyncInProgress { - os_log(.debug, log: .syncLog, "Sync is in progress. Starting background task to allow it to gracefully complete.") + Logger.sync.debug("Sync is in progress. Starting background task to allow it to gracefully complete.") var taskID: UIBackgroundTaskIdentifier! taskID = UIApplication.shared.beginBackgroundTask(withName: "Cancelled Sync Completion Task") { - os_log(.debug, log: .syncLog, "Forcing background task completion") + Logger.sync.debug("Forcing background task completion") UIApplication.shared.endBackgroundTask(taskID) } syncDidFinishCancellable?.cancel() @@ -689,7 +689,7 @@ import WebKit .prefix(1) .receive(on: DispatchQueue.main) .sink { _ in - os_log(.debug, log: .syncLog, "Ending background task") + Logger.sync.debug("Ending background task") UIApplication.shared.endBackgroundTask(taskID) } } @@ -704,7 +704,7 @@ import WebKit } func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { - os_log("App launched with url %s", log: .lifecycleLog, type: .debug, url.absoluteString) + Logger.sync.debug("App launched with url \(url.absoluteString)") // If showing the onboarding intro ignore deeplinks guard mainViewController?.needsToShowOnboardingIntro() == false else { @@ -736,7 +736,7 @@ import WebKit func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { - os_log(#function, log: .lifecycleLog, type: .debug) + Logger.lifecycle.debug(#function) AppConfigurationFetch().start(isBackgroundFetch: true) { result in switch result { @@ -854,7 +854,7 @@ import WebKit } private func handleShortCutItem(_ shortcutItem: UIApplicationShortcutItem) { - os_log("Handling shortcut item: %s", log: .generalLog, type: .debug, shortcutItem.type) + Logger.general.debug("Handling shortcut item: \(shortcutItem.type)") Task { @MainActor in diff --git a/DuckDuckGo/AppIconManager.swift b/DuckDuckGo/AppIconManager.swift index dbee15c1c3..43b7494cb9 100644 --- a/DuckDuckGo/AppIconManager.swift +++ b/DuckDuckGo/AppIconManager.swift @@ -17,9 +17,10 @@ // limitations under the License. // -import Common +import Foundation import UIKit import Core +import os.log class AppIconManager { @@ -38,7 +39,7 @@ class AppIconManager { let alternateIconName = appIcon != AppIcon.defaultAppIcon ? appIcon.rawValue : nil UIApplication.shared.setAlternateIconName(alternateIconName) { error in if let error = error { - os_log("Error while changing app icon: %s", log: .generalLog, type: .debug, error.localizedDescription) + Logger.general.error("Error while changing app icon: \(error.localizedDescription, privacy: .public)") completionHandler?(error) } else { completionHandler?(nil) diff --git a/DuckDuckGo/AppRatingPrompt.swift b/DuckDuckGo/AppRatingPrompt.swift index 9222d17dd2..b929572719 100644 --- a/DuckDuckGo/AppRatingPrompt.swift +++ b/DuckDuckGo/AppRatingPrompt.swift @@ -20,7 +20,7 @@ import Foundation import Core import CoreData -import Common +import os.log protocol AppRatingPromptStorage { @@ -141,7 +141,7 @@ class AppRatingPromptCoreDataStorage: AppRatingPromptStorage { do { results = try context.fetch(fetchRequest) } catch { - os_log("Error while fetching AppRatingPromptEntity: %s", log: .generalLog, type: .debug, error.localizedDescription) + Logger.general.error("Error while fetching AppRatingPromptEntity: \(error.localizedDescription, privacy: .public)") return nil } diff --git a/DuckDuckGo/Autoconsent/AutoconsentUserScript.swift b/DuckDuckGo/Autoconsent/AutoconsentUserScript.swift index e071b9c58a..eaabda28e9 100644 --- a/DuckDuckGo/Autoconsent/AutoconsentUserScript.swift +++ b/DuckDuckGo/Autoconsent/AutoconsentUserScript.swift @@ -23,6 +23,7 @@ import Core import BrowserServicesKit import UserScript import PrivacyDashboard +import os.log protocol AutoconsentPreferences { var autoconsentEnabled: Bool { get set } @@ -61,7 +62,7 @@ final class AutoconsentUserScript: NSObject, WKScriptMessageHandlerWithReply, Us weak var delegate: AutoconsentUserScriptDelegate? init(config: PrivacyConfiguration, preferences: AutoconsentPreferences = AppUserDefaults(), ignoreNonHTTPURLs: Bool = true) { - os_log("Initialising autoconsent userscript", log: .autoconsentLog, type: .debug) + Logger.autoconsent.debug("Initialising autoconsent userscript") source = Self.loadJS("autoconsent-bundle", from: .main, withReplacements: [:]) self.config = config self.preferences = preferences @@ -80,7 +81,7 @@ final class AutoconsentUserScript: NSObject, WKScriptMessageHandlerWithReply, Us optoutFailed: optoutFailed, selftestFailed: selftestFailed) - os_log("Refreshing dashboard state: %s", log: .autoconsentLog, type: .debug, String(describing: cookieConsentStatus)) + Logger.autoconsent.debug("Refreshing dashboard state: \(String(describing: cookieConsentStatus))") self.delegate?.autoconsentUserScript(self, didUpdateCookieConsentStatus: cookieConsentStatus) } @@ -88,7 +89,7 @@ final class AutoconsentUserScript: NSObject, WKScriptMessageHandlerWithReply, Us func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage, replyHandler: @escaping (Any?, String?) -> Void) { - os_log("Message received: %s", log: .autoconsentLog, type: .debug, String(describing: message.body)) + Logger.autoconsent.debug("Message received: \(String(describing: message.body))") return handleMessage(replyHandler: replyHandler, message: message) } } @@ -165,7 +166,7 @@ extension AutoconsentUserScript { let json = try JSONSerialization.data(withJSONObject: message) return try JSONDecoder().decode(Target.self, from: json) } catch { - os_log(.error, "Error decoding message body: %{public}@", error.localizedDescription) + Logger.autoconsent.error("Error decoding message body: \(error.localizedDescription, privacy: .public)") return nil } } @@ -192,7 +193,7 @@ extension AutoconsentUserScript { handleOptOutResult(message: message, replyHandler: replyHandler) case MessageName.optInResult: // this is not supported in browser - os_log("ignoring optInResult: %s", log: .autoconsentLog, type: .debug, String(describing: message.body)) + Logger.autoconsent.debug("ignoring optInResult: \(String(describing: message.body))") replyHandler(nil, "opt-in is not supported") case MessageName.cmpDetected: // no need to do anything here @@ -202,14 +203,14 @@ extension AutoconsentUserScript { case MessageName.autoconsentDone: handleAutoconsentDone(message: message, replyHandler: replyHandler) case MessageName.autoconsentError: - os_log("Autoconsent error: %s", log: .autoconsentLog, String(describing: message.body)) + Logger.autoconsent.debug("Autoconsent error: \(String(describing: message.body))") replyHandler([ "type": "ok" ], nil) // this is just to prevent a Promise rejection } } @MainActor func handlePopupFound(message: WKScriptMessage, replyHandler: @escaping (Any?, String?) -> Void) { - os_log("Autoconsent popup found", log: .autoconsentLog) + Logger.autoconsent.debug("Autoconsent popup found") replyHandler([ "type": "ok" ], nil) // this is just to prevent a Promise rejection } @@ -226,7 +227,7 @@ extension AutoconsentUserScript { if ignoreNonHTTPURLs && !url.isHttp && !url.isHttps { // ignore special schemes - os_log("Ignoring special URL scheme: %s", log: .autoconsentLog, type: .debug, messageData.url) + Logger.autoconsent.debug("Ignoring special URL scheme: \(messageData.url)") replyHandler([ "type": "ok" ], nil) // this is just to prevent a Promise rejection return } @@ -239,7 +240,7 @@ extension AutoconsentUserScript { let topURLDomain = message.webView?.url?.host guard config.isFeature(.autoconsent, enabledForDomain: topURLDomain) else { - os_log("disabled for site: %s", log: .autoconsentLog, type: .info, String(describing: url.absoluteString)) + Logger.autoconsent.info("disabled for site: \(String(describing: url.absoluteString))") replyHandler([ "type": "ok" ], nil) // this is just to prevent a Promise rejection return } @@ -316,7 +317,7 @@ extension AutoconsentUserScript { replyHandler(nil, "cannot decode message") return } - os_log("opt-out result: %s", log: .autoconsentLog, type: .debug, String(describing: messageData)) + Logger.autoconsent.debug("opt-out result: \(String(describing: messageData))") if !messageData.result { refreshDashboardState(consentManaged: true, cosmetic: nil, optoutFailed: true, selftestFailed: nil) @@ -336,8 +337,8 @@ extension AutoconsentUserScript { replyHandler(nil, "cannot decode message") return } - os_log("opt-out successful: %s", log: .autoconsentLog, type: .debug, String(describing: messageData)) - + Logger.autoconsent.debug("opt-out successful: \(String(describing: messageData))") + guard let url = URL(string: messageData.url), let host = url.host else { replyHandler(nil, "cannot decode message") @@ -348,7 +349,7 @@ extension AutoconsentUserScript { // trigger popup once per domain if !management.sitesNotifiedCache.contains(host) { - os_log("bragging that we closed a popup", log: .autoconsentLog, type: .debug) + Logger.autoconsent.debug("bragging that we closed a popup") management.sitesNotifiedCache.insert(host) // post popover notification on main thread DispatchQueue.main.async { @@ -363,7 +364,7 @@ extension AutoconsentUserScript { if let selfTestWebView = selfTestWebView, let selfTestFrameInfo = selfTestFrameInfo { - os_log("requesting self-test in: %s", log: .autoconsentLog, type: .debug, messageData.url) + Logger.autoconsent.debug("requesting self-test in: \(messageData.url)") selfTestWebView.evaluateJavaScript( "window.autoconsentMessageCallback({ type: 'selfTest' })", in: selfTestFrameInfo, @@ -371,14 +372,14 @@ extension AutoconsentUserScript { completionHandler: { (result) in switch result { case.failure(let error): - os_log("Error running self-test: %s", log: .autoconsentLog, type: .debug, String(describing: error)) + Logger.autoconsent.error("Error running self-test: \(error.localizedDescription, privacy: .public)") case.success: - os_log("self-test requested", log: .autoconsentLog, type: .debug) + Logger.autoconsent.debug("self-test requested") } } ) } else { - os_log("no self-test scheduled in this tab", log: .autoconsentLog, type: .debug) + Logger.autoconsent.debug("no self-test scheduled in this tab") } selfTestWebView = nil selfTestFrameInfo = nil @@ -391,7 +392,7 @@ extension AutoconsentUserScript { return } // store self-test result - os_log("self-test result: %s", log: .autoconsentLog, type: .debug, String(describing: messageData)) + Logger.autoconsent.debug("self-test result: \(String(describing: messageData))") refreshDashboardState(consentManaged: true, cosmetic: nil, optoutFailed: false, selftestFailed: messageData.result) replyHandler([ "type": "ok" ], nil) // this is just to prevent a Promise rejection } diff --git a/DuckDuckGo/AutofillDebugViewController.swift b/DuckDuckGo/AutofillDebugViewController.swift index f194928580..78ebb76778 100644 --- a/DuckDuckGo/AutofillDebugViewController.swift +++ b/DuckDuckGo/AutofillDebugViewController.swift @@ -22,6 +22,7 @@ import BrowserServicesKit import Core import Common import PrivacyDashboard +import os.log class AutofillDebugViewController: UITableViewController { @@ -118,9 +119,8 @@ class AutofillDebugViewController: UITableViewController { do { _ = try secureVault?.storeWebsiteCredentials(credentials) } catch let error { - os_log(.debug, "Error inserting credential \(error.localizedDescription)") + Logger.general.error("Error inserting credential \(error.localizedDescription, privacy: .public)") } - } ActionMessageView.present(message: "Autofill Data added") diff --git a/DuckDuckGo/AutofillLoginListViewModel.swift b/DuckDuckGo/AutofillLoginListViewModel.swift index 31557e9284..d4d507ee89 100644 --- a/DuckDuckGo/AutofillLoginListViewModel.swift +++ b/DuckDuckGo/AutofillLoginListViewModel.swift @@ -24,6 +24,7 @@ import UIKit import Combine import Core import PrivacyDashboard +import os.log internal enum AutofillLoginListSectionType: Comparable { case enableAutofill @@ -362,7 +363,7 @@ final class AutofillLoginListViewModel: ObservableObject { do { return try secureVault.accounts() } catch { - os_log("Failed to fetch accounts") + Logger.autofill.error("Failed to fetch accounts \(error.localizedDescription, privacy: .public)") return [] } } diff --git a/DuckDuckGo/AutofillLoginSettingsListViewController.swift b/DuckDuckGo/AutofillLoginSettingsListViewController.swift index 92f1aa5264..2ea37e102d 100644 --- a/DuckDuckGo/AutofillLoginSettingsListViewController.swift +++ b/DuckDuckGo/AutofillLoginSettingsListViewController.swift @@ -25,6 +25,7 @@ import Common import DDGSync import DesignResourcesKit import SwiftUI +import os.log enum AutofillSettingsSource: String { case settings @@ -182,7 +183,7 @@ final class AutofillLoginSettingsListViewController: UIViewController { source: AutofillSettingsSource) { let secureVault = try? AutofillSecureVaultFactory.makeVault(reporter: SecureVaultReporter()) if secureVault == nil { - os_log("Failed to make vault") + Logger.autofill.fault("Failed to make vault") } self.viewModel = AutofillLoginListViewModel(appSettings: appSettings, tld: tld, secureVault: secureVault, currentTabUrl: currentTabUrl, currentTabUid: currentTabUid) self.syncService = syncService diff --git a/DuckDuckGo/BookmarksDatabase.swift b/DuckDuckGo/BookmarksDatabase.swift index 962c552516..8a655863b2 100644 --- a/DuckDuckGo/BookmarksDatabase.swift +++ b/DuckDuckGo/BookmarksDatabase.swift @@ -22,6 +22,7 @@ import Foundation import CoreData import Persistence import Bookmarks +import os.log public class BookmarksDatabase { @@ -33,7 +34,7 @@ public class BookmarksDatabase { public static var defaultDBLocation: URL = { guard let url = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: Constants.bookmarksGroupID) else { - os_log("BookmarksDatabase.make - OUT, failed to get location %{public}s", Constants.bookmarksGroupID) + Logger.bookmarks.fault("BookmarksDatabase.make - OUT, failed to get location \(Constants.bookmarksGroupID, privacy: .public)") fatalError("Failed to get location") } return url diff --git a/DuckDuckGo/BookmarksViewController.swift b/DuckDuckGo/BookmarksViewController.swift index b5034b411f..9cc215475a 100644 --- a/DuckDuckGo/BookmarksViewController.swift +++ b/DuckDuckGo/BookmarksViewController.swift @@ -28,6 +28,7 @@ import CoreData import Combine import Persistence import WidgetKit +import os.log class BookmarksViewController: UIViewController, UITableViewDelegate { @@ -632,7 +633,7 @@ class BookmarksViewController: UIViewController, UITableViewDelegate { let result = await BookmarksImporter( coreDataStore: bookmarksDatabase, - favoritesDisplayMode: appSettings.favoritesDisplayMode + favoritesDisplayMode: self.appSettings.favoritesDisplayMode ).parseAndSave(html: html) switch result { case .success: @@ -645,7 +646,7 @@ class BookmarksViewController: UIViewController, UITableViewDelegate { ActionMessageView.present(message: UserText.importBookmarksSuccessMessage) } case .failure(let bookmarksImportError): - os_log("Bookmarks import error %s", type: .debug, bookmarksImportError.localizedDescription) + Logger.bookmarks.error("Bookmarks import error \(bookmarksImportError.localizedDescription, privacy: .public)") Pixel.fire(pixel: .bookmarkImportFailure) DispatchQueue.main.async { ActionMessageView.present(message: UserText.importBookmarksFailedMessage) diff --git a/DuckDuckGo/Configuration/ConfigurationManager.swift b/DuckDuckGo/Configuration/ConfigurationManager.swift index 099facddaa..cf33235503 100644 --- a/DuckDuckGo/Configuration/ConfigurationManager.swift +++ b/DuckDuckGo/Configuration/ConfigurationManager.swift @@ -22,6 +22,7 @@ import Core import Configuration import BrowserServicesKit import Common +import os.log struct ConfigurationManager { @@ -101,7 +102,7 @@ struct ConfigurationManager { try await task.value didFetchAnyTrackerBlockingDependencies = true } catch { - os_log("Did not apply update to %@: %@", log: .generalLog, type: .debug, configuration.rawValue, error.localizedDescription) + Logger.general.error("Did not apply update to \(configuration.rawValue, privacy: .public): \(error.localizedDescription, privacy: .public)") } } @@ -123,7 +124,7 @@ struct ConfigurationManager { try await updateBloomFilterExclusions() return true } catch { - os_log("Failed to apply update to bloom filter exclusions: %@", log: .generalLog, type: .debug, error.localizedDescription) + Logger.general.error("Failed to apply update to bloom filter exclusions: \(error.localizedDescription, privacy: .public)") return false } } @@ -135,7 +136,7 @@ struct ConfigurationManager { try await updateBloomFilter() return true } catch { - os_log("Failed to apply update to bloom filter: %@", log: .generalLog, type: .debug, error.localizedDescription) + Logger.general.error("Failed to apply update to bloom filter: \(error.localizedDescription, privacy: .public)") return false } } diff --git a/DuckDuckGo/DatabaseMigration.swift b/DuckDuckGo/DatabaseMigration.swift index aeba28e958..f83b1d6ceb 100644 --- a/DuckDuckGo/DatabaseMigration.swift +++ b/DuckDuckGo/DatabaseMigration.swift @@ -22,6 +22,7 @@ import Common import Foundation import CoreData import Core +import os.log class DatabaseMigration { @@ -105,7 +106,7 @@ class DatabaseMigration { try stack.persistenceStoreCoordinator.remove(store) } catch { Pixel.fire(pixel: .dbRemovalError, error: error) - os_log("Error removing store: %s", log: .generalLog, type: .debug, error.localizedDescription) + Logger.general.error("Error removing store: \(error.localizedDescription, privacy: .public)") } } } @@ -154,15 +155,15 @@ class DatabaseMigration { concurrencyType: .privateQueueConcurrencyType), let storeURL = oldStack.persistenceStoreCoordinator.persistentStores.last?.url else { return } - os_log("Destroying store: %s", log: .generalLog, type: .debug, dbName) - + Logger.general.debug("Destroying store: \(dbName)") + do { try oldStack.persistenceStoreCoordinator.destroyPersistentStore(at: storeURL, ofType: NSSQLiteStoreType, options: nil) } catch { Pixel.fire(pixel: .dbDestroyError, error: error) - os_log("Error destroying store: %s", log: .generalLog, type: .debug, error.localizedDescription) + Logger.general.error("Error destroying store: \(error.localizedDescription, privacy: .public)") } removeFile(at: storeURL) @@ -181,7 +182,7 @@ class DatabaseMigration { if nserror.domain != NSCocoaErrorDomain || nserror.code != NSFileNoSuchFileError { Pixel.fire(pixel: .dbDestroyFileError, error: error) } - os_log("Error removing file: %s", log: .generalLog, type: .debug, error.localizedDescription) + Logger.general.error("Error removing file: \(error.localizedDescription, privacy: .public)") } } } diff --git a/DuckDuckGo/DebugEtagStorage.swift b/DuckDuckGo/DebugEtagStorage.swift index 09dce123a1..a58595a61d 100644 --- a/DuckDuckGo/DebugEtagStorage.swift +++ b/DuckDuckGo/DebugEtagStorage.swift @@ -20,6 +20,7 @@ import Common import Core import Configuration +import os.log /// Only intended for use via Debug screens. class DebugEtagStorage { @@ -28,7 +29,7 @@ class DebugEtagStorage { func loadEtag(for storeKey: String) -> String? { let etag = defaults?.string(forKey: storeKey) - os_log("stored etag for %s %s", log: .generalLog, type: .debug, storeKey, etag ?? "nil") + Logger.general.debug("stored etag for \(storeKey) \(etag ?? "nil")") return etag } diff --git a/DuckDuckGo/DownloadManager.swift b/DuckDuckGo/DownloadManager.swift index 130cfbfd59..abab2937aa 100644 --- a/DuckDuckGo/DownloadManager.swift +++ b/DuckDuckGo/DownloadManager.swift @@ -22,6 +22,7 @@ import Foundation import Core import WebKit import UniformTypeIdentifiers +import os.log class DownloadManager { @@ -46,7 +47,7 @@ class DownloadManager { let documentsDirectory = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) return documentsDirectory.appendingPathComponent(Constants.downloadsDirectoryName, isDirectory: true) } catch { - os_log("Failed to create downloads directory: %s", type: .debug, error.localizedDescription) + Logger.general.error("Failed to create downloads directory: \(error.localizedDescription, privacy: .public)") let temporaryDirectory = FileManager.default.temporaryDirectory return temporaryDirectory.appendingPathComponent(Constants.downloadsDirectoryName, isDirectory: true) } @@ -62,7 +63,7 @@ class DownloadManager { init(_ notificationCenter: NotificationCenter = NotificationCenter.default) { self.notificationCenter = notificationCenter createDownloadsDirectoryIfNeeded() - os_log("Downloads directory location %s", type: .debug, downloadsDirectory.absoluteString) + Logger.general.debug("Downloads directory location \(self.downloadsDirectory.absoluteString)") } private func createDownloadsDirectoryIfNeeded() { @@ -157,7 +158,7 @@ class DownloadManager { try FileManager.default.moveItem(at: location, to: newPath) download.location = newPath } catch { - os_log("Error moving file to downloads directory: %s", type: .debug, error.localizedDescription) + Logger.general.error("Error moving file to downloads directory: \(error.localizedDescription, privacy: .public)") } } diff --git a/DuckDuckGo/DownloadsListViewModel.swift b/DuckDuckGo/DownloadsListViewModel.swift index 2e9ab7b75a..4bb8d04896 100644 --- a/DuckDuckGo/DownloadsListViewModel.swift +++ b/DuckDuckGo/DownloadsListViewModel.swift @@ -21,6 +21,7 @@ import SwiftUI import Combine import Common import Core +import os.log class DownloadsListViewModel: ObservableObject { @@ -31,25 +32,21 @@ class DownloadsListViewModel: ObservableObject { private var subscribers: Set = [] init(dataSource: DownloadsListDataSource) { - os_log("DownloadsListViewModel init", log: .generalLog, type: .debug) - + Logger.general.debug("DownloadsListViewModel init") + self.dataSource = dataSource dataSource.$model .sink { [weak self] in - os_log("DownloadsListViewModel changed - ongoing:%d complete:%d", - log: .generalLog, - type: .debug, - $0.ongoingDownloads.count, - $0.completeDownloads.count) - + Logger.general.debug("DownloadsListViewModel changed - ongoing:\($0.ongoingDownloads.count) complete:\($0.completeDownloads.count)") + self?.sections = DownloadsListSectioningHelper().makeSections(from: $0.ongoingDownloads + $0.completeDownloads) } .store(in: &subscribers) } deinit { - os_log("DownloadsListViewModel deinit", log: .generalLog, type: .debug) + Logger.general.debug("DownloadsListViewModel deinit") } // MARK: - Intents @@ -72,7 +69,7 @@ class DownloadsListViewModel: ObservableObject { presentDeleteConfirmation(message: message, undoHandler: undoHandler) case .failure(let error): - os_log("Error deleting a download %s", log: .generalLog, type: .debug, error.localizedDescription) + Logger.general.error("Error deleting a download: \(error.localizedDescription, privacy: .public)") } } } @@ -85,7 +82,7 @@ class DownloadsListViewModel: ObservableObject { presentDeleteConfirmation(message: UserText.messageAllFilesDeleted, undoHandler: undoHandler) case .failure(let error): - os_log("Error deleting all downloads %s", log: .generalLog, type: .debug, error.localizedDescription) + Logger.general.error("Error deleting all downloads: \(error.localizedDescription, privacy: .public)") } } } diff --git a/DuckDuckGo/DuckPlayer/DuckPlayerNavigationHandler.swift b/DuckDuckGo/DuckPlayer/DuckPlayerNavigationHandler.swift index fbb6c0ae9f..bf9fc77e1b 100644 --- a/DuckDuckGo/DuckPlayer/DuckPlayerNavigationHandler.swift +++ b/DuckDuckGo/DuckPlayer/DuckPlayerNavigationHandler.swift @@ -24,6 +24,7 @@ import Core import Common import BrowserServicesKit import DuckPlayer +import os.log final class DuckPlayerNavigationHandler { @@ -113,7 +114,7 @@ final class DuckPlayerNavigationHandler { if let (videoID, _) = url.youtubeVideoParams, videoID == lastHandledVideoID { - os_log("DP: URL (%s) already handled, skipping", log: .duckPlayerLog, type: .debug, url.absoluteString) + Logger.duckPlayer.debug("URL (\(url.absoluteString) already handled, skipping") return } @@ -130,7 +131,7 @@ final class DuckPlayerNavigationHandler { let (videoID, timestamp) = url.youtubeVideoParams, duckPlayer.settings.mode == .enabled || duckPlayer.settings.mode == .alwaysAsk { - os_log("DP: Handling URL change: %s", log: .duckPlayerLog, type: .debug, url.absoluteString) + Logger.duckPlayer.debug("Handling URL change: \(url.absoluteString)") webView.load(URLRequest(url: URL.duckPlayer(videoID, timestamp: timestamp))) lastHandledVideoID = videoID } @@ -145,8 +146,8 @@ extension DuckPlayerNavigationHandler: DuckNavigationHandling { @MainActor func handleNavigation(_ navigationAction: WKNavigationAction, webView: WKWebView) { - os_log("DP: Handling DuckPlayer Player Navigation for %s", log: .duckPlayerLog, type: .debug, navigationAction.request.url?.absoluteString ?? "") - + Logger.duckPlayer.debug("Handling DuckPlayer Player Navigation for \(navigationAction.request.url?.absoluteString ?? "")") + // This is passed to the FE overlay at init to disable the overlay for one video duckPlayer.settings.allowFirstVideo = false @@ -202,7 +203,7 @@ extension DuckPlayerNavigationHandler: DuckNavigationHandling { !url.hasWatchInYoutubeQueryParameter { let newRequest = Self.makeDuckPlayerRequest(from: URLRequest(url: url)) - os_log("DP: Loading Simulated Request for %s", log: .duckPlayerLog, type: .debug, navigationAction.request.url?.absoluteString ?? "") + Logger.duckPlayer.debug("DP: Loading Simulated Request for \(navigationAction.request.url?.absoluteString ?? "")") DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { self.performRequest(request: newRequest, webView: webView) @@ -235,7 +236,7 @@ extension DuckPlayerNavigationHandler: DuckNavigationHandling { if let (videoID, _) = url.youtubeVideoParams, videoID == lastHandledVideoID, !url.hasWatchInYoutubeQueryParameter { - os_log("DP: DecidePolicy: URL (%s) already handled, skipping", log: .duckPlayerLog, type: .debug, url.absoluteString) + Logger.duckPlayer.debug("DP: DecidePolicy: URL (\(url.absoluteString)) already handled, skipping") completion(.cancel) return } @@ -260,7 +261,7 @@ extension DuckPlayerNavigationHandler: DuckNavigationHandling { if url.isYoutubeVideo, !url.isDuckPlayer, duckPlayer.settings.mode == .enabled || duckPlayer.settings.mode == .alwaysAsk { - os_log("DP: Handling decidePolicy for Duck Player with %s", log: .duckPlayerLog, type: .debug, url.absoluteString) + Logger.duckPlayer.debug("DP: Handling decidePolicy for Duck Player with \(url.absoluteString)") completion(.cancel) handleURLChange(url: url, webView: webView) return @@ -282,7 +283,7 @@ extension DuckPlayerNavigationHandler: DuckNavigationHandling { @MainActor func handleGoBack(webView: WKWebView) { - os_log("DP: Handling Back Navigation", log: .duckPlayerLog, type: .debug) + Logger.duckPlayer.debug("DP: Handling Back Navigation") guard featureFlagger.isFeatureOn(.duckPlayer) else { webView.goBack() @@ -309,10 +310,10 @@ extension DuckPlayerNavigationHandler: DuckNavigationHandling { } if let nonYoutubeItem = nonYoutubeItem { - os_log("DP: Navigating back to %s", log: .duckPlayerLog, type: .debug, nonYoutubeItem.url.absoluteString) + Logger.duckPlayer.debug("DP: Navigating back to \(nonYoutubeItem.url.absoluteString)") webView.go(to: nonYoutubeItem) } else { - os_log("DP: Navigating back to previous page", log: .duckPlayerLog, type: .debug) + Logger.duckPlayer.debug("DP: Navigating back to previous page") webView.goBack() } } @@ -332,7 +333,7 @@ extension DuckPlayerNavigationHandler: DuckNavigationHandling { !url.isDuckURLScheme, let (videoID, timestamp) = url.youtubeVideoParams, duckPlayer.settings.mode == .enabled || duckPlayer.settings.mode == .alwaysAsk { - os_log("DP: Handling DuckPlayer Reload for %s", log: .duckPlayerLog, type: .debug, url.absoluteString) + Logger.duckPlayer.debug("DP: Handling DuckPlayer Reload for \(url.absoluteString)") webView.load(URLRequest(url: .duckPlayer(videoID, timestamp: timestamp))) } else { webView.reload() @@ -349,7 +350,7 @@ extension DuckPlayerNavigationHandler: DuckNavigationHandling { if let url = webView.url, url.isDuckPlayer, !url.isDuckURLScheme, duckPlayer.settings.mode == .enabled || duckPlayer.settings.mode == .alwaysAsk { - os_log("DP: Handling Initial Load of a video for %s", log: .duckPlayerLog, type: .debug, url.absoluteString) + Logger.duckPlayer.debug("DP: Handling Initial Load of a video for \(url.absoluteString)") handleReload(webView: webView) } diff --git a/DuckDuckGo/DuckPlayer/DuckPlayerStorage.swift b/DuckDuckGo/DuckPlayer/DuckPlayerStorage.swift index 3e83f3ea24..16b74312bb 100644 --- a/DuckDuckGo/DuckPlayer/DuckPlayerStorage.swift +++ b/DuckDuckGo/DuckPlayer/DuckPlayerStorage.swift @@ -20,6 +20,7 @@ import Core import Foundation import Common +import os.log protocol DuckPlayerStorage { /// Description: Checks whether the user has seen and interacted with (i.e. clicked any button) the Duck Player overlay on a YouTube video. @@ -30,8 +31,8 @@ protocol DuckPlayerStorage { struct DefaultDuckPlayerStorage: DuckPlayerStorage { @UserDefaultsWrapper(key: .userInteractedWithDuckPlayer, defaultValue: false) var userInteractedWithDuckPlayer: Bool { - didSet { - os_log("DP: Flagging userInteractedWithDuckPlayer [%@]", log: .duckPlayerLog, type: .debug, userInteractedWithDuckPlayer ? "true" : "false") + didSet(newValue) { + Logger.duckPlayer.debug("Flagging userInteractedWithDuckPlayer [\(newValue ? "true" : "false")]") } } } diff --git a/DuckDuckGo/Favicons.swift b/DuckDuckGo/Favicons.swift index 567a617e5b..7cf63d3b91 100644 --- a/DuckDuckGo/Favicons.swift +++ b/DuckDuckGo/Favicons.swift @@ -23,6 +23,7 @@ import Kingfisher import UIKit import LinkPresentation import WidgetKit +import os.log public class Favicons { diff --git a/DuckDuckGo/FeedbackSender.swift b/DuckDuckGo/FeedbackSender.swift index 370d21185a..5b81262044 100644 --- a/DuckDuckGo/FeedbackSender.swift +++ b/DuckDuckGo/FeedbackSender.swift @@ -20,7 +20,7 @@ import Foundation import Core import BrowserServicesKit -import Common +import os.log import Networking /// Represents single component that is being sent to the server. @@ -94,9 +94,9 @@ struct FeedbackSubmitter: FeedbackSender { request.fetch { _, error in if let error = error { - os_log("Feedback request failed, %s", log: .generalLog, type: .debug, error.localizedDescription) + Logger.general.error("Feedback request failed: \(error.localizedDescription, privacy: .public)") } else { - os_log("Feedback response successful", log: .generalLog, type: .debug) + Logger.general.debug("Feedback response successful") } } } diff --git a/DuckDuckGo/ImageCacheDebugViewController.swift b/DuckDuckGo/ImageCacheDebugViewController.swift index 49743b47b6..1c6cd52b1c 100644 --- a/DuckDuckGo/ImageCacheDebugViewController.swift +++ b/DuckDuckGo/ImageCacheDebugViewController.swift @@ -26,6 +26,7 @@ import Persistence import BrowserServicesKit import Common import Kingfisher +import os.log class ImageCacheDebugViewController: UITableViewController { @@ -135,7 +136,7 @@ class ImageCacheDebugViewController: UITableViewController { } } } catch { - os_log("Failed to fetch accounts") + Logger.general.error("Failed to fetch accounts: \(error.localizedDescription)") } } diff --git a/DuckDuckGo/MainViewController+Segues.swift b/DuckDuckGo/MainViewController+Segues.swift index 47ff957de8..909d383c74 100644 --- a/DuckDuckGo/MainViewController+Segues.swift +++ b/DuckDuckGo/MainViewController+Segues.swift @@ -25,11 +25,12 @@ import BrowserServicesKit import SwiftUI import PrivacyDashboard import Subscription +import os.log extension MainViewController { func segueToDaxOnboarding() { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() var controller: (Onboarding & UIViewController)? @@ -50,7 +51,7 @@ extension MainViewController { } func segueToHomeRow() { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() let storyboard = UIStoryboard(name: "HomeRow", bundle: nil) guard let controller = storyboard.instantiateInitialViewController() else { @@ -62,13 +63,13 @@ extension MainViewController { } func segueToBookmarks() { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() launchBookmarksViewController() } func segueToEditCurrentBookmark() { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() guard let link = currentTab?.link, let bookmark = menuBookmarksViewModel.favorite(for: link.url) ?? @@ -80,7 +81,7 @@ extension MainViewController { } func segueToEditBookmark(_ bookmark: BookmarkEntity) { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() launchBookmarksViewController { $0.openEditFormForBookmark(bookmark) @@ -88,7 +89,7 @@ extension MainViewController { } private func launchBookmarksViewController(completion: ((BookmarksViewController) -> Void)? = nil) { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) let storyboard = UIStoryboard(name: "Bookmarks", bundle: nil) let bookmarks = storyboard.instantiateViewController(identifier: "BookmarksViewController") { coder in @@ -109,7 +110,7 @@ extension MainViewController { } func segueToActionSheetDaxDialogWithSpec(_ spec: DaxDialogs.ActionSheetSpec) { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() if spec == DaxDialogs.ActionSheetSpec.fireButtonEducation { @@ -128,7 +129,7 @@ extension MainViewController { } func segueToReportBrokenSite(entryPoint: PrivacyDashboardEntryPoint = .report) { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() guard let currentURL = currentTab?.url, @@ -181,7 +182,7 @@ extension MainViewController { } func segueToNegativeFeedbackForm(isFromBrokenSiteReportFlow: Bool = false) { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() let feedbackPicker = FeedbackPickerViewController.loadFromStoryboard() @@ -196,7 +197,7 @@ extension MainViewController { } func segueToDownloads() { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() let storyboard = UIStoryboard(name: "Downloads", bundle: nil) @@ -208,7 +209,7 @@ extension MainViewController { } func segueToTabSwitcher() { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() let storyboard = UIStoryboard(name: "TabSwitcher", bundle: nil) @@ -233,13 +234,13 @@ extension MainViewController { } func segueToSettings() { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() launchSettings() } func segueToPrivacyPro() { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() launchSettings { $0.triggerDeepLinkNavigation(to: .subscriptionFlow()) @@ -247,7 +248,7 @@ extension MainViewController { } func segueToSubscriptionRestoreFlow() { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() launchSettings { $0.triggerDeepLinkNavigation(to: .restoreFlow) @@ -255,13 +256,13 @@ extension MainViewController { } func segueToDebugSettings() { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() launchDebugSettings() } func segueToSettingsCookiePopupManagement() { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() launchSettings { $0.openCookiePopupManagement() @@ -269,7 +270,7 @@ extension MainViewController { } func segueToSettingsLoginsWithAccount(_ account: SecureVaultModels.WebsiteAccount) { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() launchSettings { $0.shouldPresentLoginsViewWithAccount(accountDetails: account) @@ -277,7 +278,7 @@ extension MainViewController { } func segueToSettingsSync() { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() launchSettings { $0.presentLegacyView(.sync) @@ -319,7 +320,7 @@ extension MainViewController { } private func launchDebugSettings(completion: ((RootDebugViewController) -> Void)? = nil) { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) let storyboard = UIStoryboard(name: "Debug", bundle: nil) let settings = storyboard.instantiateViewController(identifier: "DebugMenu") { coder in @@ -338,7 +339,7 @@ extension MainViewController { } private func hideAllHighlightsIfNeeded() { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) if !DaxDialogs.shared.shouldShowFireButtonPulse { ViewHighlighter.hideAll() } diff --git a/DuckDuckGo/MainViewController.swift b/DuckDuckGo/MainViewController.swift index 13697f4d82..6674a5b641 100644 --- a/DuckDuckGo/MainViewController.swift +++ b/DuckDuckGo/MainViewController.swift @@ -34,6 +34,7 @@ import Suggestions import Subscription import SwiftUI import NetworkProtection +import os.log class MainViewController: UIViewController { @@ -888,7 +889,7 @@ class MainViewController: UIViewController { func loadQueryInNewTab(_ query: String, reuseExisting: Bool = false) { dismissOmniBar() guard let url = URL.makeSearchURL(query: query) else { - os_log("Couldn‘t form URL for query “%s”", log: .lifecycleLog, type: .error, query) + Logger.lifecycle.error("Couldn‘t form URL for query: \(query, privacy: .public)") return } loadUrlInNewTab(url, reuseExisting: reuseExisting, inheritedAttribution: nil) @@ -934,11 +935,7 @@ class MainViewController: UIViewController { fileprivate func loadQuery(_ query: String) { guard let url = URL.makeSearchURL(query: query, queryContext: currentTab?.url) else { - os_log("Couldn‘t form URL for query “%s” with context “%s”", - log: .lifecycleLog, - type: .error, - query, - currentTab?.url?.absoluteString ?? "") + os_log("Couldn‘t form URL for query “\(query, privacy: .public)” with context “\(self.currentTab?.url?.absoluteString ?? "", privacy: .public)”") return } // Make sure that once query is submitted, we don't trigger the non-SERP flow @@ -1512,7 +1509,7 @@ class MainViewController: UIViewController { @objc private func onNetworkProtectionAccountSignIn(_ notification: Notification) { tunnelDefaults.resetEntitlementMessaging() - os_log("[NetP Subscription] Reset expired entitlement messaging", log: .networkProtection, type: .info) + Logger.networkProtection.info("[NetP Subscription] Reset expired entitlement messaging") } var networkProtectionTunnelController: NetworkProtectionTunnelController { @@ -1997,7 +1994,7 @@ extension MainViewController: AutocompleteViewControllerDelegate { if let url = URL.makeSearchURL(text: phrase) { loadUrl(url) } else { - os_log("Couldn‘t form URL for suggestion “%s”", log: .lifecycleLog, type: .error, phrase) + Logger.lifecycle.error("Couldn‘t form URL for suggestion: \(phrase, privacy: .public)") } case .website(url: let url): if url.isBookmarklet() { diff --git a/DuckDuckGo/OmniBar.swift b/DuckDuckGo/OmniBar.swift index b6f80f5dc7..0272bdec42 100644 --- a/DuckDuckGo/OmniBar.swift +++ b/DuckDuckGo/OmniBar.swift @@ -23,6 +23,7 @@ import Core import PrivacyDashboard import DesignResourcesKit import DuckPlayer +import os.log extension OmniBar: NibLoading {} @@ -350,7 +351,7 @@ class OmniBar: UIView { fileprivate func refreshState(_ newState: OmniBarState) { if state.name != newState.name { - os_log("OmniBar entering %s from %s", log: .generalLog, type: .debug, newState.name, state.name) + Logger.general.debug("OmniBar entering \(newState.name) from \(self.state.name)") if newState.clearTextOnStart { clear() } diff --git a/DuckDuckGo/PassKitPreviewHelper.swift b/DuckDuckGo/PassKitPreviewHelper.swift index 588f355d54..81ba8ef725 100644 --- a/DuckDuckGo/PassKitPreviewHelper.swift +++ b/DuckDuckGo/PassKitPreviewHelper.swift @@ -20,6 +20,7 @@ import Common import UIKit import PassKit +import os.log class PassKitPreviewHelper: FilePreview { private weak var viewController: UIViewController? @@ -38,7 +39,7 @@ class PassKitPreviewHelper: FilePreview { viewController?.present(controller, animated: true) } } catch { - os_log("Can't present passkit: %{public}s", type: .error, error.localizedDescription) + Logger.general.error("Can't present passkit: \(error.localizedDescription, privacy: .public)") } } } diff --git a/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift b/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift index 7bcaa5299f..da08abaa34 100644 --- a/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift +++ b/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift @@ -24,6 +24,7 @@ import Core import BrowserServicesKit import PrivacyDashboard import Common +import os.log extension PixelExperiment { @@ -250,7 +251,7 @@ extension PrivacyDashboardViewController: PrivacyDashboardControllerDelegate { let report = try await makeBrokenSiteReport(category: category, description: description, source: privacyDashboardController.source) try brokenSiteReporter.report(report, reportMode: .regular) } catch { - os_log("Failed to generate or send the broken site report: %@", type: .error, error.localizedDescription) + Logger.privacyDashboard.error("Failed to generate or send the broken site report: \(error.localizedDescription, privacy: .public)") } let message = PixelExperiment.cohort == .control ? UserText.feedbackSumbittedConfirmation : UserText.brokenSiteReportSuccessToast ActionMessageView.present(message: message) diff --git a/DuckDuckGo/RootDebugViewController+VanillaBrowser.swift b/DuckDuckGo/RootDebugViewController+VanillaBrowser.swift index 58c6c2c5d6..c2900f153e 100644 --- a/DuckDuckGo/RootDebugViewController+VanillaBrowser.swift +++ b/DuckDuckGo/RootDebugViewController+VanillaBrowser.swift @@ -23,6 +23,7 @@ import SwiftUI import WebKit import Core import Common +import os.log extension RootDebugViewController { @@ -40,7 +41,7 @@ extension RootDebugViewController { }() fileprivate func openVanillaBrowser(url: URL) { - os_log(.debug, "Vanilla Browser open URL %s", url.absoluteString) + Logger.lifecycle.debug("Vanilla Browser open URL \(url.absoluteString)") let browserView = BareBonesBrowserView(initialURL: url, homeURL: RootDebugViewController.ddgURL, uiDelegate: nil, diff --git a/DuckDuckGo/SecureVaultReporter.swift b/DuckDuckGo/SecureVaultReporter.swift index d1339acbce..40d94c8b94 100644 --- a/DuckDuckGo/SecureVaultReporter.swift +++ b/DuckDuckGo/SecureVaultReporter.swift @@ -22,6 +22,7 @@ import BrowserServicesKit import Core import Common import SecureStorage +import os.log final class SecureVaultKeyStoreEventMapper: EventMapping { public init() { @@ -70,10 +71,7 @@ final class SecureVaultReporter: SecureVaultReporting { let secureVaultError = error as? SecureStorageError, let userInfo = secureVaultError.errorUserInfo["NSUnderlyingError"] as? NSError, userInfo.code == -25308 { - os_log("SecureVault attempt to access keystore while device is locked: %@", - log: .generalLog, - type: .debug, - error.localizedDescription) + Logger.general.error("SecureVault attempt to access keystore while device is locked: \(error.localizedDescription, privacy: .public)") return } DailyPixel.fire(pixel: .secureVaultInitFailedError, error: error, withAdditionalParameters: pixelParams) diff --git a/DuckDuckGo/SyncSettingsViewController.swift b/DuckDuckGo/SyncSettingsViewController.swift index 25ff94a2ed..69b5a6b4a0 100644 --- a/DuckDuckGo/SyncSettingsViewController.swift +++ b/DuckDuckGo/SyncSettingsViewController.swift @@ -23,6 +23,7 @@ import Combine import SyncUI import DDGSync import Common +import os.log @MainActor class SyncSettingsViewController: UIHostingController { @@ -273,7 +274,7 @@ class SyncSettingsViewController: UIHostingController { mapDevices(devices) } catch { // Not displaying error since there is the spinner and it is called every few seconds - os_log(error.localizedDescription, log: .syncLog, type: .error) + Logger.sync.error("Error: \(error.localizedDescription, privacy: .public)") } } } diff --git a/DuckDuckGo/TabManager.swift b/DuckDuckGo/TabManager.swift index 3b1b0f2568..8fab58859b 100644 --- a/DuckDuckGo/TabManager.swift +++ b/DuckDuckGo/TabManager.swift @@ -24,6 +24,7 @@ import WebKit import BrowserServicesKit import Persistence import History +import os.log class TabManager { @@ -101,7 +102,7 @@ class TabManager { if let controller = controller(for: tab) { return controller } else if createIfNeeded { - os_log("Tab not in cache, creating", log: .generalLog, type: .debug) + Logger.general.debug("Tab not in cache, creating") let controller = buildController(forTab: tab, inheritedAttribution: nil) tabControllerCache.append(controller) return controller diff --git a/DuckDuckGo/TabSwitcherViewController.swift b/DuckDuckGo/TabSwitcherViewController.swift index 733612070e..5256e21bc9 100644 --- a/DuckDuckGo/TabSwitcherViewController.swift +++ b/DuckDuckGo/TabSwitcherViewController.swift @@ -24,6 +24,7 @@ import DDGSync import WebKit import Bookmarks import Persistence +import os.log class TabSwitcherViewController: UIViewController { @@ -223,7 +224,7 @@ class TabSwitcherViewController: UIViewController { ActionMessageView.present(message: UserText.bookmarkAllTabsSaved) } else { let failedToSaveCount = openTabsCount - results.newCount - results.existingCount - os_log("Failed to save %d tabs", log: .generalLog, type: .debug, failedToSaveCount) + Logger.general.debug("Failed to save \(failedToSaveCount) tabs") ActionMessageView.present(message: UserText.bookmarkAllTabsFailedToSave) } } diff --git a/DuckDuckGo/TabViewController.swift b/DuckDuckGo/TabViewController.swift index 8275e7d1e2..5d64d7b476 100644 --- a/DuckDuckGo/TabViewController.swift +++ b/DuckDuckGo/TabViewController.swift @@ -37,6 +37,7 @@ import SecureStorage import History import ContentScopeScripts import NetworkProtection +import os.log class TabViewController: UIViewController { @@ -700,7 +701,7 @@ class TabViewController: UIViewController { title = webView.title default: - os_log("Unhandled keyPath %s", log: .generalLog, type: .debug, keyPath) + Logger.general.debug("Unhandled keyPath \(keyPath)") } } @@ -1211,7 +1212,7 @@ extension TabViewController: WKNavigationDelegate { } private func onWebpageDidStartLoading(httpsForced: Bool) { - os_log("webpageLoading started", log: .generalLog, type: .debug) + Logger.general.debug("webpageLoading started") // Only fire when on the same page that the without trackers Dax Dialog was shown self.fireWoFollowUp = false @@ -1361,7 +1362,7 @@ extension TabViewController: WKNavigationDelegate { } private func onWebpageDidFinishLoading() { - os_log("webpageLoading finished", log: .generalLog, type: .debug) + Logger.general.debug("webpageLoading finished") tabModel.link = link delegate?.tabLoadingStateDidChange(tab: self) @@ -1482,7 +1483,7 @@ extension TabViewController: WKNavigationDelegate { } private func webpageDidFailToLoad() { - os_log("webpageLoading failed", log: .generalLog, type: .debug) + Logger.general.debug("webpageLoading failed") if isError { showBars(animated: true) privacyInfo = nil diff --git a/DuckDuckGo/TabsModelPersistenceExtension.swift b/DuckDuckGo/TabsModelPersistenceExtension.swift index a7a046b890..df815e5fce 100644 --- a/DuckDuckGo/TabsModelPersistenceExtension.swift +++ b/DuckDuckGo/TabsModelPersistenceExtension.swift @@ -19,7 +19,7 @@ import Foundation import Core -import Common +import os.log extension TabsModel { @@ -40,7 +40,7 @@ extension TabsModel { throw error } } catch { - os_log("Something went wrong unarchiving TabsModel %@", log: .generalLog, type: .error, error.localizedDescription) + Logger.general.error("Something went wrong unarchiving TabsModel \(error.localizedDescription, privacy: .public)") } return tabsModel } @@ -54,7 +54,7 @@ extension TabsModel { let data = try NSKeyedArchiver.archivedData(withRootObject: self, requiringSecureCoding: false) UserDefaults.app.set(data, forKey: Constants.key) } catch { - os_log("Something went wrong archiving TabsModel %@", log: .generalLog, type: .error, error.localizedDescription) + Logger.general.error("Something went wrong archiving TabsModel: \(error.localizedDescription, privacy: .public)") } } } diff --git a/DuckDuckGo/UserAuthenticator.swift b/DuckDuckGo/UserAuthenticator.swift index 2c29616776..b49310c02c 100644 --- a/DuckDuckGo/UserAuthenticator.swift +++ b/DuckDuckGo/UserAuthenticator.swift @@ -21,6 +21,7 @@ import Common import Foundation import LocalAuthentication import Core +import os.log class UserAuthenticator { enum AuthError: Error, Equatable { @@ -75,7 +76,7 @@ class UserAuthenticator { self?.state = .loggedIn completion?(nil) } else { - os_log("Failed to authenticate: %s", log: .generalLog, type: .debug, error?.localizedDescription ?? "nil error") + Logger.general.error("Failed to authenticate: \(error?.localizedDescription ?? "nil", privacy: .public)") completion?(.failedToAuthenticate) } } diff --git a/DuckDuckGo/WebContainerViewController.swift b/DuckDuckGo/WebContainerViewController.swift index 439bf07385..28718b15b7 100644 --- a/DuckDuckGo/WebContainerViewController.swift +++ b/DuckDuckGo/WebContainerViewController.swift @@ -22,6 +22,7 @@ import Core import UIKit import WebKit import Networking +import os.log /// Use title property to set the displayed title class WebContainerViewController: UIViewController { @@ -85,7 +86,7 @@ class WebContainerViewController: UIViewController { progress = Float(webView?.estimatedProgress ?? 0.0) default: - os_log("Unhandled keyPath %s", log: .generalLog, type: .debug, keyPath) + Logger.general.debug("Unhandled keyPath \(keyPath)") } } diff --git a/DuckDuckGo/ZippedPassKitPreviewHelper.swift b/DuckDuckGo/ZippedPassKitPreviewHelper.swift index 0213ccc7d2..781f3e0a7a 100644 --- a/DuckDuckGo/ZippedPassKitPreviewHelper.swift +++ b/DuckDuckGo/ZippedPassKitPreviewHelper.swift @@ -22,6 +22,7 @@ import Foundation import UIKit import PassKit import ZIPFoundation +import os.log class ZippedPassKitPreviewHelper: FilePreview { private weak var viewController: UIViewController? @@ -39,10 +40,10 @@ class ZippedPassKitPreviewHelper: FilePreview { let controller = PKAddPassesViewController(passes: passes) { viewController?.present(controller, animated: true) } else { - os_log("Can't present passkit: No valid passes in passes file", type: .error) + Logger.general.error("Can't present passkit: No valid passes in passes file") } } catch { - os_log("Can't present passkit: %{public}s", type: .error, error.localizedDescription) + Logger.general.error("Can't present passkit: \(error.localizedDescription, privacy: .public)") } } diff --git a/DuckDuckGo/en.lproj/Localizable.strings b/DuckDuckGo/en.lproj/Localizable.strings index b8e7ba707d..d2339932ce 100644 --- a/DuckDuckGo/en.lproj/Localizable.strings +++ b/DuckDuckGo/en.lproj/Localizable.strings @@ -1,2726 +1 @@ -/* Buton label for Edit action */ -"action.generic.edit" = "Edit"; - -/* Button label for a generic show action */ -"action.generic.show" = "Show"; - -/* Button label for Undo action */ -"action.generic.undo" = "Undo"; - -/* Button label for managing favorites */ -"action.manage.favorites" = "Manage"; - -/* Button label for OK action */ -"action.ok" = "OK"; - -/* Add action - button shown in alert */ -"action.title.add" = "Add"; - -/* Autofill Logins menu item opening the login list */ -"action.title.autofill.logins" = "Passwords"; - -/* Confirmation of Add to Bookmarks action in Add All Open Tabs to Bookmarks alert */ -"action.title.bookmark" = "Bookmark"; - -/* Button: Open bookmarks list */ -"action.title.bookmarks" = "Bookmarks"; - -/* Cancel action - button shown in alert */ -"action.title.cancel" = "Cancel"; - -/* Copy action */ -"action.title.copy" = "Copy"; - -/* Floating message indicating URL has been copied */ -"action.title.copy.message" = "URL copied"; - -/* Delete action - button shown in alert */ -"action.title.delete" = "Delete"; - -/* Disable protection action */ -"action.title.disable.protection" = "Disable Privacy Protection"; - -/* Downloads menu item opening the downlods list */ -"action.title.downloads" = "Downloads"; - -/* Edit Bookmark action */ -"action.title.edit.bookmark" = "Edit Bookmark"; - -/* Enable protection action */ -"action.title.enable.protection" = "Enable Privacy Protection"; - -/* No comment provided by engineer. */ -"action.title.forgetAll" = "Close Tabs and Clear Data"; - -/* Confirmation message */ -"action.title.forgetAllDone" = "Tabs and data cleared"; - -/* Open in New Background Tab action */ -"action.title.newBackgroundTabForUrl" = "Open in Background"; - -/* Create New Tab action */ -"action.title.newTabAction" = "New"; - -/* Open in New Tab action */ -"action.title.newTabForUrl" = "Open in New Tab"; - -/* Open action */ -"action.title.open" = "Open"; - -/* Paste and Go action */ -"action.title.pasteAndGo" = "Paste & Go"; - -/* Print action */ -"action.title.print" = "Print"; - -/* Refresh action - button shown in alert */ -"action.title.refresh" = "Refresh"; - -/* Remove Favorite action */ -"action.title.remove.favorite" = "Remove Favorite"; - -/* Report broken site action */ -"action.title.reportBrokenSite" = "Report Broken Site"; - -/* Action to reload current page in desktop mode */ -"action.title.request.desktop.site" = "Desktop Site"; - -/* Action to reload current page in mobile mode */ -"action.title.request.mobile.site" = "Mobile Site"; - -/* Save action - button shown in alert */ -"action.title.save" = "Save"; - -/* Add to Bookmarks action */ -"action.title.save.bookmark" = "Add Bookmark"; - -/* Add to Favorites action */ -"action.title.save.favorite" = "Add Favorite"; - -/* Settings action */ -"action.title.settings" = "Settings"; - -/* Share action */ -"action.title.share" = "Share"; - -/* Settings label for bottom position for the address bar */ -"address.bar.bottom" = "Bottom"; - -/* Settings label for top position for the address bar */ -"address.bar.top" = "Top"; - -/* No comment provided by engineer. */ -"addWidget.button" = "Add Widget"; - -/* No comment provided by engineer. */ -"addWidget.description" = "Get quick access to private search and the sites you love."; - -/* No comment provided by engineer. */ -"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; - -/* Replacement string is a plus button icon. */ -"addWidget.settings.secondParagraph.%@" = "Tap the plus %@ button."; - -/* No comment provided by engineer. */ -"addWidget.settings.title" = "Find and select DuckDuckGo. Then choose a widget."; - -/* No comment provided by engineer. */ -"addWidget.title" = "One tap to your favorite sites."; - -/* No comment provided by engineer. */ -"alert.message.bookmarkAll" = "Existing bookmarks will not be duplicated."; - -/* Description for alert shown when sync error occurs because of bad bookmarks data */ -"alert.sync-bookmarks-bad-data-error-description" = "Some bookmarks are formatted incorrectly or too long and were not synced."; - -/* Description for alert shown when sync bookmarks paused for too many items */ -"alert.sync-bookmarks-paused-description" = "You've reached the maximum number of bookmarks. Please delete some bookmarks to resume sync."; - -/* Title for alert shown when sync bookmarks paused for too many items */ -"alert.sync-bookmarks-paused-title" = "Bookmark Sync is Paused"; - -/* Description for alert shown when sync error occurs because of bad credentials data */ -"alert.sync-credentials-bad-data-error-description" = "Some passwords are formatted incorrectly or too long and were not synced."; - -/* Description for alert shown when sync credentials paused for too many items */ -"alert.sync-credentials-paused-description" = "You've reached the maximum number of passwords. Please delete some passwords to resume sync."; - -/* Title for alert shown when sync credentials paused for too many items */ -"alert.sync-credentials-paused-title" = "Password Sync is Paused"; - -/* Title for sync error alert */ -"alert.sync-error" = "Sync & Backup Error"; - -/* Sync error alert action button title, takes the user to the sync settings page. */ -"alert.sync-error-action" = "Sync Settings"; - -/* Description for alert shown when user logged off from sync */ -"alert.sync-invalid-login-error-description" = "Sync has been paused. If you want to continue syncing this device, reconnect using another device or your recovery code."; - -/* Learn more button in alert */ -"alert.sync-paused-alert-learn-more-button" = "Learn More"; - -/* Confirmation button in alert */ -"alert.sync-paused-alert-ok-button" = "OK"; - -/* Title for alert shown when sync paused for an error */ -"alert.sync-paused-title" = "Sync is Paused"; - -/* Description for alert shown when sync error occurs because of too many requests */ -"alert.sync-too-many-requests-error-description" = "Sync & Backup is temporarily unavailable."; - -/* Title of the warning message that tells the user that there was an error with the sync feature. */ -"alert.sync.warning.sync-error" = "Sync Error"; - -/* Title of the warning message */ -"alert.sync.warning.sync-paused" = "Sync & Backup is Paused"; - -/* Question from confirmation dialog */ -"alert.title.bookmarkAll" = "Bookmark All Tabs?"; - -/* Disable protection alert */ -"alert.title.disable.protection" = "Add to Unprotected Sites"; - -/* Disable potection alert placeholder - leave as it is */ -"alert.title.disable.protection.placeholder" = "www.example.com"; - -/* Save Bookmark action */ -"alert.title.save.bookmark" = "Save Bookmark"; - -/* Save Favorite action */ -"alert.title.save.favorite" = "Save Favorite"; - -/* Description for unable to create recovery pdf error */ -"alert.unable-to-create-recovery-pdf-description" = "Unable to create the recovery PDF."; - -/* Description for unable to delete data error */ -"alert.unable-to-delete-data-description" = "Unable to delete data on the server."; - -/* Description for unable to merge two accounts error */ -"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; - -/* Description for unable to remove device error */ -"alert.unable-to-remove-device-description" = "Unable to remove this device from Sync & Backup."; - -/* Description for unable to sync to server error */ -"alert.unable-to-sync-to-server-description" = "Unable to connect to the server."; - -/* Description for unable to sync with another device error */ -"alert.unable-to-sync-with-other-device-description" = "Unable to Sync with another device."; - -/* Description for unable to turn sync off error */ -"alert.unable-to-turn-sync-off-description" = "Unable to turn Sync & Backup off."; - -/* Description for unable to update device name error */ -"alert.unable-to-update-device-name-description" = "Unable to update the device name."; - -/* Shown on authentication screen */ -"app.authentication.unlock" = "Unlock DuckDuckGo."; - -/* Authentication Alert Sign In Button */ -"auth.alert.login.button" = "Sign In"; - -/* Authentication Alert - populated with a domain name */ -"auth.alert.message.encrypted" = "Sign in to %@. Your login information will be sent securely."; - -/* Authentication Alert - populated with a domain name */ -"auth.alert.message.plain" = "Log in to %@. Your password will be sent insecurely because the connection is unencrypted."; - -/* Authentication Password field placeholder */ -"auth.alert.password.placeholder" = "Password"; - -/* Authentication Alert Title */ -"auth.alert.title" = "Authentication Required"; - -/* Authentication User name field placeholder */ -"auth.alert.username.placeholder" = "Username"; - -/* No comment provided by engineer. */ -"autoclear.off" = "Off"; - -/* No comment provided by engineer. */ -"autoclear.on" = "On"; - -/* Subtitle for search history items */ -"autocomplete.history.search.duckduckgo" = "Search DuckDuckGo"; - -/* The message text shown in suggestions */ -"autocomplete.history.warning.message" = "Search suggestions now include your recently visited sites. Turn off in Settings, or clear anytime with the 🔥 Fire Button."; - -/* Title for message show in suggestions */ -"autocomplete.history.warning.title" = "Same privacy.\nBetter search suggestions!"; - -/* Autoconsent for Cookie Management Setting state */ -"autoconsent.disabled" = "Disabled"; - -/* Autoconsent for Cookie Management Setting state */ -"autoconsent.enabled" = "Enabled"; - -/* No comment provided by engineer. */ -"autoconsent.info.header" = "When DuckDuckGo detects cookie consent pop-ups on sites you visit, we can try to automatically set your cookie preferences to minimize cookies and maximize privacy, then close the pop-ups. Some sites don't provide an option to manage cookie preferences, so we can only hide pop-ups like these."; - -/* Do not translate - stringsdict entry */ -"autofill.delete.all.passwords.completion" = "autofill.delete.all.passwords.completion"; - -/* Do not translate - stringsdict entry */ -"autofill.delete.all.passwords.confirmation.body" = "autofill.delete.all.passwords.confirmation.body"; - -/* Do not translate - stringsdict entry */ -"autofill.delete.all.passwords.confirmation.title" = "autofill.delete.all.passwords.confirmation.title"; - -/* Do not translate - stringsdict entry */ -"autofill.delete.all.passwords.sync.confirmation.body" = "autofill.delete.all.passwords.sync.confirmation.body"; - -/* Open Settings action for disabling autofill in Settings */ -"autofill.disable.prompt.action.open-settings" = "Open Settings"; - -/* Message for informing user that they can disable autofill in Settings */ -"autofill.disable.prompt.message" = "You can turn off password saving anytime."; - -/* Text link to email protection website */ -"autofill.enable.email.protection" = "Enable Email Protection"; - -/* Accessibility title for a Hide Password button replacing displayed password with ***** */ -"autofill.hide-password" = "Hide Password"; - -/* Button label to get link to download the desktop browser */ -"autofill.import.passwords.get-browser-button" = "Get Desktop Browser"; - -/* Step 1 for instructions to import passwords */ -"autofill.import.passwords.instructions.step1" = "Open DuckDuckGo on Mac or Windows"; - -/* Step 2 for instructions to import passwords. This reads as 'Go to Settings > Passwords' */ -"autofill.import.passwords.instructions.step2" = "Go to %1$@ > %2$@"; - -/* second parameter for autofill.import.passwords.instructions.step2 */ -"autofill.import.passwords.instructions.step2.passwords" = "Passwords"; - -/* first parameter for autofill.import.passwords.instructions.step2 */ -"autofill.import.passwords.instructions.step2.settings" = "Settings"; - -/* Step 3 for instructions to import passwords. This reads as 'Select Import Passwords and follow the steps' */ -"autofill.import.passwords.instructions.step3" = "Select %@ and follow the steps to import"; - -/* Parameter for autofill.import.passwords.instructions.step3 */ -"autofill.import.passwords.instructions.step3.import" = "Import Passwords..."; - -/* Step 4 for instructions to import passwords: Once imported on your computer you can set up sync on this iPhone|iPad|device */ -"autofill.import.passwords.instructions.step4" = "Once imported on your computer you can set up sync on this %@"; - -/* Title for section with instructions to import passwords */ -"autofill.import.passwords.instructions.title" = "Import from the desktop browser:"; - -/* Subtitle for screen to import passwords */ -"autofill.import.passwords.subtitle" = "Import passwords in the desktop version of the DuckDuckGo browser, then sync across devices."; - -/* Button label to sync passwords with desktop browser */ -"autofill.import.passwords.sync-button" = "Sync With Desktop"; - -/* Title for screen to import passwords */ -"autofill.import.passwords.title" = "How To Import Passwords"; - -/* Disable action for alert when asking the user if they want to keep using autofill */ -"autofill.keep-enabled.alert.disable" = "Disable"; - -/* Button displayed after saving/updating an autofill login that takes the user to the saved login */ -"autofill.login-save-action-button.toast" = "View"; - -/* Message displayed after saving an autofill login */ -"autofill.login-saved.toast" = "Password saved"; - -/* Message displayed after updating an autofill login */ -"autofill.login-updated.toast" = "Password updated"; - -/* Menu item text for copying autofill login details */ -"autofill.logins.copy-prompt" = "Copy %@"; - -/* Title for toast when copying address */ -"autofill.logins.copy-toast.address-copied" = "Address copied"; - -/* Title for toast when copying notes */ -"autofill.logins.copy-toast.notes-copied" = "Notes copied"; - -/* Title for toast when copying password */ -"autofill.logins.copy-toast.password-copied" = "Password copied"; - -/* Title for toast when copying username */ -"autofill.logins.copy-toast.username-copied" = "Username copied"; - -/* Title of button in prompt requiring authentication before all passwords are deleted */ -"autofill.logins.delete.all.authentication.prompt.button" = "Authenticate Now"; - -/* Title of prompt requiring authentication before all passwords are deleted */ -"autofill.logins.delete.all.authentication.prompt.title" = "Authenticate To Delete All Passwords"; - -/* Reason for authentication when deleting all logins */ -"autofill.logins.delete.all.authentication.reason" = "Authenticate to confirm you want to delete all passwords"; - -/* Address label for login details on autofill */ -"autofill.logins.details.address" = "Website URL"; - -/* Title for autofill login details */ -"autofill.logins.details.default-title" = "Password"; - -/* Delete button when deleting an autofill login */ -"autofill.logins.details.delete" = "Delete Password"; - -/* Autofill alert button confirming delete autofill login */ -"autofill.logins.details.delete-confirmation.button" = "Delete Password"; - -/* Title when editing autofill login details */ -"autofill.logins.details.edit-title" = "Edit Password"; - -/* Placeholder for password field on autofill login details */ -"autofill.logins.details.edit.password-placeholder" = "Password"; - -/* Placeholder for title field on autofill login details */ -"autofill.logins.details.edit.title-placeholder" = "Title"; - -/* Placeholder for url field on autofill login details */ -"autofill.logins.details.edit.url-placeholder" = "example.com"; - -/* Placeholder for userbane field on autofill login details */ -"autofill.logins.details.edit.username-placeholder" = "username@example.com"; - -/* Message displaying when the login was last updated */ -"autofill.logins.details.last-updated" = "Last updated %@"; - -/* Login name label for login details on autofill */ -"autofill.logins.details.login-name" = "Title"; - -/* Title when adding new autofill login */ -"autofill.logins.details.new-title" = "Add password"; - -/* Notes label for login details on autofill */ -"autofill.logins.details.notes" = "Notes"; - -/* Menu item title for option to open website from selected url */ -"autofill.logins.details.open-website-prompt.title" = "Open Website"; - -/* Password label for login details on autofill */ -"autofill.logins.details.password" = "Password"; - -/* Action text for alert when attempting to save a duplicate login */ -"autofill.logins.details.save-duplicate-alert.action" = "OK"; - -/* Message for alert when attempting to save a duplicate login */ -"autofill.logins.details.save-duplicate-alert.message" = "You already have a password saved for this username and website."; - -/* Title for alert when attempting to save a duplicate login */ -"autofill.logins.details.save-duplicate-alert.title" = "Duplicate Password"; - -/* Username label for login details on autofill */ -"autofill.logins.details.username" = "Username"; - -/* Title for button to Import Passwords when autofill has no items */ -"autofill.logins.empty-view.button.title" = "Import Passwords"; - -/* Subtitle for view displayed when no autofill passwords have been saved */ -"autofill.logins.empty-view.subtitle" = "Passwords from other browsers or apps can be imported using the desktop version of the DuckDuckGo browser."; - -/* Title for view displayed when autofill has no items */ -"autofill.logins.empty-view.title" = "No passwords saved yet"; - -/* Cancel button for auth when opening login list */ -"autofill.logins.list.auth.cancel" = "Cancel"; - -/* Reason for auth when opening login list */ -"autofill.logins.list.auth.reason" = "Unlock device to access passwords"; - -/* Title for close navigation button */ -"autofill.logins.list.close-title" = "Close"; - -/* Title for button to delete all saved autofill passwords */ -"autofill.logins.list.delete.all" = "Delete All"; - -/* Title for a toggle that enables autofill */ -"autofill.logins.list.enable" = "Save and autofill passwords"; - -/* Footer label displayed below table section with option to enable autofill */ -"autofill.logins.list.enable.footer" = "Passwords are stored securely on your device."; - -/* Toast message when a login item is deleted */ -"autofill.logins.list.login-deleted-message" = "Password for %@ deleted"; - -/* Toast message when a login item without a title is deleted */ -"autofill.logins.list.login-deleted-message-no-title" = "Password deleted"; - -/* Title for a button that allows a user to reset their list of never saved sites */ -"autofill.logins.list.never.saved" = "Reset Excluded Sites"; - -/* Cancel button for resetting list of never saved sites */ -"autofill.logins.list.never.saved.reset.action.cancel" = "Cancel"; - -/* Confirm button to reset list of never saved sites */ -"autofill.logins.list.never.saved.reset.action.confirm" = "Reset Excluded Sites"; - -/* Alert title */ -"autofill.logins.list.never.saved.reset.action.title" = "If you reset excluded sites, you will be prompted to save your password next time you sign in to any of these sites."; - -/* Placeholder for search field on autofill login listing */ -"autofill.logins.list.search-placeholder" = "Search passwords"; - -/* Section title for group of suggested saved logins */ -"autofill.logins.list.suggested" = "Suggested"; - -/* Title for screen listing autofill logins */ -"autofill.logins.list.title" = "Passwords"; - -/* Title for view displayed when autofill is locked on devices where a passcode has not been set */ -"autofill.logins.no-auth.subtitle" = "A passcode is required to protect your passwords."; - -/* Title for view displayed when autofill is locked on devices where a passcode has not been set */ -"autofill.logins.no-auth.title" = "Secure your device to save passwords"; - -/* Cancel button for auth during login prompt */ -"autofill.logins.prompt.auth.cancel" = "Cancel"; - -/* Reason for auth during login prompt */ -"autofill.logins.prompt.auth.reason" = "Unlock device to use saved password"; - -/* Title for section of autofill logins that are an exact match to the current website */ -"autofill.logins.prompt.exact.match.title" = "From this website"; - -/* Button title for autofill login prompt if more options are available */ -"autofill.logins.prompt.more-options" = "More Options"; - -/* Title for section of autofill logins that are an approximate match to the current website */ -"autofill.logins.prompt.partial.match.title" = "From %@"; - -/* Title of button for autofill login prompt to use a saved password for a website */ -"autofill.logins.prompt.password.button.title" = "Password for %@"; - -/* Title for autofill login prompt */ -"autofill.logins.prompt.title" = "Use a saved password?"; - -/* Subtitle displayed when there are no results on Autofill search, example : No Result (Title) for Duck (Subtitle) */ -"autofill.logins.search.no-results.subtitle" = "for '%@'"; - -/* Title displayed when there are no results on Autofill search */ -"autofill.logins.search.no-results.title" = "No Results"; - -/* Do not translate - stringsdict entry */ -"autofill.number.of.passwords" = "autofill.number.of.passwords"; - -/* Description of autofill onboarding prompt's secure storage feature - Description of autofill onboarding prompt's secure storage feature with a string describing the available biometry + passcode as a parameter */ -"autofill.onboarding.key-features.secure-storage.description" = "Passwords are encrypted, stored on device, and locked with %@."; - -/* Parameter for the description of autofill onboarding prompt's secure storage feature describing Face ID biometry + passcode */ -"autofill.onboarding.key-features.secure-storage.description.parameter.face-id" = "Face ID or passcode"; - -/* Parameter for the description of autofill onboarding prompt's secure storage feature describing passcode only if no biometry are available */ -"autofill.onboarding.key-features.secure-storage.description.parameter.passcode" = "passcode"; - -/* Parameter for the description of autofill onboarding prompt's secure storage feature describing Touch ID biometry + passcode */ -"autofill.onboarding.key-features.secure-storage.description.parameter.touch-id" = "Touch ID or passcode"; - -/* Title of autofill onboarding prompt's secure storage feature */ -"autofill.onboarding.key-features.secure-storage.title" = "Secure storage"; - -/* Description of autofill onboarding prompt's sign-in feature */ -"autofill.onboarding.key-features.sign-ins.description" = "No need to remember login info."; - -/* Title of autofill onboarding prompt's sign-in feature */ -"autofill.onboarding.key-features.sign-ins.title" = "Seamless sign-ins"; - -/* Description of autofill onboarding prompt's sync feature */ -"autofill.onboarding.key-features.sync.description" = "End-to-end encrypted and easy to set up when you’re ready."; - -/* Title of autofill onboarding prompt's sync feature */ -"autofill.onboarding.key-features.sync.title" = "Sync between devices"; - -/* Title of autofill onboarding prompt's features list */ -"autofill.onboarding.key-features.title" = "Key Features"; - -/* Subtitle for prompt to use suggested strong password for creating a login */ -"autofill.password-generation-prompt.subtitle" = "Passwords are stored securely on your device."; - -/* Title for prompt to use suggested strong password for creating a login */ -"autofill.password-generation-prompt.title" = "Use a strong password from DuckDuckGo?"; - -/* Button title choosing to use the suggested generated password for creating a login */ -"autofill.password-generation-prompt.use-generated-password.cta" = "Use Strong Password"; - -/* Button title choosing to use own password for creating a login */ -"autofill.password-generation-prompt.use-own-password.cta" = "Create My Own"; - -/* Text for the confirmation message displayed when a user tries activate a Private Email Address */ -"autofill.private.email.mesage.activate.confirm.content" = "Emails sent to %@ will again be forwarded to your inbox."; - -/* Title for the confirmation message displayed when a user tries activate a Private Email Address */ -"autofill.private.email.mesage.activate.confirm.title" = "Reactivate Private Duck Address?"; - -/* Mesasage displayed when a private email address is active */ -"autofill.private.email.mesage.active" = "Active"; - -/* Text for the confirmation message displayed when a user tries deactivate a Private Email Address */ -"autofill.private.email.mesage.deactivate.confirm.content" = "Emails sent to %@ will no longer be forwarded to your inbox."; - -/* Title for the confirmation message displayed when a user tries deactivate a Private Email Address */ -"autofill.private.email.mesage.deactivate.confirm.title" = "Deactivate Private Duck Address?"; - -/* Mesasage displayed when a user tries to manage a private email address but the service is not available, returns an error or network is down */ -"autofill.private.email.mesage.error" = "Management of this address is temporarily unavailable"; - -/* Mesasage displayed when a private email address is inactive */ -"autofill.private.email.mesage.inactive" = "Deactivated"; - -/* Button text for the alert dialog telling the user an updated username is no longer a private email address */ -"autofill.removed.duck.address.button" = "Got it"; - -/* Content for the alert dialog telling the user an updated username is no longer a private email address */ -"autofill.removed.duck.address.content" = "You can still manage this Duck Address from emails received from it in your personal inbox."; - -/* Title for the alert dialog telling the user an updated username is no longer a private email address */ -"autofill.removed.duck.address.title" = "Private Duck Address username was removed"; - -/* CTA displayed on modal asking if the user never wants to be prompted to save a login for this website agin */ -"autofill.save-login.never-prompt.CTA" = "Never Ask for This Site"; - -/* Message displayed on modal asking for the user to save the login for the first time */ -"autofill.save-login.new-user.message" = "DuckDuckGo Passwords & Autofill stores passwords securely on your device."; - -/* Title displayed on modal asking for the user to save the login for the first time */ -"autofill.save-login.new-user.title" = "Save this password?"; - -/* Title displayed on modal asking for the user to save the login */ -"autofill.save-login.title" = "Save password?"; - -/* Confirm CTA displayed on modal asking for the user to save the password */ -"autofill.save-password.save.CTA" = "Save Password"; - -/* Title for the button to report that autofill is not working on a site in autofill settings */ -"autofill.settings.report.not.working.button.title" = "Report a problem with autofill"; - -/* Button title for the confirmation prompt when reporting autofill is not working for a website */ -"autofill.settings.report.not.working.confirmation.button" = "Send Report"; - -/* Message for the confirmation prompt when reporting autofill is not working for a website */ -"autofill.settings.report.not.working.confirmation.message" = "Reports sent to DuckDuckGo are anonymous and do not include your username, password, or any other personally identifiable information.\n\nThe report only includes the website url and and the status of some autofill settings."; - -/* Title for the confirmation prompt when reporting autofill is not working for a website */ -"autofill.settings.report.not.working.confirmation.title" = "Report autofill not working on %@?"; - -/* Message shown to user when they submit a report that autofill is not working for a website */ -"autofill.settings.report.not.working.sent.confirmation" = "Thank you! Your report will help us make DuckDuckGo better for everyone."; - -/* Subtitle for the row to report that autofill is not working on a site in autofill settings */ -"autofill.settings.report.not.working.subtitle" = "Anonymously report autofill not working on this site. Passwords are never shared."; - -/* Title for the row to report that autofill is not working on a site in autofill settings */ -"autofill.settings.report.not.working.title" = "Autofill not working?"; - -/* Accessibility title for a Show Password button displaying actial password instead of ***** */ -"autofill.show-password" = "Show Password"; - -/* Message displayed to the user when they are logged out of Email protection. */ -"autofill.signin.to.manage" = "%@ to manage your Duck Addresses on this device."; - -/* Message displayed on modal asking for the user to update the password */ -"autofill.update-password.message" = "DuckDuckGo will update this stored password on your device."; - -/* Confirm CTA displayed on modal asking for the user to update the password */ -"autofill.update-password.save.CTA" = "Update Password"; - -/* Title displayed on modal asking for the user to update the password */ -"autofill.update-password.title" = "Update password for\n%@?"; - -/* Confirm CTA displayed on modal asking for the user to update the login */ -"autofill.update-username.save.CTA" = "Update Username"; - -/* Title displayed on modal asking for the user to update the username */ -"autofill.update-usernamr.title" = "Update username?"; - -/* Add bookmark screen title */ -"bookmark.addBookmark.title" = "Add Bookmark"; - -/* Add favorite screen title */ -"bookmark.addFavorite.title" = "Add Favorite"; - -/* Add folder screen title */ -"bookmark.addFolder.title" = "Add Folder"; - -/* Add bookmark folder button text */ -"bookmark.addFolderButton" = "Add Folder"; - -/* Placeholder in the add bookmark form */ -"bookmark.address.placeholder" = "www.example.com"; - -/* Delete bookmark alert message */ -"bookmark.delete.alert.message" = "This will delete your bookmark for \"%@\""; - -/* Delete bookmark alert title */ -"bookmark.delete.alert.title" = "Delete?"; - -/* The message shown after a bookmark has been deleted */ -"bookmark.deleted.toast" = "Bookmark deleted"; - -/* Delete bookmark folder alert delete button */ -"bookmark.deleteFolderAlert.deleteButton" = "Delete"; - -/* Do not translate - stringsdict entry */ -"bookmark.deleteFolderAlert.message" = "bookmark.deleteFolderAlert.message"; - -/* Delete bookmark folder alert title */ -"bookmark.deleteFolderAlert.title" = "Delete %@?"; - -/* Edit bookmark screen title */ -"bookmark.editBookmark.title" = "Edit Bookmark"; - -/* Edit favorite screen title */ -"bookmark.editFavorite.title" = "Edit Favorite"; - -/* Edit folder screen title */ -"bookmark.editFolder.title" = "Edit Folder"; - -/* Header for folder selection for bookmarks */ -"bookmark.folderSelect.title" = "Location"; - -/* More options button text */ -"bookmark.moreButton" = "More"; - -/* Placeholder in the add bookmark form */ -"bookmark.title.placeholder" = "Website title"; - -/* Top level bookmarks folder title */ -"bookmark.topLevelFolder.title" = "Bookmarks"; - -/* Info message after selecting Bookmark All button */ -"bookmarkAll.tabs.failed" = "Added new bookmarks for all tabs"; - -/* Confirmation message after selecting Bookmark All button */ -"bookmarkAll.tabs.saved" = "All tabs bookmarked"; - -/* No comment provided by engineer. */ -"bookmarks.button.hint" = "Bookmarks"; - -/* Failure message when bookmarks failed to export */ -"bookmarks.export.failed.message" = "We couldn’t export your bookmarks, please try again."; - -/* Confirmation message that bookmarks have been exported to the file system */ -"bookmarks.export.files.success.message" = "Your bookmarks have been exported."; - -/* Confirmation message that bookmarks have been shared successfully to another app */ -"bookmarks.export.share.success.message" = "Your bookmarks have been shared."; - -/* Title of option to export HTML */ -"bookmarks.exportAction.title" = "Export HTML File"; - -/* Failure message when bookmarks failed to import */ -"bookmarks.import.failed.message" = "Sorry, we aren’t able to import this file."; - -/* Confirmation message that bookmarks have been imported */ -"bookmarks.import.success.message" = "Your bookmarks have been imported."; - -/* Title of option to import HTML */ -"bookmarks.importAction.title" = "Import HTML File"; - -/* Import bookmark file button text */ -"bookmarks.importExport.footer.button.title" = "Import bookmark file from another browser"; - -/* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ -"bookmarks.importExport.title" = "Import an HTML file of bookmarks from another browser, or export your existing bookmarks."; - -/* Button to open report form */ -"broken.site.report.menu.title" = "Report Problem With This Site"; - -/* Acknowledge button */ -"broken.site.report.missing.description.alert.button" = "Got It"; - -/* It appears as an alert after user tries to send a report without submitting any details */ -"broken.site.report.missing.description.alert.description" = "Please describe the issue you experienced on this site so we can better understand how to fix it."; - -/* It appears as an alert after user tries to send a report without submitting any details */ -"broken.site.report.missing.description.alert.title" = "Description Required"; - -/* Message that appears after submitting report */ -"broken.site.report.success.toast" = "Your report helps make DuckDuckGo better for everyone!"; - -/* Button to answer question 'Did turning off protections resolve the issue on this site?' */ -"broken.site.report.toggle.alert.no.button" = "No"; - -/* An alert that appears after user turns off the privacy protection */ -"broken.site.report.toggle.alert.title" = "Did turning Privacy Protections off resolve the issue on this site?"; - -/* Button to answer question 'Did turning off protections resolve the issue on this site?' */ -"broken.site.report.toggle.alert.yes.button" = "Yes"; - -/* First parameter is a count of additional trackers, second and third are names of the tracker networks (strings) */ -"contextual.onboarding.browsing.multiple.trackers" = "contextual.onboarding.browsing.multiple.trackers"; - -/* Parameter is domain name (string) */ -"contextual.onboarding.browsing.one.tracker" = "*%1$@* was trying to track you here. I blocked them!\n\n☝️ Tap the shield for more info."; - -/* Button on the last screen of the onboarding, it will dismiss the onboarding screen. */ -"contextual.onboarding.final-screen.button" = "High five!"; - -/* Message of the last screen of the onboarding to the browser app. */ -"contextual.onboarding.final-screen.message" = "Remember: every time you browse with me a creepy ad loses its wings. 👌"; - -/* Title of the last screen of the onboarding to the browser app */ -"contextual.onboarding.final-screen.title" = "You’ve got this!"; - -/* After the user performs their first search using the browser, this dialog explains the advantages of using DuckDuckGo */ -"contextual.onboarding.first-search-done.message" = "That’s DuckDuckGo Search. Private. Fast. Fewer ads."; - -/* During onboarding steps this button is shown and takes either to the next steps or closes the onboarding. */ -"contextual.onboarding.got-it.button" = "Got it!"; - -/* Title of a popover on the new tab page browser that invites the user to try a visiting a website */ -"contextual.onboarding.ntp.try-a-site.title" = "Try visiting a site!"; - -/* Message of a popover on the browser that invites the user to try a search explaining that their searches are anonymous */ -"contextual.onboarding.try-a-search.message" = "Your DuckDuckGo searches are always anonymous."; - -/* Title of a popover on the browser that invites the user to try a search */ -"contextual.onboarding.try-a-search.title" = "Ready to get started?\nTry a search!"; - -/* Message of a popover on the browser that invites the user to try visiting a website to explain that we block trackers */ -"contextual.onboarding.try-a-site.message" = "I’ll block trackers so they can’t spy on you."; - -/* Title of a popover on the browser that invites the user to try a visiting a website */ -"contextual.onboarding.try-a-site.title" = "Next, try visiting a site!"; - -/* Message of a popover on the browser that invites the user to try visiting the browser Fire Button. Please leave the line break */ -"contextual.onboarding.try-fire-button.message" = "Instantly clear your browsing activity with the Fire Button.\n\nGive it a try! 🔥"; - -/* Browser Search query for how to say duck in english */ -"contextual.onboarding.try-search.option1-English" = "how to say “duck” in spanish"; - -/* Browser Search query for how to say duck in english */ -"contextual.onboarding.try-search.option1international" = "how to say “duck” in english"; - -/* Search query for the cast of Mighty Ducks */ -"contextual.onboarding.try-search.option2-english" = "mighty ducks cast"; - -/* Search query for the cast of Avatar */ -"contextual.onboarding.try-search.option2-international" = "cast of avatar"; - -/* Browser Search query for local weather */ -"contextual.onboarding.try-search.option3" = "local weather"; - -/* Browser Search query for chocolate chip cookie recipes */ -"contextual.onboarding.try-search.surprise-me-english" = "chocolate chip cookie recipes"; - -/* Browser Search query for dinner recipes */ -"contextual.onboarding.try-search.surprise-me-international" = "dinner recipes"; - -/* Title for a button that triggers an unknown search query for the user. */ -"contextual.onboarding.try-search.surprise-me-title" = "Surprise me!"; - -/* Crash Report always send button title */ -"crash.report.dialog.always.send" = "Always Send Crash Reports"; - -/* Crash Report hide details button title */ -"crash.report.dialog.hide.details" = "Hide"; - -/* Crash Report dialog message */ -"crash.report.dialog.message" = "Crash reports help DuckDuckGo diagnose issues and improve our products. They contain no personally identifiable information."; - -/* Crash Report never send button title */ -"crash.report.dialog.never.send" = "Never Send"; - -/* Crash Report show details button title */ -"crash.report.dialog.show.details" = "See what's sent"; - -/* Crash Report dialog title */ -"crash.report.dialog.title" = "Automatically send crash reports?"; - -/* Title for a section containing only items from past month */ -"date.range.past-month" = "Past month"; - -/* Title for a section containing only items from past week */ -"date.range.past-week" = "Past week"; - -/* Title for a section containing only items from today */ -"date.range.today" = "Today"; - -/* Title for a section containing only items from yesterday */ -"date.range.yesterday" = "Yesterday"; - -/* No comment provided by engineer. */ -"dax.hide.button" = "Hide Tips Forever"; - -/* No comment provided by engineer. */ -"dax.hide.cancel" = "Cancel"; - -/* Subtitle in Hide Dax dialog */ -"dax.hide.message" = "There are only a few, and we tried to make them informative."; - -/* Title in Hide Dax dialog */ -"dax.hide.title" = "Hide remaining tips?"; - -/* No comment provided by engineer. */ -"dax.onboarding.browsing.after.search" = "Your DuckDuckGo searches are anonymous. Always. 🙌"; - -/* No comment provided by engineer. */ -"dax.onboarding.browsing.after.search.cta" = "Phew!"; - -/* First parameter is a count of additional trackers, second and third are names of the tracker networks (strings) */ -"dax.onboarding.browsing.multiple.trackers" = "dax.onboarding.browsing.multiple.trackers"; - -/* No comment provided by engineer. */ -"dax.onboarding.browsing.multiple.trackers.cta" = "High Five!"; - -/* Parameter is domain name (string) */ -"dax.onboarding.browsing.one.tracker" = "*%1$@* was trying to track you here.\n\nI blocked them!\n\n☝️ You can check the address bar to see who is trying to track you when you visit a new site."; - -/* No comment provided by engineer. */ -"dax.onboarding.browsing.one.tracker.cta" = "High Five!"; - -/* First paramter is a string - network name, 2nd parameter is a string - domain name */ -"dax.onboarding.browsing.site.is.major.tracker" = "Heads up! I can’t stop %1$@ from seeing your activity on %2$@.\n\nBut browse with me, and I can reduce what %1$@ knows about you overall by blocking their trackers on lots of other sites."; - -/* No comment provided by engineer. */ -"dax.onboarding.browsing.site.is.major.tracker.cta" = "Got It"; - -/* Parameters are domain names (strings) */ -"dax.onboarding.browsing.site.owned.by.major.tracker" = "Heads up! Since %2$@ owns %1$@, I can’t stop them from seeing your activity here.\n\nBut browse with me, and I can reduce what %2$@ knows about you overall by blocking their trackers on lots of other sites."; - -/* Got It */ -"dax.onboarding.browsing.site.owned.by.major.tracker.cta" = "Got It"; - -/* No comment provided by engineer. */ -"dax.onboarding.browsing.without.trackers" = "As you tap and scroll, I’ll block pesky trackers.\n\nGo ahead - keep browsing!"; - -/* No comment provided by engineer. */ -"dax.onboarding.browsing.without.trackers.cta" = "Got It"; - -/* Encourage user to try clearing data with the fire button */ -"dax.onboarding.fire.button" = "Personal data can build up in your browser. Yuck. Use the Fire Button to burn it all away. Give it a try now! 👇"; - -/* Cancel action */ -"dax.onboarding.fire.button.cancelAction" = "Cancel"; - -/* Encourage user to try clearing data with the fire button */ -"dax.onboarding.fire.button.confirmAction" = "Close Tabs and Clear Data"; - -/* Encourage user to add favorite site using the browsing menu. */ -"dax.onboarding.home.add.favorite" = "Visit your favorite sites in a flash!\n\nGo to a site you love. Then tap the \"⋯\" icon and select *Add to Favorites*."; - -/* Accessible version of dax.onboarding.home.add.favorite */ -"dax.onboarding.home.add.favorite.accessible" = "Visit your favorite sites in a flash! Visit one of your favorite sites. Then tap the open menu button and select Add to Favorites."; - -/* No comment provided by engineer. */ -"dax.onboarding.home.initial" = "Next, try visiting one of your favorite sites!\n\nI’ll block trackers so they can’t spy on you. I’ll also upgrade the security of your connection if possible. 🔒"; - -/* ad = advertisment */ -"dax.onboarding.home.subsequent" = "You’ve got this!\n\nRemember: Every time you browse with me, a creepy ad loses its wings. 👍"; - -/* No comment provided by engineer. */ -"dax.onboarding.message" = "The Internet can be kinda creepy.\n\nNot to worry! Searching and browsing privately is easier than you think."; - -/* Default string used if users device is not iPhone or iPad */ -"device.type.default" = "device"; - -/* Device type is iPhone */ -"device.type.iphone" = "iPhone"; - -/* Device type is iPad */ -"device.type.pad" = "iPad"; - -/* GPC Setting state */ -"donotsell.disabled" = "Disabled"; - -/* No comment provided by engineer. */ -"donotsell.disclaimer.learnmore" = "Learn More"; - -/* GPC Setting state */ -"donotsell.enabled" = "Enabled"; - -/* No comment provided by engineer. */ -"donotsell.info.headertext" = "DuckDuckGo automatically blocks many trackers. With Global Privacy Control (GPC), you can also ask participating websites to restrict selling or sharing your personal data with other companies."; - -/* Alert action for starting a file dowload */ -"downloads.alert.action.save-to-downloads" = "Save to Downloads"; - -/* Cancel download action for downloads */ -"downloads.cancel-download.alert.cancel" = "Cancel"; - -/* Message for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.message" = "Are you sure you want to cancel this download?"; - -/* Confirm action for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.no" = "No"; - -/* Title for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.title" = "Cancel download?"; - -/* Confirm action for for alert when trying to cancel the file download */ -"downloads.cancel-download.alert.yes" = "Yes"; - -/* Button for deleting all items on downloads list */ -"downloads.downloads-list.delete-all" = "Delete All"; - -/* Empty downloads list placholder */ -"downloads.downloads-list.empty" = "No files downloaded yet"; - -/* Label displaying file download progress. Both parameters are formatted data size measurements e.g. 5MB. First parameter is data size currently downloaded. Second parameter is total expected data size of the file. */ -"downloads.downloads-list.row.downloading" = "Downloading - %1$@ of %2$@"; - -/* Label displaying file download progress. The parameter is formatted data size measurements currently downloaded e.g. 5MB. */ -"downloads.downloads-list.row.downloadingUnknownTotalSize" = "Downloading - %@"; - -/* Downloads list screen title */ -"downloads.downloads-list.title" = "Downloads"; - -/* Additional alert message shown when there are active downloads when using the fire button */ -"downloads.fire-button.alert.message" = "This will also cancel downloads in progress"; - -/* Message confirming that all files on the downloads list have been deleted */ -"downloads.message.all-files-deleted" = "All files deleted"; - -/* Message confirming that the download process has completed. Parameter is downloaded file's filename */ -"downloads.message.download-complete" = "Download complete for %@"; - -/* Message confirming the file was deleted. Parameter is file's filename */ -"downloads.message.download-deleted" = "Deleted %@"; - -/* Message informing that the download has failed due to connection issues */ -"downloads.message.download-failed" = "Failed to download. Check internet connection."; - -/* Message confirming that the download process has started. Parameter is downloaded file's filename */ -"downloads.message.download-started" = "Download started for %@"; - -/* Title for message explaining to the user that Duck Player is not available */ -"duck-player.contingency-title" = "Duck Player Unavailable"; - -/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ -"duck-player.video-contingency-cta" = "Learn More"; - -/* Message explaining to the user that Duck Player is not available */ -"duck-player.video-contingency-message" = "Duck Player's functionality has been affected by recent changes to YouTube. We’re working to fix these issues and appreciate your understanding."; - -/* Text displayed when DuckPlayer is always enabled */ -"duckPlayer.alwaysEnabled.label" = "Always"; - -/* Text displayed when DuckPlayer is in 'Ask' mode. */ -"duckPlayer.ask.label" = "Ask every time"; - -/* Text displayed when DuckPlayer is in off. */ -"duckPlayer.never.label" = "Never"; - -/* Body text for the modal feature explanation */ -"duckplayer.presentation.modal.body" = "Duck Player lets you watch YouTube without targeted ads in a theater-like experience in DuckDuckGo and what you watch won’t influence your recommendations."; - -/* Button that will dismiss the modal */ -"duckplayer.presentation.modal.dismiss-button" = "Got it!"; - -/* Two line title (separated by \n) for the feature explanation */ -"duckplayer.presentation.modal.title" = "Drowning in ads on YouTube? Try Duck Player!"; - -/* Footer label in the settings screen for Duck Player */ -"duckplayer.settings.footer" = "DuckDuckGo provides all the privacy essentials you need to protect yourself as you browse the web."; - -/* Text explaining what Duck Player is in the settings screen. */ -"duckplayer.settings.info-text" = "Duck Player provides a clean viewing experience without personalized ads and prevents viewing activity from influencing your YouTube recommendations."; - -/* Button that takes the user to learn more about Duck Player. */ -"duckplayer.settings.learn-more" = "Learn More"; - -/* Settings screen cell text for DuckPlayer settings */ -"duckplayer.settings.open-videos-in" = "Open Videos in Duck Player"; - -/* Settings screen cell text for DuckPlayer settings */ -"duckplayer.settings.title" = "Duck Player"; - -/* Email protection service offered by DuckDuckGo */ -"email-protection" = "Email Protection"; - -/* Cancel option for the email alias alert */ -"email.aliasAlert.decline" = "Cancel"; - -/* Option for generating a private email address */ -"email.aliasAlert.generatePrivateAddress" = "Generate Private Duck Address"; - -/* Option for generating a private email address */ -"email.aliasAlert.prompt.generatePrivateAddress" = "Generate Private Duck Address"; - -/* Subtitle for generating a private email address */ -"email.aliasAlert.prompt.generatePrivateAddress.subtitle" = "Block email trackers & hide address"; - -/* Title for the email alias selection prompt */ -"email.aliasAlert.prompt.title" = "Select email address"; - -/* Subtitle for choosing primary user email address */ -"email.aliasAlert.prompt.useUserAddress.subtitle" = "Block email trackers"; - -/* Title for the email alias selection alert */ -"email.aliasAlert.title" = "Block email trackers with a Duck Address"; - -/* Parameter is an email address (string) */ -"email.aliasAlert.useUserAddress" = "Use %@"; - -/* Title for the email copy browsing menu alert */ -"email.browsingMenu.alert" = "New address copied to your clipboard"; - -/* Email option title in the browsing menu */ -"email.browsingMenu.useNewDuckAddress" = "Generate Private Duck Address"; - -/* Signed in state for the email feature */ -"email.settings.enabled" = "Enabled"; - -/* Footer text for the email feature */ -"email.settings.footer" = "Removing Email Protection from this device removes the option to fill in your Personal Duck Address or a newly generated Private Duck Address into email fields as you browse the web.\n\nTo delete your Duck Addresses entirely, or for any other questions or feedback, reach out to us at support@duck.com."; - -/* Signed out state for the email feature */ -"email.settings.off" = "Off"; - -/* Subtitle for the email settings cell */ -"email.settings.subtitle" = "Block email trackers and hide your address"; - -/* Option to continue the Email Protection signup */ -"email.signup-prompt.alert.continue" = "Continue Setup"; - -/* Option to exit the Email Protection signup */ -"email.signup-prompt.alert.exit" = "Exit Setup"; - -/* Title for exiting the Email Protection signup early alert */ -"email.signup-prompt.alert.title" = "If you exit now, your Duck Address will not be saved!"; - -/* Button title choosing not to sign up for email protection and not to be prompted again */ -"email.signup-prompt.do-not-signup-button.cta" = "Don’t Show Again"; - -/* Button title choosing to sign up for email protection */ -"email.signup-prompt.signup-button.cta" = "Protect My Email"; - -/* Subtitle for prompt to sign up for email protection */ -"email.signup-prompt.subtitle" = "Create a unique, random address that also removes hidden trackers and forwards email to your inbox."; - -/* Title for prompt to sign up for email protection */ -"email.signup-prompt.title" = "Hide Your Email and\nBlock Trackers"; - -/* Empty list state placholder */ -"empty.bookmarks" = "No bookmarks added yet"; - -/* Empty search placeholder on bookmarks search */ -"empty.search" = "No matches found"; - -/* Button title to Sign In */ -"error.email-protection-sign-in.action" = "Sign In"; - -/* Alert message */ -"error.email-protection-sign-in.body" = "Sorry, please sign in again to re-enable Email Protection features on this browser."; - -/* Alert title */ -"error.email-protection-sign-in.title" = "Email Protection Error"; - -/* Button title to open device settings */ -"error.insufficient-disk-space.action" = "Open Settings"; - -/* Alert message */ -"error.insufficient-disk-space.body" = "Looks like your device has run out of storage space. Please free up space to continue."; - -/* Alert title */ -"error.insufficient-disk-space.title" = "Not enough storage"; - -/* Button title that is shutting down the app */ -"error.preemptive-crash.action" = "Close App"; - -/* Alert message */ -"error.preemptive-crash.body" = "Looks like there's an issue with the app and it needs to close. Please reopen to continue."; - -/* Alert title */ -"error.preemptive-crash.title" = "App issue detected"; - -/* Generic error message on a dialog for when the cause is not known. */ -"error.unknown.try.again" = "An unknown error has occurred"; - -/* No comment provided by engineer. */ -"favorite" = "Favorite"; - -/* No comment provided by engineer. */ -"favorite.menu.edit" = "Edit"; - -/* No comment provided by engineer. */ -"favorite.menu.remove" = "Remove"; - -/* Display Mode for favorites */ -"favorites.settings.all-devices" = "All Device Favorites"; - -/* Footer of the favorites settings table */ -"favorites.settings.footer" = "Choose which favorites to display on a new tab based on their origin."; - -/* Header of the favorites settings table */ -"favorites.settings.header" = "Display Preferences"; - -/* Display Mode for favorites */ -"favorites.settings.mobile-only" = "Mobile Favorites Only"; - -/* No comment provided by engineer. */ -"feedback.browserFeatures.ads" = "Ad and pop-up blocking"; - -/* No comment provided by engineer. */ -"feedback.browserFeatures.bookmarks" = "Creating and managing bookmarks"; - -/* No comment provided by engineer. */ -"feedback.browserFeatures.caption" = "Which browsing feature can we add or improve?"; - -/* No comment provided by engineer. */ -"feedback.browserFeatures.description" = "Browser Feature Issues"; - -/* No comment provided by engineer. */ -"feedback.browserFeatures.entry" = "Browsing features are missing or frustrating"; - -/* No comment provided by engineer. */ -"feedback.browserFeatures.images" = "Interacting with images"; - -/* No comment provided by engineer. */ -"feedback.browserFeatures.navigation" = "Navigating forward, backward, and/or refreshing"; - -/* No comment provided by engineer. */ -"feedback.browserFeatures.other" = "None of these"; - -/* No comment provided by engineer. */ -"feedback.browserFeatures.tabs" = "Creating and managing tabs"; - -/* No comment provided by engineer. */ -"feedback.browserFeatures.videos" = "Watching videos"; - -/* No comment provided by engineer. */ -"feedback.customization.bookmarks" = "How bookmarks are displayed"; - -/* No comment provided by engineer. */ -"feedback.customization.caption" = "Which customization option can we add or improve?"; - -/* No comment provided by engineer. */ -"feedback.customization.description" = "Customization Issues"; - -/* No comment provided by engineer. */ -"feedback.customization.entry" = "There aren’t enough ways to customize the app"; - -/* No comment provided by engineer. */ -"feedback.customization.homeScreen" = "The home screen configuration"; - -/* No comment provided by engineer. */ -"feedback.customization.other" = "None of these"; - -/* No comment provided by engineer. */ -"feedback.customization.tabs" = "How tabs are displayed"; - -/* No comment provided by engineer. */ -"feedback.customization.ui" = "How the app looks"; - -/* No comment provided by engineer. */ -"feedback.customization.whatIsCleared" = "Which data is cleared"; - -/* No comment provided by engineer. */ -"feedback.customization.whenIsCleared" = "When data is cleared"; - -/* No comment provided by engineer. */ -"feedback.ddgSearch.autocomplete" = "Better autocomplete"; - -/* No comment provided by engineer. */ -"feedback.ddgSearch.caption" = "Which search feature can we add or improve?"; - -/* No comment provided by engineer. */ -"feedback.ddgSearch.description" = "DuckDuckGo Search Issues"; - -/* No comment provided by engineer. */ -"feedback.ddgSearch.entry" = "DuckDuckGo search isn’t good enough"; - -/* No comment provided by engineer. */ -"feedback.ddgSearch.languageOrRegion" = "Searching in a specific language or region"; - -/* No comment provided by engineer. */ -"feedback.ddgSearch.layout" = "The layout should be more like Google"; - -/* No comment provided by engineer. */ -"feedback.ddgSearch.loadTime" = "Faster load time"; - -/* No comment provided by engineer. */ -"feedback.ddgSearch.other" = "None of these"; - -/* No comment provided by engineer. */ -"feedback.ddgSearch.technical" = "Programming/technical search"; - -/* No comment provided by engineer. */ -"feedback.form.caption" = "Please tell us what we can improve"; - -/* Confirmation button */ -"feedback.form.submit" = "Submit"; - -/* No comment provided by engineer. */ -"feedback.negative.form.genericPlaceholder" = "Please be as specific as possible"; - -/* No comment provided by engineer. */ -"feedback.negative.form.placeholder" = "Are there any specifics you’d like to include?"; - -/* No comment provided by engineer. */ -"feedback.negative.header" = "We’re Sorry to Hear That"; - -/* No comment provided by engineer. */ -"feedback.negative.supplementary" = "What is your frustration most related to?"; - -/* No comment provided by engineer. */ -"feedback.other.description" = "Other Issues"; - -/* No comment provided by engineer. */ -"feedback.other.entry" = "None of these"; - -/* No comment provided by engineer. */ -"feedback.performance.caption" = "Which issue are you experiencing?"; - -/* No comment provided by engineer. */ -"feedback.performance.crashes" = "The app crashes or freezes"; - -/* No comment provided by engineer. */ -"feedback.performance.description" = "Performance Issues"; - -/* No comment provided by engineer. */ -"feedback.performance.entry" = "The app is slow, buggy, or crashes"; - -/* No comment provided by engineer. */ -"feedback.performance.other" = "None of these"; - -/* No comment provided by engineer. */ -"feedback.performance.playback" = "Video or media playback bugs"; - -/* No comment provided by engineer. */ -"feedback.performance.slowLoading" = "Web pages or search results load slowly"; - -/* Header above input field */ -"feedback.positive.form.header" = "Share Details"; - -/* No comment provided by engineer. */ -"feedback.positive.form.placeholder" = "What have you been enjoying?"; - -/* No comment provided by engineer. */ -"feedback.positive.form.supplementary" = "Are there any details you’d like to share with the team?"; - -/* No comment provided by engineer. */ -"feedback.positive.header" = "Awesome to Hear!"; - -/* No comment provided by engineer. */ -"feedback.positive.noThanks" = "No Thanks! I’m Done"; - -/* Button encouraging uses to share details aboout their feedback */ -"feedback.positive.submit" = "Share Details"; - -/* No comment provided by engineer. */ -"feedback.start.footer" = "Your anonymous feedback is important to us."; - -/* No comment provided by engineer. */ -"feedback.start.header" = "Let’s Get Started!"; - -/* No comment provided by engineer. */ -"feedback.start.supplementary" = "How would you categorize your feedback?"; - -/* No comment provided by engineer. */ -"feedback.submitted.confirmation" = "Thank You! Feedback submitted."; - -/* No comment provided by engineer. */ -"feedback.websiteLoading.description" = "Website Loading Issues"; - -/* No comment provided by engineer. */ -"feedback.websiteLoading.entry" = "Certain websites don’t load correctly"; - -/* No comment provided by engineer. */ -"feedback.websiteLoading.form.placeholder" = "What content seems to be affected?"; - -/* No comment provided by engineer. */ -"feedback.websiteLoading.form.supplementary" = "Where are you seeing these issues?"; - -/* No comment provided by engineer. */ -"feedback.websiteLoading.form.urlPlaceholder" = "Which website has issues?"; - -/* Used to indicate number of entries found and position of the currently viewed one: e.g. 1 of 10 */ -"findinpage.count" = "%1$d of %2$d"; - -/* No comment provided by engineer. */ -"findinpage.title" = "Find in Page"; - -/* No comment provided by engineer. */ -"fireButtonAnimation.airstream.name" = "Airstream"; - -/* No comment provided by engineer. */ -"fireButtonAnimation.fireRising.name" = "Inferno"; - -/* No comment provided by engineer. */ -"fireButtonAnimation.none.name" = "None"; - -/* No comment provided by engineer. */ -"fireButtonAnimation.waterSwirl.name" = "Whirlpool"; - -/* Description text above the Share Link button */ -"get.browser.on-your-desktop-go-to" = "On your computer, go to:"; - -/* Title for the Share Download Link button */ -"get.browser.share-link" = "Share Download Link"; - -/* Message displayed in the share action when sharing via email */ -"get.browser.share-link.message" = "Search privately and block trackers with the DuckDuckGo desktop browser. Visit this link on your computer to download today."; - -/* Title displayed in the share action */ -"get.browser.share-link.title" = "Get DuckDuckGo Browser for Mac or Windows"; - -/* Title for the get desktop browser feature */ -"get.browser.title" = "Get DuckDuckGo for Mac or Windows"; - -/* No comment provided by engineer. */ -"home.row.onboarding.header" = "Add DuckDuckGo to your home screen!"; - -/* No comment provided by engineer. */ -"home.row.reminder.message" = "Add DuckDuckGo to your dock for easy access!"; - -/* Home is this context is the bottom home row (dock) */ -"home.row.reminder.title" = "Take DuckDuckGo home"; - -/* This describes empty tab */ -"homeTab.searchAndFavorites" = "Search or enter address"; - -/* Home tab title */ -"homeTab.title" = "Home"; - -/* OK title for invite screen alert dismissal button */ -"invite.alert.ok.button" = "OK"; - -/* Continue button on an invite dialog */ -"invite.dialog.continue.button" = "Continue"; - -/* Get Started button on an invite dialog */ -"invite.dialog.get.started.button" = "Get Started"; - -/* Message to show after user enters an unrecognized invite code */ -"invite.dialog.unrecognized.code.message" = "We didn’t recognize this Invite Code."; - -/* No comment provided by engineer. */ -"keyCommandAddBookmark" = "Add Bookmark"; - -/* No comment provided by engineer. */ -"keyCommandAddFavorite" = "Add Favorite"; - -/* No comment provided by engineer. */ -"keyCommandBrowserBack" = "Browse Back"; - -/* No comment provided by engineer. */ -"keyCommandBrowserForward" = "Browse Forward"; - -/* No comment provided by engineer. */ -"keyCommandClose" = "Close"; - -/* No comment provided by engineer. */ -"keyCommandCloseTab" = "Close Tab"; - -/* No comment provided by engineer. */ -"keyCommandFind" = "Find in Page"; - -/* No comment provided by engineer. */ -"keyCommandFindNext" = "Find Next"; - -/* No comment provided by engineer. */ -"keyCommandFindPrevious" = "Find Previous"; - -/* No comment provided by engineer. */ -"keyCommandFire" = "Clear All Tabs and Data"; - -/* No comment provided by engineer. */ -"keyCommandLocation" = "Search or Enter Address"; - -/* No comment provided by engineer. */ -"keyCommandNewTab" = "New Tab"; - -/* No comment provided by engineer. */ -"keyCommandNextTab" = "Next Tab"; - -/* No comment provided by engineer. */ -"keyCommandOpenInNewBackgroundTab" = "Open Link in Background"; - -/* No comment provided by engineer. */ -"keyCommandOpenInNewTab" = "Open Link in New Tab"; - -/* No comment provided by engineer. */ -"keyCommandPreviousTab" = "Previous Tab"; - -/* No comment provided by engineer. */ -"keyCommandPrint" = "Print"; - -/* No comment provided by engineer. */ -"keyCommandReload" = "Reload"; - -/* No comment provided by engineer. */ -"keyCommandSelect" = "Select"; - -/* No comment provided by engineer. */ -"keyCommandShowAllTabs" = "Show All Tabs"; - -/* Please preserve newline character */ -"launchscreenWelcomeMessage" = "Welcome to\nDuckDuckGo!"; - -/* Summary text for the macOS browser waitlist */ -"mac-browser.waitlist.summary" = "DuckDuckGo for Mac has the speed you need, the browsing features you expect, and comes packed with our best-in-class privacy essentials."; - -/* Title for the macOS waitlist notification */ -"mac-waitlist.available.notification.title" = "DuckDuckGo for Mac is ready!"; - -/* Title for the copy action */ -"mac-waitlist.copy" = "Copy"; - -/* Description text above the Share Link button */ -"mac-waitlist.join-waitlist-screen.on-your-computer-go-to" = "On your Windows computer, go to:"; - -/* Description text above the Share Link button */ -"mac-waitlist.join-waitlist-screen.on-your-mac-go-to" = "On your Mac, go to:"; - -/* Title for the Share Link button */ -"mac-waitlist.join-waitlist-screen.share-link" = "Share Link"; - -/* Title for the Join Waitlist screen */ -"mac-waitlist.join-waitlist-screen.try-duckduckgo-for-mac" = "Get DuckDuckGo for Mac!"; - -/* Title for the macOS waitlist button redirecting to Windows waitlist */ -"mac-waitlist.join-waitlist-screen.windows-waitlist" = "Looking for the Windows version?"; - -/* Title for the settings subtitle */ -"mac-waitlist.settings.browse-privately" = "Browse privately with our app for Mac"; - -/* Message used when sharing to iMessage */ -"mac-waitlist.share-sheet.message" = "Ready to start browsing privately on Mac? - -Visit this URL on your Mac to download: -https://duckduckgo.com/mac"; - -/* Title for the share sheet entry */ -"mac-waitlist.share-sheet.title" = "DuckDuckGo for Mac"; - -/* Title for the Mac Waitlist feature */ -"mac-waitlist.title" = "DuckDuckGo App for Mac"; - -/* No comment provided by engineer. */ -"menu.button.hint" = "Browsing Menu"; - -/* Title for back button in navigation bar */ -"navbar.back-button.title" = "Back"; - -/* Title for next button in navigation bar to progress forward */ -"navbar.next-button.title" = "Next"; - -/* Finish editing bookmarks button */ -"navigation.title.done" = "Done"; - -/* Edit button */ -"navigation.title.edit" = "Edit"; - -/* String indicating NetP is snoozing when viewed from the settings screen */ -"netP.cell.snoozing" = "Snoozing"; - -/* Title for the DuckDuckGo VPN feature */ -"netP.title" = "DuckDuckGo VPN"; - -/* The body of the notification when Privacy Pro subscription expired */ -"network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; - -/* The body of the notification shown when Network Protection fails to reconnect */ -"network.protection.failure.notification.body" = "Network Protection failed to connect. Please try again later."; - -/* Title for the VPN FAQ screen. */ -"network.protection.faq.title" = "DuckDuckGo VPN FAQ"; - -/* The body of the notification shown when Network Protection's connection is interrupted */ -"network.protection.interrupted.notification.body" = "Network Protection was interrupted. Attempting to reconnect now..."; - -/* Message for the network protection invite dialog */ -"network.protection.invite.dialog.message" = "Enter your invite code to get started."; - -/* Title for the network protection invite screen */ -"network.protection.invite.dialog.title" = "You’re invited to try DuckDuckGo VPN"; - -/* Prompt for the network protection invite code text field */ -"network.protection.invite.field.prompt" = "Invite Code"; - -/* Message for the network protection invite success view */ -"network.protection.invite.success.message" = "Hide your location from websites and conceal your online activity from Internet providers and others on your network."; - -/* Title for the network protection invite success view */ -"network.protection.invite.success.title" = "Success! You’re in."; - -/* The title of the notifications shown from Network Protection */ -"network.protection.notification.title" = "DuckDuckGo"; - -/* Title text for an iOS quick action that opens VPN settings */ -"network.protection.quick-action.open-vpn" = "Open VPN"; - -/* The body of the notification when the VPN is snoozed, with a duration string as parameter (e.g, 30 minutes) */ -"network.protection.snoozed.notification.body" = "VPN snoozed for %@"; - -/* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ -"network.protection.status.connected.format" = "Connected · %@"; - -/* The label for the NetP VPN when connecting */ -"network.protection.status.connecting" = "Connecting..."; - -/* The label for the NetP VPN when disconnected */ -"network.protection.status.disconnected" = "Not connected"; - -/* The label for the NetP VPN when disconnecting */ -"network.protection.status.disconnecting" = "Disconnecting..."; - -/* Message label text for the status view when VPN is disconnected */ -"network.protection.status.header.message.off" = "Connect to secure all of your device’s\nInternet traffic."; - -/* Message label text for the status view when VPN is disconnected */ -"network.protection.status.header.message.on" = "All device Internet traffic is being secured\nthrough the VPN."; - -/* Header title label text for the status view when VPN is disconnected */ -"network.protection.status.header.title.off" = "DuckDuckGo VPN is Off"; - -/* Header title label text for the status view when VPN is connected */ -"network.protection.status.header.title.on" = "DuckDuckGo VPN is On"; - -/* Header title label text for the status view when VPN is snoozing */ -"network.protection.status.header.title.snoozed" = "DuckDuckGo VPN is Snoozed"; - -/* The status view 'Share Feedback' button which is shown inline on the status view after the temporary free use footer text */ -"network.protection.status.menu.share.feedback" = "Share Feedback"; - -/* The label for the NetP VPN when paused */ -"network.protection.status.paused" = "Paused"; - -/* The label for when NetP VPN is snoozing plus the length of time remaining formatted as '0:00' */ -"network.protection.status.snoozing.format" = "Snoozing, %@ remaining"; - -/* Snooze button title shown in NetworkProtection's status view. */ -"network.protection.status.view.action.snooze" = "Snooze For 20 Minutes"; - -/* Wake Up button title shown in NetworkProtection's status view. */ -"network.protection.status.view.action.wake-up" = "Wake Up"; - -/* Connection details label shown in NetworkProtection's status view. */ -"network.protection.status.view.connection.details" = "Connection Details"; - -/* Custom DNS label shown in NetworkProtection's status view. */ -"network.protection.status.view.custom.dns" = "DNS Server"; - -/* Generic connection failed error message shown in NetworkProtection's status view. */ -"network.protection.status.view.error.connection.failed.message" = "Please try again later."; - -/* Generic connection failed error title shown in NetworkProtection's status view. */ -"network.protection.status.view.error.connection.failed.title" = "Failed to Connect."; - -/* IP Address label shown in NetworkProtection's status view. */ -"network.protection.status.view.ip.address" = "IP Address"; - -/* Location label shown in NetworkProtection's status view. */ -"network.protection.status.view.location" = "Location"; - -/* Label shown on the title of the settings section in NetworkProtection's status view. */ -"network.protection.status.view.settings.section.title" = "Manage"; - -/* Title label text for the status view when netP is disconnected */ -"network.protection.status.view.title" = "VPN"; - -/* The body of the notification shown when Network Protection reconnects successfully */ -"network.protection.success.notification.body" = "Network Protection is On. Your location and online activity are protected."; - -/* The body of the notification shown when Network Protection connects successfully with the city + state/country as formatted parameter */ -"network.protection.success.notification.subtitle.including.serverLocation" = "Routing device traffic through %@."; - -/* The body of the notification shown when Network Protection connects successfully with the city + state/country as formatted parameter */ -"network.protection.success.notification.subtitle.snooze.ended.including.serverLocation" = "VPN snooze has ended. Routing device traffic through %@."; - -/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ -"network.protection.turn.on.notifications.button.title" = "Turn On Notifications"; - -/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ -"network.protection.turn.on.notifications.section.footer" = "Allow DuckDuckGo to notify you if your connection drops or VPN status changes."; - -/* Title of the About section in the VPN status screen */ -"network.protection.vpn.about" = "About"; - -/* Section header for the toggle for VPN notifications. */ -"network.protection.vpn.alerts.section.header" = "Notifications"; - -/* List section footer for the toggle for VPN alerts. */ -"network.protection.vpn.alerts.toggle.section.footer" = "Get notified if your connection drops or VPN status changes."; - -/* Title for the toggle for VPN notifications. */ -"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; - -/* Title for the data volume section in the VPN status screen */ -"network.protection.vpn.data-volume" = "Data Volume"; - -/* Footer text for the Exclude Local Networks setting item. */ -"network.protection.vpn.exclude.local.networks.setting.footer" = "Let local traffic bypass the VPN and connect to devices on your local network, like a printer."; - -/* Header text for the Exclude Local Networks setting item. */ -"network.protection.vpn.exclude.local.networks.setting.header" = "General"; - -/* Title for the Exclude Local Networks setting item. */ -"network.protection.vpn.exclude.local.networks.setting.title" = "Exclude Local Networks"; - -/* Title for the VPN Location screen's All Countries section. */ -"network.protection.vpn.location.all.countries.section.title" = "All Countries"; - -/* Description of the location type in the VPN status screen */ -"network.protection.vpn.location.connected" = "Connected Location"; - -/* Subtitle of countries item when there are multiple cities, example : */ -"network.protection.vpn.location.country.item.formatted.cities.count" = "%d cities"; - -/* Description of the location type in the VPN status screen */ -"network.protection.vpn.location.nearest" = "(Nearest)"; - -/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ -"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find."; - -/* Title for the VPN Location screen's Recommended section. */ -"network.protection.vpn.location.recommended.section.title" = "Recommended"; - -/* Description of the location type in the VPN status screen */ -"network.protection.vpn.location.selected" = "Selected Location"; - -/* Subtitle for the preferred location item that formats a city and country. E.g Chicago, United States */ -"network.protection.vpn.location.subtitle.formatted.city.and.country" = "%1$@, %2$@"; - -/* Title for the VPN Location screen. */ -"network.protection.vpn.location.title" = "VPN Location"; - -/* Title for the VPN Notifications management screen. */ -"network.protection.vpn.notifications.title" = "VPN Notifications"; - -/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ -"network.protection.vpn.preferred.location.nearest" = "Nearest Location"; - -/* Title for the Preferred Location VPN Settings item. */ -"network.protection.vpn.preferred.location.title" = "Preferred Location"; - -/* Footer text for the DNS server setting item. */ -"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; - -/* Title for the FAQ row in the VPN status screen. */ -"network.protection.vpn.settings.faq" = "FAQs and Support"; - -/* Title for the feedback row in the VPN status screen. */ -"network.protection.vpn.settings.share-feedback" = "Share VPN Feedback"; - -/* Title for the VPN Settings screen. */ -"network.protection.vpn.settings.title" = "VPN Settings"; - -/* Information message about New Tab Page redesign */ -"new.tab.page.intro.message.body" = "Customize your Favorites and go-to features. Reorder things or hide them to keep it clean."; - -/* Title of information message about New Tab Page redesign */ -"new.tab.page.intro.message.title" = "Your New Tab Page is... New!"; - -/* Footer of the group allowing for setting up new tab page sections */ -"new.tab.page.settings.sections.description" = "Show, hide, and reorder sections on the new tab page"; - -/* Header title of the group allowing for setting up new tab page sections */ -"new.tab.page.settings.sections.header.title" = "SECTIONS"; - -/* Header title of the shortcuts in New Tab Page preferences. */ -"new.tab.page.settings.shortcuts.header.title" = "SHORTCUTS"; - -/* Title of New Tab Page preferences page. */ -"new.tab.page.settings.title" = "Customize New Tab"; - -/* Shortcut title leading to AI Chat */ -"new.tab.page.shortcut.ai.chat" = "AI Chat"; - -/* Shortcut title leading to Bookmarks */ -"new.tab.page.shortcut.bookmarks" = "Bookmarks"; - -/* Shortcut title leading to Downloads */ -"new.tab.page.shortcut.downloads" = "Downloads"; - -/* Shortcut title leading to Passwords */ -"new.tab.page.shortcut.passwords" = "Passwords"; - -/* Shortcut title leading to app settings */ -"new.tab.page.shortcut.settings" = "Settings"; - -/* Text shown on the favorites info tooltip */ -"new.tab.page.tooltip.body" = "On any site, open the ••• menu and select **Add Favorite** to add it to your new tab page."; - -/* Do not translate - stringsdict entry */ -"number.of.tabs" = "number.of.tabs"; - -/* Text displayed on notification appearing in the address bar when the browser dismissed the cookie popup automatically rejecting it */ -"omnibar.notification.cookies-managed" = "Cookies Managed"; - -/* Text displayed on notification appearing in the address bar when the browser hides a cookie popup */ -"omnibar.notification.popup-hidden" = "Pop-up Hidden"; - -/* Button to change the default browser */ -"onboarding.browsers.cta" = "Choose Your Browser"; - -/* Message to highlight browser capability of blocking cookie pop-ups */ -"onboarding.browsers.features.cookiePopups.title" = "Block cookie pop-ups"; - -/* Message to highlight browser capability of blocking creepy ads */ -"onboarding.browsers.features.creepyAds.title" = "Block creepy ads"; - -/* Message to highlight browser capability ofswiftly erase browsing data */ -"onboarding.browsers.features.eraseBrowsingData.title" = "Swiftly erase browsing data"; - -/* Message to highlight browser capability of private searches */ -"onboarding.browsers.features.privateSearch.title" = "Search privately by default"; - -/* Message to highlight browser capability ofblocking 3rd party trackers */ -"onboarding.browsers.features.trackerBlocker.title" = "Block 3rd-party trackers"; - -/* The title of the dialog to show the privacy features that DuckDuckGo offers */ -"onboarding.browsers.title" = "Privacy protections activated!"; - -/* Button to continue the onboarding process */ -"onboarding.intro.cta" = "Let’s do it!"; - -/* The title of the onboarding dialog popup */ -"onboarding.intro.title" = "Hi there.\n\nReady for a better, more private internet?"; - -/* No comment provided by engineer. */ -"onboarding.widgets.continueButton" = "Add Widget"; - -/* No comment provided by engineer. */ -"onboarding.widgets.header" = "Using DuckDuckGo just got easier."; - -/* No comment provided by engineer. */ -"onboarding.widgets.skipButton" = "Maybe Later"; - -/* No comment provided by engineer. */ -"onboardingContinue" = "Continue"; - -/* No comment provided by engineer. */ -"onboardingDefaultBrowserMaybeLater" = "Maybe Later"; - -/* No comment provided by engineer. */ -"onboardingDefaultBrowserTitle" = "Make DuckDuckGo your default browser."; - -/* No comment provided by engineer. */ -"onboardingSetAsDefaultBrowser" = "Set as Default Browser"; - -/* No comment provided by engineer. */ -"onboardingSkip" = "Skip"; - -/* This is on a button presented on the last of the onboarding screens. */ -"onboardingStartBrowsing" = "Start Browsing"; - -/* No comment provided by engineer. */ -"onboardingWelcomeHeader" = "Welcome to DuckDuckGo!"; - -/* ’Link’ is link on a website */ -"open.externally.failed" = "The app required to open that link can’t be found"; - -/* Activate button */ -"pm.activate" = "Reactivate"; - -/* Cancel button */ -"pm.cancel" = "Cancel"; - -/* Deactivate button */ -"pm.deactivate" = "Deactivate"; - -/* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ -"prefrences.sync.bookmarks-limit-exceeded-action" = "Manage Bookmarks"; - -/* Description for sync bookmarks limits exceeded warning */ -"prefrences.sync.bookmarks-limit-exceeded-description" = "You've reached the maximum number of bookmarks. Please delete some to resume sync."; - -/* Button title for sync credentials limits exceeded warning to go to manage passwords */ -"prefrences.sync.credentials-limit-exceeded-action" = "Manage passwords…"; - -/* Description for sync credentials limits exceeded warning */ -"prefrences.sync.credentials-limit-exceeded-description" = "You've reached the maximum number of passwords. Please delete some to resume sync."; - -/* Description invalid credentials error when syncing. - Description of incorrectly formatted data error when syncing. - Description of too many requests error when syncing. */ -"prefrences.sync.invalid-login-description" = "Sync encountered an error. Try disabling sync on this device and then reconnect using another device or your recovery code."; - -/* Title for sync limits exceeded warning */ -"prefrences.sync.limit-exceeded-title" = "Sync Paused"; - -/* No comment provided by engineer. */ -"preserveLogins.domain.list.footer" = "Websites rely on cookies to keep you signed in. When you Fireproof a site, cookies won’t be erased and you’ll stay signed in, even after using the Fire Button. We still block third-party trackers found on Fireproof websites."; - -/* Section header above Fireproofed websites list */ -"preserveLogins.domain.list.title" = "Fireproof Sites"; - -/* Alert message explaining to users that the benefit of fireproofing a site is that they will be kept signed in */ -"preserveLogins.fireproof.message" = "Fireproofing this site will keep you signed in after using the Fire Button."; - -/* Parameter is a string - domain name. Alert title prompting user to fireproof a site so they can stay signed in */ -"preserveLogins.fireproof.title" = "Fireproof %@ to stay signed in?"; - -/* Confirm fireproofing action */ -"preserveLogins.menu.confirm" = "Fireproof"; - -/* Parameter is a website URL. Messege confirms that given website has been fireproofed. */ -"preserveLogins.menu.confirm.message" = "%@ is now Fireproof"; - -/* Deny fireproofing action */ -"preserveLogins.menu.defer" = "Not Now"; - -/* Disable fireproofing for site */ -"preserveLogins.menu.disable" = "Remove Fireproofing"; - -/* Enable fireproofing for site */ -"preserveLogins.menu.enable" = "Fireproof This Site"; - -/* Messege confirms that website is no longer fireproofed. */ -"preserveLogins.menu.removal.message" = "Fireproofing removed"; - -/* Alert title */ -"preserveLogins.remove.all" = "Remove All"; - -/* Confirmation button in alert */ -"preserveLogins.remove.all.ok" = "OK"; - -/* Privacy Icon accessibility title */ -"privacy.icon.dax" = "DuckDuckGo logo"; - -/* Privacy Icon accessibility hint */ -"privacy.icon.hint" = "Tap to open Privacy Dashboard screen"; - -/* Privacy Icon accessibility title */ -"privacy.icon.shield" = "Privacy Icon"; - -/* Deny action */ -"prompt.custom.url.scheme.dontopen" = "Cancel"; - -/* Confirm action */ -"prompt.custom.url.scheme.open" = "Open"; - -/* No comment provided by engineer. */ -"prompt.custom.url.scheme.prompt" = "Would you like to leave DuckDuckGo to view this content?"; - -/* Alert title */ -"prompt.custom.url.scheme.title" = "Open in Another App?"; - -/* No comment provided by engineer. */ -"search.hint.duckduckgo" = "Search or enter address"; - -/* No comment provided by engineer. */ -"section.title.bookmarks" = "Bookmarks"; - -/* No comment provided by engineer. */ -"section.title.favorites" = "Favorites"; - -/* Settings cell for About DDG */ -"settings.about.ddg" = "About DuckDuckGo"; - -/* Settings section title for About DuckDuckGo */ -"settings.about.section" = "About"; - -/* about page */ -"settings.about.text" = "DuckDuckGo is the independent Internet privacy company founded in 2008 for anyone who’s tired of being tracked online and wants an easy solution. We’re proof you can get real privacy protection online without tradeoffs. - -The DuckDuckGo browser comes with the features you expect from a go-to browser, like bookmarks, tabs, passwords, and more, plus over [a dozen powerful privacy protections](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/) not offered in most popular browsers by default. This uniquely comprehensive set of privacy protections helps protect your online activities, from searching to browsing, emailing, and more. - -Our privacy protections work without having to know anything about the technical details or deal with complicated settings. All you have to do is switch your browser to DuckDuckGo across all your devices and you get privacy by default. - -But if you *do* want a peek under the hood, you can find more information about how DuckDuckGo privacy protections work on our [help pages](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/)."; - -/* Settings screen accessibility section title */ -"settings.accessibility" = "Accessibility"; - -/* Settings screen cell text for adding the app to the dock */ -"settings.add.to.dock" = "Add App to Your Dock"; - -/* Settings screen cell text for add widget to the home screen */ -"settings.add.widget" = "Add Widget to Home Screen"; - -/* Name of the settings subsection related to the address bar - Settings screen cell text for addess bar position */ -"settings.address.bar" = "Address Bar"; - -/* Settings screen cell title for toggling full URL visibility in address bar */ -"settings.address.full.url" = "Show Full Site Address"; - -/* Label describing a feature which is turned on always */ -"settings.always.on" = "Always On"; - -/* Settings screen appearance section title */ -"settings.appearance" = "Appearance"; - -/* Settings screen cell for opening links in associated apps */ -"settings.associated.apps" = "Open Links in Associated Apps"; - -/* Description for associated apps description */ -"settings.associated.apps.description" = "Disable to prevent links from automatically opening in other installed apps."; - -/* Settings screen cell for autocomplete */ -"settings.autocomplete" = "Search Suggestions"; - -/* Settings label for enabling or disabling recently visited sites */ -"settings.autocomplete.recentlyvisited" = "Recently Visited Sites"; - -/* Settings label for enabling or disabling recently visited sites */ -"settings.autocomplete.recentlyvisited.subtitle" = "Show recently visited sites in search suggestions. Recently visited sites are private, only stored on your device, and can be cleared with the Fire Button."; - -/* Subtitle for Search Suggestions setting */ -"settings.autocomplete.subtitle" = "Show search suggestions as you type, including your bookmarks. All searches are private."; - -/* Settings screen cell text for Application Lock */ -"settings.autolock" = "Application Lock"; - -/* Section footer Autolock description */ -"settings.autolock.description" = "If Touch ID, Face ID, or a system passcode is enabled, you'll be asked to unlock the app when opening it."; - -/* Settings screen cell text for Automatically Clearing Data */ -"settings.clear.data" = "Automatically Clear Data"; - -/* The name of Settings category in Privacy Features related to configuration of the privacy feature related to cookie pop-ups */ -"settings.cookie.pop-up-protection.protection" = "Cookie Pop-Up Protection"; - -/* Explanation in Settings how the cookie pop up protection feature works */ -"settings.cookie.pop.up.protection.explanation" = "DuckDuckGo will try to select the most private settings available and hide these pop-ups for you.\n[Learn More](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/#cookie-pop-up-management)"; - -/* Settings screen cell text for Cookie popups */ -"settings.cookie.popups" = "Manage Cookie Pop-ups"; - -/* Settings title for the customize section */ -"settings.customize" = "Customize"; - -/* The name of a settings subsection related to the data clearing */ -"settings.data.clearing" = "Data Clearing"; - -/* Settings screen cell text for setting the app as default browser - The name of Settings category in Privacy Features related to configuration of the default browser */ -"settings.default.browser" = "Default Browser"; - -/* Label of a button disabling email protection */ -"settings.disable.email.protection.autofill" = "Disable Email Protection Autofill"; - -/* Settings cell to link users to other products by DuckDuckGo */ -"settings.duckduckgo.on.other.platforms" = "DuckDuckGo on Other Platforms"; - -/* Explanation in Settings how the email protection feature works */ -"settings.email.protection.explanation" = "Block email trackers and hide your address without switching your email provider.\n[Learn More](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/email-protection/what-is-duckduckgo-email-protection/)"; - -/* Alert presented to user after clicking on 'Sign out' in Email Protection Settings */ -"settings.email.protection.signing.out.alert" = "Signing out of your Email Protection account will disable Duck Address autofill in this browser. You can still use these addresses and receive forwarded email as usual."; - -/* Settings cell for Email Protection */ -"settings.emailProtection.description" = "Block email trackers and hide your address"; - -/* Label of a button enabling the email protection feature */ -"settings.enable.email.protection" = "Enable Email Protection"; - -/* Settings screen cell text for enabling voice search */ -"settings.enable.voice.search" = "Enable Voice Search"; - -/* Settings cell for Feedback */ -"settings.feedback" = "Share Feedback"; - -/* Settings screen cell text for fire button animation */ -"settings.firebutton" = "Fire Button Animation"; - -/* Settings screen cell text for Fireproof Sites */ -"settings.fireproof.sites" = "Fireproof Sites"; - -/* The name of the settings subsection containing general settings */ -"settings.general" = "General"; - -/* Settings screen cell text for GPC */ -"settings.gpc" = "Global Privacy Control (GPC)"; - -/* Settings screen cell text for app icon selection */ -"settings.icon" = "App Icon"; - -/* Settings screen cell for Keyboard */ -"settings.keyboard" = "Keyboard"; - -/* Switch button label. */ -"settings.let.duckduckgo.manage.cookie.consent.popups" = "Let DuckDuckGo manage cookie consent pop-ups"; - -/* Settings screen cell text for passwords */ -"settings.logins" = "Passwords"; - -/* The name of the settings section containing main settings */ -"settings.main.settings" = "Main Settings"; - -/* Label of a button managing email protection account */ -"settings.manage.account" = "Manage Account"; - -/* Settings title for the 'More' section */ -"settings.more" = "More from DuckDuckGo"; - -/* Button navigating to other settings related to search */ -"settings.more.search.settings" = "More Search Settings"; - -/* Subtitle of the 'More Search Settings' button */ -"settings.more.search.settings.explanation" = "Customize your language, region, and more"; - -/* The name of a settings category listing next steps */ -"settings.next.steps" = "Next Steps"; - -/* Label describing a feature which is turned off */ -"settings.off" = "Off"; - -/* Label describing a feature which is turned on */ -"settings.on" = "On"; - -/* Product name for the subscription bundle */ -"settings.ppro" = "Privacy Pro"; - -/* Title for Link in the Footer of Privacy Pro section */ -"settings.ppro.footer" = "Privacy Policy and Terms of Service"; - -/* Settings screen cell for long press previews */ -"settings.previews" = "Long-Press Previews"; - -/* Settings title for the privacy section */ -"settings.privacy" = "Privacy"; - -/* The name of Settings category in Privacy Features related to configuration of the search */ -"settings.private.search" = "Private Search"; - -/* Explanation in Settings how the private search feature works */ -"settings.private.search.explanation" = "DuckDuckGo Private Search is your default search engine, so you can search the web without being tracked."; - -/* Header of settings related to search */ -"settings.search.settings" = "Search Settings"; - -/* Settings cell for Send Crash Reports */ -"settings.send.crash.reports" = "Send Crash Reports"; - -/* Explanation of Send Crash Reports settings option */ -"settings.send.crash.reports.description" = "Automatically send crash reports to DuckDuckGo."; - -/* Settings screen cell text for setting address bar position */ -"settings.set.your.address.bar.position" = "Set Your Address Bar Position"; - -/* Privacy pro description subtitle in settings when the is activating */ -"settings.subscription.activating" = "Activating"; - -/* Subscription activation pending description */ -"settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; - -/* Data Broker protection cell subtitle for privacy pro */ -"settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; - -/* Data Broker protection cell title for privacy pro */ -"settings.subscription.DBP.title" = "Personal Information Removal"; - -/* Privacy pro description subtitle in settings */ -"settings.subscription.description" = "Includes our VPN, Personal Information Removal, and Identity Theft Restoration."; - -/* I have a Subscription button text for privacy pro */ -"settings.subscription.existing.subscription" = "I Have a Subscription"; - -/* Subscription expired description */ -"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; - -/* Subscription expired tittle message */ -"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; - -/* Identity theft restoration cell subtitle for privacy pro */ -"settings.subscription.ITR.subtitle" = "If your identity is stolen, we'll help restore it"; - -/* Identity theft restoration cell title for privacy pro */ -"settings.subscription.ITR.title" = "Identity Theft Restoration"; - -/* Get Privacy Pro button text for privacy pro */ -"settings.subscription.learn.more" = "Get Privacy Pro"; - -/* Subscription Settings button text for privacy pro */ -"settings.subscription.manage" = "Subscription Settings"; - -/* Call to action title for Privacy Pro settings */ -"settings.subscription.subscribe" = "Protect your connection and identity with Privacy Pro"; - -/* VPN cell title for privacy pro */ -"settings.subscription.VPN.title" = "VPN"; - -/* Label of a button navigating to the Support page */ -"settings.support" = "Support"; - -/* Settings screen cell text for sync and backup */ -"settings.sync" = "Sync & Backup"; - -/* Settings screen cell text for text size */ -"settings.text.size" = "Text Size"; - -/* Settings screen cell text for theme */ -"settings.theme" = "Theme"; - -/* Title for the Settings View */ -"settings.title" = "Settings"; - -/* Settings screen cell text for Unprotected Sites */ -"settings.unprotected.sites" = "Unprotected Sites"; - -/* Settings cell for Version */ -"settings.version" = "Version"; - -/* Settings screen cell for voice search */ -"settings.voice.search" = "Private Voice Search"; - -/* The name of Settings category in Privacy Features related to configuration of the web tracking protection feature */ -"settings.web.tracking.protection" = "Web Tracking Protection"; - -/* Explanation in Settings how the web tracking protection feature works */ -"settings.web.tracking.protection.explanation" = "DuckDuckGo automatically blocks hidden trackers as you browse the web.\n[Learn More](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; - -/* Report a Broken Site screen confirmation button */ -"siteFeedback.buttonText" = "Submit Report"; - -/* Domain is an URL address */ -"siteFeedback.domainInfo" = "Domain of Broken Site:"; - -/* No comment provided by engineer. */ -"siteFeedback.messagePlaceholder" = "Which content or functionality is breaking?"; - -/* No comment provided by engineer. */ -"siteFeedback.subtitle" = "Broken site reporting is completely anonymous and helps us to improve the app!"; - -/* This is a form title */ -"siteFeedback.title" = "Report a Broken Site"; - -/* No comment provided by engineer. */ -"siteFeedback.urlPlaceholder" = "Which website is broken?"; - -/* Subscription Activation Info */ -"subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; - -/* Button for adding email address to subscription */ -"subscription.activate.add.email.button" = "Add Email"; - -/* Apple ID option for activation */ -"subscription.activate.appleid" = "Apple ID"; - -/* Button text for restoring purchase via Apple ID */ -"subscription.activate.appleid.button" = "Restore Purchase"; - -/* Description for Apple ID activation */ -"subscription.activate.appleid.description" = "Restore your purchase to activate your subscription on this device."; - -/* Subscription Activation Info */ -"subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; - -/* Button for editing email address added to subscription */ -"subscription.activate.edit.email.button" = "Edit Email"; - -/* View Title for editing your email account */ -"subscription.activate.edit.email.title" = "Edit Email"; - -/* Email option for activation */ -"subscription.activate.email" = "Email"; - -/* Restore button title for Email */ -"subscription.activate.email.button" = "Enter Email"; - -/* Description for Email activation */ -"subscription.activate.email.description" = "Use your email to activate your subscription on this device."; - -/* Activate subscription title */ -"subscription.activate.email.title" = "Activate Subscription"; - -/* Button title for cancelling email deletion */ -"subscription.activate.manage.email.cancel" = "Cancel"; - -/* Button title for confirming email deletion */ -"subscription.activate.manage.email.OK" = "OK"; - -/* Restore button title for AppleID */ -"subscription.activate.restore.apple" = "Restore Purchase"; - -/* Subscription Activation Title */ -"subscription.activate.title" = "Activate your subscription on this device"; - -/* Resend activation instructions button */ -"subscription.add.device.resend.instructions" = "Resend Instructions"; - -/* Add email to an existing subscription */ -"subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; - -/* View title for adding email to subscription */ -"subscription.add.email.title" = "Add Email"; - -/* Title for Alert messages */ -"subscription.alert.title" = "subscription.alert.title"; - -/* Subscription availability message on Apple devices */ -"subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; - -/* Text for the manage billing page */ -"subscription.billing.google.text" = "Your subscription was purchased through the Google Play Store. To renew your subscription, please open Google Play Store subscription settings on a device signed in to the same Google Account used to originally purchase your subscription."; - -/* Title for the manage billing page */ -"subscription.billing.google.title" = "Subscription Plans"; - -/* Subscription annual billing period type */ -"subscription.billing.period.annual" = "annual"; - -/* Subscription monthly billing period type */ -"subscription.billing.period.monthly" = "monthly"; - -/* Subscription Removal confirmation message */ -"subscription.cancel.message" = "Your subscription has been removed from this device."; - -/* Change plan or cancel title */ -"subscription.change.plan" = "Update Plan or Cancel"; - -/* Navigation Button for closing subscription view */ -"subscription.close" = "Close"; - -/* Title for Confirm messages */ -"subscription.confirm.title" = "Are you sure?"; - -/* Header for section for activating subscription on other devices */ -"subscription.devices.header" = "Activate on Other Devices"; - -/* Footer for section for activating subscription on other devices when email was not yet added */ -"subscription.devices.no.email.footer" = "Add an optional email to your subscription to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; - -/* Footer for section for activating subscription on other devices when email is added */ -"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; - -/* Alert content for not found subscription */ -"subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; - -/* Alert title for not found subscription */ -"subscription.email.inactive.alert.title" = "Subscription Not Found"; - -/* Alert content for not found subscription */ -"subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; - -/* FAQ Button */ -"subscription.faq" = "FAQs and Support"; - -/* FAQ Description */ -"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; - -/* Cancel action for the existing subscription dialog */ -"subscription.found.cancel" = "Cancel"; - -/* Restore action for the existing subscription dialog */ -"subscription.found.restore" = "Restore"; - -/* Message for the existing subscription dialog */ -"subscription.found.text" = "We found a subscription associated with this Apple ID."; - -/* Title for the existing subscription dialog */ -"subscription.found.title" = "Subscription Found"; - -/* Help and support Section header */ -"subscription.help" = "Help and support"; - -/* Manage Plan header */ -"subscription.manage.plan" = "Manage Plan"; - -/* Header for the subscription section */ -"subscription.manage.title" = "Subscription"; - -/* Alert content for not found subscription */ -"subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; - -/* Alert title for not found subscription */ -"subscription.notFound.alert.title" = "Subscription Not Found"; - -/* View plans button text */ -"subscription.notFound.view.plans" = "View Plans"; - -/* Hero Text for Personal information removal */ -"subscription.pir.hero" = "Activate Privacy Pro on desktop to set up Personal Information Removal"; - -/* Description on how to use Personal information removal in desktop. The first placeholder references a location in the Desktop application. Privacy Pro>, and the second, the menu entry. i.e. */ -"subscription.pir.heroText" = "In the DuckDuckGo browser for desktop, go to %1$@ and click %2$@ to get started."; - -/* Settings references a menu in the Desktop app, Privacy Pro, references our product name */ -"subscription.pir.heroTextLocation" = "Settings > Privacy Pro"; - -/* Menu item for enabling Personal Information Removal on Desktop */ -"subscription.pir.heroTextMenyEntry" = "I have a subscription"; - -/* Text for the 'macOS' button */ -"subscription.pir.macos" = "Mac"; - -/* Text for the 'Windows' button */ -"subscription.pir.windows" = "Windows"; - -/* Progress view title when completing the purchase */ -"subscription.progress.view.completing.purchase" = "Completing purchase..."; - -/* Progress view title when starting the purchase */ -"subscription.progress.view.purchasing.subscription" = "Purchase in progress..."; - -/* Progress view title when restoring past subscription purchase */ -"subscription.progress.view.restoring.subscription" = "Restoring subscription..."; - -/* Remove from this device button */ -"subscription.remove.from.device.button" = "Remove From This Device"; - -/* Remove from device confirmation dialog text */ -"subscription.remove.from.device.text" = "You will no longer be able to access your Privacy Pro subscription on this device. This will not cancel your subscription, and it will remain active on your other devices."; - -/* Remove from device confirmation dialog title */ -"subscription.remove.from.device.title" = "Remove from this device?"; - -/* Remove subscription button text */ -"subscription.remove.subscription" = "Remove Subscription"; - -/* Remove subscription cancel button text */ -"subscription.remove.subscription.cancel" = "Cancel"; - -/* Button text for general error message */ -"subscription.restore.backend.error.button" = "Back to Settings"; - -/* Alert for general error message */ -"subscription.restore.backend.error.message" = "We’re having trouble connecting. Please try again later."; - -/* Alert for general error title */ -"subscription.restore.backend.error.title" = "Something Went Wrong"; - -/* Alert for general error message */ -"subscription.restore.general.error.message" = "The App Store was unable to process your purchase. Please try again later."; - -/* Alert for general error title */ -"subscription.restore.general.error.title" = "Something Went Wrong"; - -/* Alert button text for restored purchase alert */ -"subscription.restore.success.alert.button" = "OK"; - -/* Alert message for restored purchase */ -"subscription.restore.success.alert.message" = "Your purchases have been restored."; - -/* Alert title for restored purchase */ -"subscription.restore.success.alert.title" = "You’re all set."; - -/* Subtitle in header when subscribed */ -"subscription.subscribed" = "Subscribed"; - -/* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ -"subscription.subscription.expired.caption" = "Your subscription expired on %@"; - -/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ -"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; - -/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ -"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; - -/* Navigation bar Title for subscriptions */ -"subscription.title" = "Privacy Pro"; - -/* Message confirming that recovery code was copied to clipboard */ -"sync.code.copied" = "Recovery code copied to clipboard"; - -/* Caption for a button to delete Sync server data */ -"sync.delete.all.confirm.action" = "Delete Server Data"; - -/* Message for the dialog to confirm deleting Sync server data */ -"sync.delete.all.confirm.message" = "All devices will be disconnected and your synced data will be deleted from the server."; - -/* Title of the dialog to confirm deleting Sync server data */ -"sync.delete.all.confirm.title" = "Delete Server Data?"; - -/* Caption for a button to remove device from Sync */ -"sync.remove-device.action" = "Remove"; - -/* No comment provided by engineer. */ -"sync.remove-device.message" = "\"%@\" will no longer be able to access your synced data."; - -/* Title of the dialog to remove device from Sync */ -"sync.remove-device.title" = "Remove Device?"; - -/* Caption for a button to remove current device from Sync */ -"sync.turn.off.confirm.action" = "Remove"; - -/* Message for the dialog to confirm turning off Sync */ -"sync.turn.off.confirm.message" = "This Device will no longer be able to access your synced data."; - -/* Title of the dialog to confirm turning off Sync */ -"sync.turn.off.confirm.title" = "Turn Off Sync?"; - -/* Reason for auth when setting up Sync */ -"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; - -/* Data syncing unavailable warning message */ -"sync.warning.data.syncing.disabled" = "Sorry, but Sync & Backup is currently unavailable. Please try again later."; - -/* Data syncing unavailable warning message */ -"sync.warning.data.syncing.disabled.upgrade.required" = "Sorry, but Sync & Backup is no longer available in this app version. Please update DuckDuckGo to the latest version to continue."; - -/* Accessibility label on remove button */ -"tab.close.home" = "Close home tab"; - -/* Accesibility label: first string is website title, second is address */ -"tab.close.with.title.and.address" = "Close \"%1$@\" at %2$@"; - -/* Accessibility label on tab cell */ -"tab.open.home" = "Open home tab"; - -/* Accesibility label: first string is website title, second is address */ -"tab.open.with.title.and.address" = "Open \"%1$@\" at %2$@"; - -/* Tab Switcher Accessibility Label */ -"tab.switcher.accessibility.label" = "Tab Switcher"; - -/* Description text for the text size adjustment setting */ -"textSize.description" = "Choose your preferred text size. Websites you view in DuckDuckGo will adjust to it."; - -/* Replacement string is a current percent value e.g. '120%' */ -"textSize.footer" = "Text Size - %@"; - -/* Dark Theme entry */ -"theme.acc.dark" = "Dark"; - -/* Short entry for Default System theme */ -"theme.acc.default" = "System"; - -/* Light Theme entry */ -"theme.acc.light" = "Light"; - -/* Dark Theme entry */ -"theme.name.dark" = "Dark"; - -/* Entry for Default System theme */ -"theme.name.default" = "System Default"; - -/* Light Theme entry */ -"theme.name.light" = "Light"; - -/* Confirmation of an action - populated with a domain name */ -"toast.protection.disabled" = "Privacy Protection disabled for %@"; - -/* Confirmation of an action - populated with a domain name */ -"toast.protection.disabled.and.toggle.report.sent" = "Privacy Protections disabled for %@ and report sent."; - -/* Confirmation of an action - populated with a domain name */ -"toast.protection.enabled" = "Privacy Protection enabled for %@"; - -/* Autocomplete selected suggestion into the Address Bar button accessibility label */ -"voiceover.action.suggestion.autocomplete" = "Autocomplete suggestion"; - -/* Voice-over title for a Bookmark suggestion. Noun */ -"voiceover.suggestion.type.bookmark" = "Bookmark"; - -/* Search for suggestion action accessibility title */ -"voiceover.suggestion.type.search" = "Search at DuckDuckGo"; - -/* Open suggested website action accessibility title */ -"voiceover.suggestion.type.website" = "Open website"; - -/* No microphone permission alert action button to open the settings app */ -"voiceSearch.alert.no-permission.action.settings" = "Settings"; - -/* Message for alert warning the user about missing microphone permission */ -"voiceSearch.alert.no-permission.message" = "Please allow Microphone access in iOS System Settings for DuckDuckGo to use voice features."; - -/* OK button alert warning the user about missing microphone permission */ -"voiceSearch.alert.no-permission.ok" = "OK"; - -/* Title for alert warning the user about missing microphone permission */ -"voiceSearch.alert.no-permission.title" = "Microphone Access Required"; - -/* Cancel button for voice search */ -"voiceSearch.cancel" = "Cancel"; - -/* Voice-search footer note with on-device privacy warning */ -"voiceSearch.footer.note" = "Add Private Voice Search option to the address bar. Audio is not stored or shared with anyone, including DuckDuckGo."; - -/* Voice-search footer note with on-device privacy warning */ -"voiceSearch.footer.note.old" = "Audio is processed on-device. It's not stored or shared with anyone, including DuckDuckGo."; - -/* Cancel action for the alert when the subscription expires */ -"vpn.access-revoked.alert.action.cancel" = "Dismiss"; - -/* Primary action for the alert when the subscription expires */ -"vpn.access-revoked.alert.action.subscribe" = "Subscribe"; - -/* Alert message for the alert when the Privacy Pro subscription expiress */ -"vpn.access-revoked.alert.message" = "Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; - -/* Alert title for the alert when the Privacy Pro subscription expires */ -"vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; - -/* Title for the VPN widget onboarding screen */ -"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; - -/* Title for the Cancel button of the VPN feedback form */ -"vpn.feedback-form.button.cancel" = "Cancel"; - -/* Title for the Done button of the VPN feedback form */ -"vpn.feedback-form.button.done" = "Done"; - -/* Title for the Submit button of the VPN feedback form */ -"vpn.feedback-form.button.submit" = "Submit"; - -/* Title for the Submitting state of the VPN feedback form */ -"vpn.feedback-form.button.submitting" = "Submitting…"; - -/* Title for the browser crash/freeze category of the VPN feedback form */ -"vpn.feedback-form.category.browser-crash-or-freeze" = "VPN causes browser to crash or freeze"; - -/* Title for the 'VPN fails to connect' category of the VPN feedback form */ -"vpn.feedback-form.category.fails-to-connect" = "VPN fails to connect"; - -/* Title for the 'VPN feature request' category of the VPN feedback form */ -"vpn.feedback-form.category.feature-request" = "VPN feature request"; - -/* Title for the category 'VPN causes issues with other apps or websites' category of the VPN feedback form */ -"vpn.feedback-form.category.issues-with-apps" = "VPN causes issues with other apps or websites"; - -/* Title for the local device connectivity category of the VPN feedback form */ -"vpn.feedback-form.category.local-device-connectivity" = "VPN won't let me connect to local device"; - -/* Title for the 'other VPN feedback' category of the VPN feedback form */ -"vpn.feedback-form.category.other" = "Other VPN feedback"; - -/* Title for the category selection state of the VPN feedback form */ -"vpn.feedback-form.category.select-category" = "Select a category"; - -/* Title for the 'VPN is too slow' category of the VPN feedback form */ -"vpn.feedback-form.category.too-slow" = "VPN connection is too slow"; - -/* Title for the 'unable to install' category of the VPN feedback form */ -"vpn.feedback-form.category.unable-to-install" = "Unable to install VPN"; - -/* Title for the feedback sent view description of the VPN feedback form */ -"vpn.feedback-form.sending-confirmation.description" = "Your feedback will help us improve the\nDuckDuckGo VPN."; - -/* Title for the feedback sending error text of the VPN feedback form */ -"vpn.feedback-form.sending-confirmation.error" = "We couldn't send your feedback right now, please try again."; - -/* Title for the feedback sent view title of the VPN feedback form */ -"vpn.feedback-form.sending-confirmation.title" = "Thank you!"; - -/* Toast message when the VPN feedback form is submitted successfully */ -"vpn.feedback-form.submitted.message" = "Thank You! Feedback submitted."; - -/* Text for the body of the VPN feedback form */ -"vpn.feedback-form.text-1" = "Please describe what's happening, what you expected to happen, and the steps that led to the issue:"; - -/* Text for the body of the VPN feedback form */ -"vpn.feedback-form.text-2" = "In addition to the details entered into this form, your app issue report will contain:"; - -/* Bullet text for the body of the VPN feedback form */ -"vpn.feedback-form.text-3" = "• Whether specific DuckDuckGo features are enabled"; - -/* Bullet text for the body of the VPN feedback form */ -"vpn.feedback-form.text-4" = "• Aggregate DuckDuckGo app diagnostics"; - -/* Text for the body of the VPN feedback form */ -"vpn.feedback-form.text-5" = "By tapping \"Submit\" I agree that DuckDuckGo may use the information in this report for purposes of improving the app's features."; - -/* Title for each screen of the VPN feedback form */ -"vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; - -/* VPN settings screen cell text for adding the VPN widget to the home screen */ -"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; - -/* Disclaimer for the DNS Server section on the DNS Server screen */ -"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; - -/* Header text for the DNS section on the VPN Settings screen */ -"vpn.settings.dns.section-header" = "DNS"; - -/* Title for the Apply button on the DNS Server setting screen */ -"vpn.settings.dns.server.apply.button.title" = "Apply"; - -/* Default value for the DNS Server row on the VPN Settings screen */ -"vpn.settings.dns.server.default.value" = "DuckDuckGo"; - -/* Title for the IPv4 Address setting */ -"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; - -/* Custom option for the DNS Server setting */ -"vpn.settings.dns.server.option.custom" = "Custom"; - -/* Recommended option for the DNS Server setting */ -"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; - -/* Title for the DNS Server setting screen */ -"vpn.settings.dns.server.screen.title" = "DNS Server"; - -/* Title for the DNS Server row on the VPN Settings screen */ -"vpn.settings.dns.server.title" = "DNS Server"; - -/* Title for the button to enable push notifications in system settings */ -"waitlist.allow-notifications" = "Allow Notifications"; - -/* Body text for the waitlist notification */ -"waitlist.available.notification.body" = "Open your invite"; - -/* Title for the copy action */ -"waitlist.copy" = "Copy"; - -/* Label text for the invite code */ -"waitlist.invite-code" = "Invite Code"; - -/* Step title on the invite screen */ -"waitlist.invite-screen.step.title" = "Step %d"; - -/* Title for the invite code screen */ -"waitlist.invite-screen.youre-invited" = "You’re Invited!"; - -/* Title for the Join Waitlist screen */ -"waitlist.join-waitlist-screen.join" = "Join the Private Waitlist"; - -/* Temporary status text for the Join Waitlist screen */ -"waitlist.join-waitlist-screen.joining" = "Joining Waitlist..."; - -/* Title for the Share Link button */ -"waitlist.join-waitlist-screen.share-link" = "Share Link"; - -/* Notification text for the waitlist */ -"waitlist.joined.no-notification.get-notification" = "Notify Me"; - -/* Title for the alert to confirm enabling notifications */ -"waitlist.joined.no-notification.get-notification-confirmation-title" = "Get a notification when it’s your turn?"; - -/* Cancel button in the alert to confirm enabling notifications */ -"waitlist.joined.no-notification.no-thanks" = "No Thanks"; - -/* Text used for the Notifications Disabled state */ -"waitlist.notification.disabled" = "We can notify you when it’s your turn, but notifications are currently disabled for DuckDuckGo."; - -/* Privacy disclaimer for the Waitlist feature */ -"waitlist.privacy-disclaimer" = "You won’t need to share any personal information to join the waitlist. You’ll secure your place in line with a timestamp that exists solely on your device so we can notify you when it’s your turn."; - -/* Title for the queue screen */ -"waitlist.queue-screen.on-the-list" = "You’re on the list!"; - -/* Title for the settings subtitle */ -"waitlist.settings.download-available" = "Download available"; - -/* Title for the share sheet entry */ -"waitlist.share-sheet.title" = "You’re Invited!"; - -/* Confirmation message */ -"web.url.remove.favorite.done" = "Favorite removed"; - -/* Confirmation message */ -"web.url.save.bookmark.done" = "Bookmark added"; - -/* Floating Info message */ -"web.url.save.bookmark.exists" = "Bookmark already saved"; - -/* Floating message indicating failure */ -"web.url.save.bookmark.none" = "No webpage to bookmark"; - -/* Confirmation message */ -"web.url.save.favorite.done" = "Favorite added"; - -/* Cancel button for JavaScript alerts */ -"webJSAlert.cancel.button" = "Cancel"; - -/* OK button for JavaScript alerts */ -"webJSAlert.OK.button" = "OK"; - -/* Alert title explaining the message is shown by a website */ -"webJSAlert.website-message.format" = "A message from %@:"; - -/* Title for the Windows waitlist button redirecting to Mac waitlist */ -"windows-waitlist.join-waitlist-screen.mac-waitlist" = "Looking for the Mac version?"; - -/* Title for the settings subtitle */ -"windows-waitlist.settings.browse-privately" = "Browse privately with our app for Windows"; - -/* Message used when sharing to iMessage */ -"windows-waitlist.share-sheet.message" = "Ready to start browsing privately on Windows? - -Visit this URL on your Computer to download: -https://duckduckgo.com/windows"; - -/* Summary text for the Windows browser waitlist */ -"windows-waitlist.summary" = "DuckDuckGo for Windows has what you need to browse with more privacy — private search, tracker blocking, forced encryption, and cookie pop-up blocking, plus more best-in-class protections on the way."; - -/* Title for the Windows Waitlist feature */ -"windows-waitlist.title" = "DuckDuckGo App for Windows"; - -/* Title for the Windows browser download link page */ -"windows-waitlist.waitlist-download-screen.try-duckduckgo-for-windows" = "Get DuckDuckGo for Windows!"; - +⼪⁂畴潮慢敬⁦潲⁅摩琠慣瑩潮‪⼊≡捴楯渮来湥物挮敤楴∠㴠≅摩琢㬊ਯ⨠䉵瑴潮慢敬⁦潲⁡⁧敮敲楣⁳桯眠慣瑩潮‪⼊≡捴楯渮来湥物挮獨潷∠㴠≓桯眢㬊ਯ⨠䉵瑴潮慢敬⁦潲⁕湤漠慣瑩潮‪⼊≡捴楯渮来湥物挮畮摯∠㴠≕湤漢㬊ਯ⨠䉵瑴潮慢敬⁦潲慮慧楮朠晡癯物瑥猠⨯ਢ慣瑩潮⹭慮慧攮晡癯物瑥猢‽•䵡湡来∻ਊ⼪⁂畴瑯渠污扥氠景爠佋⁡捴楯渠⨯ਢ慣瑩潮⹯欢‽•佋∻ਊ⼪⁁摤⁡捴楯渠ⴠ扵瑴潮⁳桯睮⁩渠慬敲琠⨯ਢ慣瑩潮⹴楴汥⹡摤∠㴠≁摤∻ਊ⼪⁁畴潦楬氠䱯杩湳敮甠楴敭灥湩湧⁴桥潧楮楳琠⨯ਢ慣瑩潮⹴楴汥⹡畴潦楬氮汯杩湳∠㴠≐慳獷潲摳∻ਊ⼪⁃潮晩牭慴楯渠潦⁁摤⁴漠䉯潫浡牫猠慣瑩潮⁩渠䅤搠䅬氠佰敮⁔慢猠瑯⁂潯歭慲歳⁡汥牴‪⼊≡捴楯渮瑩瑬攮扯潫浡牫∠㴠≂潯歭慲欢㬊ਯ⨠䉵瑴潮㨠佰敮⁢潯歭慲歳楳琠⨯ਢ慣瑩潮⹴楴汥⹢潯歭慲歳∠㴠≂潯歭慲歳∻ਊ⼪⁃慮捥氠慣瑩潮‭⁢畴瑯渠獨潷渠楮⁡汥牴‪⼊≡捴楯渮瑩瑬攮捡湣敬∠㴠≃慮捥氢㬊ਯ⨠䍯灹⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹣潰礢‽•䍯灹∻ਊ⼪⁆汯慴楮朠浥獳慧攠楮摩捡瑩湧⁕剌⁨慳⁢敥渠捯灩敤‪⼊≡捴楯渮瑩瑬攮捯灹⹭敳獡来∠㴠≕剌⁣潰楥搢㬊ਯ⨠䑥汥瑥⁡捴楯渠ⴠ扵瑴潮⁳桯睮⁩渠慬敲琠⨯ਢ慣瑩潮⹴楴汥⹤敬整攢‽•䑥汥瑥∻ਊ⼪⁄楳慢汥⁰牯瑥捴楯渠慣瑩潮‪⼊≡捴楯渮瑩瑬攮摩獡扬攮灲潴散瑩潮∠㴠≄楳慢汥⁐物癡捹⁐牯瑥捴楯渢㬊ਯ⨠䑯睮汯慤猠浥湵⁩瑥洠潰敮楮朠瑨攠摯睮汯摳楳琠⨯ਢ慣瑩潮⹴楴汥⹤潷湬潡摳∠㴠≄潷湬潡摳∻ਊ⼪⁅摩琠䉯潫浡牫⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹥摩琮扯潫浡牫∠㴠≅摩琠䉯潫浡牫∻ਊ⼪⁅湡扬攠灲潴散瑩潮⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹥湡扬攮灲潴散瑩潮∠㴠≅湡扬攠偲楶慣礠偲潴散瑩潮∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ慣瑩潮⹴楴汥⹦潲来瑁汬∠㴠≃汯獥⁔慢猠慮搠䍬敡爠䑡瑡∻ਊ⼪⁃潮晩牭慴楯渠浥獳慧攠⨯ਢ慣瑩潮⹴楴汥⹦潲来瑁汬䑯湥∠㴠≔慢猠慮搠摡瑡⁣汥慲敤∻ਊ⼪⁏灥渠楮⁎敷⁂慣歧牯畮搠呡戠慣瑩潮‪⼊≡捴楯渮瑩瑬攮湥睂慣歧牯畮摔慢䙯牕牬∠㴠≏灥渠楮⁂慣歧牯畮搢㬊ਯ⨠䍲敡瑥⁎敷⁔慢⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹮敷呡扁捴楯渢‽•乥眢㬊ਯ⨠佰敮⁩渠乥眠呡戠慣瑩潮‪⼊≡捴楯渮瑩瑬攮湥睔慢䙯牕牬∠㴠≏灥渠楮⁎敷⁔慢∻ਊ⼪⁏灥渠慣瑩潮‪⼊≡捴楯渮瑩瑬攮潰敮∠㴠≏灥渢㬊ਯ⨠偡獴攠慮搠䝯⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹰慳瑥䅮摇漢‽•偡獴攠☠䝯∻ਊ⼪⁐物湴⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹰物湴∠㴠≐物湴∻ਊ⼪⁒敦牥獨⁡捴楯渠ⴠ扵瑴潮⁳桯睮⁩渠慬敲琠⨯ਢ慣瑩潮⹴楴汥⹲敦牥獨∠㴠≒敦牥獨∻ਊ⼪⁒敭潶攠䙡癯物瑥⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹲敭潶攮晡癯物瑥∠㴠≒敭潶攠䙡癯物瑥∻ਊ⼪⁒数潲琠扲潫敮⁳楴攠慣瑩潮‪⼊≡捴楯渮瑩瑬攮牥灯牴䉲潫敮卩瑥∠㴠≒数潲琠䉲潫敮⁓楴攢㬊ਯ⨠䅣瑩潮⁴漠牥汯慤⁣畲牥湴⁰慧攠楮⁤敳歴潰潤攠⨯ਢ慣瑩潮⹴楴汥⹲敱略獴⹤敳歴潰⹳楴攢‽•䑥獫瑯瀠卩瑥∻ਊ⼪⁁捴楯渠瑯⁲敬潡搠捵牲敮琠灡来⁩渠浯扩汥潤攠⨯ਢ慣瑩潮⹴楴汥⹲敱略獴⹭潢楬攮獩瑥∠㴠≍潢楬攠卩瑥∻ਊ⼪⁓慶攠慣瑩潮‭⁢畴瑯渠獨潷渠楮⁡汥牴‪⼊≡捴楯渮瑩瑬攮獡癥∠㴠≓慶攢㬊ਯ⨠䅤搠瑯⁂潯歭慲歳⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹳慶攮扯潫浡牫∠㴠≁摤⁂潯歭慲欢㬊ਯ⨠䅤搠瑯⁆慶潲楴敳⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹳慶攮晡癯物瑥∠㴠≁摤⁆慶潲楴攢㬊ਯ⨠卥瑴楮杳⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹳整瑩湧猢‽•卥瑴楮杳∻ਊ⼪⁓桡牥⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹳桡牥∠㴠≓桡牥∻ਊ⼪⁓整瑩湧猠污扥氠景爠扯瑴潭⁰潳楴楯渠景爠瑨攠慤摲敳猠扡爠⨯ਢ慤摲敳献扡爮扯瑴潭∠㴠≂潴瑯洢㬊ਯ⨠卥瑴楮杳慢敬⁦潲⁴潰⁰潳楴楯渠景爠瑨攠慤摲敳猠扡爠⨯ਢ慤摲敳献扡爮瑯瀢‽•呯瀢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≡摤坩摧整⹢畴瑯渢‽•䅤搠坩摧整∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ慤摗楤来琮摥獣物灴楯渢‽•䝥琠煵楣欠慣捥獳⁴漠灲楶慴攠獥慲捨⁡湤⁴桥⁳楴敳⁹潵潶攮∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ慤摗楤来琮獥瑴楮杳⹦楲獴偡牡杲慰栢‽•䱯湧⵰牥獳渠瑨攠䡯浥⁓捲敥渠瑯⁥湴敲楧杬攠浯摥⸢㬊ਯ⨠剥灬慣敭敮琠獴物湧⁩猠愠灬畳⁢畴瑯渠楣潮⸠⨯ਢ慤摗楤来琮獥瑴楮杳⹳散潮摐慲慧牡灨⸥䀢‽•呡瀠瑨攠灬畳‥䀠扵瑴潮⸢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≡摤坩摧整⹳整瑩湧献瑩瑬攢‽•䙩湤⁡湤⁳敬散琠䑵捫䑵捫䝯⸠周敮⁣桯潳攠愠睩摧整⸢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≡摤坩摧整⹴楴汥∠㴠≏湥⁴慰⁴漠祯畲⁦慶潲楴攠獩瑥献∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ慬敲琮浥獳慧攮扯潫浡牫䅬氢‽•䕸楳瑩湧⁢潯歭慲歳⁷楬氠湯琠扥⁤異汩捡瑥搮∻ਊ⼪⁄敳捲楰瑩潮⁦潲⁡汥牴⁳桯睮⁷桥渠獹湣⁥牲潲捣畲猠扥捡畳攠潦⁢慤⁢潯歭慲歳⁤慴愠⨯ਢ慬敲琮獹湣ⵢ潯歭慲歳ⵢ慤ⵤ慴愭敲牯爭摥獣物灴楯渢‽•卯浥⁢潯歭慲歳⁡牥⁦潲浡瑴敤⁩湣潲牥捴汹爠瑯漠汯湧⁡湤⁷敲攠湯琠獹湣敤⸢㬊ਯ⨠䑥獣物灴楯渠景爠慬敲琠獨潷渠睨敮⁳祮挠扯潫浡牫猠灡畳敤⁦潲⁴潯慮礠楴敭猠⨯ਢ慬敲琮獹湣ⵢ潯歭慲歳⵰慵獥搭摥獣物灴楯渢‽•奯甧癥⁲敡捨敤⁴桥慸業畭畭扥爠潦⁢潯歭慲歳⸠偬敡獥⁤敬整攠獯浥⁢潯歭慲歳⁴漠牥獵浥⁳祮挮∻ਊ⼪⁔楴汥⁦潲⁡汥牴⁳桯睮⁷桥渠獹湣⁢潯歭慲歳⁰慵獥搠景爠瑯漠浡湹⁩瑥浳‪⼊≡汥牴⹳祮挭扯潫浡牫猭灡畳敤⵴楴汥∠㴠≂潯歭慲欠卹湣⁩猠偡畳敤∻ਊ⼪⁄敳捲楰瑩潮⁦潲⁡汥牴⁳桯睮⁷桥渠獹湣⁥牲潲捣畲猠扥捡畳攠潦⁢慤⁣牥摥湴楡汳⁤慴愠⨯ਢ慬敲琮獹湣ⵣ牥摥湴楡汳ⵢ慤ⵤ慴愭敲牯爭摥獣物灴楯渢‽•卯浥⁰慳獷潲摳⁡牥⁦潲浡瑴敤⁩湣潲牥捴汹爠瑯漠汯湧⁡湤⁷敲攠湯琠獹湣敤⸢㬊ਯ⨠䑥獣物灴楯渠景爠慬敲琠獨潷渠睨敮⁳祮挠捲敤敮瑩慬猠灡畳敤⁦潲⁴潯慮礠楴敭猠⨯ਢ慬敲琮獹湣ⵣ牥摥湴楡汳⵰慵獥搭摥獣物灴楯渢‽•奯甧癥⁲敡捨敤⁴桥慸業畭畭扥爠潦⁰慳獷潲摳⸠偬敡獥⁤敬整攠獯浥⁰慳獷潲摳⁴漠牥獵浥⁳祮挮∻ਊ⼪⁔楴汥⁦潲⁡汥牴⁳桯睮⁷桥渠獹湣⁣牥摥湴楡汳⁰慵獥搠景爠瑯漠浡湹⁩瑥浳‪⼊≡汥牴⹳祮挭捲敤敮瑩慬猭灡畳敤⵴楴汥∠㴠≐慳獷潲搠卹湣⁩猠偡畳敤∻ਊ⼪⁔楴汥⁦潲⁳祮挠敲牯爠慬敲琠⨯ਢ慬敲琮獹湣ⵥ牲潲∠㴠≓祮挠☠䉡捫異⁅牲潲∻ਊ⼪⁓祮挠敲牯爠慬敲琠慣瑩潮⁢畴瑯渠瑩瑬攬⁴慫敳⁴桥⁵獥爠瑯⁴桥⁳祮挠獥瑴楮杳⁰慧攮‪⼊≡汥牴⹳祮挭敲牯爭慣瑩潮∠㴠≓祮挠卥瑴楮杳∻ਊ⼪⁄敳捲楰瑩潮⁦潲⁡汥牴⁳桯睮⁷桥渠畳敲潧来搠潦映晲潭⁳祮挠⨯ਢ慬敲琮獹湣⵩湶慬楤⵬潧楮ⵥ牲潲ⵤ敳捲楰瑩潮∠㴠≓祮挠桡猠扥敮⁰慵獥搮⁉映祯甠睡湴⁴漠捯湴楮略⁳祮捩湧⁴桩猠摥癩捥Ⱐ牥捯湮散琠畳楮朠慮潴桥爠摥癩捥爠祯畲⁲散潶敲礠捯摥⸢㬊ਯ⨠䱥慲渠浯牥⁢畴瑯渠楮⁡汥牴‪⼊≡汥牴⹳祮挭灡畳敤ⵡ汥牴⵬敡牮⵭潲攭扵瑴潮∠㴠≌敡牮⁍潲攢㬊ਯ⨠䍯湦楲浡瑩潮⁢畴瑯渠楮⁡汥牴‪⼊≡汥牴⹳祮挭灡畳敤ⵡ汥牴ⵯ欭扵瑴潮∠㴠≏䬢㬊ਯ⨠呩瑬攠景爠慬敲琠獨潷渠睨敮⁳祮挠灡畳敤⁦潲⁡渠敲牯爠⨯ਢ慬敲琮獹湣⵰慵獥搭瑩瑬攢‽•卹湣⁩猠偡畳敤∻ਊ⼪⁄敳捲楰瑩潮⁦潲⁡汥牴⁳桯睮⁷桥渠獹湣⁥牲潲捣畲猠扥捡畳攠潦⁴潯慮礠牥煵敳瑳‪⼊≡汥牴⹳祮挭瑯漭浡湹⵲敱略獴猭敲牯爭摥獣物灴楯渢‽•卹湣…⁂慣歵瀠楳⁴敭灯牡物汹⁵湡癡楬慢汥⸢㬊ਯ⨠呩瑬攠潦⁴桥⁷慲湩湧敳獡来⁴桡琠瑥汬猠瑨攠畳敲⁴桡琠瑨敲攠睡猠慮⁥牲潲⁷楴栠瑨攠獹湣⁦敡瑵牥⸠⨯ਢ慬敲琮獹湣⹷慲湩湧⹳祮挭敲牯爢‽•卹湣⁅牲潲∻ਊ⼪⁔楴汥映瑨攠睡牮楮朠浥獳慧攠⨯ਢ慬敲琮獹湣⹷慲湩湧⹳祮挭灡畳敤∠㴠≓祮挠☠䉡捫異⁩猠偡畳敤∻ਊ⼪⁑略獴楯渠晲潭⁣潮晩牭慴楯渠摩慬潧‪⼊≡汥牴⹴楴汥⹢潯歭慲歁汬∠㴠≂潯歭慲欠䅬氠呡扳㼢㬊ਯ⨠䑩獡扬攠灲潴散瑩潮⁡汥牴‪⼊≡汥牴⹴楴汥⹤楳慢汥⹰牯瑥捴楯渢‽•䅤搠瑯⁕湰牯瑥捴敤⁓楴敳∻ਊ⼪⁄楳慢汥⁰潴散瑩潮⁡汥牴⁰污捥桯汤敲‭敡癥⁡猠楴⁩猠⨯ਢ慬敲琮瑩瑬攮摩獡扬攮灲潴散瑩潮⹰污捥桯汤敲∠㴠≷睷⹥硡浰汥⹣潭∻ਊ⼪⁓慶攠䉯潫浡牫⁡捴楯渠⨯ਢ慬敲琮瑩瑬攮獡癥⹢潯歭慲欢‽•卡癥⁂潯歭慲欢㬊ਯ⨠卡癥⁆慶潲楴攠慣瑩潮‪⼊≡汥牴⹴楴汥⹳慶攮晡癯物瑥∠㴠≓慶攠䙡癯物瑥∻ਊ⼪⁄敳捲楰瑩潮⁦潲⁵湡扬攠瑯⁣牥慴攠牥捯癥特⁰摦⁥牲潲‪⼊≡汥牴⹵湡扬攭瑯ⵣ牥慴攭牥捯癥特⵰摦ⵤ敳捲楰瑩潮∠㴠≕湡扬攠瑯⁣牥慴攠瑨攠牥捯癥特⁐䑆⸢㬊ਯ⨠䑥獣物灴楯渠景爠畮慢汥⁴漠摥汥瑥⁤慴愠敲牯爠⨯ਢ慬敲琮畮慢汥⵴漭摥汥瑥ⵤ慴愭摥獣物灴楯渢‽•啮慢汥⁴漠摥汥瑥⁤慴愠潮⁴桥⁳敲癥爮∻ਊ⼪⁄敳捲楰瑩潮⁦潲⁵湡扬攠瑯敲来⁴睯⁡捣潵湴猠敲牯爠⨯ਢ慬敲琮畮慢汥⵴漭浥牧攭瑷漭慣捯畮瑳ⵤ敳捲楰瑩潮∠㴠≔漠灡楲⁴桥獥⁤敶楣敳Ⱐ瑵牮晦⁓祮挠☠䉡捫異渠潮攠摥癩捥⁴桥渠瑡瀠尢卹湣⁗楴栠䅮潴桥爠䑥癩捥尢渠瑨攠潴桥爠摥癩捥⸢㬊ਯ⨠䑥獣物灴楯渠景爠畮慢汥⁴漠牥浯癥⁤敶楣攠敲牯爠⨯ਢ慬敲琮畮慢汥⵴漭牥浯癥ⵤ敶楣攭摥獣物灴楯渢‽•啮慢汥⁴漠牥浯癥⁴桩猠摥癩捥⁦牯洠卹湣…⁂慣歵瀮∻ਊ⼪⁄敳捲楰瑩潮⁦潲⁵湡扬攠瑯⁳祮挠瑯⁳敲癥爠敲牯爠⨯ਢ慬敲琮畮慢汥⵴漭獹湣⵴漭獥牶敲ⵤ敳捲楰瑩潮∠㴠≕湡扬攠瑯⁣潮湥捴⁴漠瑨攠獥牶敲⸢㬊ਯ⨠䑥獣物灴楯渠景爠畮慢汥⁴漠獹湣⁷楴栠慮潴桥爠摥癩捥⁥牲潲‪⼊≡汥牴⹵湡扬攭瑯⵳祮挭睩瑨ⵯ瑨敲ⵤ敶楣攭摥獣物灴楯渢‽•啮慢汥⁴漠卹湣⁷楴栠慮潴桥爠摥癩捥⸢㬊ਯ⨠䑥獣物灴楯渠景爠畮慢汥⁴漠瑵牮⁳祮挠潦映敲牯爠⨯ਢ慬敲琮畮慢汥⵴漭瑵牮⵳祮挭潦昭摥獣物灴楯渢‽•啮慢汥⁴漠瑵牮⁓祮挠☠䉡捫異晦⸢㬊ਯ⨠䑥獣物灴楯渠景爠畮慢汥⁴漠異摡瑥⁤敶楣攠湡浥⁥牲潲‪⼊≡汥牴⹵湡扬攭瑯⵵灤慴攭摥癩捥⵮慭攭摥獣物灴楯渢‽•啮慢汥⁴漠異摡瑥⁴桥⁤敶楣攠湡浥⸢㬊ਯ⨠卨潷渠潮⁡畴桥湴楣慴楯渠獣牥敮‪⼊≡灰⹡畴桥湴楣慴楯渮畮汯捫∠㴠≕湬潣欠䑵捫䑵捫䝯⸢㬊ਯ⨠䅵瑨敮瑩捡瑩潮⁁汥牴⁓楧渠䥮⁂畴瑯渠⨯ਢ慵瑨⹡汥牴⹬潧楮⹢畴瑯渢‽•卩杮⁉渢㬊ਯ⨠䅵瑨敮瑩捡瑩潮⁁汥牴‭⁰潰畬慴敤⁷楴栠愠摯浡楮慭攠⨯ਢ慵瑨⹡汥牴⹭敳獡来⹥湣特灴敤∠㴠≓楧渠楮⁴漠╀⸠奯畲潧楮⁩湦潲浡瑩潮⁷楬氠扥⁳敮琠獥捵牥汹⸢㬊ਯ⨠䅵瑨敮瑩捡瑩潮⁁汥牴‭⁰潰畬慴敤⁷楴栠愠摯浡楮慭攠⨯ਢ慵瑨⹡汥牴⹭敳獡来⹰污楮∠㴠≌潧⁩渠瑯‥䀮⁙潵爠灡獳睯牤⁷楬氠扥⁳敮琠楮獥捵牥汹⁢散慵獥⁴桥⁣潮湥捴楯渠楳⁵湥湣特灴敤⸢㬊ਯ⨠䅵瑨敮瑩捡瑩潮⁐慳獷潲搠晩敬搠灬慣敨潬摥爠⨯ਢ慵瑨⹡汥牴⹰慳獷潲搮灬慣敨潬摥爢‽•偡獳睯牤∻ਊ⼪⁁畴桥湴楣慴楯渠䅬敲琠呩瑬攠⨯ਢ慵瑨⹡汥牴⹴楴汥∠㴠≁畴桥湴楣慴楯渠剥煵楲敤∻ਊ⼪⁁畴桥湴楣慴楯渠啳敲慭攠晩敬搠灬慣敨潬摥爠⨯ਢ慵瑨⹡汥牴⹵獥牮慭攮灬慣敨潬摥爢‽•啳敲湡浥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ慵瑯捬敡爮潦昢‽•佦昢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≡畴潣汥慲⹯渢‽•佮∻ਊ⼪⁓畢瑩瑬攠景爠獥慲捨⁨楳瑯特⁩瑥浳‪⼊≡畴潣潭灬整攮桩獴潲礮獥慲捨⹤畣此畣歧漢‽•卥慲捨⁄畣歄畣歇漢㬊ਯ⨠周攠浥獳慧攠瑥硴⁳桯睮⁩渠獵杧敳瑩潮猠⨯ਢ慵瑯捯浰汥瑥⹨楳瑯特⹷慲湩湧⹭敳獡来∠㴠≓敡牣栠獵杧敳瑩潮猠湯眠楮捬畤攠祯畲⁲散敮瑬礠癩獩瑥搠獩瑥献⁔畲渠潦映楮⁓整瑩湧猬爠捬敡爠慮祴業攠睩瑨⁴桥⃰龔ꔠ䙩牥⁂畴瑯渮∻ਊ⼪⁔楴汥⁦潲敳獡来⁳桯眠楮⁳畧来獴楯湳‪⼊≡畴潣潭灬整攮桩獴潲礮睡牮楮朮瑩瑬攢‽•卡浥⁰物癡捹⹜湂整瑥爠獥慲捨⁳畧来獴楯湳™㬊ਯ⨠䅵瑯捯湳敮琠景爠䍯潫楥⁍慮慧敭敮琠卥瑴楮朠獴慴攠⨯ਢ慵瑯捯湳敮琮摩獡扬敤∠㴠≄楳慢汥搢㬊ਯ⨠䅵瑯捯湳敮琠景爠䍯潫楥⁍慮慧敭敮琠卥瑴楮朠獴慴攠⨯ਢ慵瑯捯湳敮琮敮慢汥搢‽•䕮慢汥搢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≡畴潣潮獥湴⹩湦漮桥慤敲∠㴠≗桥渠䑵捫䑵捫䝯⁤整散瑳⁣潯歩攠捯湳敮琠灯瀭異猠潮⁳楴敳⁹潵⁶楳楴Ⱐ睥⁣慮⁴特⁴漠慵瑯浡瑩捡汬礠獥琠祯畲⁣潯歩攠灲敦敲敮捥猠瑯楮業楺攠捯潫楥猠慮搠浡硩浩穥⁰物癡捹Ⱐ瑨敮⁣汯獥⁴桥⁰潰⵵灳⸠卯浥⁳楴敳⁤潮❴⁰牯癩摥⁡渠潰瑩潮⁴漠浡湡来⁣潯歩攠灲敦敲敮捥猬⁳漠睥⁣慮湬礠桩摥⁰潰⵵灳楫攠瑨敳攮∻ਊ⼪⁄漠湯琠瑲慮獬慴攠ⴠ獴物湧獤楣琠敮瑲礠⨯ਢ慵瑯晩汬⹤敬整攮慬氮灡獳睯牤献捯浰汥瑩潮∠㴠≡畴潦楬氮摥汥瑥⹡汬⹰慳獷潲摳⹣潭灬整楯渢㬊ਯ⨠䑯潴⁴牡湳污瑥‭⁳瑲楮杳摩捴⁥湴特‪⼊≡畴潦楬氮摥汥瑥⹡汬⹰慳獷潲摳⹣潮晩牭慴楯渮扯摹∠㴠≡畴潦楬氮摥汥瑥⹡汬⹰慳獷潲摳⹣潮晩牭慴楯渮扯摹∻ਊ⼪⁄漠湯琠瑲慮獬慴攠ⴠ獴物湧獤楣琠敮瑲礠⨯ਢ慵瑯晩汬⹤敬整攮慬氮灡獳睯牤献捯湦楲浡瑩潮⹴楴汥∠㴠≡畴潦楬氮摥汥瑥⹡汬⹰慳獷潲摳⹣潮晩牭慴楯渮瑩瑬攢㬊ਯ⨠䑯潴⁴牡湳污瑥‭⁳瑲楮杳摩捴⁥湴特‪⼊≡畴潦楬氮摥汥瑥⹡汬⹰慳獷潲摳⹳祮挮捯湦楲浡瑩潮⹢潤礢‽•慵瑯晩汬⹤敬整攮慬氮灡獳睯牤献獹湣⹣潮晩牭慴楯渮扯摹∻ਊ⼪⁏灥渠卥瑴楮杳⁡捴楯渠景爠摩獡扬楮朠慵瑯晩汬⁩渠卥瑴楮杳‪⼊≡畴潦楬氮摩獡扬攮灲潭灴⹡捴楯渮潰敮⵳整瑩湧猢‽•佰敮⁓整瑩湧猢㬊ਯ⨠䵥獳慧攠景爠楮景牭楮朠畳敲⁴桡琠瑨敹⁣慮⁤楳慢汥⁡畴潦楬氠楮⁓整瑩湧猠⨯ਢ慵瑯晩汬⹤楳慢汥⹰牯浰琮浥獳慧攢‽•奯甠捡渠瑵牮晦⁰慳獷潲搠獡癩湧⁡湹瑩浥⸢㬊ਯ⨠呥硴楮欠瑯⁥浡楬⁰牯瑥捴楯渠睥扳楴攠⨯ਢ慵瑯晩汬⹥湡扬攮敭慩氮灲潴散瑩潮∠㴠≅湡扬攠䕭慩氠偲潴散瑩潮∻ਊ⼪⁁捣敳獩扩汩瑹⁴楴汥⁦潲⁡⁈楤攠偡獳睯牤⁢畴瑯渠牥灬慣楮朠摩獰污祥搠灡獳睯牤⁷楴栠⨪⨪⨠⨯ਢ慵瑯晩汬⹨楤攭灡獳睯牤∠㴠≈楤攠偡獳睯牤∻ਊ⼪⁂畴瑯渠污扥氠瑯⁧整楮欠瑯⁤潷湬潡搠瑨攠摥獫瑯瀠扲潷獥爠⨯ਢ慵瑯晩汬⹩浰潲琮灡獳睯牤献来琭扲潷獥爭扵瑴潮∠㴠≇整⁄敳歴潰⁂牯睳敲∻ਊ⼪⁓瑥瀠ㄠ景爠楮獴牵捴楯湳⁴漠業灯牴⁰慳獷潲摳‪⼊≡畴潦楬氮業灯牴⹰慳獷潲摳⹩湳瑲畣瑩潮献獴数ㄢ‽•佰敮⁄畣歄畣歇漠潮⁍慣爠坩湤潷猢㬊ਯ⨠却数′⁦潲⁩湳瑲畣瑩潮猠瑯⁩浰潲琠灡獳睯牤献⁔桩猠牥慤猠慳‧䝯⁴漠卥瑴楮杳‾⁐慳獷潲摳✠⨯ਢ慵瑯晩汬⹩浰潲琮灡獳睯牤献楮獴牵捴楯湳⹳瑥瀲∠㴠≇漠瑯‥ㄤ䀠㸠┲⑀∻ਊ⼪⁳散潮搠灡牡浥瑥爠景爠慵瑯晩汬⹩浰潲琮灡獳睯牤献楮獴牵捴楯湳⹳瑥瀲‪⼊≡畴潦楬氮業灯牴⹰慳獷潲摳⹩湳瑲畣瑩潮献獴数㈮灡獳睯牤猢‽•偡獳睯牤猢㬊ਯ⨠晩牳琠灡牡浥瑥爠景爠慵瑯晩汬⹩浰潲琮灡獳睯牤献楮獴牵捴楯湳⹳瑥瀲‪⼊≡畴潦楬氮業灯牴⹰慳獷潲摳⹩湳瑲畣瑩潮献獴数㈮獥瑴楮杳∠㴠≓整瑩湧猢㬊ਯ⨠却数″⁦潲⁩湳瑲畣瑩潮猠瑯⁩浰潲琠灡獳睯牤献⁔桩猠牥慤猠慳‧卥汥捴⁉浰潲琠偡獳睯牤猠慮搠景汬潷⁴桥⁳瑥灳✠⨯ਢ慵瑯晩汬⹩浰潲琮灡獳睯牤献楮獴牵捴楯湳⹳瑥瀳∠㴠≓敬散琠╀⁡湤⁦潬汯眠瑨攠獴数猠瑯⁩浰潲琢㬊ਯ⨠偡牡浥瑥爠景爠慵瑯晩汬⹩浰潲琮灡獳睯牤献楮獴牵捴楯湳⹳瑥瀳‪⼊≡畴潦楬氮業灯牴⹰慳獷潲摳⹩湳瑲畣瑩潮献獴数㌮業灯牴∠㴠≉浰潲琠偡獳睯牤献⸮∻ਊ⼪⁓瑥瀠㐠景爠楮獴牵捴楯湳⁴漠業灯牴⁰慳獷潲摳㨠佮捥⁩浰潲瑥搠潮⁹潵爠捯浰畴敲⁹潵⁣慮⁳整⁵瀠獹湣渠瑨楳⁩偨潮敼楐慤籤敶楣攠⨯ਢ慵瑯晩汬⹩浰潲琮灡獳睯牤献楮獴牵捴楯湳⹳瑥瀴∠㴠≏湣攠業灯牴敤渠祯畲⁣潭灵瑥爠祯甠捡渠獥琠異⁳祮挠潮⁴桩猠╀∻ਊ⼪⁔楴汥⁦潲⁳散瑩潮⁷楴栠楮獴牵捴楯湳⁴漠業灯牴⁰慳獷潲摳‪⼊≡畴潦楬氮業灯牴⹰慳獷潲摳⹩湳瑲畣瑩潮献瑩瑬攢‽•䥭灯牴⁦牯洠瑨攠摥獫瑯瀠扲潷獥爺∻ਊ⼪⁓畢瑩瑬攠景爠獣牥敮⁴漠業灯牴⁰慳獷潲摳‪⼊≡畴潦楬氮業灯牴⹰慳獷潲摳⹳畢瑩瑬攢‽•䥭灯牴⁰慳獷潲摳⁩渠瑨攠摥獫瑯瀠癥牳楯渠潦⁴桥⁄畣歄畣歇漠扲潷獥爬⁴桥渠獹湣⁡捲潳猠摥癩捥献∻ਊ⼪⁂畴瑯渠污扥氠瑯⁳祮挠灡獳睯牤猠睩瑨⁤敳歴潰⁢牯睳敲‪⼊≡畴潦楬氮業灯牴⹰慳獷潲摳⹳祮挭扵瑴潮∠㴠≓祮挠坩瑨⁄敳歴潰∻ਊ⼪⁔楴汥⁦潲⁳捲敥渠瑯⁩浰潲琠灡獳睯牤猠⨯ਢ慵瑯晩汬⹩浰潲琮灡獳睯牤献瑩瑬攢‽•䡯眠呯⁉浰潲琠偡獳睯牤猢㬊ਯ⨠䑩獡扬攠慣瑩潮⁦潲⁡汥牴⁷桥渠慳歩湧⁴桥⁵獥爠楦⁴桥礠睡湴⁴漠步数⁵獩湧⁡畴潦楬氠⨯ਢ慵瑯晩汬⹫敥瀭敮慢汥搮慬敲琮摩獡扬攢‽•䑩獡扬攢㬊ਯ⨠䉵瑴潮⁤楳灬慹敤⁡晴敲⁳慶楮术異摡瑩湧⁡渠慵瑯晩汬潧楮⁴桡琠瑡步猠瑨攠畳敲⁴漠瑨攠獡癥搠汯杩渠⨯ਢ慵瑯晩汬⹬潧楮⵳慶攭慣瑩潮ⵢ畴瑯渮瑯慳琢‽•噩敷∻ਊ⼪⁍敳獡来⁤楳灬慹敤⁡晴敲⁳慶楮朠慮⁡畴潦楬氠汯杩渠⨯ਢ慵瑯晩汬⹬潧楮⵳慶敤⹴潡獴∠㴠≐慳獷潲搠獡癥搢㬊ਯ⨠䵥獳慧攠摩獰污祥搠慦瑥爠異摡瑩湧⁡渠慵瑯晩汬潧楮‪⼊≡畴潦楬氮汯杩渭異摡瑥搮瑯慳琢‽•偡獳睯牤⁵灤慴敤∻ਊ⼪⁍敮甠楴敭⁴數琠景爠捯灹楮朠慵瑯晩汬潧楮⁤整慩汳‪⼊≡畴潦楬氮汯杩湳⹣潰礭灲潭灴∠㴠≃潰礠╀∻ਊ⼪⁔楴汥⁦潲⁴潡獴⁷桥渠捯灹楮朠慤摲敳猠⨯ਢ慵瑯晩汬⹬潧楮献捯灹⵴潡獴⹡摤牥獳ⵣ潰楥搢‽•䅤摲敳猠捯灩敤∻ਊ⼪⁔楴汥⁦潲⁴潡獴⁷桥渠捯灹楮朠湯瑥猠⨯ਢ慵瑯晩汬⹬潧楮献捯灹⵴潡獴⹮潴敳ⵣ潰楥搢‽•乯瑥猠捯灩敤∻ਊ⼪⁔楴汥⁦潲⁴潡獴⁷桥渠捯灹楮朠灡獳睯牤‪⼊≡畴潦楬氮汯杩湳⹣潰礭瑯慳琮灡獳睯牤ⵣ潰楥搢‽•偡獳睯牤⁣潰楥搢㬊ਯ⨠呩瑬攠景爠瑯慳琠睨敮⁣潰祩湧⁵獥牮慭攠⨯ਢ慵瑯晩汬⹬潧楮献捯灹⵴潡獴⹵獥牮慭攭捯灩敤∠㴠≕獥牮慭攠捯灩敤∻ਊ⼪⁔楴汥映扵瑴潮⁩渠灲潭灴⁲敱畩物湧⁡畴桥湴楣慴楯渠扥景牥⁡汬⁰慳獷潲摳⁡牥⁤敬整敤‪⼊≡畴潦楬氮汯杩湳⹤敬整攮慬氮慵瑨敮瑩捡瑩潮⹰牯浰琮扵瑴潮∠㴠≁畴桥湴楣慴攠乯眢㬊ਯ⨠呩瑬攠潦⁰牯浰琠牥煵楲楮朠慵瑨敮瑩捡瑩潮⁢敦潲攠慬氠灡獳睯牤猠慲攠摥汥瑥搠⨯ਢ慵瑯晩汬⹬潧楮献摥汥瑥⹡汬⹡畴桥湴楣慴楯渮灲潭灴⹴楴汥∠㴠≁畴桥湴楣慴攠呯⁄敬整攠䅬氠偡獳睯牤猢㬊ਯ⨠剥慳潮⁦潲⁡畴桥湴楣慴楯渠睨敮⁤敬整楮朠慬氠汯杩湳‪⼊≡畴潦楬氮汯杩湳⹤敬整攮慬氮慵瑨敮瑩捡瑩潮⹲敡獯渢‽•䅵瑨敮瑩捡瑥⁴漠捯湦楲洠祯甠睡湴⁴漠摥汥瑥⁡汬⁰慳獷潲摳∻ਊ⼪⁁摤牥獳慢敬⁦潲潧楮⁤整慩汳渠慵瑯晩汬‪⼊≡畴潦楬氮汯杩湳⹤整慩汳⹡摤牥獳∠㴠≗敢獩瑥⁕剌∻ਊ⼪⁔楴汥⁦潲⁡畴潦楬氠汯杩渠摥瑡楬猠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献摥晡畬琭瑩瑬攢‽•偡獳睯牤∻ਊ⼪⁄敬整攠扵瑴潮⁷桥渠摥汥瑩湧⁡渠慵瑯晩汬潧楮‪⼊≡畴潦楬氮汯杩湳⹤整慩汳⹤敬整攢‽•䑥汥瑥⁐慳獷潲搢㬊ਯ⨠䅵瑯晩汬⁡汥牴⁢畴瑯渠捯湦楲浩湧⁤敬整攠慵瑯晩汬潧楮‪⼊≡畴潦楬氮汯杩湳⹤整慩汳⹤敬整攭捯湦楲浡瑩潮⹢畴瑯渢‽•䑥汥瑥⁐慳獷潲搢㬊ਯ⨠呩瑬攠睨敮⁥摩瑩湧⁡畴潦楬氠汯杩渠摥瑡楬猠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献敤楴⵴楴汥∠㴠≅摩琠偡獳睯牤∻ਊ⼪⁐污捥桯汤敲⁦潲⁰慳獷潲搠晩敬搠潮⁡畴潦楬氠汯杩渠摥瑡楬猠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献敤楴⹰慳獷潲搭灬慣敨潬摥爢‽•偡獳睯牤∻ਊ⼪⁐污捥桯汤敲⁦潲⁴楴汥⁦楥汤渠慵瑯晩汬潧楮⁤整慩汳‪⼊≡畴潦楬氮汯杩湳⹤整慩汳⹥摩琮瑩瑬攭灬慣敨潬摥爢‽•呩瑬攢㬊ਯ⨠偬慣敨潬摥爠景爠畲氠晩敬搠潮⁡畴潦楬氠汯杩渠摥瑡楬猠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献敤楴⹵牬⵰污捥桯汤敲∠㴠≥硡浰汥⹣潭∻ਊ⼪⁐污捥桯汤敲⁦潲⁵獥牢慮攠晩敬搠潮⁡畴潦楬氠汯杩渠摥瑡楬猠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献敤楴⹵獥牮慭攭灬慣敨潬摥爢‽•畳敲湡浥䁥硡浰汥⹣潭∻ਊ⼪⁍敳獡来⁤楳灬慹楮朠睨敮⁴桥潧楮⁷慳慳琠異摡瑥搠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献污獴⵵灤慴敤∠㴠≌慳琠異摡瑥搠╀∻ਊ⼪⁌潧楮慭攠污扥氠景爠汯杩渠摥瑡楬猠潮⁡畴潦楬氠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献汯杩渭湡浥∠㴠≔楴汥∻ਊ⼪⁔楴汥⁷桥渠慤摩湧敷⁡畴潦楬氠汯杩渠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献湥眭瑩瑬攢‽•䅤搠灡獳睯牤∻ਊ⼪⁎潴敳慢敬⁦潲潧楮⁤整慩汳渠慵瑯晩汬‪⼊≡畴潦楬氮汯杩湳⹤整慩汳⹮潴敳∠㴠≎潴敳∻ਊ⼪⁍敮甠楴敭⁴楴汥⁦潲灴楯渠瑯灥渠睥扳楴攠晲潭⁳敬散瑥搠畲氠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献潰敮⵷敢獩瑥⵰牯浰琮瑩瑬攢‽•佰敮⁗敢獩瑥∻ਊ⼪⁐慳獷潲搠污扥氠景爠汯杩渠摥瑡楬猠潮⁡畴潦楬氠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献灡獳睯牤∠㴠≐慳獷潲搢㬊ਯ⨠䅣瑩潮⁴數琠景爠慬敲琠睨敮⁡瑴敭灴楮朠瑯⁳慶攠愠摵灬楣慴攠汯杩渠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献獡癥ⵤ異汩捡瑥ⵡ汥牴⹡捴楯渢‽•佋∻ਊ⼪⁍敳獡来⁦潲⁡汥牴⁷桥渠慴瑥浰瑩湧⁴漠獡癥⁡⁤異汩捡瑥潧楮‪⼊≡畴潦楬氮汯杩湳⹤整慩汳⹳慶攭摵灬楣慴攭慬敲琮浥獳慧攢‽•奯甠慬牥慤礠桡癥⁡⁰慳獷潲搠獡癥搠景爠瑨楳⁵獥牮慭攠慮搠睥扳楴攮∻ਊ⼪⁔楴汥⁦潲⁡汥牴⁷桥渠慴瑥浰瑩湧⁴漠獡癥⁡⁤異汩捡瑥潧楮‪⼊≡畴潦楬氮汯杩湳⹤整慩汳⹳慶攭摵灬楣慴攭慬敲琮瑩瑬攢‽•䑵灬楣慴攠偡獳睯牤∻ਊ⼪⁕獥牮慭攠污扥氠景爠汯杩渠摥瑡楬猠潮⁡畴潦楬氠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献畳敲湡浥∠㴠≕獥牮慭攢㬊ਯ⨠呩瑬攠景爠扵瑴潮⁴漠䥭灯牴⁐慳獷潲摳⁷桥渠慵瑯晩汬⁨慳漠楴敭猠⨯ਢ慵瑯晩汬⹬潧楮献敭灴礭癩敷⹢畴瑯渮瑩瑬攢‽•䥭灯牴⁐慳獷潲摳∻ਊ⼪⁓畢瑩瑬攠景爠癩敷⁤楳灬慹敤⁷桥渠湯⁡畴潦楬氠灡獳睯牤猠桡癥⁢敥渠獡癥搠⨯ਢ慵瑯晩汬⹬潧楮献敭灴礭癩敷⹳畢瑩瑬攢‽•偡獳睯牤猠晲潭瑨敲⁢牯睳敲猠潲⁡灰猠捡渠扥⁩浰潲瑥搠畳楮朠瑨攠摥獫瑯瀠癥牳楯渠潦⁴桥⁄畣歄畣歇漠扲潷獥爮∻ਊ⼪⁔楴汥⁦潲⁶楥眠摩獰污祥搠睨敮⁡畴潦楬氠桡猠湯⁩瑥浳‪⼊≡畴潦楬氮汯杩湳⹥浰瑹⵶楥眮瑩瑬攢‽•乯⁰慳獷潲摳⁳慶敤⁹整∻ਊ⼪⁃慮捥氠扵瑴潮⁦潲⁡畴栠睨敮灥湩湧潧楮楳琠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹡畴栮捡湣敬∠㴠≃慮捥氢㬊ਯ⨠剥慳潮⁦潲⁡畴栠睨敮灥湩湧潧楮楳琠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹡畴栮牥慳潮∠㴠≕湬潣欠摥癩捥⁴漠慣捥獳⁰慳獷潲摳∻ਊ⼪⁔楴汥⁦潲⁣汯獥慶楧慴楯渠扵瑴潮‪⼊≡畴潦楬氮汯杩湳⹬楳琮捬潳攭瑩瑬攢‽•䍬潳攢㬊ਯ⨠呩瑬攠景爠扵瑴潮⁴漠摥汥瑥⁡汬⁳慶敤⁡畴潦楬氠灡獳睯牤猠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹤敬整攮慬氢‽•䑥汥瑥⁁汬∻ਊ⼪⁔楴汥⁦潲⁡⁴潧杬攠瑨慴⁥湡扬敳⁡畴潦楬氠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹥湡扬攢‽•卡癥⁡湤⁡畴潦楬氠灡獳睯牤猢㬊ਯ⨠䙯潴敲慢敬⁤楳灬慹敤⁢敬潷⁴慢汥⁳散瑩潮⁷楴栠潰瑩潮⁴漠敮慢汥⁡畴潦楬氠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹥湡扬攮景潴敲∠㴠≐慳獷潲摳⁡牥⁳瑯牥搠獥捵牥汹渠祯畲⁤敶楣攮∻ਊ⼪⁔潡獴敳獡来⁷桥渠愠汯杩渠楴敭⁩猠摥汥瑥搠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹬潧楮ⵤ敬整敤⵭敳獡来∠㴠≐慳獷潲搠景爠╀⁤敬整敤∻ਊ⼪⁔潡獴敳獡来⁷桥渠愠汯杩渠楴敭⁷楴桯畴⁡⁴楴汥⁩猠摥汥瑥搠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹬潧楮ⵤ敬整敤⵭敳獡来⵮漭瑩瑬攢‽•偡獳睯牤⁤敬整敤∻ਊ⼪⁔楴汥⁦潲⁡⁢畴瑯渠瑨慴⁡汬潷猠愠畳敲⁴漠牥獥琠瑨敩爠汩獴映湥癥爠獡癥搠獩瑥猠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹮敶敲⹳慶敤∠㴠≒敳整⁅硣汵摥搠卩瑥猢㬊ਯ⨠䍡湣敬⁢畴瑯渠景爠牥獥瑴楮朠汩獴映湥癥爠獡癥搠獩瑥猠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹮敶敲⹳慶敤⹲敳整⹡捴楯渮捡湣敬∠㴠≃慮捥氢㬊ਯ⨠䍯湦楲洠扵瑴潮⁴漠牥獥琠汩獴映湥癥爠獡癥搠獩瑥猠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹮敶敲⹳慶敤⹲敳整⹡捴楯渮捯湦楲洢‽•剥獥琠䕸捬畤敤⁓楴敳∻ਊ⼪⁁汥牴⁴楴汥‪⼊≡畴潦楬氮汯杩湳⹬楳琮湥癥爮獡癥搮牥獥琮慣瑩潮⹴楴汥∠㴠≉映祯甠牥獥琠數捬畤敤⁳楴敳Ⱐ祯甠睩汬⁢攠灲潭灴敤⁴漠獡癥⁹潵爠灡獳睯牤數琠瑩浥⁹潵⁳楧渠楮⁴漠慮礠潦⁴桥獥⁳楴敳⸢㬊ਯ⨠偬慣敨潬摥爠景爠獥慲捨⁦楥汤渠慵瑯晩汬潧楮楳瑩湧‪⼊≡畴潦楬氮汯杩湳⹬楳琮獥慲捨⵰污捥桯汤敲∠㴠≓敡牣栠灡獳睯牤猢㬊ਯ⨠卥捴楯渠瑩瑬攠景爠杲潵瀠潦⁳畧来獴敤⁳慶敤潧楮猠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹳畧来獴敤∠㴠≓畧来獴敤∻ਊ⼪⁔楴汥⁦潲⁳捲敥渠汩獴楮朠慵瑯晩汬潧楮猠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹴楴汥∠㴠≐慳獷潲摳∻ਊ⼪⁔楴汥⁦潲⁶楥眠摩獰污祥搠睨敮⁡畴潦楬氠楳潣步搠潮⁤敶楣敳⁷桥牥⁡⁰慳獣潤攠桡猠湯琠扥敮⁳整‪⼊≡畴潦楬氮汯杩湳⹮漭慵瑨⹳畢瑩瑬攢‽•䄠灡獳捯摥⁩猠牥煵楲敤⁴漠灲潴散琠祯畲⁰慳獷潲摳⸢㬊ਯ⨠呩瑬攠景爠癩敷⁤楳灬慹敤⁷桥渠慵瑯晩汬⁩猠汯捫敤渠摥癩捥猠睨敲攠愠灡獳捯摥⁨慳潴⁢敥渠獥琠⨯ਢ慵瑯晩汬⹬潧楮献湯ⵡ畴栮瑩瑬攢‽•卥捵牥⁹潵爠摥癩捥⁴漠獡癥⁰慳獷潲摳∻ਊ⼪⁃慮捥氠扵瑴潮⁦潲⁡畴栠摵物湧潧楮⁰牯浰琠⨯ਢ慵瑯晩汬⹬潧楮献灲潭灴⹡畴栮捡湣敬∠㴠≃慮捥氢㬊ਯ⨠剥慳潮⁦潲⁡畴栠摵物湧潧楮⁰牯浰琠⨯ਢ慵瑯晩汬⹬潧楮献灲潭灴⹡畴栮牥慳潮∠㴠≕湬潣欠摥癩捥⁴漠畳攠獡癥搠灡獳睯牤∻ਊ⼪⁔楴汥⁦潲⁳散瑩潮映慵瑯晩汬潧楮猠瑨慴⁡牥⁡渠數慣琠浡瑣栠瑯⁴桥⁣畲牥湴⁷敢獩瑥‪⼊≡畴潦楬氮汯杩湳⹰牯浰琮數慣琮浡瑣栮瑩瑬攢‽•䙲潭⁴桩猠睥扳楴攢㬊ਯ⨠䉵瑴潮⁴楴汥⁦潲⁡畴潦楬氠汯杩渠灲潭灴⁩映浯牥灴楯湳⁡牥⁡癡楬慢汥‪⼊≡畴潦楬氮汯杩湳⹰牯浰琮浯牥ⵯ灴楯湳∠㴠≍潲攠佰瑩潮猢㬊ਯ⨠呩瑬攠景爠獥捴楯渠潦⁡畴潦楬氠汯杩湳⁴桡琠慲攠慮⁡灰牯硩浡瑥慴捨⁴漠瑨攠捵牲敮琠睥扳楴攠⨯ਢ慵瑯晩汬⹬潧楮献灲潭灴⹰慲瑩慬⹭慴捨⹴楴汥∠㴠≆牯洠╀∻ਊ⼪⁔楴汥映扵瑴潮⁦潲⁡畴潦楬氠汯杩渠灲潭灴⁴漠畳攠愠獡癥搠灡獳睯牤⁦潲⁡⁷敢獩瑥‪⼊≡畴潦楬氮汯杩湳⹰牯浰琮灡獳睯牤⹢畴瑯渮瑩瑬攢‽•偡獳睯牤⁦潲‥䀢㬊ਯ⨠呩瑬攠景爠慵瑯晩汬潧楮⁰牯浰琠⨯ਢ慵瑯晩汬⹬潧楮献灲潭灴⹴楴汥∠㴠≕獥⁡⁳慶敤⁰慳獷潲搿∻ਊ⼪⁓畢瑩瑬攠摩獰污祥搠睨敮⁴桥牥⁡牥漠牥獵汴猠潮⁁畴潦楬氠獥慲捨Ⱐ數慭灬攠㨠乯⁒敳畬琠⡔楴汥⤠景爠䑵捫
卵扴楴汥⤠⨯ਢ慵瑯晩汬⹬潧楮献獥慲捨⹮漭牥獵汴献獵扴楴汥∠㴠≦潲‧╀✢㬊ਯ⨠呩瑬攠摩獰污祥搠睨敮⁴桥牥⁡牥漠牥獵汴猠潮⁁畴潦楬氠獥慲捨‪⼊≡畴潦楬氮汯杩湳⹳敡牣栮湯⵲敳畬瑳⹴楴汥∠㴠≎漠剥獵汴猢㬊ਯ⨠䑯潴⁴牡湳污瑥‭⁳瑲楮杳摩捴⁥湴特‪⼊≡畴潦楬氮湵浢敲⹯昮灡獳睯牤猢‽•慵瑯晩汬⹮畭扥爮潦⹰慳獷潲摳∻ਊ⼪⁄敳捲楰瑩潮映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁳散畲攠獴潲慧攠晥慴畲攊†⁄敳捲楰瑩潮映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁳散畲攠獴潲慧攠晥慴畲攠睩瑨⁡⁳瑲楮朠摥獣物扩湧⁴桥⁡癡楬慢汥⁢楯浥瑲礠⬠灡獳捯摥⁡猠愠灡牡浥瑥爠⨯ਢ慵瑯晩汬⹯湢潡牤楮朮步礭晥慴畲敳⹳散畲攭獴潲慧攮摥獣物灴楯渢‽•偡獳睯牤猠慲攠敮捲祰瑥搬⁳瑯牥搠潮⁤敶楣攬⁡湤潣步搠睩瑨‥䀮∻ਊ⼪⁐慲慭整敲⁦潲⁴桥⁤敳捲楰瑩潮映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁳散畲攠獴潲慧攠晥慴畲攠摥獣物扩湧⁆慣攠䥄⁢楯浥瑲礠⬠灡獳捯摥‪⼊≡畴潦楬氮潮扯慲摩湧⹫敹ⵦ敡瑵牥献獥捵牥⵳瑯牡来⹤敳捲楰瑩潮⹰慲慭整敲⹦慣攭楤∠㴠≆慣攠䥄爠灡獳捯摥∻ਊ⼪⁐慲慭整敲⁦潲⁴桥⁤敳捲楰瑩潮映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁳散畲攠獴潲慧攠晥慴畲攠摥獣物扩湧⁰慳獣潤攠潮汹⁩映湯⁢楯浥瑲礠慲攠慶慩污扬攠⨯ਢ慵瑯晩汬⹯湢潡牤楮朮步礭晥慴畲敳⹳散畲攭獴潲慧攮摥獣物灴楯渮灡牡浥瑥爮灡獳捯摥∠㴠≰慳獣潤攢㬊ਯ⨠偡牡浥瑥爠景爠瑨攠摥獣物灴楯渠潦⁡畴潦楬氠潮扯慲摩湧⁰牯浰琧猠獥捵牥⁳瑯牡来⁦敡瑵牥⁤敳捲楢楮朠呯畣栠䥄⁢楯浥瑲礠⬠灡獳捯摥‪⼊≡畴潦楬氮潮扯慲摩湧⹫敹ⵦ敡瑵牥献獥捵牥⵳瑯牡来⹤敳捲楰瑩潮⹰慲慭整敲⹴潵捨⵩搢‽•呯畣栠䥄爠灡獳捯摥∻ਊ⼪⁔楴汥映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁳散畲攠獴潲慧攠晥慴畲攠⨯ਢ慵瑯晩汬⹯湢潡牤楮朮步礭晥慴畲敳⹳散畲攭獴潲慧攮瑩瑬攢‽•卥捵牥⁳瑯牡来∻ਊ⼪⁄敳捲楰瑩潮映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁳楧渭楮⁦敡瑵牥‪⼊≡畴潦楬氮潮扯慲摩湧⹫敹ⵦ敡瑵牥献獩杮⵩湳⹤敳捲楰瑩潮∠㴠≎漠湥敤⁴漠牥浥浢敲潧楮⁩湦漮∻ਊ⼪⁔楴汥映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁳楧渭楮⁦敡瑵牥‪⼊≡畴潦楬氮潮扯慲摩湧⹫敹ⵦ敡瑵牥献獩杮⵩湳⹴楴汥∠㴠≓敡浬敳猠獩杮⵩湳∻ਊ⼪⁄敳捲楰瑩潮映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁳祮挠晥慴畲攠⨯ਢ慵瑯晩汬⹯湢潡牤楮朮步礭晥慴畲敳⹳祮挮摥獣物灴楯渢‽•䕮搭瑯ⵥ湤⁥湣特灴敤⁡湤⁥慳礠瑯⁳整⁵瀠睨敮⁹潵饲攠牥慤礮∻ਊ⼪⁔楴汥映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁳祮挠晥慴畲攠⨯ਢ慵瑯晩汬⹯湢潡牤楮朮步礭晥慴畲敳⹳祮挮瑩瑬攢‽•卹湣⁢整睥敮⁤敶楣敳∻ਊ⼪⁔楴汥映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁦敡瑵牥猠汩獴‪⼊≡畴潦楬氮潮扯慲摩湧⹫敹ⵦ敡瑵牥献瑩瑬攢‽•䭥礠䙥慴畲敳∻ਊ⼪⁓畢瑩瑬攠景爠灲潭灴⁴漠畳攠獵杧敳瑥搠獴牯湧⁰慳獷潲搠景爠捲敡瑩湧⁡潧楮‪⼊≡畴潦楬氮灡獳睯牤ⵧ敮敲慴楯渭灲潭灴⹳畢瑩瑬攢‽•偡獳睯牤猠慲攠獴潲敤⁳散畲敬礠潮⁹潵爠摥癩捥⸢㬊ਯ⨠呩瑬攠景爠灲潭灴⁴漠畳攠獵杧敳瑥搠獴牯湧⁰慳獷潲搠景爠捲敡瑩湧⁡潧楮‪⼊≡畴潦楬氮灡獳睯牤ⵧ敮敲慴楯渭灲潭灴⹴楴汥∠㴠≕獥⁡⁳瑲潮朠灡獳睯牤⁦牯洠䑵捫䑵捫䝯㼢㬊ਯ⨠䉵瑴潮⁴楴汥⁣桯潳楮朠瑯⁵獥⁴桥⁳畧来獴敤⁧敮敲慴敤⁰慳獷潲搠景爠捲敡瑩湧⁡潧楮‪⼊≡畴潦楬氮灡獳睯牤ⵧ敮敲慴楯渭灲潭灴⹵獥ⵧ敮敲慴敤⵰慳獷潲搮捴愢‽•啳攠却牯湧⁐慳獷潲搢㬊ਯ⨠䉵瑴潮⁴楴汥⁣桯潳楮朠瑯⁵獥睮⁰慳獷潲搠景爠捲敡瑩湧⁡潧楮‪⼊≡畴潦楬氮灡獳睯牤ⵧ敮敲慴楯渭灲潭灴⹵獥ⵯ睮⵰慳獷潲搮捴愢‽•䍲敡瑥⁍礠佷渢㬊ਯ⨠呥硴⁦潲⁴桥⁣潮晩牭慴楯渠浥獳慧攠摩獰污祥搠睨敮⁡⁵獥爠瑲楥猠慣瑩癡瑥⁡⁐物癡瑥⁅浡楬⁁摤牥獳‪⼊≡畴潦楬氮灲楶慴攮敭慩氮浥獡来⹡捴楶慴攮捯湦楲洮捯湴敮琢‽•䕭慩汳⁳敮琠瑯‥䀠睩汬⁡条楮⁢攠景牷慲摥搠瑯⁹潵爠楮扯砮∻ਊ⼪⁔楴汥⁦潲⁴桥⁣潮晩牭慴楯渠浥獳慧攠⁤楳灬慹敤⁷桥渠愠畳敲⁴物敳⁡捴楶慴攠愠偲楶慴攠䕭慩氠䅤摲敳猠⨯ਢ慵瑯晩汬⹰物癡瑥⹥浡楬⹭敳慧攮慣瑩癡瑥⹣潮晩牭⹴楴汥∠㴠≒敡捴楶慴攠偲楶慴攠䑵捫⁁摤牥獳㼢㬊ਯ⨠䵥獡獡来⁤楳灬慹敤⁷桥渠愠灲楶慴攠敭慩氠慤摲敳猠楳⁡捴楶攠⨯ਢ慵瑯晩汬⹰物癡瑥⹥浡楬⹭敳慧攮慣瑩癥∠㴠≁捴楶攢㬊ਯ⨠呥硴⁦潲⁴桥⁣潮晩牭慴楯渠浥獳慧攠摩獰污祥搠睨敮⁡⁵獥爠瑲楥猠摥慣瑩癡瑥⁡⁐物癡瑥⁅浡楬⁁摤牥獳‪⼊≡畴潦楬氮灲楶慴攮敭慩氮浥獡来⹤敡捴楶慴攮捯湦楲洮捯湴敮琢‽•䕭慩汳⁳敮琠瑯‥䀠睩汬漠汯湧敲⁢攠景牷慲摥搠瑯⁹潵爠楮扯砮∻ਊ⼪⁔楴汥⁦潲⁴桥⁣潮晩牭慴楯渠浥獳慧攠摩獰污祥搠睨敮⁡⁵獥爠瑲楥猠摥慣瑩癡瑥⁡⁐物癡瑥⁅浡楬⁁摤牥獳‪⼊≡畴潦楬氮灲楶慴攮敭慩氮浥獡来⹤敡捴楶慴攮捯湦楲洮瑩瑬攢‽•䑥慣瑩癡瑥⁐物癡瑥⁄畣欠䅤摲敳猿∻ਊ⼪⁍敳慳慧攠摩獰污祥搠睨敮⁡⁵獥爠瑲楥猠瑯慮慧攠愠灲楶慴攠敭慩氠慤摲敳猠扵琠瑨攠獥牶楣攠楳潴⁡癡楬慢汥Ⱐ牥瑵牮猠慮⁥牲潲爠湥瑷潲欠楳⁤潷渠⨯ਢ慵瑯晩汬⹰物癡瑥⹥浡楬⹭敳慧攮敲牯爢‽•䵡湡来浥湴映瑨楳⁡摤牥獳⁩猠瑥浰潲慲楬礠畮慶慩污扬攢㬊ਯ⨠䵥獡獡来⁤楳灬慹敤⁷桥渠愠灲楶慴攠敭慩氠慤摲敳猠楳⁩湡捴楶攠⨯ਢ慵瑯晩汬⹰物癡瑥⹥浡楬⹭敳慧攮楮慣瑩癥∠㴠≄敡捴楶慴敤∻ਊ⼪⁂畴瑯渠瑥硴⁦潲⁴桥⁡汥牴⁤楡汯朠瑥汬楮朠瑨攠畳敲⁡渠異摡瑥搠畳敲湡浥⁩猠湯潮来爠愠灲楶慴攠敭慩氠慤摲敳猠⨯ਢ慵瑯晩汬⹲敭潶敤⹤畣欮慤摲敳献扵瑴潮∠㴠≇潴⁩琢㬊ਯ⨠䍯湴敮琠景爠瑨攠慬敲琠摩慬潧⁴敬汩湧⁴桥⁵獥爠慮⁵灤慴敤⁵獥牮慭攠楳漠汯湧敲⁡⁰物癡瑥⁥浡楬⁡摤牥獳‪⼊≡畴潦楬氮牥浯癥搮摵捫⹡摤牥獳⹣潮瑥湴∠㴠≙潵⁣慮⁳瑩汬慮慧攠瑨楳⁄畣欠䅤摲敳猠晲潭⁥浡楬猠牥捥楶敤⁦牯洠楴⁩渠祯畲⁰敲獯湡氠楮扯砮∻ਊ⼪⁔楴汥⁦潲⁴桥⁡汥牴⁤楡汯朠瑥汬楮朠瑨攠畳敲⁡渠異摡瑥搠畳敲湡浥⁩猠湯潮来爠愠灲楶慴攠敭慩氠慤摲敳猠⨯ਢ慵瑯晩汬⹲敭潶敤⹤畣欮慤摲敳献瑩瑬攢‽•偲楶慴攠䑵捫⁁摤牥獳⁵獥牮慭攠睡猠牥浯癥搢㬊ਯ⨠䍔䄠摩獰污祥搠潮潤慬⁡獫楮朠楦⁴桥⁵獥爠湥癥爠睡湴猠瑯⁢攠灲潭灴敤⁴漠獡癥⁡潧楮⁦潲⁴桩猠睥扳楴攠慧楮‪⼊≡畴潦楬氮獡癥⵬潧楮⹮敶敲⵰牯浰琮䍔䄢‽•乥癥爠䅳欠景爠周楳⁓楴攢㬊ਯ⨠䵥獳慧攠摩獰污祥搠潮潤慬⁡獫楮朠景爠瑨攠畳敲⁴漠獡癥⁴桥潧楮⁦潲⁴桥⁦楲獴⁴業攠⨯ਢ慵瑯晩汬⹳慶攭汯杩渮湥眭畳敲⹭敳獡来∠㴠≄畣歄畣歇漠偡獳睯牤猠☠䅵瑯晩汬⁳瑯牥猠灡獳睯牤猠獥捵牥汹渠祯畲⁤敶楣攮∻ਊ⼪⁔楴汥⁤楳灬慹敤渠浯摡氠慳歩湧⁦潲⁴桥⁵獥爠瑯⁳慶攠瑨攠汯杩渠景爠瑨攠晩牳琠瑩浥‪⼊≡畴潦楬氮獡癥⵬潧楮⹮敷⵵獥爮瑩瑬攢‽•卡癥⁴桩猠灡獳睯牤㼢㬊ਯ⨠呩瑬攠摩獰污祥搠潮潤慬⁡獫楮朠景爠瑨攠畳敲⁴漠獡癥⁴桥潧楮‪⼊≡畴潦楬氮獡癥⵬潧楮⹴楴汥∠㴠≓慶攠灡獳睯牤㼢㬊ਯ⨠䍯湦楲洠䍔䄠摩獰污祥搠潮潤慬⁡獫楮朠景爠瑨攠畳敲⁴漠獡癥⁴桥⁰慳獷潲搠⨯ਢ慵瑯晩汬⹳慶攭灡獳睯牤⹳慶攮䍔䄢‽•卡癥⁐慳獷潲搢㬊ਯ⨠呩瑬攠景爠瑨攠扵瑴潮⁴漠牥灯牴⁴桡琠慵瑯晩汬⁩猠湯琠睯牫楮朠潮⁡⁳楴攠楮⁡畴潦楬氠獥瑴楮杳‪⼊≡畴潦楬氮獥瑴楮杳⹲数潲琮湯琮睯牫楮朮扵瑴潮⹴楴汥∠㴠≒数潲琠愠灲潢汥洠睩瑨⁡畴潦楬氢㬊ਯ⨠䉵瑴潮⁴楴汥⁦潲⁴桥⁣潮晩牭慴楯渠灲潭灴⁷桥渠牥灯牴楮朠慵瑯晩汬⁩猠湯琠睯牫楮朠景爠愠睥扳楴攠⨯ਢ慵瑯晩汬⹳整瑩湧献牥灯牴⹮潴⹷潲歩湧⹣潮晩牭慴楯渮扵瑴潮∠㴠≓敮搠剥灯牴∻ਊ⼪⁍敳獡来⁦潲⁴桥⁣潮晩牭慴楯渠灲潭灴⁷桥渠牥灯牴楮朠慵瑯晩汬⁩猠湯琠睯牫楮朠景爠愠睥扳楴攠⨯ਢ慵瑯晩汬⹳整瑩湧献牥灯牴⹮潴⹷潲歩湧⹣潮晩牭慴楯渮浥獳慧攢‽•剥灯牴猠獥湴⁴漠䑵捫䑵捫䝯⁡牥⁡湯湹浯畳⁡湤⁤漠湯琠楮捬畤攠祯畲⁵獥牮慭攬⁰慳獷潲搬爠慮礠潴桥爠灥牳潮慬汹⁩摥湴楦楡扬攠楮景牭慴楯渮屮屮周攠牥灯牴湬礠楮捬畤敳⁴桥⁷敢獩瑥⁵牬⁡湤⁡湤⁴桥⁳瑡瑵猠潦⁳潭攠慵瑯晩汬⁳整瑩湧献∻ਊ⼪⁔楴汥⁦潲⁴桥⁣潮晩牭慴楯渠灲潭灴⁷桥渠牥灯牴楮朠慵瑯晩汬⁩猠湯琠睯牫楮朠景爠愠睥扳楴攠⨯ਢ慵瑯晩汬⹳整瑩湧献牥灯牴⹮潴⹷潲歩湧⹣潮晩牭慴楯渮瑩瑬攢‽•剥灯牴⁡畴潦楬氠湯琠睯牫楮朠潮‥䀿∻ਊ⼪⁍敳獡来⁳桯睮⁴漠畳敲⁷桥渠瑨敹⁳畢浩琠愠牥灯牴⁴桡琠慵瑯晩汬⁩猠湯琠睯牫楮朠景爠愠睥扳楴攠⨯ਢ慵瑯晩汬⹳整瑩湧献牥灯牴⹮潴⹷潲歩湧⹳敮琮捯湦楲浡瑩潮∠㴠≔桡湫⁹潵℠奯畲⁲数潲琠睩汬⁨敬瀠畳慫攠䑵捫䑵捫䝯⁢整瑥爠景爠敶敲祯湥⸢㬊ਯ⨠卵扴楴汥⁦潲⁴桥⁲潷⁴漠牥灯牴⁴桡琠慵瑯晩汬⁩猠湯琠睯牫楮朠潮⁡⁳楴攠楮⁡畴潦楬氠獥瑴楮杳‪⼊≡畴潦楬氮獥瑴楮杳⹲数潲琮湯琮睯牫楮朮獵扴楴汥∠㴠≁湯湹浯畳汹⁲数潲琠慵瑯晩汬潴⁷潲歩湧渠瑨楳⁳楴攮⁐慳獷潲摳⁡牥敶敲⁳桡牥搮∻ਊ⼪⁔楴汥⁦潲⁴桥⁲潷⁴漠牥灯牴⁴桡琠慵瑯晩汬⁩猠湯琠睯牫楮朠潮⁡⁳楴攠楮⁡畴潦楬氠獥瑴楮杳‪⼊≡畴潦楬氮獥瑴楮杳⹲数潲琮湯琮睯牫楮朮瑩瑬攢‽•䅵瑯晩汬潴⁷潲歩湧㼢㬊ਯ⨠䅣捥獳楢楬楴礠瑩瑬攠景爠愠卨潷⁐慳獷潲搠扵瑴潮⁤楳灬慹楮朠慣瑩慬⁰慳獷潲搠楮獴敡搠潦‪⨪⨪‪⼊≡畴潦楬氮獨潷⵰慳獷潲搢‽•卨潷⁐慳獷潲搢㬊ਯ⨠䵥獳慧攠摩獰污祥搠瑯⁴桥⁵獥爠睨敮⁴桥礠慲攠汯杧敤畴映䕭慩氠灲潴散瑩潮⸠⨯ਢ慵瑯晩汬⹳楧湩渮瑯⹭慮慧攢‽•╀⁴漠浡湡来⁹潵爠䑵捫⁁摤牥獳敳渠瑨楳⁤敶楣攮∻ਊ⼪⁍敳獡来⁤楳灬慹敤渠浯摡氠慳歩湧⁦潲⁴桥⁵獥爠瑯⁵灤慴攠瑨攠灡獳睯牤‪⼊≡畴潦楬氮異摡瑥⵰慳獷潲搮浥獳慧攢‽•䑵捫䑵捫䝯⁷楬氠異摡瑥⁴桩猠獴潲敤⁰慳獷潲搠潮⁹潵爠摥癩捥⸢㬊ਯ⨠䍯湦楲洠䍔䄠摩獰污祥搠潮潤慬⁡獫楮朠景爠瑨攠畳敲⁴漠異摡瑥⁴桥⁰慳獷潲搠⨯ਢ慵瑯晩汬⹵灤慴攭灡獳睯牤⹳慶攮䍔䄢‽•啰摡瑥⁐慳獷潲搢㬊ਯ⨠呩瑬攠摩獰污祥搠潮潤慬⁡獫楮朠景爠瑨攠畳敲⁴漠異摡瑥⁴桥⁰慳獷潲搠⨯ਢ慵瑯晩汬⹵灤慴攭灡獳睯牤⹴楴汥∠㴠≕灤慴攠灡獳睯牤⁦潲屮╀㼢㬊ਯ⨠䍯湦楲洠䍔䄠摩獰污祥搠潮潤慬⁡獫楮朠景爠瑨攠畳敲⁴漠異摡瑥⁴桥潧楮‪⼊≡畴潦楬氮異摡瑥⵵獥牮慭攮獡癥⹃呁∠㴠≕灤慴攠啳敲湡浥∻ਊ⼪⁔楴汥⁤楳灬慹敤渠浯摡氠慳歩湧⁦潲⁴桥⁵獥爠瑯⁵灤慴攠瑨攠畳敲湡浥‪⼊≡畴潦楬氮異摡瑥⵵獥牮慭爮瑩瑬攢‽•啰摡瑥⁵獥牮慭政∻ਊ⼪⁁摤⁢潯歭慲欠獣牥敮⁴楴汥‪⼊≢潯歭慲欮慤摂潯歭慲欮瑩瑬攢‽•䅤搠䉯潫浡牫∻ਊ⼪⁁摤⁦慶潲楴攠獣牥敮⁴楴汥‪⼊≢潯歭慲欮慤摆慶潲楴攮瑩瑬攢‽•䅤搠䙡癯物瑥∻ਊ⼪⁁摤⁦潬摥爠獣牥敮⁴楴汥‪⼊≢潯歭慲欮慤摆潬摥爮瑩瑬攢‽•䅤搠䙯汤敲∻ਊ⼪⁁摤⁢潯歭慲欠景汤敲⁢畴瑯渠瑥硴‪⼊≢潯歭慲欮慤摆潬摥牂畴瑯渢‽•䅤搠䙯汤敲∻ਊ⼪⁐污捥桯汤敲⁩渠瑨攠慤搠扯潫浡牫⁦潲洠⨯ਢ扯潫浡牫⹡摤牥獳⹰污捥桯汤敲∠㴠≷睷⹥硡浰汥⹣潭∻ਊ⼪⁄敬整攠扯潫浡牫⁡汥牴敳獡来‪⼊≢潯歭慲欮摥汥瑥⹡汥牴⹭敳獡来∠㴠≔桩猠睩汬⁤敬整攠祯畲⁢潯歭慲欠景爠尢╀尢∻ਊ⼪⁄敬整攠扯潫浡牫⁡汥牴⁴楴汥‪⼊≢潯歭慲欮摥汥瑥⹡汥牴⹴楴汥∠㴠≄敬整政∻ਊ⼪⁔桥敳獡来⁳桯睮⁡晴敲⁡⁢潯歭慲欠桡猠扥敮⁤敬整敤‪⼊≢潯歭慲欮摥汥瑥搮瑯慳琢‽•䉯潫浡牫⁤敬整敤∻ਊ⼪⁄敬整攠扯潫浡牫⁦潬摥爠慬敲琠摥汥瑥⁢畴瑯渠⨯ਢ扯潫浡牫⹤敬整敆潬摥牁汥牴⹤敬整敂畴瑯渢‽•䑥汥瑥∻ਊ⼪⁄漠湯琠瑲慮獬慴攠ⴠ獴物湧獤楣琠敮瑲礠⨯ਢ扯潫浡牫⹤敬整敆潬摥牁汥牴⹭敳獡来∠㴠≢潯歭慲欮摥汥瑥䙯汤敲䅬敲琮浥獳慧攢㬊ਯ⨠䑥汥瑥⁢潯歭慲欠景汤敲⁡汥牴⁴楴汥‪⼊≢潯歭慲欮摥汥瑥䙯汤敲䅬敲琮瑩瑬攢‽•䑥汥瑥‥䀿∻ਊ⼪⁅摩琠扯潫浡牫⁳捲敥渠瑩瑬攠⨯ਢ扯潫浡牫⹥摩瑂潯歭慲欮瑩瑬攢‽•䕤楴⁂潯歭慲欢㬊ਯ⨠䕤楴⁦慶潲楴攠獣牥敮⁴楴汥‪⼊≢潯歭慲欮敤楴䙡癯物瑥⹴楴汥∠㴠≅摩琠䙡癯物瑥∻ਊ⼪⁅摩琠景汤敲⁳捲敥渠瑩瑬攠⨯ਢ扯潫浡牫⹥摩瑆潬摥爮瑩瑬攢‽•䕤楴⁆潬摥爢㬊ਯ⨠䡥慤敲⁦潲⁦潬摥爠獥汥捴楯渠景爠扯潫浡牫猠⨯ਢ扯潫浡牫⹦潬摥牓敬散琮瑩瑬攢‽•䱯捡瑩潮∻ਊ⼪⁍潲攠潰瑩潮猠扵瑴潮⁴數琠⨯ਢ扯潫浡牫⹭潲敂畴瑯渢‽•䵯牥∻ਊ⼪⁐污捥桯汤敲⁩渠瑨攠慤搠扯潫浡牫⁦潲洠⨯ਢ扯潫浡牫⹴楴汥⹰污捥桯汤敲∠㴠≗敢獩瑥⁴楴汥∻ਊ⼪⁔潰敶敬⁢潯歭慲歳⁦潬摥爠瑩瑬攠⨯ਢ扯潫浡牫⹴潰䱥癥汆潬摥爮瑩瑬攢‽•䉯潫浡牫猢㬊ਯ⨠䥮景敳獡来⁡晴敲⁳敬散瑩湧⁂潯歭慲欠䅬氠扵瑴潮‪⼊≢潯歭慲歁汬⹴慢献晡楬敤∠㴠≁摤敤敷⁢潯歭慲歳⁦潲⁡汬⁴慢猢㬊ਯ⨠䍯湦楲浡瑩潮敳獡来⁡晴敲⁳敬散瑩湧⁂潯歭慲欠䅬氠扵瑴潮‪⼊≢潯歭慲歁汬⹴慢献獡癥搢‽•䅬氠瑡扳⁢潯歭慲步搢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≢潯歭慲歳⹢畴瑯渮桩湴∠㴠≂潯歭慲歳∻ਊ⼪⁆慩汵牥敳獡来⁷桥渠扯潫浡牫猠晡楬敤⁴漠數灯牴‪⼊≢潯歭慲歳⹥硰潲琮晡楬敤⹭敳獡来∠㴠≗攠捯畬摮饴⁥硰潲琠祯畲⁢潯歭慲歳Ⱐ灬敡獥⁴特⁡条楮⸢㬊ਯ⨠䍯湦楲浡瑩潮敳獡来⁴桡琠扯潫浡牫猠桡癥⁢敥渠數灯牴敤⁴漠瑨攠晩汥⁳祳瑥洠⨯ਢ扯潫浡牫献數灯牴⹦楬敳⹳畣捥獳⹭敳獡来∠㴠≙潵爠扯潫浡牫猠桡癥⁢敥渠數灯牴敤⸢㬊ਯ⨠䍯湦楲浡瑩潮敳獡来⁴桡琠扯潫浡牫猠桡癥⁢敥渠獨慲敤⁳畣捥獳晵汬礠瑯⁡湯瑨敲⁡灰‪⼊≢潯歭慲歳⹥硰潲琮獨慲攮獵捣敳献浥獳慧攢‽•奯畲⁢潯歭慲歳⁨慶攠扥敮⁳桡牥搮∻ਊ⼪⁔楴汥映潰瑩潮⁴漠數灯牴⁈呍䰠⨯ਢ扯潫浡牫献數灯牴䅣瑩潮⹴楴汥∠㴠≅硰潲琠䡔䵌⁆楬攢㬊ਯ⨠䙡楬畲攠浥獳慧攠睨敮⁢潯歭慲歳⁦慩汥搠瑯⁩浰潲琠⨯ਢ扯潫浡牫献業灯牴⹦慩汥搮浥獳慧攢‽•卯牲礬⁷攠慲敮饴⁡扬攠瑯⁩浰潲琠瑨楳⁦楬攮∻ਊ⼪⁃潮晩牭慴楯渠浥獳慧攠瑨慴⁢潯歭慲歳⁨慶攠扥敮⁩浰潲瑥搠⨯ਢ扯潫浡牫献業灯牴⹳畣捥獳⹭敳獡来∠㴠≙潵爠扯潫浡牫猠桡癥⁢敥渠業灯牴敤⸢㬊ਯ⨠呩瑬攠潦灴楯渠瑯⁩浰潲琠䡔䵌‪⼊≢潯歭慲歳⹩浰潲瑁捴楯渮瑩瑬攢‽•䥭灯牴⁈呍䰠䙩汥∻ਊ⼪⁉浰潲琠扯潫浡牫⁦楬攠扵瑴潮⁴數琠⨯ਢ扯潫浡牫献業灯牴䕸灯牴⹦潯瑥爮扵瑴潮⹴楴汥∠㴠≉浰潲琠扯潫浡牫⁦楬攠晲潭⁡湯瑨敲⁢牯睳敲∻ਊ⼪⁔楴汥映灲潭灴⁦潲⁵獥牳⁷桥牥⁴桥礠捡渠捨潯獥⁴漠業灯牴爠數灯牴⁡渠䡔䵌⁦楬攠捯湴慩湩湧⁷敢灡来⁢潯歭慲歳‪⼊≢潯歭慲歳⹩浰潲瑅硰潲琮瑩瑬攢‽•䥭灯牴⁡渠䡔䵌⁦楬攠潦⁢潯歭慲歳⁦牯洠慮潴桥爠扲潷獥爬爠數灯牴⁹潵爠數楳瑩湧⁢潯歭慲歳⸢㬊ਯ⨠䉵瑴潮⁴漠潰敮⁲数潲琠景牭‪⼊≢牯步渮獩瑥⹲数潲琮浥湵⹴楴汥∠㴠≒数潲琠偲潢汥洠坩瑨⁔桩猠卩瑥∻ਊ⼪⁁捫湯睬敤来⁢畴瑯渠⨯ਢ扲潫敮⹳楴攮牥灯牴⹭楳獩湧⹤敳捲楰瑩潮⹡汥牴⹢畴瑯渢‽•䝯琠䥴∻ਊ⼪⁉琠慰灥慲猠慳⁡渠慬敲琠慦瑥爠畳敲⁴物敳⁴漠獥湤⁡⁲数潲琠睩瑨潵琠獵扭楴瑩湧⁡湹⁤整慩汳‪⼊≢牯步渮獩瑥⹲数潲琮浩獳楮朮摥獣物灴楯渮慬敲琮摥獣物灴楯渢‽•偬敡獥⁤敳捲楢攠瑨攠楳獵攠祯甠數灥物敮捥搠潮⁴桩猠獩瑥⁳漠睥⁣慮⁢整瑥爠畮摥牳瑡湤⁨潷⁴漠晩砠楴⸢㬊ਯ⨠䥴⁡灰敡牳⁡猠慮⁡汥牴⁡晴敲⁵獥爠瑲楥猠瑯⁳敮搠愠牥灯牴⁷楴桯畴⁳畢浩瑴楮朠慮礠摥瑡楬猠⨯ਢ扲潫敮⹳楴攮牥灯牴⹭楳獩湧⹤敳捲楰瑩潮⹡汥牴⹴楴汥∠㴠≄敳捲楰瑩潮⁒敱畩牥搢㬊ਯ⨠䵥獳慧攠瑨慴⁡灰敡牳⁡晴敲⁳畢浩瑴楮朠牥灯牴‪⼊≢牯步渮獩瑥⹲数潲琮獵捣敳献瑯慳琢‽•奯畲⁲数潲琠桥汰猠浡步⁄畣歄畣歇漠扥瑴敲⁦潲⁥癥特潮攡∻ਊ⼪⁂畴瑯渠瑯⁡湳睥爠煵敳瑩潮‧䑩搠瑵牮楮朠潦映灲潴散瑩潮猠牥獯汶攠瑨攠楳獵攠潮⁴桩猠獩瑥㼧‪⼊≢牯步渮獩瑥⹲数潲琮瑯杧汥⹡汥牴⹮漮扵瑴潮∠㴠≎漢㬊ਯ⨠䅮⁡汥牴⁴桡琠慰灥慲猠慦瑥爠畳敲⁴畲湳晦⁴桥⁰物癡捹⁰牯瑥捴楯渠⨯ਢ扲潫敮⹳楴攮牥灯牴⹴潧杬攮慬敲琮瑩瑬攢‽•䑩搠瑵牮楮朠偲楶慣礠偲潴散瑩潮猠潦映牥獯汶攠瑨攠楳獵攠潮⁴桩猠獩瑥㼢㬊ਯ⨠䉵瑴潮⁴漠慮獷敲ⁱ略獴楯渠❄楤⁴畲湩湧晦⁰牯瑥捴楯湳⁲敳潬癥⁴桥⁩獳略渠瑨楳⁳楴政✠⨯ਢ扲潫敮⹳楴攮牥灯牴⹴潧杬攮慬敲琮祥献扵瑴潮∠㴠≙敳∻ਊ⼪⁆楲獴⁰慲慭整敲⁩猠愠捯畮琠潦⁡摤楴楯湡氠瑲慣步牳Ⱐ獥捯湤⁡湤⁴桩牤⁡牥慭敳映瑨攠瑲慣步爠湥瑷潲歳
獴物湧猩‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹢牯睳楮朮浵汴楰汥⹴牡捫敲猢‽•捯湴數瑵慬⹯湢潡牤楮朮扲潷獩湧⹭畬瑩灬攮瑲慣步牳∻ਊ⼪⁐慲慭整敲⁩猠摯浡楮慭攠⡳瑲楮朩‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹢牯睳楮朮潮攮瑲慣步爢‽•⨥ㄤ䀪⁷慳⁴特楮朠瑯⁴牡捫⁹潵⁨敲攮⁉⁢汯捫敤⁴桥洡屮屮鷯뢏⁔慰⁴桥⁳桩敬搠景爠浯牥⁩湦漮∻ਊ⼪⁂畴瑯渠潮⁴桥慳琠獣牥敮映瑨攠潮扯慲摩湧Ⱐ楴⁷楬氠摩獭楳猠瑨攠潮扯慲摩湧⁳捲敥渮‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹦楮慬⵳捲敥渮扵瑴潮∠㴠≈楧栠晩癥™㬊ਯ⨠䵥獳慧攠潦⁴桥慳琠獣牥敮映瑨攠潮扯慲摩湧⁴漠瑨攠扲潷獥爠慰瀮‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹦楮慬⵳捲敥渮浥獳慧攢‽•剥浥浢敲㨠敶敲礠瑩浥⁹潵⁢牯睳攠睩瑨攠愠捲敥灹⁡搠汯獥猠楴猠睩湧献⃰龑谢㬊ਯ⨠呩瑬攠潦⁴桥慳琠獣牥敮映瑨攠潮扯慲摩湧⁴漠瑨攠扲潷獥爠慰瀠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮晩湡氭獣牥敮⹴楴汥∠㴠≙潵饶攠杯琠瑨楳™㬊ਯ⨠䅦瑥爠瑨攠畳敲⁰敲景牭猠瑨敩爠晩牳琠獥慲捨⁵獩湧⁴桥⁢牯睳敲Ⱐ瑨楳⁤楡汯朠數灬慩湳⁴桥⁡摶慮瑡来猠潦⁵獩湧⁄畣歄畣歇漠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮晩牳琭獥慲捨ⵤ潮攮浥獳慧攢‽•周慴饳⁄畣歄畣歇漠卥慲捨⸠偲楶慴攮⁆慳琮⁆敷敲⁡摳⸢㬊ਯ⨠䑵物湧湢潡牤楮朠獴数猠瑨楳⁢畴瑯渠楳⁳桯睮⁡湤⁴慫敳⁥楴桥爠瑯⁴桥數琠獴数猠潲⁣汯獥猠瑨攠潮扯慲摩湧⸠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮杯琭楴⹢畴瑯渢‽•䝯琠楴™㬊ਯ⨠呩瑬攠潦⁡⁰潰潶敲渠瑨攠湥眠瑡戠灡来⁢牯睳敲⁴桡琠楮癩瑥猠瑨攠畳敲⁴漠瑲礠愠癩獩瑩湧⁡⁷敢獩瑥‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹮瑰⹴特ⵡ⵳楴攮瑩瑬攢‽•呲礠癩獩瑩湧⁡⁳楴攡∻ਊ⼪⁍敳獡来映愠灯灯癥爠潮⁴桥⁢牯睳敲⁴桡琠楮癩瑥猠瑨攠畳敲⁴漠瑲礠愠獥慲捨⁥硰污楮楮朠瑨慴⁴桥楲⁳敡牣桥猠慲攠慮潮祭潵猠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮瑲礭愭獥慲捨⹭敳獡来∠㴠≙潵爠䑵捫䑵捫䝯⁳敡牣桥猠慲攠慬睡祳⁡湯湹浯畳⸢㬊ਯ⨠呩瑬攠潦⁡⁰潰潶敲渠瑨攠扲潷獥爠瑨慴⁩湶楴敳⁴桥⁵獥爠瑯⁴特⁡⁳敡牣栠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮瑲礭愭獥慲捨⹴楴汥∠㴠≒敡摹⁴漠来琠獴慲瑥搿屮呲礠愠獥慲捨™㬊ਯ⨠䵥獳慧攠潦⁡⁰潰潶敲渠瑨攠扲潷獥爠瑨慴⁩湶楴敳⁴桥⁵獥爠瑯⁴特⁶楳楴楮朠愠睥扳楴攠瑯⁥硰污楮⁴桡琠睥⁢汯捫⁴牡捫敲猠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮瑲礭愭獩瑥⹭敳獡来∠㴠≉饬氠扬潣欠瑲慣步牳⁳漠瑨敹⁣慮饴⁳灹渠祯甮∻ਊ⼪⁔楴汥映愠灯灯癥爠潮⁴桥⁢牯睳敲⁴桡琠楮癩瑥猠瑨攠畳敲⁴漠瑲礠愠癩獩瑩湧⁡⁷敢獩瑥‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹴特ⵡ⵳楴攮瑩瑬攢‽•乥硴Ⱐ瑲礠癩獩瑩湧⁡⁳楴攡∻ਊ⼪⁍敳獡来映愠灯灯癥爠潮⁴桥⁢牯睳敲⁴桡琠楮癩瑥猠瑨攠畳敲⁴漠瑲礠癩獩瑩湧⁴桥⁢牯睳敲⁆楲攠䉵瑴潮⸠偬敡獥敡癥⁴桥楮攠扲敡欠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮瑲礭晩牥ⵢ畴瑯渮浥獳慧攢‽•䥮獴慮瑬礠捬敡爠祯畲⁢牯睳楮朠慣瑩癩瑹⁷楴栠瑨攠䙩牥⁂畴瑯渮屮屮䝩癥⁩琠愠瑲礡⃰龔ꔢ㬊ਯ⨠䉲潷獥爠卥慲捨ⁱ略特⁦潲⁨潷⁴漠獡礠摵捫⁩渠敮杬楳栠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮瑲礭獥慲捨⹯灴楯渱ⵅ湧汩獨∠㴠≨潷⁴漠獡礠鱤畣毢肝⁩渠獰慮楳栢㬊ਯ⨠䉲潷獥爠卥慲捨ⁱ略特⁦潲⁨潷⁴漠獡礠摵捫⁩渠敮杬楳栠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮瑲礭獥慲捨⹯灴楯渱楮瑥牮慴楯湡氢‽•桯眠瑯⁳慹⃢肜摵捫鴠楮⁥湧汩獨∻ਊ⼪⁓敡牣栠煵敲礠景爠瑨攠捡獴映䵩杨瑹⁄畣歳‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹴特⵳敡牣栮潰瑩潮㈭敮杬楳栢‽•浩杨瑹⁤畣歳⁣慳琢㬊ਯ⨠卥慲捨ⁱ略特⁦潲⁴桥⁣慳琠潦⁁癡瑡爠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮瑲礭獥慲捨⹯灴楯渲⵩湴敲湡瑩潮慬∠㴠≣慳琠潦⁡癡瑡爢㬊ਯ⨠䉲潷獥爠卥慲捨ⁱ略特⁦潲潣慬⁷敡瑨敲‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹴特⵳敡牣栮潰瑩潮㌢‽•汯捡氠睥慴桥爢㬊ਯ⨠䉲潷獥爠卥慲捨ⁱ略特⁦潲⁣桯捯污瑥⁣桩瀠捯潫楥⁲散楰敳‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹴特⵳敡牣栮獵牰物獥⵭攭敮杬楳栢‽•捨潣潬慴攠捨楰⁣潯歩攠牥捩灥猢㬊ਯ⨠䉲潷獥爠卥慲捨ⁱ略特⁦潲⁤楮湥爠牥捩灥猠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮瑲礭獥慲捨⹳畲灲楳攭浥⵩湴敲湡瑩潮慬∠㴠≤楮湥爠牥捩灥猢㬊ਯ⨠呩瑬攠景爠愠扵瑴潮⁴桡琠瑲楧来牳⁡渠畮歮潷渠獥慲捨ⁱ略特⁦潲⁴桥⁵獥爮‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹴特⵳敡牣栮獵牰物獥⵭攭瑩瑬攢‽•卵牰物獥攡∻ਊ⼪⁃牡獨⁒数潲琠慬睡祳⁳敮搠扵瑴潮⁴楴汥‪⼊≣牡獨⹲数潲琮摩慬潧⹡汷慹献獥湤∠㴠≁汷慹猠卥湤⁃牡獨⁒数潲瑳∻ਊ⼪⁃牡獨⁒数潲琠桩摥⁤整慩汳⁢畴瑯渠瑩瑬攠⨯ਢ捲慳栮牥灯牴⹤楡汯朮桩摥⹤整慩汳∠㴠≈楤攢㬊ਯ⨠䍲慳栠剥灯牴⁤楡汯朠浥獳慧攠⨯ਢ捲慳栮牥灯牴⹤楡汯朮浥獳慧攢‽•䍲慳栠牥灯牴猠桥汰⁄畣歄畣歇漠摩慧湯獥⁩獳略猠慮搠業灲潶攠潵爠灲潤畣瑳⸠周敹⁣潮瑡楮漠灥牳潮慬汹⁩摥湴楦楡扬攠楮景牭慴楯渮∻ਊ⼪⁃牡獨⁒数潲琠湥癥爠獥湤⁢畴瑯渠瑩瑬攠⨯ਢ捲慳栮牥灯牴⹤楡汯朮湥癥爮獥湤∠㴠≎敶敲⁓敮搢㬊ਯ⨠䍲慳栠剥灯牴⁳桯眠摥瑡楬猠扵瑴潮⁴楴汥‪⼊≣牡獨⹲数潲琮摩慬潧⹳桯眮摥瑡楬猢‽•卥攠睨慴❳⁳敮琢㬊ਯ⨠䍲慳栠剥灯牴⁤楡汯朠瑩瑬攠⨯ਢ捲慳栮牥灯牴⹤楡汯朮瑩瑬攢‽•䅵瑯浡瑩捡汬礠獥湤⁣牡獨⁲数潲瑳㼢㬊ਯ⨠呩瑬攠景爠愠獥捴楯渠捯湴慩湩湧湬礠楴敭猠晲潭⁰慳琠浯湴栠⨯ਢ摡瑥⹲慮来⹰慳琭浯湴栢‽•偡獴潮瑨∻ਊ⼪⁔楴汥⁦潲⁡⁳散瑩潮⁣潮瑡楮楮朠潮汹⁩瑥浳⁦牯洠灡獴⁷敥欠⨯ਢ摡瑥⹲慮来⹰慳琭睥敫∠㴠≐慳琠睥敫∻ਊ⼪⁔楴汥⁦潲⁡⁳散瑩潮⁣潮瑡楮楮朠潮汹⁩瑥浳⁦牯洠瑯摡礠⨯ਢ摡瑥⹲慮来⹴潤慹∠㴠≔潤慹∻ਊ⼪⁔楴汥⁦潲⁡⁳散瑩潮⁣潮瑡楮楮朠潮汹⁩瑥浳⁦牯洠祥獴敲摡礠⨯ਢ摡瑥⹲慮来⹹敳瑥牤慹∠㴠≙敳瑥牤慹∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ摡砮桩摥⹢畴瑯渢‽•䡩摥⁔楰猠䙯牥癥爢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≤慸⹨楤攮捡湣敬∠㴠≃慮捥氢㬊ਯ⨠卵扴楴汥⁩渠䡩摥⁄慸⁤楡汯朠⨯ਢ摡砮桩摥⹭敳獡来∠㴠≔桥牥⁡牥湬礠愠晥眬⁡湤⁷攠瑲楥搠瑯慫攠瑨敭⁩湦潲浡瑩癥⸢㬊ਯ⨠呩瑬攠楮⁈楤攠䑡砠摩慬潧‪⼊≤慸⹨楤攮瑩瑬攢‽•䡩摥⁲敭慩湩湧⁴楰猿∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ摡砮潮扯慲摩湧⹢牯睳楮朮慦瑥爮獥慲捨∠㴠≙潵爠䑵捫䑵捫䝯⁳敡牣桥猠慲攠慮潮祭潵献⁁汷慹献⃰龙谢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≤慸⹯湢潡牤楮朮扲潷獩湧⹡晴敲⹳敡牣栮捴愢‽•偨敷™㬊ਯ⨠䙩牳琠灡牡浥瑥爠楳⁡⁣潵湴映慤摩瑩潮慬⁴牡捫敲猬⁳散潮搠慮搠瑨楲搠慲攠湡浥猠潦⁴桥⁴牡捫敲整睯牫猠⡳瑲楮杳⤠⨯ਢ摡砮潮扯慲摩湧⹢牯睳楮朮浵汴楰汥⹴牡捫敲猢‽•摡砮潮扯慲摩湧⹢牯睳楮朮浵汴楰汥⹴牡捫敲猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≤慸⹯湢潡牤楮朮扲潷獩湧⹭畬瑩灬攮瑲慣步牳⹣瑡∠㴠≈楧栠䙩癥™㬊ਯ⨠偡牡浥瑥爠楳⁤潭慩渠湡浥
獴物湧⤠⨯ਢ摡砮潮扯慲摩湧⹢牯睳楮朮潮攮瑲慣步爢‽•⨥ㄤ䀪⁷慳⁴特楮朠瑯⁴牡捫⁹潵⁨敲攮屮屮䤠扬潣步搠瑨敭⅜湜滢额輠奯甠捡渠捨散欠瑨攠慤摲敳猠扡爠瑯⁳敥⁷桯⁩猠瑲祩湧⁴漠瑲慣欠祯甠睨敮⁹潵⁶楳楴⁡敷⁳楴攮∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ摡砮潮扯慲摩湧⹢牯睳楮朮潮攮瑲慣步爮捴愢‽•䡩杨⁆楶攡∻ਊ⼪⁆楲獴⁰慲慭瑥爠楳⁡⁳瑲楮朠ⴠ湥瑷潲欠湡浥Ⱐ㉮搠灡牡浥瑥爠楳⁡⁳瑲楮朠ⴠ摯浡楮慭攠⨯ਢ摡砮潮扯慲摩湧⹢牯睳楮朮獩瑥⹩献浡橯爮瑲慣步爢‽•䡥慤猠異℠䤠捡滢肙琠獴潰‥ㄤ䀠晲潭⁳敥楮朠祯畲⁡捴楶楴礠潮‥㈤䀮屮屮䉵琠扲潷獥⁷楴栠浥Ⱐ慮搠䤠捡渠牥摵捥⁷桡琠┱⑀湯睳⁡扯畴⁹潵癥牡汬⁢礠扬潣歩湧⁴桥楲⁴牡捫敲猠潮潴猠潦瑨敲⁳楴敳⸢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≤慸⹯湢潡牤楮朮扲潷獩湧⹳楴攮楳⹭慪潲⹴牡捫敲⹣瑡∠㴠≇潴⁉琢㬊ਯ⨠偡牡浥瑥牳⁡牥⁤潭慩渠湡浥猠⡳瑲楮杳⤠⨯ਢ摡砮潮扯慲摩湧⹢牯睳楮朮獩瑥⹯睮敤⹢礮浡橯爮瑲慣步爢‽•䡥慤猠異℠卩湣攠┲⑀睮猠┱⑀Ⱐ䤠捡滢肙琠獴潰⁴桥洠晲潭⁳敥楮朠祯畲⁡捴楶楴礠桥牥⹜湜湂畴⁢牯睳攠睩瑨攬⁡湤⁉⁣慮⁲敤畣攠睨慴‥㈤䀠歮潷猠慢潵琠祯甠潶敲慬氠批⁢汯捫楮朠瑨敩爠瑲慣步牳渠汯瑳映潴桥爠獩瑥献∻ਊ⼪⁇潴⁉琠⨯ਢ摡砮潮扯慲摩湧⹢牯睳楮朮獩瑥⹯睮敤⹢礮浡橯爮瑲慣步爮捴愢‽•䝯琠䥴∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ摡砮潮扯慲摩湧⹢牯睳楮朮睩瑨潵琮瑲慣步牳∠㴠≁猠祯甠瑡瀠慮搠獣牯汬Ⱐ䧢肙汬⁢汯捫⁰敳歹⁴牡捫敲献屮屮䝯⁡桥慤‭敥瀠扲潷獩湧™㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≤慸⹯湢潡牤楮朮扲潷獩湧⹷楴桯畴⹴牡捫敲献捴愢‽•䝯琠䥴∻ਊ⼪⁅湣潵牡来⁵獥爠瑯⁴特⁣汥慲楮朠摡瑡⁷楴栠瑨攠晩牥⁢畴瑯渠⨯ਢ摡砮潮扯慲摩湧⹦楲攮扵瑴潮∠㴠≐敲獯湡氠摡瑡⁣慮⁢畩汤⁵瀠楮⁹潵爠扲潷獥爮⁙畣欮⁕獥⁴桥⁆楲攠䉵瑴潮⁴漠扵牮⁩琠慬氠慷慹⸠䝩癥⁩琠愠瑲礠湯眡⃰龑蜢㬊ਯ⨠䍡湣敬⁡捴楯渠⨯ਢ摡砮潮扯慲摩湧⹦楲攮扵瑴潮⹣慮捥汁捴楯渢‽•䍡湣敬∻ਊ⼪⁅湣潵牡来⁵獥爠瑯⁴特⁣汥慲楮朠摡瑡⁷楴栠瑨攠晩牥⁢畴瑯渠⨯ਢ摡砮潮扯慲摩湧⹦楲攮扵瑴潮⹣潮晩牭䅣瑩潮∠㴠≃汯獥⁔慢猠慮搠䍬敡爠䑡瑡∻ਊ⼪⁅湣潵牡来⁵獥爠瑯⁡摤⁦慶潲楴攠獩瑥⁵獩湧⁴桥⁢牯睳楮朠浥湵⸠⨯ਢ摡砮潮扯慲摩湧⹨潭攮慤搮晡癯物瑥∠㴠≖楳楴⁹潵爠晡癯物瑥⁳楴敳⁩渠愠晬慳校屮屮䝯⁴漠愠獩瑥⁹潵潶攮⁔桥渠瑡瀠瑨攠尢꽜∠楣潮⁡湤⁳敬散琠⩁摤⁴漠䙡癯物瑥猪⸢㬊ਯ⨠䅣捥獳楢汥⁶敲獩潮映摡砮潮扯慲摩湧⹨潭攮慤搮晡癯物瑥‪⼊≤慸⹯湢潡牤楮朮桯浥⹡摤⹦慶潲楴攮慣捥獳楢汥∠㴠≖楳楴⁹潵爠晡癯物瑥⁳楴敳⁩渠愠晬慳校⁖楳楴湥映祯畲⁦慶潲楴攠獩瑥献⁔桥渠瑡瀠瑨攠潰敮敮甠扵瑴潮⁡湤⁳敬散琠䅤搠瑯⁆慶潲楴敳⸢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≤慸⹯湢潡牤楮朮桯浥⹩湩瑩慬∠㴠≎數琬⁴特⁶楳楴楮朠潮攠潦⁹潵爠晡癯物瑥⁳楴敳⅜湜湉饬氠扬潣欠瑲慣步牳⁳漠瑨敹⁣慮饴⁳灹渠祯甮⁉饬氠慬獯⁵灧牡摥⁴桥⁳散畲楴礠潦⁹潵爠捯湮散瑩潮⁩映灯獳楢汥⸠钒∻ਊ⼪⁡搠㴠慤癥牴楳浥湴‪⼊≤慸⹯湢潡牤楮朮桯浥⹳畢獥煵敮琢‽•奯痢肙癥⁧潴⁴桩猡屮屮剥浥浢敲㨠䕶敲礠瑩浥⁹潵⁢牯睳攠睩瑨攬⁡⁣牥数礠慤潳敳⁩瑳⁷楮杳⸠醍∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ摡砮潮扯慲摩湧⹭敳獡来∠㴠≔桥⁉湴敲湥琠捡渠扥楮摡⁣牥数礮屮屮乯琠瑯⁷潲特℠卥慲捨楮朠慮搠扲潷獩湧⁰物癡瑥汹⁩猠敡獩敲⁴桡渠祯甠瑨楮欮∻ਊ⼪⁄敦慵汴⁳瑲楮朠畳敤⁩映畳敲猠摥癩捥⁩猠湯琠楐桯湥爠楐慤‪⼊≤敶楣攮瑹灥⹤敦慵汴∠㴠≤敶楣攢㬊ਯ⨠䑥癩捥⁴祰攠楳⁩偨潮攠⨯ਢ摥癩捥⹴祰攮楰桯湥∠㴠≩偨潮攢㬊ਯ⨠䑥癩捥⁴祰攠楳⁩偡搠⨯ਢ摥癩捥⹴祰攮灡搢‽•楐慤∻ਊ⼪⁇偃⁓整瑩湧⁳瑡瑥‪⼊≤潮潴獥汬⹤楳慢汥搢‽•䑩獡扬敤∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ摯湯瑳敬氮摩獣污業敲⹬敡牮浯牥∠㴠≌敡牮⁍潲攢㬊ਯ⨠䝐䌠卥瑴楮朠獴慴攠⨯ਢ摯湯瑳敬氮敮慢汥搢‽•䕮慢汥搢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≤潮潴獥汬⹩湦漮桥慤敲瑥硴∠㴠≄畣歄畣歇漠慵瑯浡瑩捡汬礠扬潣歳慮礠瑲慣步牳⸠坩瑨⁇汯扡氠偲楶慣礠䍯湴牯氠⡇偃⤬⁹潵⁣慮⁡汳漠慳欠灡牴楣楰慴楮朠睥扳楴敳⁴漠牥獴物捴⁳敬汩湧爠獨慲楮朠祯畲⁰敲獯湡氠摡瑡⁷楴栠潴桥爠捯浰慮楥献∻ਊ⼪⁁汥牴⁡捴楯渠景爠獴慲瑩湧⁡⁦楬攠摯睬潡搠⨯ਢ摯睮汯慤献慬敲琮慣瑩潮⹳慶攭瑯ⵤ潷湬潡摳∠㴠≓慶攠瑯⁄潷湬潡摳∻ਊ⼪⁃慮捥氠摯睮汯慤⁡捴楯渠景爠摯睮汯慤猠⨯ਢ摯睮汯慤献捡湣敬ⵤ潷湬潡搮慬敲琮捡湣敬∠㴠≃慮捥氢㬊ਯ⨠䵥獳慧攠景爠慬敲琠睨敮⁴特楮朠瑯⁣慮捥氠瑨攠晩汥⁤潷湬潡搠⨯ਢ摯睮汯慤献捡湣敬ⵤ潷湬潡搮慬敲琮浥獳慧攢‽•䅲攠祯甠獵牥⁹潵⁷慮琠瑯⁣慮捥氠瑨楳⁤潷湬潡搿∻ਊ⼪⁃潮晩牭⁡捴楯渠景爠慬敲琠睨敮⁴特楮朠瑯⁣慮捥氠瑨攠晩汥⁤潷湬潡搠⨯ਢ摯睮汯慤献捡湣敬ⵤ潷湬潡搮慬敲琮湯∠㴠≎漢㬊ਯ⨠呩瑬攠景爠慬敲琠睨敮⁴特楮朠瑯⁣慮捥氠瑨攠晩汥⁤潷湬潡搠⨯ਢ摯睮汯慤献捡湣敬ⵤ潷湬潡搮慬敲琮瑩瑬攢‽•䍡湣敬⁤潷湬潡搿∻ਊ⼪⁃潮晩牭⁡捴楯渠景爠景爠慬敲琠睨敮⁴特楮朠瑯⁣慮捥氠瑨攠晩汥⁤潷湬潡搠⨯ਢ摯睮汯慤献捡湣敬ⵤ潷湬潡搮慬敲琮祥猢‽•奥猢㬊ਯ⨠䉵瑴潮⁦潲⁤敬整楮朠慬氠楴敭猠潮⁤潷湬潡摳楳琠⨯ਢ摯睮汯慤献摯睮汯慤猭汩獴⹤敬整攭慬氢‽•䑥汥瑥⁁汬∻ਊ⼪⁅浰瑹⁤潷湬潡摳楳琠灬慣桯汤敲‪⼊≤潷湬潡摳⹤潷湬潡摳⵬楳琮敭灴礢‽•乯⁦楬敳⁤潷湬潡摥搠祥琢㬊ਯ⨠䱡扥氠摩獰污祩湧⁦楬攠摯睮汯慤⁰牯杲敳献⁂潴栠灡牡浥瑥牳⁡牥⁦潲浡瑴敤⁤慴愠獩穥敡獵牥浥湴猠攮朮‵䵂⸠䙩牳琠灡牡浥瑥爠楳⁤慴愠獩穥⁣畲牥湴汹⁤潷湬潡摥搮⁓散潮搠灡牡浥瑥爠楳⁴潴慬⁥硰散瑥搠摡瑡⁳楺攠潦⁴桥⁦楬攮‪⼊≤潷湬潡摳⹤潷湬潡摳⵬楳琮牯眮摯睮汯慤楮朢‽•䑯睮汯慤楮朠ⴠ┱⑀映┲⑀∻ਊ⼪⁌慢敬⁤楳灬慹楮朠晩汥⁤潷湬潡搠灲潧牥獳⸠周攠灡牡浥瑥爠楳⁦潲浡瑴敤⁤慴愠獩穥敡獵牥浥湴猠捵牲敮瑬礠摯睮汯慤敤⁥⹧⸠㕍䈮‪⼊≤潷湬潡摳⹤潷湬潡摳⵬楳琮牯眮摯睮汯慤楮杕湫湯睮呯瑡汓楺攢‽•䑯睮汯慤楮朠ⴠ╀∻ਊ⼪⁄潷湬潡摳楳琠獣牥敮⁴楴汥‪⼊≤潷湬潡摳⹤潷湬潡摳⵬楳琮瑩瑬攢‽•䑯睮汯慤猢㬊ਯ⨠䅤摩瑩潮慬⁡汥牴敳獡来⁳桯睮⁷桥渠瑨敲攠慲攠慣瑩癥⁤潷湬潡摳⁷桥渠畳楮朠瑨攠晩牥⁢畴瑯渠⨯ਢ摯睮汯慤献晩牥ⵢ畴瑯渮慬敲琮浥獳慧攢‽•周楳⁷楬氠慬獯⁣慮捥氠摯睮汯慤猠楮⁰牯杲敳猢㬊ਯ⨠䵥獳慧攠捯湦楲浩湧⁴桡琠慬氠晩汥猠潮⁴桥⁤潷湬潡摳楳琠桡癥⁢敥渠摥汥瑥搠⨯ਢ摯睮汯慤献浥獳慧攮慬氭晩汥猭摥汥瑥搢‽•䅬氠晩汥猠摥汥瑥搢㬊ਯ⨠䵥獳慧攠捯湦楲浩湧⁴桡琠瑨攠摯睮汯慤⁰牯捥獳⁨慳⁣潭灬整敤⸠偡牡浥瑥爠楳⁤潷湬潡摥搠晩汥❳⁦楬敮慭攠⨯ਢ摯睮汯慤献浥獳慧攮摯睮汯慤ⵣ潭灬整攢‽•䑯睮汯慤⁣潭灬整攠景爠╀∻ਊ⼪⁍敳獡来⁣潮晩牭楮朠瑨攠晩汥⁷慳⁤敬整敤⸠偡牡浥瑥爠楳⁦楬攧猠晩汥湡浥‪⼊≤潷湬潡摳⹭敳獡来⹤潷湬潡搭摥汥瑥搢‽•䑥汥瑥搠╀∻ਊ⼪⁍敳獡来⁩湦潲浩湧⁴桡琠瑨攠摯睮汯慤⁨慳⁦慩汥搠摵攠瑯⁣潮湥捴楯渠楳獵敳‪⼊≤潷湬潡摳⹭敳獡来⹤潷湬潡搭晡楬敤∠㴠≆慩汥搠瑯⁤潷湬潡搮⁃桥捫⁩湴敲湥琠捯湮散瑩潮⸢㬊ਯ⨠䵥獳慧攠捯湦楲浩湧⁴桡琠瑨攠摯睮汯慤⁰牯捥獳⁨慳⁳瑡牴敤⸠偡牡浥瑥爠楳⁤潷湬潡摥搠晩汥❳⁦楬敮慭攠⨯ਢ摯睮汯慤献浥獳慧攮摯睮汯慤⵳瑡牴敤∠㴠≄潷湬潡搠獴慲瑥搠景爠╀∻ਊ⼪⁔楴汥⁦潲敳獡来⁥硰污楮楮朠瑯⁴桥⁵獥爠瑨慴⁄畣欠偬慹敲⁩猠湯琠慶慩污扬攠⨯ਢ摵捫⵰污祥爮捯湴楮来湣礭瑩瑬攢‽•䑵捫⁐污祥爠啮慶慩污扬攢㬊ਯ⨠䉵瑴潮⁦潲⁴桥敳獡来⁥硰污楮楮朠瑯⁴桥⁵獥爠瑨慴⁄畣欠偬慹敲⁩猠湯琠慶慩污扬攠獯⁴桥⁵獥爠捡渠汥慲渠浯牥‪⼊≤畣欭灬慹敲⹶楤敯ⵣ潮瑩湧敮捹ⵣ瑡∠㴠≌敡牮⁍潲攢㬊ਯ⨠䵥獳慧攠數灬慩湩湧⁴漠瑨攠畳敲⁴桡琠䑵捫⁐污祥爠楳潴⁡癡楬慢汥‪⼊≤畣欭灬慹敲⹶楤敯ⵣ潮瑩湧敮捹⵭敳獡来∠㴠≄畣欠偬慹敲❳⁦畮捴楯湡汩瑹⁨慳⁢敥渠慦晥捴敤⁢礠牥捥湴⁣桡湧敳⁴漠奯畔畢攮⁗既肙牥⁷潲歩湧⁴漠晩砠瑨敳攠楳獵敳⁡湤⁡灰牥捩慴攠祯畲⁵湤敲獴慮摩湧⸢㬊ਯ⨠呥硴⁤楳灬慹敤⁷桥渠䑵捫偬慹敲⁩猠慬睡祳⁥湡扬敤‪⼊≤畣歐污祥爮慬睡祳䕮慢汥搮污扥氢‽•䅬睡祳∻ਊ⼪⁔數琠摩獰污祥搠睨敮⁄畣歐污祥爠楳⁩渠❁獫✠浯摥⸠⨯ਢ摵捫偬慹敲⹡獫⹬慢敬∠㴠≁獫⁥癥特⁴業攢㬊ਯ⨠呥硴⁤楳灬慹敤⁷桥渠䑵捫偬慹敲⁩猠楮晦⸠⨯ਢ摵捫偬慹敲⹮敶敲⹬慢敬∠㴠≎敶敲∻ਊ⼪⁂潤礠瑥硴⁦潲⁴桥潤慬⁦敡瑵牥⁥硰污湡瑩潮‪⼊≤畣歰污祥爮灲敳敮瑡瑩潮⹭潤慬⹢潤礢‽•䑵捫⁐污祥爠汥瑳⁹潵⁷慴捨⁙潵呵扥⁷楴桯畴⁴慲来瑥搠慤猠楮⁡⁴桥慴敲⵬楫攠數灥物敮捥⁩渠䑵捫䑵捫䝯⁡湤⁷桡琠祯甠睡瑣栠睯滢肙琠楮晬略湣攠祯畲⁲散潭浥湤慴楯湳⸢㬊ਯ⨠䉵瑴潮⁴桡琠睩汬⁤楳浩獳⁴桥潤慬‪⼊≤畣歰污祥爮灲敳敮瑡瑩潮⹭潤慬⹤楳浩獳ⵢ畴瑯渢‽•䝯琠楴™㬊ਯ⨠呷漠汩湥⁴楴汥
獥灡牡瑥搠批⁜温⁦潲⁴桥⁦敡瑵牥⁥硰污湡瑩潮‪⼊≤畣歰污祥爮灲敳敮瑡瑩潮⹭潤慬⹴楴汥∠㴠≄牯睮楮朠楮⁡摳渠奯畔畢政⁔特⁄畣欠偬慹敲™㬊ਯ⨠䙯潴敲慢敬⁩渠瑨攠獥瑴楮杳⁳捲敥渠景爠䑵捫⁐污祥爠⨯ਢ摵捫灬慹敲⹳整瑩湧献景潴敲∠㴠≄畣歄畣歇漠灲潶楤敳⁡汬⁴桥⁰物癡捹⁥獳敮瑩慬猠祯甠湥敤⁴漠灲潴散琠祯畲獥汦⁡猠祯甠扲潷獥⁴桥⁷敢⸢㬊ਯ⨠呥硴⁥硰污楮楮朠睨慴⁄畣欠偬慹敲⁩猠楮⁴桥⁳整瑩湧猠獣牥敮⸠⨯ਢ摵捫灬慹敲⹳整瑩湧献楮景⵴數琢‽•䑵捫⁐污祥爠灲潶楤敳⁡⁣汥慮⁶楥睩湧⁥硰敲楥湣攠睩瑨潵琠灥牳潮慬楺敤⁡摳⁡湤⁰牥癥湴猠癩敷楮朠慣瑩癩瑹⁦牯洠楮晬略湣楮朠祯畲⁙潵呵扥⁲散潭浥湤慴楯湳⸢㬊ਯ⨠䉵瑴潮⁴桡琠瑡步猠瑨攠畳敲⁴漠汥慲渠浯牥⁡扯畴⁄畣欠偬慹敲⸠⨯ਢ摵捫灬慹敲⹳整瑩湧献汥慲渭浯牥∠㴠≌敡牮⁍潲攢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁴數琠景爠䑵捫偬慹敲⁳整瑩湧猠⨯ਢ摵捫灬慹敲⹳整瑩湧献潰敮⵶楤敯猭楮∠㴠≏灥渠噩摥潳⁩渠䑵捫⁐污祥爢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁴數琠景爠䑵捫偬慹敲⁳整瑩湧猠⨯ਢ摵捫灬慹敲⹳整瑩湧献瑩瑬攢‽•䑵捫⁐污祥爢㬊ਯ⨠䕭慩氠灲潴散瑩潮⁳敲癩捥晦敲敤⁢礠䑵捫䑵捫䝯‪⼊≥浡楬⵰牯瑥捴楯渢‽•䕭慩氠偲潴散瑩潮∻ਊ⼪⁃慮捥氠潰瑩潮⁦潲⁴桥⁥浡楬⁡汩慳⁡汥牴‪⼊≥浡楬⹡汩慳䅬敲琮摥捬楮攢‽•䍡湣敬∻ਊ⼪⁏灴楯渠景爠来湥牡瑩湧⁡⁰物癡瑥⁥浡楬⁡摤牥獳‪⼊≥浡楬⹡汩慳䅬敲琮来湥牡瑥偲楶慴敁摤牥獳∠㴠≇敮敲慴攠偲楶慴攠䑵捫⁁摤牥獳∻ਊ⼪⁏灴楯渠景爠来湥牡瑩湧⁡⁰物癡瑥⁥浡楬⁡摤牥獳‪⼊≥浡楬⹡汩慳䅬敲琮灲潭灴⹧敮敲慴敐物癡瑥䅤摲敳猢‽•䝥湥牡瑥⁐物癡瑥⁄畣欠䅤摲敳猢㬊ਯ⨠卵扴楴汥⁦潲⁧敮敲慴楮朠愠灲楶慴攠敭慩氠慤摲敳猠⨯ਢ敭慩氮慬楡獁汥牴⹰牯浰琮来湥牡瑥偲楶慴敁摤牥獳⹳畢瑩瑬攢‽•䉬潣欠敭慩氠瑲慣步牳…⁨楤攠慤摲敳猢㬊ਯ⨠呩瑬攠景爠瑨攠敭慩氠慬楡猠獥汥捴楯渠灲潭灴‪⼊≥浡楬⹡汩慳䅬敲琮灲潭灴⹴楴汥∠㴠≓敬散琠敭慩氠慤摲敳猢㬊ਯ⨠卵扴楴汥⁦潲⁣桯潳楮朠灲業慲礠畳敲⁥浡楬⁡摤牥獳‪⼊≥浡楬⹡汩慳䅬敲琮灲潭灴⹵獥啳敲䅤摲敳献獵扴楴汥∠㴠≂汯捫⁥浡楬⁴牡捫敲猢㬊ਯ⨠呩瑬攠景爠瑨攠敭慩氠慬楡猠獥汥捴楯渠慬敲琠⨯ਢ敭慩氮慬楡獁汥牴⹴楴汥∠㴠≂汯捫⁥浡楬⁴牡捫敲猠睩瑨⁡⁄畣欠䅤摲敳猢㬊ਯ⨠偡牡浥瑥爠楳⁡渠敭慩氠慤摲敳猠⡳瑲楮朩‪⼊≥浡楬⹡汩慳䅬敲琮畳敕獥牁摤牥獳∠㴠≕獥‥䀢㬊ਯ⨠呩瑬攠景爠瑨攠敭慩氠捯灹⁢牯睳楮朠浥湵⁡汥牴‪⼊≥浡楬⹢牯睳楮杍敮甮慬敲琢‽•乥眠慤摲敳猠捯灩敤⁴漠祯畲⁣汩灢潡牤∻ਊ⼪⁅浡楬灴楯渠瑩瑬攠楮⁴桥⁢牯睳楮朠浥湵‪⼊≥浡楬⹢牯睳楮杍敮甮畳敎敷䑵捫䅤摲敳猢‽•䝥湥牡瑥⁐物癡瑥⁄畣欠䅤摲敳猢㬊ਯ⨠卩杮敤⁩渠獴慴攠景爠瑨攠敭慩氠晥慴畲攠⨯ਢ敭慩氮獥瑴楮杳⹥湡扬敤∠㴠≅湡扬敤∻ਊ⼪⁆潯瑥爠瑥硴⁦潲⁴桥⁥浡楬⁦敡瑵牥‪⼊≥浡楬⹳整瑩湧献景潴敲∠㴠≒敭潶楮朠䕭慩氠偲潴散瑩潮⁦牯洠瑨楳⁤敶楣攠牥浯癥猠瑨攠潰瑩潮⁴漠晩汬⁩渠祯畲⁐敲獯湡氠䑵捫⁁摤牥獳爠愠湥睬礠来湥牡瑥搠偲楶慴攠䑵捫⁁摤牥獳⁩湴漠敭慩氠晩敬摳⁡猠祯甠扲潷獥⁴桥⁷敢⹜湜湔漠摥汥瑥⁹潵爠䑵捫⁁摤牥獳敳⁥湴楲敬礬爠景爠慮礠潴桥爠煵敳瑩潮猠潲⁦敥摢慣欬⁲敡捨畴⁴漠畳⁡琠獵灰潲瑀摵捫⹣潭⸢㬊ਯ⨠卩杮敤畴⁳瑡瑥⁦潲⁴桥⁥浡楬⁦敡瑵牥‪⼊≥浡楬⹳整瑩湧献潦昢‽•佦昢㬊ਯ⨠卵扴楴汥⁦潲⁴桥⁥浡楬⁳整瑩湧猠捥汬‪⼊≥浡楬⹳整瑩湧献獵扴楴汥∠㴠≂汯捫⁥浡楬⁴牡捫敲猠慮搠桩摥⁹潵爠慤摲敳猢㬊ਯ⨠佰瑩潮⁴漠捯湴楮略⁴桥⁅浡楬⁐牯瑥捴楯渠獩杮異‪⼊≥浡楬⹳楧湵瀭灲潭灴⹡汥牴⹣潮瑩湵攢‽•䍯湴楮略⁓整異∻ਊ⼪⁏灴楯渠瑯⁥硩琠瑨攠䕭慩氠偲潴散瑩潮⁳楧湵瀠⨯ਢ敭慩氮獩杮異⵰牯浰琮慬敲琮數楴∠㴠≅硩琠卥瑵瀢㬊ਯ⨠呩瑬攠景爠數楴楮朠瑨攠䕭慩氠偲潴散瑩潮⁳楧湵瀠敡牬礠慬敲琠⨯ਢ敭慩氮獩杮異⵰牯浰琮慬敲琮瑩瑬攢‽•䥦⁹潵⁥硩琠湯眬⁹潵爠䑵捫⁁摤牥獳⁷楬氠湯琠扥⁳慶敤™㬊ਯ⨠䉵瑴潮⁴楴汥⁣桯潳楮朠湯琠瑯⁳楧渠異⁦潲⁥浡楬⁰牯瑥捴楯渠慮搠湯琠瑯⁢攠灲潭灴敤⁡条楮‪⼊≥浡楬⹳楧湵瀭灲潭灴⹤漭湯琭獩杮異ⵢ畴瑯渮捴愢‽•䑯滢肙琠卨潷⁁条楮∻ਊ⼪⁂畴瑯渠瑩瑬攠捨潯獩湧⁴漠獩杮⁵瀠景爠敭慩氠灲潴散瑩潮‪⼊≥浡楬⹳楧湵瀭灲潭灴⹳楧湵瀭扵瑴潮⹣瑡∠㴠≐牯瑥捴⁍礠䕭慩氢㬊ਯ⨠卵扴楴汥⁦潲⁰牯浰琠瑯⁳楧渠異⁦潲⁥浡楬⁰牯瑥捴楯渠⨯ਢ敭慩氮獩杮異⵰牯浰琮獵扴楴汥∠㴠≃牥慴攠愠畮楱略Ⱐ牡湤潭⁡摤牥獳⁴桡琠慬獯⁲敭潶敳⁨楤摥渠瑲慣步牳⁡湤⁦潲睡牤猠敭慩氠瑯⁹潵爠楮扯砮∻ਊ⼪⁔楴汥⁦潲⁰牯浰琠瑯⁳楧渠異⁦潲⁥浡楬⁰牯瑥捴楯渠⨯ਢ敭慩氮獩杮異⵰牯浰琮瑩瑬攢‽•䡩摥⁙潵爠䕭慩氠慮摜湂汯捫⁔牡捫敲猢㬊ਯ⨠䕭灴礠汩獴⁳瑡瑥⁰污捨潬摥爠⨯ਢ敭灴礮扯潫浡牫猢‽•乯⁢潯歭慲歳⁡摤敤⁹整∻ਊ⼪⁅浰瑹⁳敡牣栠灬慣敨潬摥爠潮⁢潯歭慲歳⁳敡牣栠⨯ਢ敭灴礮獥慲捨∠㴠≎漠浡瑣桥猠景畮搢㬊ਯ⨠䉵瑴潮⁴楴汥⁴漠卩杮⁉渠⨯ਢ敲牯爮敭慩氭灲潴散瑩潮⵳楧渭楮⹡捴楯渢‽•卩杮⁉渢㬊ਯ⨠䅬敲琠浥獳慧攠⨯ਢ敲牯爮敭慩氭灲潴散瑩潮⵳楧渭楮⹢潤礢‽•卯牲礬⁰汥慳攠獩杮⁩渠慧慩渠瑯⁲攭敮慢汥⁅浡楬⁐牯瑥捴楯渠晥慴畲敳渠瑨楳⁢牯睳敲⸢㬊ਯ⨠䅬敲琠瑩瑬攠⨯ਢ敲牯爮敭慩氭灲潴散瑩潮⵳楧渭楮⹴楴汥∠㴠≅浡楬⁐牯瑥捴楯渠䕲牯爢㬊ਯ⨠䉵瑴潮⁴楴汥⁴漠潰敮⁤敶楣攠獥瑴楮杳‪⼊≥牲潲⹩湳畦晩捩敮琭摩獫⵳灡捥⹡捴楯渢‽•佰敮⁓整瑩湧猢㬊ਯ⨠䅬敲琠浥獳慧攠⨯ਢ敲牯爮楮獵晦楣楥湴ⵤ楳欭獰慣攮扯摹∠㴠≌潯歳楫攠祯畲⁤敶楣攠桡猠牵渠潵琠潦⁳瑯牡来⁳灡捥⸠偬敡獥⁦牥攠異⁳灡捥⁴漠捯湴楮略⸢㬊ਯ⨠䅬敲琠瑩瑬攠⨯ਢ敲牯爮楮獵晦楣楥湴ⵤ楳欭獰慣攮瑩瑬攢‽•乯琠敮潵杨⁳瑯牡来∻ਊ⼪⁂畴瑯渠瑩瑬攠瑨慴⁩猠獨畴瑩湧⁤潷渠瑨攠慰瀠⨯ਢ敲牯爮灲敥浰瑩癥ⵣ牡獨⹡捴楯渢‽•䍬潳攠䅰瀢㬊ਯ⨠䅬敲琠浥獳慧攠⨯ਢ敲牯爮灲敥浰瑩癥ⵣ牡獨⹢潤礢‽•䱯潫猠汩步⁴桥牥❳⁡渠楳獵攠睩瑨⁴桥⁡灰⁡湤⁩琠湥敤猠瑯⁣汯獥⸠偬敡獥⁲敯灥渠瑯⁣潮瑩湵攮∻ਊ⼪⁁汥牴⁴楴汥‪⼊≥牲潲⹰牥敭灴楶攭捲慳栮瑩瑬攢‽•䅰瀠楳獵攠摥瑥捴敤∻ਊ⼪⁇敮敲楣⁥牲潲敳獡来渠愠摩慬潧⁦潲⁷桥渠瑨攠捡畳攠楳潴湯睮⸠⨯ਢ敲牯爮畮歮潷渮瑲礮慧慩渢‽•䅮⁵湫湯睮⁥牲潲⁨慳捣畲牥搢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦慶潲楴攢‽•䙡癯物瑥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晡癯物瑥⹭敮甮敤楴∠㴠≅摩琢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦慶潲楴攮浥湵⹲敭潶攢‽•剥浯癥∻ਊ⼪⁄楳灬慹⁍潤攠景爠晡癯物瑥猠⨯ਢ晡癯物瑥献獥瑴楮杳⹡汬ⵤ敶楣敳∠㴠≁汬⁄敶楣攠䙡癯物瑥猢㬊ਯ⨠䙯潴敲映瑨攠晡癯物瑥猠獥瑴楮杳⁴慢汥‪⼊≦慶潲楴敳⹳整瑩湧献景潴敲∠㴠≃桯潳攠睨楣栠晡癯物瑥猠瑯⁤楳灬慹渠愠湥眠瑡戠扡獥搠潮⁴桥楲物杩渮∻ਊ⼪⁈敡摥爠潦⁴桥⁦慶潲楴敳⁳整瑩湧猠瑡扬攠⨯ਢ晡癯物瑥献獥瑴楮杳⹨敡摥爢‽•䑩獰污礠偲敦敲敮捥猢㬊ਯ⨠䑩獰污礠䵯摥⁦潲⁦慶潲楴敳‪⼊≦慶潲楴敳⹳整瑩湧献浯扩汥ⵯ湬礢‽•䵯扩汥⁆慶潲楴敳⁏湬礢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮扲潷獥牆敡瑵牥献慤猢‽•䅤⁡湤⁰潰⵵瀠扬潣歩湧∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹢牯睳敲䙥慴畲敳⹢潯歭慲歳∠㴠≃牥慴楮朠慮搠浡湡杩湧⁢潯歭慲歳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹢牯睳敲䙥慴畲敳⹣慰瑩潮∠㴠≗桩捨⁢牯睳楮朠晥慴畲攠捡渠睥⁡摤爠業灲潶政∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹢牯睳敲䙥慴畲敳⹤敳捲楰瑩潮∠㴠≂牯睳敲⁆敡瑵牥⁉獳略猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮扲潷獥牆敡瑵牥献敮瑲礢‽•䉲潷獩湧⁦敡瑵牥猠慲攠浩獳楮朠潲⁦牵獴牡瑩湧∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹢牯睳敲䙥慴畲敳⹩浡来猢‽•䥮瑥牡捴楮朠睩瑨⁩浡来猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮扲潷獥牆敡瑵牥献湡癩条瑩潮∠㴠≎慶楧慴楮朠景牷慲搬⁢慣歷慲搬⁡湤⽯爠牥晲敳桩湧∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹢牯睳敲䙥慴畲敳⹯瑨敲∠㴠≎潮攠潦⁴桥獥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹢牯睳敲䙥慴畲敳⹴慢猢‽•䍲敡瑩湧⁡湤慮慧楮朠瑡扳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹢牯睳敲䙥慴畲敳⹶楤敯猢‽•坡瑣桩湧⁶楤敯猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮捵獴潭楺慴楯渮扯潫浡牫猢‽•䡯眠扯潫浡牫猠慲攠摩獰污祥搢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮捵獴潭楺慴楯渮捡灴楯渢‽•坨楣栠捵獴潭楺慴楯渠潰瑩潮⁣慮⁷攠慤搠潲⁩浰牯癥㼢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮捵獴潭楺慴楯渮摥獣物灴楯渢‽•䍵獴潭楺慴楯渠䥳獵敳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹣畳瑯浩穡瑩潮⹥湴特∠㴠≔桥牥⁡牥滢肙琠敮潵杨⁷慹猠瑯⁣畳瑯浩穥⁴桥⁡灰∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹣畳瑯浩穡瑩潮⹨潭敓捲敥渢‽•周攠桯浥⁳捲敥渠捯湦楧畲慴楯渢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮捵獴潭楺慴楯渮潴桥爢‽•乯湥映瑨敳攢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮捵獴潭楺慴楯渮瑡扳∠㴠≈潷⁴慢猠慲攠摩獰污祥搢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮捵獴潭楺慴楯渮畩∠㴠≈潷⁴桥⁡灰潯歳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹣畳瑯浩穡瑩潮⹷桡瑉獃汥慲敤∠㴠≗桩捨⁤慴愠楳⁣汥慲敤∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹣畳瑯浩穡瑩潮⹷桥湉獃汥慲敤∠㴠≗桥渠摡瑡⁩猠捬敡牥搢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮摤杓敡牣栮慵瑯捯浰汥瑥∠㴠≂整瑥爠慵瑯捯浰汥瑥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹤摧卥慲捨⹣慰瑩潮∠㴠≗桩捨⁳敡牣栠晥慴畲攠捡渠睥⁡摤爠業灲潶政∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹤摧卥慲捨⹤敳捲楰瑩潮∠㴠≄畣歄畣歇漠卥慲捨⁉獳略猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮摤杓敡牣栮敮瑲礢‽•䑵捫䑵捫䝯⁳敡牣栠楳滢肙琠杯潤⁥湯畧栢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮摤杓敡牣栮污湧畡来佲剥杩潮∠㴠≓敡牣桩湧⁩渠愠獰散楦楣慮杵慧攠潲⁲敧楯渢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮摤杓敡牣栮污祯畴∠㴠≔桥慹潵琠獨潵汤⁢攠浯牥楫攠䝯潧汥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹤摧卥慲捨⹬潡摔業攢‽•䙡獴敲潡搠瑩浥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹤摧卥慲捨⹯瑨敲∠㴠≎潮攠潦⁴桥獥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹤摧卥慲捨⹴散桮楣慬∠㴠≐牯杲慭浩湧⽴散桮楣慬⁳敡牣栢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮景牭⹣慰瑩潮∠㴠≐汥慳攠瑥汬⁵猠睨慴⁷攠捡渠業灲潶攢㬊ਯ⨠䍯湦楲浡瑩潮⁢畴瑯渠⨯ਢ晥敤扡捫⹦潲洮獵扭楴∠㴠≓畢浩琢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮湥条瑩癥⹦潲洮来湥物捐污捥桯汤敲∠㴠≐汥慳攠扥⁡猠獰散楦楣⁡猠灯獳楢汥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹮敧慴楶攮景牭⹰污捥桯汤敲∠㴠≁牥⁴桥牥⁡湹⁳灥捩晩捳⁹潵饤楫攠瑯⁩湣汵摥㼢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮湥条瑩癥⹨敡摥爢‽•坥饲攠卯牲礠瑯⁈敡爠周慴∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹮敧慴楶攮獵灰汥浥湴慲礢‽•坨慴⁩猠祯畲⁦牵獴牡瑩潮潳琠牥污瑥搠瑯㼢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮潴桥爮摥獣物灴楯渢‽•佴桥爠䥳獵敳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹯瑨敲⹥湴特∠㴠≎潮攠潦⁴桥獥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹰敲景牭慮捥⹣慰瑩潮∠㴠≗桩捨⁩獳略⁡牥⁹潵⁥硰敲楥湣楮朿∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹰敲景牭慮捥⹣牡獨敳∠㴠≔桥⁡灰⁣牡獨敳爠晲敥穥猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮灥牦潲浡湣攮摥獣物灴楯渢‽•健牦潲浡湣攠䥳獵敳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹰敲景牭慮捥⹥湴特∠㴠≔桥⁡灰⁩猠獬潷Ⱐ扵杧礬爠捲慳桥猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮灥牦潲浡湣攮潴桥爢‽•乯湥映瑨敳攢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮灥牦潲浡湣攮灬慹扡捫∠㴠≖楤敯爠浥摩愠灬慹扡捫⁢畧猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮灥牦潲浡湣攮獬潷䱯慤楮朢‽•坥戠灡来猠潲⁳敡牣栠牥獵汴猠汯慤⁳汯睬礢㬊ਯ⨠䡥慤敲⁡扯癥⁩湰畴⁦楥汤‪⼊≦敥摢慣欮灯獩瑩癥⹦潲洮桥慤敲∠㴠≓桡牥⁄整慩汳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹰潳楴楶攮景牭⹰污捥桯汤敲∠㴠≗桡琠桡癥⁹潵⁢敥渠敮橯祩湧㼢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮灯獩瑩癥⹦潲洮獵灰汥浥湴慲礢‽•䅲攠瑨敲攠慮礠摥瑡楬猠祯痢肙搠汩步⁴漠獨慲攠睩瑨⁴桥⁴敡洿∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹰潳楴楶攮桥慤敲∠㴠≁睥獯浥⁴漠䡥慲™㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮灯獩瑩癥⹮潔桡湫猢‽•乯⁔桡湫猡⁉饭⁄潮攢㬊ਯ⨠䉵瑴潮⁥湣潵牡杩湧⁵獥猠瑯⁳桡牥⁤整慩汳⁡扯潵琠瑨敩爠晥敤扡捫‪⼊≦敥摢慣欮灯獩瑩癥⹳畢浩琢‽•卨慲攠䑥瑡楬猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮獴慲琮景潴敲∠㴠≙潵爠慮潮祭潵猠晥敤扡捫⁩猠業灯牴慮琠瑯⁵献∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹳瑡牴⹨敡摥爢‽•䱥瓢肙猠䝥琠却慲瑥搡∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹳瑡牴⹳異灬敭敮瑡特∠㴠≈潷⁷潵汤⁹潵⁣慴敧潲楺攠祯畲⁦敥摢慣欿∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹳畢浩瑴敤⹣潮晩牭慴楯渢‽•周慮欠奯甡⁆敥摢慣欠獵扭楴瑥搮∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹷敢獩瑥䱯慤楮朮摥獣物灴楯渢‽•坥扳楴攠䱯慤楮朠䥳獵敳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹷敢獩瑥䱯慤楮朮敮瑲礢‽•䍥牴慩渠睥扳楴敳⁤潮饴潡搠捯牲散瑬礢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮睥扳楴敌潡摩湧⹦潲洮灬慣敨潬摥爢‽•坨慴⁣潮瑥湴⁳敥浳⁴漠扥⁡晦散瑥搿∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹷敢獩瑥䱯慤楮朮景牭⹳異灬敭敮瑡特∠㴠≗桥牥⁡牥⁹潵⁳敥楮朠瑨敳攠楳獵敳㼢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮睥扳楴敌潡摩湧⹦潲洮畲汐污捥桯汤敲∠㴠≗桩捨⁷敢獩瑥⁨慳⁩獳略猿∻ਊ⼪⁕獥搠瑯⁩湤楣慴攠湵浢敲映敮瑲楥猠景畮搠慮搠灯獩瑩潮映瑨攠捵牲敮瑬礠癩敷敤湥㨠攮朮‱映㄰‪⼊≦楮摩湰慧攮捯畮琢‽•┱⑤映┲⑤∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晩湤楮灡来⹴楴汥∠㴠≆楮搠楮⁐慧攢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦楲敂畴瑯湁湩浡瑩潮⹡楲獴牥慭⹮慭攢‽•䅩牳瑲敡洢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦楲敂畴瑯湁湩浡瑩潮⹦楲敒楳楮朮湡浥∠㴠≉湦敲湯∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晩牥䉵瑴潮䅮業慴楯渮湯湥⹮慭攢‽•乯湥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晩牥䉵瑴潮䅮業慴楯渮睡瑥牓睩牬⹮慭攢‽•坨楲汰潯氢㬊ਯ⨠䑥獣物灴楯渠瑥硴⁡扯癥⁴桥⁓桡牥⁌楮欠扵瑴潮‪⼊≧整⹢牯睳敲⹯渭祯畲ⵤ敳歴潰ⵧ漭瑯∠㴠≏渠祯畲⁣潭灵瑥爬⁧漠瑯㨢㬊ਯ⨠呩瑬攠景爠瑨攠卨慲攠䑯睮汯慤⁌楮欠扵瑴潮‪⼊≧整⹢牯睳敲⹳桡牥⵬楮欢‽•卨慲攠䑯睮汯慤⁌楮欢㬊ਯ⨠䵥獳慧攠摩獰污祥搠楮⁴桥⁳桡牥⁡捴楯渠睨敮⁳桡物湧⁶楡⁥浡楬‪⼊≧整⹢牯睳敲⹳桡牥⵬楮欮浥獳慧攢‽•卥慲捨⁰物癡瑥汹⁡湤⁢汯捫⁴牡捫敲猠睩瑨⁴桥⁄畣歄畣歇漠摥獫瑯瀠扲潷獥爮⁖楳楴⁴桩猠汩湫渠祯畲⁣潭灵瑥爠瑯⁤潷湬潡搠瑯摡礮∻ਊ⼪⁔楴汥⁤楳灬慹敤⁩渠瑨攠獨慲攠慣瑩潮‪⼊≧整⹢牯睳敲⹳桡牥⵬楮欮瑩瑬攢‽•䝥琠䑵捫䑵捫䝯⁂牯睳敲⁦潲⁍慣爠坩湤潷猢㬊ਯ⨠呩瑬攠景爠瑨攠来琠摥獫瑯瀠扲潷獥爠晥慴畲攠⨯ਢ来琮扲潷獥爮瑩瑬攢‽•䝥琠䑵捫䑵捫䝯⁦潲⁍慣爠坩湤潷猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≨潭攮牯眮潮扯慲摩湧⹨敡摥爢‽•䅤搠䑵捫䑵捫䝯⁴漠祯畲⁨潭攠獣牥敮™㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≨潭攮牯眮牥浩湤敲⹭敳獡来∠㴠≁摤⁄畣歄畣歇漠瑯⁹潵爠摯捫⁦潲⁥慳礠慣捥獳™㬊ਯ⨠䡯浥⁩猠瑨楳⁣潮瑥硴⁩猠瑨攠扯瑴潭⁨潭攠牯眠⡤潣欩‪⼊≨潭攮牯眮牥浩湤敲⹴楴汥∠㴠≔慫攠䑵捫䑵捫䝯⁨潭攢㬊ਯ⨠周楳⁤敳捲楢敳⁥浰瑹⁴慢‪⼊≨潭敔慢⹳敡牣桁湤䙡癯物瑥猢‽•卥慲捨爠敮瑥爠慤摲敳猢㬊ਯ⨠䡯浥⁴慢⁴楴汥‪⼊≨潭敔慢⹴楴汥∠㴠≈潭攢㬊ਯ⨠佋⁴楴汥⁦潲⁩湶楴攠獣牥敮⁡汥牴⁤楳浩獳慬⁢畴瑯渠⨯ਢ楮癩瑥⹡汥牴⹯欮扵瑴潮∠㴠≏䬢㬊ਯ⨠䍯湴楮略⁢畴瑯渠潮⁡渠楮癩瑥⁤楡汯朠⨯ਢ楮癩瑥⹤楡汯朮捯湴楮略⹢畴瑯渢‽•䍯湴楮略∻ਊ⼪⁇整⁓瑡牴敤⁢畴瑯渠潮⁡渠楮癩瑥⁤楡汯朠⨯ਢ楮癩瑥⹤楡汯朮来琮獴慲瑥搮扵瑴潮∠㴠≇整⁓瑡牴敤∻ਊ⼪⁍敳獡来⁴漠獨潷⁡晴敲⁵獥爠敮瑥牳⁡渠畮牥捯杮楺敤⁩湶楴攠捯摥‪⼊≩湶楴攮摩慬潧⹵湲散潧湩穥搮捯摥⹭敳獡来∠㴠≗攠摩摮饴⁲散潧湩穥⁴桩猠䥮癩瑥⁃潤攮∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤䅤摂潯歭慲欢‽•䅤搠䉯潫浡牫∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤䅤摆慶潲楴攢‽•䅤搠䙡癯物瑥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤䉲潷獥牂慣欢‽•䉲潷獥⁂慣欢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≫敹䍯浭慮摂牯睳敲䙯牷慲搢‽•䉲潷獥⁆潲睡牤∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤䍬潳攢‽•䍬潳攢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≫敹䍯浭慮摃汯獥呡戢‽•䍬潳攠呡戢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≫敹䍯浭慮摆楮搢‽•䙩湤⁩渠偡来∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤䙩湤乥硴∠㴠≆楮搠乥硴∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤䙩湤偲敶楯畳∠㴠≆楮搠偲敶楯畳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤䙩牥∠㴠≃汥慲⁁汬⁔慢猠慮搠䑡瑡∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤䱯捡瑩潮∠㴠≓敡牣栠潲⁅湴敲⁁摤牥獳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤乥睔慢∠㴠≎敷⁔慢∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤乥硴呡戢‽•乥硴⁔慢∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤佰敮䥮乥睂慣歧牯畮摔慢∠㴠≏灥渠䱩湫⁩渠䉡捫杲潵湤∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤佰敮䥮乥睔慢∠㴠≏灥渠䱩湫⁩渠乥眠呡戢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≫敹䍯浭慮摐牥癩潵獔慢∠㴠≐牥癩潵猠呡戢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≫敹䍯浭慮摐物湴∠㴠≐物湴∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤剥汯慤∠㴠≒敬潡搢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≫敹䍯浭慮摓敬散琢‽•卥汥捴∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤卨潷䅬汔慢猢‽•卨潷⁁汬⁔慢猢㬊ਯ⨠偬敡獥⁰牥獥牶攠湥睬楮攠捨慲慣瑥爠⨯ਢ污畮捨獣牥敮坥汣潭敍敳獡来∠㴠≗敬捯浥⁴潜湄畣歄畣歇漡∻ਊ⼪⁓畭浡特⁴數琠景爠瑨攠浡捏匠扲潷獥爠睡楴汩獴‪⼊≭慣ⵢ牯睳敲⹷慩瑬楳琮獵浭慲礢‽•䑵捫䑵捫䝯⁦潲⁍慣⁨慳⁴桥⁳灥敤⁹潵敥搬⁴桥⁢牯睳楮朠晥慴畲敳⁹潵⁥硰散琬⁡湤⁣潭敳⁰慣步搠睩瑨畲⁢敳琭楮ⵣ污獳⁰物癡捹⁥獳敮瑩慬献∻ਊ⼪⁔楴汥⁦潲⁴桥慣体⁷慩瑬楳琠湯瑩晩捡瑩潮‪⼊≭慣⵷慩瑬楳琮慶慩污扬攮湯瑩晩捡瑩潮⹴楴汥∠㴠≄畣歄畣歇漠景爠䵡挠楳⁲敡摹™㬊ਯ⨠呩瑬攠景爠瑨攠捯灹⁡捴楯渠⨯ਢ浡挭睡楴汩獴⹣潰礢‽•䍯灹∻ਊ⼪⁄敳捲楰瑩潮⁴數琠慢潶攠瑨攠卨慲攠䱩湫⁢畴瑯渠⨯ਢ浡挭睡楴汩獴⹪潩渭睡楴汩獴⵳捲敥渮潮⵹潵爭捯浰畴敲ⵧ漭瑯∠㴠≏渠祯畲⁗楮摯睳⁣潭灵瑥爬⁧漠瑯㨢㬊ਯ⨠䑥獣物灴楯渠瑥硴⁡扯癥⁴桥⁓桡牥⁌楮欠扵瑴潮‪⼊≭慣⵷慩瑬楳琮橯楮⵷慩瑬楳琭獣牥敮⹯渭祯畲⵭慣ⵧ漭瑯∠㴠≏渠祯畲⁍慣Ⱐ杯⁴漺∻ਊ⼪⁔楴汥⁦潲⁴桥⁓桡牥⁌楮欠扵瑴潮‪⼊≭慣⵷慩瑬楳琮橯楮⵷慩瑬楳琭獣牥敮⹳桡牥⵬楮欢‽•卨慲攠䱩湫∻ਊ⼪⁔楴汥⁦潲⁴桥⁊潩渠坡楴汩獴⁳捲敥渠⨯ਢ浡挭睡楴汩獴⹪潩渭睡楴汩獴⵳捲敥渮瑲礭摵捫摵捫杯ⵦ潲⵭慣∠㴠≇整⁄畣歄畣歇漠景爠䵡挡∻ਊ⼪⁔楴汥⁦潲⁴桥慣体⁷慩瑬楳琠扵瑴潮⁲敤楲散瑩湧⁴漠坩湤潷猠睡楴汩獴‪⼊≭慣⵷慩瑬楳琮橯楮⵷慩瑬楳琭獣牥敮⹷楮摯睳⵷慩瑬楳琢‽•䱯潫楮朠景爠瑨攠坩湤潷猠癥牳楯渿∻ਊ⼪⁔楴汥⁦潲⁴桥⁳整瑩湧猠獵扴楴汥‪⼊≭慣⵷慩瑬楳琮獥瑴楮杳⹢牯睳攭灲楶慴敬礢‽•䉲潷獥⁰物癡瑥汹⁷楴栠潵爠慰瀠景爠䵡挢㬊ਯ⨠䵥獳慧攠畳敤⁷桥渠獨慲楮朠瑯⁩䵥獳慧攠⨯ਢ浡挭睡楴汩獴⹳桡牥⵳桥整⹭敳獡来∠㴠≒敡摹⁴漠獴慲琠扲潷獩湧⁰物癡瑥汹渠䵡挿ਊ噩獩琠瑨楳⁕剌渠祯畲⁍慣⁴漠摯睮汯慤㨊桴瑰猺⼯摵捫摵捫杯⹣潭⽭慣∻ਊ⼪⁔楴汥⁦潲⁴桥⁳桡牥⁳桥整⁥湴特‪⼊≭慣⵷慩瑬楳琮獨慲攭獨敥琮瑩瑬攢‽•䑵捫䑵捫䝯⁦潲⁍慣∻ਊ⼪⁔楴汥⁦潲⁴桥⁍慣⁗慩瑬楳琠晥慴畲攠⨯ਢ浡挭睡楴汩獴⹴楴汥∠㴠≄畣歄畣歇漠䅰瀠景爠䵡挢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≭敮甮扵瑴潮⹨楮琢‽•䉲潷獩湧⁍敮產㬊ਯ⨠呩瑬攠景爠扡捫⁢畴瑯渠楮慶楧慴楯渠扡爠⨯ਢ湡癢慲⹢慣欭扵瑴潮⹴楴汥∠㴠≂慣欢㬊ਯ⨠呩瑬攠景爠湥硴⁢畴瑯渠楮慶楧慴楯渠扡爠瑯⁰牯杲敳猠景牷慲搠⨯ਢ湡癢慲⹮數琭扵瑴潮⹴楴汥∠㴠≎數琢㬊ਯ⨠䙩湩獨⁥摩瑩湧⁢潯歭慲歳⁢畴瑯渠⨯ਢ湡癩条瑩潮⹴楴汥⹤潮攢‽•䑯湥∻ਊ⼪⁅摩琠扵瑴潮‪⼊≮慶楧慴楯渮瑩瑬攮敤楴∠㴠≅摩琢㬊ਯ⨠却物湧⁩湤楣慴楮朠乥瑐⁩猠獮潯穩湧⁷桥渠癩敷敤⁦牯洠瑨攠獥瑴楮杳⁳捲敥渠⨯ਢ湥瑐⹣敬氮獮潯穩湧∠㴠≓湯潺楮朢㬊ਯ⨠呩瑬攠景爠瑨攠䑵捫䑵捫䝯⁖偎⁦敡瑵牥‪⼊≮整倮瑩瑬攢‽•䑵捫䑵捫䝯⁖偎∻ਊ⼪⁔桥⁢潤礠潦⁴桥潴楦楣慴楯渠睨敮⁐物癡捹⁐牯⁳畢獣物灴楯渠數灩牥搠⨯ਢ湥瑷潲欮灲潴散瑩潮⹥湴楴汥浥湴⹥硰楲敤⹮潴楦楣慴楯渮扯摹∠㴠≖偎⁤楳捯湮散瑥搠摵攠瑯⁥硰楲敤⁳畢獣物灴楯渮⁓畢獣物扥⁴漠偲楶慣礠偲漠瑯⁲散潮湥捴⁄畣歄畣歇漠噐丮∻ਊ⼪⁔桥⁢潤礠潦⁴桥潴楦楣慴楯渠獨潷渠睨敮⁎整睯牫⁐牯瑥捴楯渠晡楬猠瑯⁲散潮湥捴‪⼊≮整睯牫⹰牯瑥捴楯渮晡楬畲攮湯瑩晩捡瑩潮⹢潤礢‽•乥瑷潲欠偲潴散瑩潮⁦慩汥搠瑯⁣潮湥捴⸠偬敡獥⁴特⁡条楮慴敲⸢㬊ਯ⨠呩瑬攠景爠瑨攠噐丠䙁儠獣牥敮⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹦慱⹴楴汥∠㴠≄畣歄畣歇漠噐丠䙁儢㬊ਯ⨠周攠扯摹映瑨攠湯瑩晩捡瑩潮⁳桯睮⁷桥渠乥瑷潲欠偲潴散瑩潮❳⁣潮湥捴楯渠楳⁩湴敲牵灴敤‪⼊≮整睯牫⹰牯瑥捴楯渮楮瑥牲異瑥搮湯瑩晩捡瑩潮⹢潤礢‽•乥瑷潲欠偲潴散瑩潮⁷慳⁩湴敲牵灴敤⸠䅴瑥浰瑩湧⁴漠牥捯湮散琠湯眮⸮∻ਊ⼪⁍敳獡来⁦潲⁴桥整睯牫⁰牯瑥捴楯渠楮癩瑥⁤楡汯朠⨯ਢ湥瑷潲欮灲潴散瑩潮⹩湶楴攮摩慬潧⹭敳獡来∠㴠≅湴敲⁹潵爠楮癩瑥⁣潤攠瑯⁧整⁳瑡牴敤⸢㬊ਯ⨠呩瑬攠景爠瑨攠湥瑷潲欠灲潴散瑩潮⁩湶楴攠獣牥敮‪⼊≮整睯牫⹰牯瑥捴楯渮楮癩瑥⹤楡汯朮瑩瑬攢‽•奯痢肙牥⁩湶楴敤⁴漠瑲礠䑵捫䑵捫䝯⁖偎∻ਊ⼪⁐牯浰琠景爠瑨攠湥瑷潲欠灲潴散瑩潮⁩湶楴攠捯摥⁴數琠晩敬搠⨯ਢ湥瑷潲欮灲潴散瑩潮⹩湶楴攮晩敬搮灲潭灴∠㴠≉湶楴攠䍯摥∻ਊ⼪⁍敳獡来⁦潲⁴桥整睯牫⁰牯瑥捴楯渠楮癩瑥⁳畣捥獳⁶楥眠⨯ਢ湥瑷潲欮灲潴散瑩潮⹩湶楴攮獵捣敳献浥獳慧攢‽•䡩摥⁹潵爠汯捡瑩潮⁦牯洠睥扳楴敳⁡湤⁣潮捥慬⁹潵爠潮汩湥⁡捴楶楴礠晲潭⁉湴敲湥琠灲潶楤敲猠慮搠潴桥牳渠祯畲整睯牫⸢㬊ਯ⨠呩瑬攠景爠瑨攠湥瑷潲欠灲潴散瑩潮⁩湶楴攠獵捣敳猠癩敷‪⼊≮整睯牫⹰牯瑥捴楯渮楮癩瑥⹳畣捥獳⹴楴汥∠㴠≓畣捥獳℠奯痢肙牥⁩渮∻ਊ⼪⁔桥⁴楴汥映瑨攠湯瑩晩捡瑩潮猠獨潷渠晲潭⁎整睯牫⁐牯瑥捴楯渠⨯ਢ湥瑷潲欮灲潴散瑩潮⹮潴楦楣慴楯渮瑩瑬攢‽•䑵捫䑵捫䝯∻ਊ⼪⁔楴汥⁴數琠景爠慮⁩体ⁱ畩捫⁡捴楯渠瑨慴灥湳⁖偎⁳整瑩湧猠⨯ਢ湥瑷潲欮灲潴散瑩潮⹱畩捫ⵡ捴楯渮潰敮⵶灮∠㴠≏灥渠噐丢㬊ਯ⨠周攠扯摹映瑨攠湯瑩晩捡瑩潮⁷桥渠瑨攠噐丠楳⁳湯潺敤Ⱐ睩瑨⁡⁤畲慴楯渠獴物湧⁡猠灡牡浥瑥爠⡥⹧Ⱐ㌰楮畴敳⤠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳湯潺敤⹮潴楦楣慴楯渮扯摹∠㴠≖偎⁳湯潺敤⁦潲‥䀢㬊ਯ⨠周攠污扥氠景爠睨敮⁎整倠噐丠楳⁣潮湥捴敤⁰汵猠瑨攠汥湧瑨映瑩浥⁣潮湥捴敤⁡猠愠景牭慴瑥爠䡈㩍䴺卓⁳瑲楮朠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献捯湮散瑥搮景牭慴∠㴠≃潮湥捴敤⃂뜠╀∻ਊ⼪⁔桥慢敬⁦潲⁴桥⁎整倠噐丠睨敮⁣潮湥捴楮朠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献捯湮散瑩湧∠㴠≃潮湥捴楮朮⸮∻ਊ⼪⁔桥慢敬⁦潲⁴桥⁎整倠噐丠睨敮⁤楳捯湮散瑥搠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献摩獣潮湥捴敤∠㴠≎潴⁣潮湥捴敤∻ਊ⼪⁔桥慢敬⁦潲⁴桥⁎整倠噐丠睨敮⁤楳捯湮散瑩湧‪⼊≮整睯牫⹰牯瑥捴楯渮獴慴畳⹤楳捯湮散瑩湧∠㴠≄楳捯湮散瑩湧⸮⸢㬊ਯ⨠䵥獳慧攠污扥氠瑥硴⁦潲⁴桥⁳瑡瑵猠癩敷⁷桥渠噐丠楳⁤楳捯湮散瑥搠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献桥慤敲⹭敳獡来⹯晦∠㴠≃潮湥捴⁴漠獥捵牥⁡汬映祯畲⁤敶楣既肙獜湉湴敲湥琠瑲慦晩挮∻ਊ⼪⁍敳獡来慢敬⁴數琠景爠瑨攠獴慴畳⁶楥眠睨敮⁖偎⁩猠摩獣潮湥捴敤‪⼊≮整睯牫⹰牯瑥捴楯渮獴慴畳⹨敡摥爮浥獳慧攮潮∠㴠≁汬⁤敶楣攠䥮瑥牮整⁴牡晦楣⁩猠扥楮朠獥捵牥摜湴桲潵杨⁴桥⁖偎⸢㬊ਯ⨠䡥慤敲⁴楴汥慢敬⁴數琠景爠瑨攠獴慴畳⁶楥眠睨敮⁖偎⁩猠摩獣潮湥捴敤‪⼊≮整睯牫⹰牯瑥捴楯渮獴慴畳⹨敡摥爮瑩瑬攮潦昢‽•䑵捫䑵捫䝯⁖偎⁩猠佦昢㬊ਯ⨠䡥慤敲⁴楴汥慢敬⁴數琠景爠瑨攠獴慴畳⁶楥眠睨敮⁖偎⁩猠捯湮散瑥搠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献桥慤敲⹴楴汥⹯渢‽•䑵捫䑵捫䝯⁖偎⁩猠佮∻ਊ⼪⁈敡摥爠瑩瑬攠污扥氠瑥硴⁦潲⁴桥⁳瑡瑵猠癩敷⁷桥渠噐丠楳⁳湯潺楮朠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献桥慤敲⹴楴汥⹳湯潺敤∠㴠≄畣歄畣歇漠噐丠楳⁓湯潺敤∻ਊ⼪⁔桥⁳瑡瑵猠癩敷‧卨慲攠䙥敤扡捫✠扵瑴潮⁷桩捨⁩猠獨潷渠楮汩湥渠瑨攠獴慴畳⁶楥眠慦瑥爠瑨攠瑥浰潲慲礠晲敥⁵獥⁦潯瑥爠瑥硴‪⼊≮整睯牫⹰牯瑥捴楯渮獴慴畳⹭敮甮獨慲攮晥敤扡捫∠㴠≓桡牥⁆敥摢慣欢㬊ਯ⨠周攠污扥氠景爠瑨攠乥瑐⁖偎⁷桥渠灡畳敤‪⼊≮整睯牫⹰牯瑥捴楯渮獴慴畳⹰慵獥搢‽•偡畳敤∻ਊ⼪⁔桥慢敬⁦潲⁷桥渠乥瑐⁖偎⁩猠獮潯穩湧⁰汵猠瑨攠汥湧瑨映瑩浥⁲敭慩湩湧⁦潲浡瑴敤⁡猠✰㨰〧‪⼊≮整睯牫⹰牯瑥捴楯渮獴慴畳⹳湯潺楮朮景牭慴∠㴠≓湯潺楮本‥䀠牥浡楮楮朢㬊ਯ⨠卮潯穥⁢畴瑯渠瑩瑬攠獨潷渠楮⁎整睯牫偲潴散瑩潮❳⁳瑡瑵猠癩敷⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献癩敷⹡捴楯渮獮潯穥∠㴠≓湯潺攠䙯爠㈰⁍楮畴敳∻ਊ⼪⁗慫攠啰⁢畴瑯渠瑩瑬攠獨潷渠楮⁎整睯牫偲潴散瑩潮❳⁳瑡瑵猠癩敷⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献癩敷⹡捴楯渮睡步⵵瀢‽•坡步⁕瀢㬊ਯ⨠䍯湮散瑩潮⁤整慩汳慢敬⁳桯睮⁩渠乥瑷潲歐牯瑥捴楯渧猠獴慴畳⁶楥眮‪⼊≮整睯牫⹰牯瑥捴楯渮獴慴畳⹶楥眮捯湮散瑩潮⹤整慩汳∠㴠≃潮湥捴楯渠䑥瑡楬猢㬊ਯ⨠䍵獴潭⁄乓慢敬⁳桯睮⁩渠乥瑷潲歐牯瑥捴楯渧猠獴慴畳⁶楥眮‪⼊≮整睯牫⹰牯瑥捴楯渮獴慴畳⹶楥眮捵獴潭⹤湳∠㴠≄乓⁓敲癥爢㬊ਯ⨠䝥湥物挠捯湮散瑩潮⁦慩汥搠敲牯爠浥獳慧攠獨潷渠楮⁎整睯牫偲潴散瑩潮❳⁳瑡瑵猠癩敷⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献癩敷⹥牲潲⹣潮湥捴楯渮晡楬敤⹭敳獡来∠㴠≐汥慳攠瑲礠慧慩渠污瑥爮∻ਊ⼪⁇敮敲楣⁣潮湥捴楯渠晡楬敤⁥牲潲⁴楴汥⁳桯睮⁩渠乥瑷潲歐牯瑥捴楯渧猠獴慴畳⁶楥眮‪⼊≮整睯牫⹰牯瑥捴楯渮獴慴畳⹶楥眮敲牯爮捯湮散瑩潮⹦慩汥搮瑩瑬攢‽•䙡楬敤⁴漠䍯湮散琮∻ਊ⼪⁉倠䅤摲敳猠污扥氠獨潷渠楮⁎整睯牫偲潴散瑩潮❳⁳瑡瑵猠癩敷⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献癩敷⹩瀮慤摲敳猢‽•䥐⁁摤牥獳∻ਊ⼪⁌潣慴楯渠污扥氠獨潷渠楮⁎整睯牫偲潴散瑩潮❳⁳瑡瑵猠癩敷⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献癩敷⹬潣慴楯渢‽•䱯捡瑩潮∻ਊ⼪⁌慢敬⁳桯睮渠瑨攠瑩瑬攠潦⁴桥⁳整瑩湧猠獥捴楯渠楮⁎整睯牫偲潴散瑩潮❳⁳瑡瑵猠癩敷⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献癩敷⹳整瑩湧献獥捴楯渮瑩瑬攢‽•䵡湡来∻ਊ⼪⁔楴汥慢敬⁴數琠景爠瑨攠獴慴畳⁶楥眠睨敮整倠楳⁤楳捯湮散瑥搠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献癩敷⹴楴汥∠㴠≖偎∻ਊ⼪⁔桥⁢潤礠潦⁴桥潴楦楣慴楯渠獨潷渠睨敮⁎整睯牫⁐牯瑥捴楯渠牥捯湮散瑳⁳畣捥獳晵汬礠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳畣捥獳⹮潴楦楣慴楯渮扯摹∠㴠≎整睯牫⁐牯瑥捴楯渠楳⁏渮⁙潵爠汯捡瑩潮⁡湤湬楮攠慣瑩癩瑹⁡牥⁰牯瑥捴敤⸢㬊ਯ⨠周攠扯摹映瑨攠湯瑩晩捡瑩潮⁳桯睮⁷桥渠乥瑷潲欠偲潴散瑩潮⁣潮湥捴猠獵捣敳獦畬汹⁷楴栠瑨攠捩瑹‫⁳瑡瑥⽣潵湴特⁡猠景牭慴瑥搠灡牡浥瑥爠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳畣捥獳⹮潴楦楣慴楯渮獵扴楴汥⹩湣汵摩湧⹳敲癥牌潣慴楯渢‽•副畴楮朠摥癩捥⁴牡晦楣⁴桲潵杨‥䀮∻ਊ⼪⁔桥⁢潤礠潦⁴桥潴楦楣慴楯渠獨潷渠睨敮⁎整睯牫⁐牯瑥捴楯渠捯湮散瑳⁳畣捥獳晵汬礠睩瑨⁴桥⁣楴礠⬠獴慴支捯畮瑲礠慳⁦潲浡瑴敤⁰慲慭整敲‪⼊≮整睯牫⹰牯瑥捴楯渮獵捣敳献湯瑩晩捡瑩潮⹳畢瑩瑬攮獮潯穥⹥湤敤⹩湣汵摩湧⹳敲癥牌潣慴楯渢‽•噐丠獮潯穥⁨慳⁥湤敤⸠副畴楮朠摥癩捥⁴牡晦楣⁴桲潵杨‥䀮∻ਊ⼪⁔楴汥⁦潲⁴桥⁢畴瑯渠瑯楮欠瑯⁴桥⁩体⁡灰⁳整瑩湧猠慮搠敮慢汥潴楦楣慴楯湳⁡灰⵷楤攮‪⼊≮整睯牫⹰牯瑥捴楯渮瑵牮⹯渮湯瑩晩捡瑩潮献扵瑴潮⹴楴汥∠㴠≔畲渠佮⁎潴楦楣慴楯湳∻ਊ⼪⁆潯瑥爠瑥硴⁵湤敲⁴桥⁢畴瑯渠瑯楮欠瑯⁴桥⁩体⁡灰⁳整瑩湧猠慮搠敮慢汥潴楦楣慴楯湳⁡灰⵷楤攮‪⼊≮整睯牫⹰牯瑥捴楯渮瑵牮⹯渮湯瑩晩捡瑩潮献獥捴楯渮景潴敲∠㴠≁汬潷⁄畣歄畣歇漠瑯潴楦礠祯甠楦⁹潵爠捯湮散瑩潮⁤牯灳爠噐丠獴慴畳⁣桡湧敳⸢㬊ਯ⨠呩瑬攠潦⁴桥⁁扯畴⁳散瑩潮⁩渠瑨攠噐丠獴慴畳⁳捲敥渠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹡扯畴∠㴠≁扯畴∻ਊ⼪⁓散瑩潮⁨敡摥爠景爠瑨攠瑯杧汥⁦潲⁖偎潴楦楣慴楯湳⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹡汥牴献獥捴楯渮桥慤敲∠㴠≎潴楦楣慴楯湳∻ਊ⼪⁌楳琠獥捴楯渠景潴敲⁦潲⁴桥⁴潧杬攠景爠噐丠慬敲瑳⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹡汥牴献瑯杧汥⹳散瑩潮⹦潯瑥爢‽•䝥琠湯瑩晩敤⁩映祯畲⁣潮湥捴楯渠摲潰猠潲⁖偎⁳瑡瑵猠捨慮来献∻ਊ⼪⁔楴汥⁦潲⁴桥⁴潧杬攠景爠噐丠湯瑩晩捡瑩潮献‪⼊≮整睯牫⹰牯瑥捴楯渮癰渮慬敲瑳⹴潧杬攮瑩瑬攢‽•噐丠乯瑩晩捡瑩潮猢㬊ਯ⨠呩瑬攠景爠瑨攠摡瑡⁶潬畭攠獥捴楯渠楮⁴桥⁖偎⁳瑡瑵猠獣牥敮‪⼊≮整睯牫⹰牯瑥捴楯渮癰渮摡瑡⵶潬畭攢‽•䑡瑡⁖潬畭攢㬊ਯ⨠䙯潴敲⁴數琠景爠瑨攠䕸捬畤攠䱯捡氠乥瑷潲歳⁳整瑩湧⁩瑥洮‪⼊≮整睯牫⹰牯瑥捴楯渮癰渮數捬畤攮汯捡氮湥瑷潲歳⹳整瑩湧⹦潯瑥爢‽•䱥琠汯捡氠瑲慦晩挠批灡獳⁴桥⁖偎⁡湤⁣潮湥捴⁴漠摥癩捥猠潮⁹潵爠汯捡氠湥瑷潲欬楫攠愠灲楮瑥爮∻ਊ⼪⁈敡摥爠瑥硴⁦潲⁴桥⁅硣汵摥⁌潣慬⁎整睯牫猠獥瑴楮朠楴敭⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹥硣汵摥⹬潣慬⹮整睯牫献獥瑴楮朮桥慤敲∠㴠≇敮敲慬∻ਊ⼪⁔楴汥⁦潲⁴桥⁅硣汵摥⁌潣慬⁎整睯牫猠獥瑴楮朠楴敭⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹥硣汵摥⹬潣慬⹮整睯牫献獥瑴楮朮瑩瑬攢‽•䕸捬畤攠䱯捡氠乥瑷潲歳∻ਊ⼪⁔楴汥⁦潲⁴桥⁖偎⁌潣慴楯渠獣牥敮❳⁁汬⁃潵湴物敳⁳散瑩潮⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹬潣慴楯渮慬氮捯畮瑲楥献獥捴楯渮瑩瑬攢‽•䅬氠䍯畮瑲楥猢㬊ਯ⨠䑥獣物灴楯渠潦⁴桥潣慴楯渠瑹灥⁩渠瑨攠噐丠獴慴畳⁳捲敥渠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹬潣慴楯渮捯湮散瑥搢‽•䍯湮散瑥搠䱯捡瑩潮∻ਊ⼪⁓畢瑩瑬攠潦⁣潵湴物敳⁩瑥洠睨敮⁴桥牥⁡牥畬瑩灬攠捩瑩敳Ⱐ數慭灬攠㨠‪⼊≮整睯牫⹰牯瑥捴楯渮癰渮汯捡瑩潮⹣潵湴特⹩瑥洮景牭慴瑥搮捩瑩敳⹣潵湴∠㴠∥搠捩瑩敳∻ਊ⼪⁄敳捲楰瑩潮映瑨攠汯捡瑩潮⁴祰攠楮⁴桥⁖偎⁳瑡瑵猠獣牥敮‪⼊≮整睯牫⹰牯瑥捴楯渮癰渮汯捡瑩潮⹮敡牥獴∠㴠∨乥慲敳琩∻ਊ⼪⁆潯瑥爠摥獣物扩湧⁴桥⁖偎⁌潣慴楯渠獣牥敮❳⁒散潭浥湤敤⁳散瑩潮⁷桩捨畳琠桡猠乥慲敳琠䅶慩污扬攮‪⼊≮整睯牫⹰牯瑥捴楯渮癰渮汯捡瑩潮⹲散潭浥湤敤⹳散瑩潮⹦潯瑥爢‽•䅵瑯浡瑩捡汬礠捯湮散琠瑯⁴桥敡牥獴⁳敲癥爠睥⁣慮⁦楮搮∻ਊ⼪⁔楴汥⁦潲⁴桥⁖偎⁌潣慴楯渠獣牥敮❳⁒散潭浥湤敤⁳散瑩潮⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹬潣慴楯渮牥捯浭敮摥搮獥捴楯渮瑩瑬攢‽•剥捯浭敮摥搢㬊ਯ⨠䑥獣物灴楯渠潦⁴桥潣慴楯渠瑹灥⁩渠瑨攠噐丠獴慴畳⁳捲敥渠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹬潣慴楯渮獥汥捴敤∠㴠≓敬散瑥搠䱯捡瑩潮∻ਊ⼪⁓畢瑩瑬攠景爠瑨攠灲敦敲牥搠汯捡瑩潮⁩瑥洠瑨慴⁦潲浡瑳⁡⁣楴礠慮搠捯畮瑲礮⁅⹧⁃桩捡杯Ⱐ啮楴敤⁓瑡瑥猠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹬潣慴楯渮獵扴楴汥⹦潲浡瑴敤⹣楴礮慮搮捯畮瑲礢‽•┱⑀Ⱐ┲⑀∻ਊ⼪⁔楴汥⁦潲⁴桥⁖偎⁌潣慴楯渠獣牥敮⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹬潣慴楯渮瑩瑬攢‽•噐丠䱯捡瑩潮∻ਊ⼪⁔楴汥⁦潲⁴桥⁖偎⁎潴楦楣慴楯湳慮慧敭敮琠獣牥敮⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹮潴楦楣慴楯湳⹴楴汥∠㴠≖偎⁎潴楦楣慴楯湳∻ਊ⼪⁌慢敬⁦潲⁴桥⁐牥晥牲敤⁌潣慴楯渠噐丠卥瑴楮杳⁩瑥洠睨敮⁴桥敡牥獴⁡癡楬慢汥潣慴楯渠楳⁳敬散瑥搮‪⼊≮整睯牫⹰牯瑥捴楯渮癰渮灲敦敲牥搮汯捡瑩潮⹮敡牥獴∠㴠≎敡牥獴⁌潣慴楯渢㬊ਯ⨠呩瑬攠景爠瑨攠偲敦敲牥搠䱯捡瑩潮⁖偎⁓整瑩湧猠楴敭⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹰牥晥牲敤⹬潣慴楯渮瑩瑬攢‽•偲敦敲牥搠䱯捡瑩潮∻ਊ⼪⁆潯瑥爠瑥硴⁦潲⁴桥⁄乓⁳敲癥爠獥瑴楮朠楴敭⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹳散畲攮摮献獥瑴楮朮景潴敲∠㴠≄畣歄畣歇漠牯畴敳⁄乓ⁱ略物敳⁴桲潵杨畲⁄乓⁳敲癥牳⁳漠祯畲⁩湴敲湥琠灲潶楤敲⁣慮❴⁳敥⁷桡琠睥扳楴敳⁹潵⁶楳楴⸢㬊ਯ⨠呩瑬攠景爠瑨攠䙁儠牯眠楮⁴桥⁖偎⁳瑡瑵猠獣牥敮⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹳整瑩湧献晡焢‽•䙁关⁡湤⁓異灯牴∻ਊ⼪⁔楴汥⁦潲⁴桥⁦敥摢慣欠牯眠楮⁴桥⁖偎⁳瑡瑵猠獣牥敮⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹳整瑩湧献獨慲攭晥敤扡捫∠㴠≓桡牥⁖偎⁆敥摢慣欢㬊ਯ⨠呩瑬攠景爠瑨攠噐丠卥瑴楮杳⁳捲敥渮‪⼊≮整睯牫⹰牯瑥捴楯渮癰渮獥瑴楮杳⹴楴汥∠㴠≖偎⁓整瑩湧猢㬊ਯ⨠䥮景牭慴楯渠浥獳慧攠慢潵琠乥眠呡戠偡来⁲敤敳楧渠⨯ਢ湥眮瑡戮灡来⹩湴牯⹭敳獡来⹢潤礢‽•䍵獴潭楺攠祯畲⁆慶潲楴敳⁡湤⁧漭瑯⁦敡瑵牥献⁒敯牤敲⁴桩湧猠潲⁨楤攠瑨敭⁴漠步数⁩琠捬敡渮∻ਊ⼪⁔楴汥映楮景牭慴楯渠浥獳慧攠慢潵琠乥眠呡戠偡来⁲敤敳楧渠⨯ਢ湥眮瑡戮灡来⹩湴牯⹭敳獡来⹴楴汥∠㴠≙潵爠乥眠呡戠偡来⁩献⸮⁎敷™㬊ਯ⨠䙯潴敲映瑨攠杲潵瀠慬汯睩湧⁦潲⁳整瑩湧⁵瀠湥眠瑡戠灡来⁳散瑩潮猠⨯ਢ湥眮瑡戮灡来⹳整瑩湧献獥捴楯湳⹤敳捲楰瑩潮∠㴠≓桯眬⁨楤攬⁡湤⁲敯牤敲⁳散瑩潮猠潮⁴桥敷⁴慢⁰慧攢㬊ਯ⨠䡥慤敲⁴楴汥映瑨攠杲潵瀠慬汯睩湧⁦潲⁳整瑩湧⁵瀠湥眠瑡戠灡来⁳散瑩潮猠⨯ਢ湥眮瑡戮灡来⹳整瑩湧献獥捴楯湳⹨敡摥爮瑩瑬攢‽•卅䍔䥏乓∻ਊ⼪⁈敡摥爠瑩瑬攠潦⁴桥⁳桯牴捵瑳⁩渠乥眠呡戠偡来⁰牥晥牥湣敳⸠⨯ਢ湥眮瑡戮灡来⹳整瑩湧献獨潲瑣畴献桥慤敲⹴楴汥∠㴠≓䡏剔䍕呓∻ਊ⼪⁔楴汥映乥眠呡戠偡来⁰牥晥牥湣敳⁰慧攮‪⼊≮敷⹴慢⹰慧攮獥瑴楮杳⹴楴汥∠㴠≃畳瑯浩穥⁎敷⁔慢∻ਊ⼪⁓桯牴捵琠瑩瑬攠汥慤楮朠瑯⁁䤠䍨慴‪⼊≮敷⹴慢⹰慧攮獨潲瑣畴⹡椮捨慴∠㴠≁䤠䍨慴∻ਊ⼪⁓桯牴捵琠瑩瑬攠汥慤楮朠瑯⁂潯歭慲歳‪⼊≮敷⹴慢⹰慧攮獨潲瑣畴⹢潯歭慲歳∠㴠≂潯歭慲歳∻ਊ⼪⁓桯牴捵琠瑩瑬攠汥慤楮朠瑯⁄潷湬潡摳‪⼊≮敷⹴慢⹰慧攮獨潲瑣畴⹤潷湬潡摳∠㴠≄潷湬潡摳∻ਊ⼪⁓桯牴捵琠瑩瑬攠汥慤楮朠瑯⁐慳獷潲摳‪⼊≮敷⹴慢⹰慧攮獨潲瑣畴⹰慳獷潲摳∠㴠≐慳獷潲摳∻ਊ⼪⁓桯牴捵琠瑩瑬攠汥慤楮朠瑯⁡灰⁳整瑩湧猠⨯ਢ湥眮瑡戮灡来⹳桯牴捵琮獥瑴楮杳∠㴠≓整瑩湧猢㬊ਯ⨠呥硴⁳桯睮渠瑨攠晡癯物瑥猠楮景⁴潯汴楰‪⼊≮敷⹴慢⹰慧攮瑯潬瑩瀮扯摹∠㴠≏渠慮礠獩瑥Ⱐ潰敮⁴桥⃢肢ꋢ肢敮甠慮搠獥汥捴‪⩁摤⁆慶潲楴攪⨠瑯⁡摤⁩琠瑯⁹潵爠湥眠瑡戠灡来⸢㬊ਯ⨠䑯潴⁴牡湳污瑥‭⁳瑲楮杳摩捴⁥湴特‪⼊≮畭扥爮潦⹴慢猢‽•湵浢敲⹯昮瑡扳∻ਊ⼪⁔數琠摩獰污祥搠潮潴楦楣慴楯渠慰灥慲楮朠楮⁴桥⁡摤牥獳⁢慲⁷桥渠瑨攠扲潷獥爠⁤楳浩獳敤⁴桥⁣潯歩攠灯灵瀠慵瑯浡瑩捡汬礠牥橥捴楮朠楴‪⼊≯浮楢慲⹮潴楦楣慴楯渮捯潫楥猭浡湡来搢‽•䍯潫楥猠䵡湡来搢㬊ਯ⨠呥硴⁤楳灬慹敤渠湯瑩晩捡瑩潮⁡灰敡物湧⁩渠瑨攠慤摲敳猠扡爠睨敮⁴桥⁢牯睳敲†桩摥猠愠捯潫楥⁰潰異‪⼊≯浮楢慲⹮潴楦楣慴楯渮灯灵瀭桩摤敮∠㴠≐潰⵵瀠䡩摤敮∻ਊ⼪⁂畴瑯渠瑯⁣桡湧攠瑨攠摥晡畬琠扲潷獥爠⨯ਢ潮扯慲摩湧⹢牯睳敲献捴愢‽•䍨潯獥⁙潵爠䉲潷獥爢㬊ਯ⨠䵥獳慧攠瑯⁨楧桬楧桴⁢牯睳敲⁣慰慢楬楴礠潦⁢汯捫楮朠捯潫楥⁰潰⵵灳‪⼊≯湢潡牤楮朮扲潷獥牳⹦敡瑵牥献捯潫楥偯灵灳⹴楴汥∠㴠≂汯捫⁣潯歩攠灯瀭異猢㬊ਯ⨠䵥獳慧攠瑯⁨楧桬楧桴⁢牯睳敲⁣慰慢楬楴礠潦⁢汯捫楮朠捲敥灹⁡摳‪⼊≯湢潡牤楮朮扲潷獥牳⹦敡瑵牥献捲敥灹䅤献瑩瑬攢‽•䉬潣欠捲敥灹⁡摳∻ਊ⼪⁍敳獡来⁴漠桩杨汩杨琠扲潷獥爠捡灡扩汩瑹晳睩晴汹⁥牡獥⁢牯睳楮朠摡瑡‪⼊≯湢潡牤楮朮扲潷獥牳⹦敡瑵牥献敲慳敂牯睳楮杄慴愮瑩瑬攢‽•卷楦瑬礠敲慳攠扲潷獩湧⁤慴愢㬊ਯ⨠䵥獳慧攠瑯⁨楧桬楧桴⁢牯睳敲⁣慰慢楬楴礠潦⁰物癡瑥⁳敡牣桥猠⨯ਢ潮扯慲摩湧⹢牯睳敲献晥慴畲敳⹰物癡瑥卥慲捨⹴楴汥∠㴠≓敡牣栠灲楶慴敬礠批⁤敦慵汴∻ਊ⼪⁍敳獡来⁴漠桩杨汩杨琠扲潷獥爠捡灡扩汩瑹晢汯捫楮朠㍲搠灡牴礠瑲慣步牳‪⼊≯湢潡牤楮朮扲潷獥牳⹦敡瑵牥献瑲慣步牂汯捫敲⹴楴汥∠㴠≂汯捫″牤⵰慲瑹⁴牡捫敲猢㬊ਯ⨠周攠瑩瑬攠潦⁴桥⁤楡汯朠瑯⁳桯眠瑨攠灲楶慣礠晥慴畲敳⁴桡琠䑵捫䑵捫䝯晦敲猠⨯ਢ潮扯慲摩湧⹢牯睳敲献瑩瑬攢‽•偲楶慣礠灲潴散瑩潮猠慣瑩癡瑥搡∻ਊ⼪⁂畴瑯渠瑯⁣潮瑩湵攠瑨攠潮扯慲摩湧⁰牯捥獳‪⼊≯湢潡牤楮朮楮瑲漮捴愢‽•䱥瓢肙猠摯⁩琡∻ਊ⼪⁔桥⁴楴汥映瑨攠潮扯慲摩湧⁤楡汯朠灯灵瀠⨯ਢ潮扯慲摩湧⹩湴牯⹴楴汥∠㴠≈椠瑨敲攮屮屮剥慤礠景爠愠扥瑴敲Ⱐ浯牥⁰物癡瑥⁩湴敲湥琿∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ潮扯慲摩湧⹷楤来瑳⹣潮瑩湵敂畴瑯渢‽•䅤搠坩摧整∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ潮扯慲摩湧⹷楤来瑳⹨敡摥爢‽•啳楮朠䑵捫䑵捫䝯畳琠杯琠敡獩敲⸢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≯湢潡牤楮朮睩摧整献獫楰䉵瑴潮∠㴠≍慹扥⁌慴敲∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ潮扯慲摩湧䍯湴楮略∠㴠≃潮瑩湵攢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≯湢潡牤楮杄敦慵汴䉲潷獥牍慹扥䱡瑥爢‽•䵡祢攠䱡瑥爢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≯湢潡牤楮杄敦慵汴䉲潷獥牔楴汥∠㴠≍慫攠䑵捫䑵捫䝯⁹潵爠摥晡畬琠扲潷獥爮∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ潮扯慲摩湧卥瑁獄敦慵汴䉲潷獥爢‽•卥琠慳⁄敦慵汴⁂牯睳敲∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ潮扯慲摩湧卫楰∠㴠≓歩瀢㬊ਯ⨠周楳⁩猠潮⁡⁢畴瑯渠灲敳敮瑥搠潮⁴桥慳琠潦⁴桥湢潡牤楮朠獣牥敮献‪⼊≯湢潡牤楮杓瑡牴䉲潷獩湧∠㴠≓瑡牴⁂牯睳楮朢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≯湢潡牤楮杗敬捯浥䡥慤敲∠㴠≗敬捯浥⁴漠䑵捫䑵捫䝯™㬊ਯ⨠饌楮毢肙⁩猠汩湫渠愠睥扳楴攠⨯ਢ潰敮⹥硴敲湡汬礮晡楬敤∠㴠≔桥⁡灰⁲敱畩牥搠瑯灥渠瑨慴楮欠捡滢肙琠扥⁦潵湤∻ਊ⼪⁁捴楶慴攠扵瑴潮‪⼊≰洮慣瑩癡瑥∠㴠≒敡捴楶慴攢㬊ਯ⨠䍡湣敬⁢畴瑯渠⨯ਢ灭⹣慮捥氢‽•䍡湣敬∻ਊ⼪⁄敡捴楶慴攠扵瑴潮‪⼊≰洮摥慣瑩癡瑥∠㴠≄敡捴楶慴攢㬊ਯ⨠䉵瑴潮⁴楴汥⁦潲⁳祮挠扯潫浡牫猠汩浩瑳⁥硣敥摥搠睡牮楮朠瑯⁧漠瑯慮慧攠扯潫浡牫猠⨯ਢ灲敦牥湣敳⹳祮挮扯潫浡牫猭汩浩琭數捥敤敤ⵡ捴楯渢‽•䵡湡来⁂潯歭慲歳∻ਊ⼪⁄敳捲楰瑩潮⁦潲⁳祮挠扯潫浡牫猠汩浩瑳⁥硣敥摥搠睡牮楮朠⨯ਢ灲敦牥湣敳⹳祮挮扯潫浡牫猭汩浩琭數捥敤敤ⵤ敳捲楰瑩潮∠㴠≙潵❶攠牥慣桥搠瑨攠浡硩浵洠湵浢敲映扯潫浡牫献⁐汥慳攠摥汥瑥⁳潭攠瑯⁲敳畭攠獹湣⸢㬊ਯ⨠䉵瑴潮⁴楴汥⁦潲⁳祮挠捲敤敮瑩慬猠汩浩瑳⁥硣敥摥搠睡牮楮朠瑯⁧漠瑯慮慧攠灡獳睯牤猠⨯ਢ灲敦牥湣敳⹳祮挮捲敤敮瑩慬猭汩浩琭數捥敤敤ⵡ捴楯渢‽•䵡湡来⁰慳獷潲摳꘢㬊ਯ⨠䑥獣物灴楯渠景爠獹湣⁣牥摥湴楡汳業楴猠數捥敤敤⁷慲湩湧‪⼊≰牥晲敮捥献獹湣⹣牥摥湴楡汳⵬業楴ⵥ硣敥摥搭摥獣物灴楯渢‽•奯甧癥⁲敡捨敤⁴桥慸業畭畭扥爠潦⁰慳獷潲摳⸠偬敡獥⁤敬整攠獯浥⁴漠牥獵浥⁳祮挮∻ਊ⼪⁄敳捲楰瑩潮⁩湶慬楤⁣牥摥湴楡汳⁥牲潲⁷桥渠獹湣楮朮ਠ†䑥獣物灴楯渠潦⁩湣潲牥捴汹⁦潲浡瑴敤⁤慴愠敲牯爠睨敮⁳祮捩湧⸊†⁄敳捲楰瑩潮映瑯漠浡湹⁲敱略獴猠敲牯爠睨敮⁳祮捩湧⸠⨯ਢ灲敦牥湣敳⹳祮挮楮癡汩搭汯杩渭摥獣物灴楯渢‽•卹湣⁥湣潵湴敲敤⁡渠敲牯爮⁔特⁤楳慢汩湧⁳祮挠潮⁴桩猠摥癩捥⁡湤⁴桥渠牥捯湮散琠畳楮朠慮潴桥爠摥癩捥爠祯畲⁲散潶敲礠捯摥⸢㬊ਯ⨠呩瑬攠景爠獹湣業楴猠數捥敤敤⁷慲湩湧‪⼊≰牥晲敮捥献獹湣⹬業楴ⵥ硣敥摥搭瑩瑬攢‽•卹湣⁐慵獥搢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≰牥獥牶敌潧楮献摯浡楮⹬楳琮景潴敲∠㴠≗敢獩瑥猠牥汹渠捯潫楥猠瑯敥瀠祯甠獩杮敤⁩渮⁗桥渠祯甠䙩牥灲潯映愠獩瑥Ⱐ捯潫楥猠睯滢肙琠扥⁥牡獥搠慮搠祯痢肙汬⁳瑡礠獩杮敤⁩測⁥癥渠慦瑥爠畳楮朠瑨攠䙩牥⁂畴瑯渮⁗攠獴楬氠扬潣欠瑨楲搭灡牴礠瑲慣步牳⁦潵湤渠䙩牥灲潯映睥扳楴敳⸢㬊ਯ⨠卥捴楯渠桥慤敲⁡扯癥⁆楲数牯潦敤⁷敢獩瑥猠汩獴‪⼊≰牥獥牶敌潧楮献摯浡楮⹬楳琮瑩瑬攢‽•䙩牥灲潯映卩瑥猢㬊ਯ⨠䅬敲琠浥獳慧攠數灬慩湩湧⁴漠畳敲猠瑨慴⁴桥⁢敮敦楴映晩牥灲潯晩湧⁡⁳楴攠楳⁴桡琠瑨敹⁷楬氠扥数琠獩杮敤⁩渠⨯ਢ灲敳敲癥䱯杩湳⹦楲数牯潦⹭敳獡来∠㴠≆楲数牯潦楮朠瑨楳⁳楴攠睩汬敥瀠祯甠獩杮敤⁩渠慦瑥爠畳楮朠瑨攠䙩牥⁂畴瑯渮∻ਊ⼪⁐慲慭整敲⁩猠愠獴物湧‭⁤潭慩渠湡浥⸠䅬敲琠瑩瑬攠灲潭灴楮朠畳敲⁴漠晩牥灲潯映愠獩瑥⁳漠瑨敹⁣慮⁳瑡礠獩杮敤⁩渠⨯ਢ灲敳敲癥䱯杩湳⹦楲数牯潦⹴楴汥∠㴠≆楲数牯潦‥䀠瑯⁳瑡礠獩杮敤⁩渿∻ਊ⼪⁃潮晩牭⁦楲数牯潦楮朠慣瑩潮‪⼊≰牥獥牶敌潧楮献浥湵⹣潮晩牭∠㴠≆楲数牯潦∻ਊ⼪⁐慲慭整敲⁩猠愠睥扳楴攠啒䰮⁍敳獥来⁣潮晩牭猠瑨慴⁧楶敮⁷敢獩瑥⁨慳⁢敥渠晩牥灲潯晥搮‪⼊≰牥獥牶敌潧楮献浥湵⹣潮晩牭⹭敳獡来∠㴠∥䀠楳潷⁆楲数牯潦∻ਊ⼪⁄敮礠晩牥灲潯晩湧⁡捴楯渠⨯ਢ灲敳敲癥䱯杩湳⹭敮甮摥晥爢‽•乯琠乯眢㬊ਯ⨠䑩獡扬攠晩牥灲潯晩湧⁦潲⁳楴攠⨯ਢ灲敳敲癥䱯杩湳⹭敮甮摩獡扬攢‽•剥浯癥⁆楲数牯潦楮朢㬊ਯ⨠䕮慢汥⁦楲数牯潦楮朠景爠獩瑥‪⼊≰牥獥牶敌潧楮献浥湵⹥湡扬攢‽•䙩牥灲潯映周楳⁓楴攢㬊ਯ⨠⁍敳獥来⁣潮晩牭猠瑨慴⁷敢獩瑥⁩猠湯潮来爠晩牥灲潯晥搮‪⼊≰牥獥牶敌潧楮献浥湵⹲敭潶慬⹭敳獡来∠㴠≆楲数牯潦楮朠牥浯癥搢㬊ਯ⨠䅬敲琠瑩瑬攠⨯ਢ灲敳敲癥䱯杩湳⹲敭潶攮慬氢‽•剥浯癥⁁汬∻ਊ⼪⁃潮晩牭慴楯渠扵瑴潮⁩渠慬敲琠⨯ਢ灲敳敲癥䱯杩湳⹲敭潶攮慬氮潫∠㴠≏䬢㬊ਯ⨠偲楶慣礠䥣潮⁡捣敳獩扩汩瑹⁴楴汥‪⼊≰物癡捹⹩捯渮摡砢‽•䑵捫䑵捫䝯潧漢㬊ਯ⨠偲楶慣礠䥣潮⁡捣敳獩扩汩瑹⁨楮琠⨯ਢ灲楶慣礮楣潮⹨楮琢‽•呡瀠瑯灥渠偲楶慣礠䑡獨扯慲搠獣牥敮∻ਊ⼪⁐物癡捹⁉捯渠慣捥獳楢楬楴礠瑩瑬攠⨯ਢ灲楶慣礮楣潮⹳桩敬搢‽•偲楶慣礠䥣潮∻ਊ⼪⁄敮礠慣瑩潮‪⼊≰牯浰琮捵獴潭⹵牬⹳捨敭攮摯湴潰敮∠㴠≃慮捥氢㬊ਯ⨠䍯湦楲洠慣瑩潮‪⼊≰牯浰琮捵獴潭⹵牬⹳捨敭攮潰敮∠㴠≏灥渢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≰牯浰琮捵獴潭⹵牬⹳捨敭攮灲潭灴∠㴠≗潵汤⁹潵楫攠瑯敡癥⁄畣歄畣歇漠瑯⁶楥眠瑨楳⁣潮瑥湴㼢㬊ਯ⨠䅬敲琠瑩瑬攠⨯ਢ灲潭灴⹣畳瑯洮畲氮獣桥浥⹴楴汥∠㴠≏灥渠楮⁁湯瑨敲⁁灰㼢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≳敡牣栮桩湴⹤畣此畣歧漢‽•卥慲捨爠敮瑥爠慤摲敳猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≳散瑩潮⹴楴汥⹢潯歭慲歳∠㴠≂潯歭慲歳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ獥捴楯渮瑩瑬攮晡癯物瑥猢‽•䙡癯物瑥猢㬊ਯ⨠卥瑴楮杳⁣敬氠景爠䅢潵琠䑄䜠⨯ਢ獥瑴楮杳⹡扯畴⹤摧∠㴠≁扯畴⁄畣歄畣歇漢㬊ਯ⨠卥瑴楮杳⁳散瑩潮⁴楴汥⁦潲⁁扯畴⁄畣歄畣歇漠⨯ਢ獥瑴楮杳⹡扯畴⹳散瑩潮∠㴠≁扯畴∻ਊ⼪⁡扯畴⁰慧攠⨯ਢ獥瑴楮杳⹡扯畴⹴數琢‽•䑵捫䑵捫䝯⁩猠瑨攠楮摥灥湤敮琠䥮瑥牮整⁰物癡捹⁣潭灡湹⁦潵湤敤⁩渠㈰〸⁦潲⁡湹潮攠睨濢肙猠瑩牥搠潦⁢敩湧⁴牡捫敤湬楮攠慮搠睡湴猠慮⁥慳礠獯汵瑩潮⸠坥饲攠灲潯映祯甠捡渠来琠牥慬⁰物癡捹⁰牯瑥捴楯渠潮汩湥⁷楴桯畴⁴牡摥潦晳⸊੔桥⁄畣歄畣歇漠扲潷獥爠捯浥猠睩瑨⁴桥⁦敡瑵牥猠祯甠數灥捴⁦牯洠愠杯⵴漠扲潷獥爬楫攠扯潫浡牫猬⁴慢猬⁰慳獷潲摳Ⱐ慮搠浯牥Ⱐ灬畳癥爠孡⁤潺敮⁰潷敲晵氠灲楶慣礠灲潴散瑩潮獝⡤摧兵楣歌楮欺⼯摵捫摵捫杯⹣潭⽤畣此畣歧漭桥汰⵰慧敳⽰物癡捹⽷敢⵴牡捫楮札灲潴散瑩潮猯⤠湯琠潦晥牥搠楮潳琠灯灵污爠扲潷獥牳⁢礠摥晡畬琮⁔桩猠畮楱略汹⁣潭灲敨敮獩癥⁳整映灲楶慣礠灲潴散瑩潮猠桥汰猠灲潴散琠祯畲湬楮攠慣瑩癩瑩敳Ⱐ晲潭⁳敡牣桩湧⁴漠扲潷獩湧Ⱐ敭慩汩湧Ⱐ慮搠浯牥⸊੏畲⁰物癡捹⁰牯瑥捴楯湳⁷潲欠睩瑨潵琠桡癩湧⁴漠歮潷⁡湹瑨楮朠慢潵琠瑨攠瑥捨湩捡氠摥瑡楬猠潲⁤敡氠睩瑨⁣潭灬楣慴敤⁳整瑩湧献⁁汬⁹潵⁨慶攠瑯⁤漠楳⁳睩瑣栠祯畲⁢牯睳敲⁴漠䑵捫䑵捫䝯⁡捲潳猠慬氠祯畲⁤敶楣敳⁡湤⁹潵⁧整⁰物癡捹⁢礠摥晡畬琮ਊ䉵琠楦⁹潵‪摯⨠睡湴⁡⁰敥欠畮摥爠瑨攠桯潤Ⱐ祯甠捡渠晩湤潲攠楮景牭慴楯渠慢潵琠桯眠䑵捫䑵捫䝯⁰物癡捹⁰牯瑥捴楯湳⁷潲欠潮畲⁛桥汰⁰慧敳崨摤村畩捫䱩湫㨯⽤畣此畣歧漮捯洯摵捫摵捫杯⵨敬瀭灡来猯⤮∻ਊ⼪⁓整瑩湧猠獣牥敮⁡捣敳獩扩汩瑹⁳散瑩潮⁴楴汥‪⼊≳整瑩湧献慣捥獳楢楬楴礢‽•䅣捥獳楢楬楴礢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁴數琠景爠慤摩湧⁴桥⁡灰⁴漠瑨攠摯捫‪⼊≳整瑩湧献慤搮瑯⹤潣欢‽•䅤搠䅰瀠瑯⁙潵爠䑯捫∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁡摤⁷楤来琠瑯⁴桥⁨潭攠獣牥敮‪⼊≳整瑩湧献慤搮睩摧整∠㴠≁摤⁗楤来琠瑯⁈潭攠卣牥敮∻ਊ⼪⁎慭攠潦⁴桥⁳整瑩湧猠獵扳散瑩潮⁲敬慴敤⁴漠瑨攠慤摲敳猠扡爊†⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁡摤敳猠扡爠灯獩瑩潮‪⼊≳整瑩湧献慤摲敳献扡爢‽•䅤摲敳猠䉡爢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁴楴汥⁦潲⁴潧杬楮朠晵汬⁕剌⁶楳楢楬楴礠楮⁡摤牥獳⁢慲‪⼊≳整瑩湧献慤摲敳献晵汬⹵牬∠㴠≓桯眠䙵汬⁓楴攠䅤摲敳猢㬊ਯ⨠䱡扥氠摥獣物扩湧⁡⁦敡瑵牥⁷桩捨⁩猠瑵牮敤渠慬睡祳‪⼊≳整瑩湧献慬睡祳⹯渢‽•䅬睡祳⁏渢㬊ਯ⨠卥瑴楮杳⁳捲敥渠慰灥慲慮捥⁳散瑩潮⁴楴汥‪⼊≳整瑩湧献慰灥慲慮捥∠㴠≁灰敡牡湣攢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁦潲灥湩湧楮歳⁩渠慳獯捩慴敤⁡灰猠⨯ਢ獥瑴楮杳⹡獳潣楡瑥搮慰灳∠㴠≏灥渠䱩湫猠楮⁁獳潣楡瑥搠䅰灳∻ਊ⼪⁄敳捲楰瑩潮⁦潲⁡獳潣楡瑥搠慰灳⁤敳捲楰瑩潮‪⼊≳整瑩湧献慳獯捩慴敤⹡灰献摥獣物灴楯渢‽•䑩獡扬攠瑯⁰牥癥湴楮歳⁦牯洠慵瑯浡瑩捡汬礠潰敮楮朠楮瑨敲⁩湳瑡汬敤⁡灰献∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠景爠慵瑯捯浰汥瑥‪⼊≳整瑩湧献慵瑯捯浰汥瑥∠㴠≓敡牣栠卵杧敳瑩潮猢㬊ਯ⨠卥瑴楮杳慢敬⁦潲⁥湡扬楮朠潲⁤楳慢汩湧⁲散敮瑬礠癩獩瑥搠獩瑥猠⨯ਢ獥瑴楮杳⹡畴潣潭灬整攮牥捥湴汹癩獩瑥搢‽•剥捥湴汹⁖楳楴敤⁓楴敳∻ਊ⼪⁓整瑩湧猠污扥氠景爠敮慢汩湧爠摩獡扬楮朠牥捥湴汹⁶楳楴敤⁳楴敳‪⼊≳整瑩湧献慵瑯捯浰汥瑥⹲散敮瑬祶楳楴敤⹳畢瑩瑬攢‽•卨潷⁲散敮瑬礠癩獩瑥搠獩瑥猠楮⁳敡牣栠獵杧敳瑩潮献⁒散敮瑬礠癩獩瑥搠獩瑥猠慲攠灲楶慴攬湬礠獴潲敤渠祯畲⁤敶楣攬⁡湤⁣慮⁢攠捬敡牥搠睩瑨⁴桥⁆楲攠䉵瑴潮⸢㬊ਯ⨠卵扴楴汥⁦潲⁓敡牣栠卵杧敳瑩潮猠獥瑴楮朠⨯ਢ獥瑴楮杳⹡畴潣潭灬整攮獵扴楴汥∠㴠≓桯眠獥慲捨⁳畧来獴楯湳⁡猠祯甠瑹灥Ⱐ楮捬畤楮朠祯畲⁢潯歭慲歳⸠䅬氠獥慲捨敳⁡牥⁰物癡瑥⸢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁴數琠景爠䅰灬楣慴楯渠䱯捫‪⼊≳整瑩湧献慵瑯汯捫∠㴠≁灰汩捡瑩潮⁌潣欢㬊ਯ⨠卥捴楯渠景潴敲⁁畴潬潣欠摥獣物灴楯渠⨯ਢ獥瑴楮杳⹡畴潬潣欮摥獣物灴楯渢‽•䥦⁔潵捨⁉䐬⁆慣攠䥄Ⱐ潲⁡⁳祳瑥洠灡獳捯摥⁩猠敮慢汥搬⁹潵❬氠扥⁡獫敤⁴漠畮汯捫⁴桥⁡灰⁷桥渠潰敮楮朠楴⸢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁴數琠景爠䅵瑯浡瑩捡汬礠䍬敡物湧⁄慴愠⨯ਢ獥瑴楮杳⹣汥慲⹤慴愢‽•䅵瑯浡瑩捡汬礠䍬敡爠䑡瑡∻ਊ⼪⁔桥慭攠潦⁓整瑩湧猠捡瑥杯特⁩渠偲楶慣礠䙥慴畲敳⁲敬慴敤⁴漠捯湦楧畲慴楯渠潦⁴桥⁰物癡捹⁦敡瑵牥⁲敬慴敤⁴漠捯潫楥⁰潰⵵灳‪⼊≳整瑩湧献捯潫楥⹰潰⵵瀭灲潴散瑩潮⹰牯瑥捴楯渢‽•䍯潫楥⁐潰ⵕ瀠偲潴散瑩潮∻ਊ⼪⁅硰污湡瑩潮⁩渠卥瑴楮杳⁨潷⁴桥⁣潯歩攠灯瀠異⁰牯瑥捴楯渠晥慴畲攠睯牫猠⨯ਢ獥瑴楮杳⹣潯歩攮灯瀮異⹰牯瑥捴楯渮數灬慮慴楯渢‽•䑵捫䑵捫䝯⁷楬氠瑲礠瑯⁳敬散琠瑨攠浯獴⁰物癡瑥⁳整瑩湧猠慶慩污扬攠慮搠桩摥⁴桥獥⁰潰⵵灳⁦潲⁹潵⹜湛䱥慲渠䵯牥崨摤村畩捫䱩湫㨯⽤畣此畣歧漮捯洯摵捫摵捫杯⵨敬瀭灡来猯灲楶慣礯睥戭瑲慣歩湧⵰牯瑥捴楯湳⼣捯潫楥⵰潰⵵瀭浡湡来浥湴⤢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁴數琠景爠䍯潫楥⁰潰異猠⨯ਢ獥瑴楮杳⹣潯歩攮灯灵灳∠㴠≍慮慧攠䍯潫楥⁐潰⵵灳∻ਊ⼪⁓整瑩湧猠瑩瑬攠景爠瑨攠捵獴潭楺攠獥捴楯渠⨯ਢ獥瑴楮杳⹣畳瑯浩穥∠㴠≃畳瑯浩穥∻ਊ⼪⁔桥慭攠潦⁡⁳整瑩湧猠獵扳散瑩潮⁲敬慴敤⁴漠瑨攠摡瑡⁣汥慲楮朠⨯ਢ獥瑴楮杳⹤慴愮捬敡物湧∠㴠≄慴愠䍬敡物湧∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁳整瑩湧⁴桥⁡灰⁡猠摥晡畬琠扲潷獥爊†⁔桥慭攠潦⁓整瑩湧猠捡瑥杯特⁩渠偲楶慣礠䙥慴畲敳⁲敬慴敤⁴漠捯湦楧畲慴楯渠潦⁴桥⁤敦慵汴⁢牯睳敲‪⼊≳整瑩湧献摥晡畬琮扲潷獥爢‽•䑥晡畬琠䉲潷獥爢㬊ਯ⨠䱡扥氠潦⁡⁢畴瑯渠摩獡扬楮朠敭慩氠灲潴散瑩潮‪⼊≳整瑩湧献摩獡扬攮敭慩氮灲潴散瑩潮⹡畴潦楬氢‽•䑩獡扬攠䕭慩氠偲潴散瑩潮⁁畴潦楬氢㬊ਯ⨠卥瑴楮杳⁣敬氠瑯楮欠畳敲猠瑯瑨敲⁰牯摵捴猠批⁄畣歄畣歇漠⨯ਢ獥瑴楮杳⹤畣此畣歧漮潮⹯瑨敲⹰污瑦潲浳∠㴠≄畣歄畣歇漠潮⁏瑨敲⁐污瑦潲浳∻ਊ⼪⁅硰污湡瑩潮⁩渠卥瑴楮杳⁨潷⁴桥⁥浡楬⁰牯瑥捴楯渠晥慴畲攠睯牫猠⨯ਢ獥瑴楮杳⹥浡楬⹰牯瑥捴楯渮數灬慮慴楯渢‽•䉬潣欠敭慩氠瑲慣步牳⁡湤⁨楤攠祯畲⁡摤牥獳⁷楴桯畴⁳睩瑣桩湧⁹潵爠敭慩氠灲潶楤敲⹜湛䱥慲渠䵯牥崨摤村畩捫䱩湫㨯⽤畣此畣歧漮捯洯摵捫摵捫杯⵨敬瀭灡来猯敭慩氭灲潴散瑩潮⽷桡琭楳ⵤ畣此畣歧漭敭慩氭灲潴散瑩潮⼩∻ਊ⼪⁁汥牴⁰牥獥湴敤⁴漠畳敲⁡晴敲⁣汩捫楮朠潮‧卩杮畴✠楮⁅浡楬⁐牯瑥捴楯渠卥瑴楮杳‪⼊≳整瑩湧献敭慩氮灲潴散瑩潮⹳楧湩湧⹯畴⹡汥牴∠㴠≓楧湩湧畴映祯畲⁅浡楬⁐牯瑥捴楯渠慣捯畮琠睩汬⁤楳慢汥⁄畣欠䅤摲敳猠慵瑯晩汬⁩渠瑨楳⁢牯睳敲⸠奯甠捡渠獴楬氠畳攠瑨敳攠慤摲敳獥猠慮搠牥捥楶攠景牷慲摥搠敭慩氠慳⁵獵慬⸢㬊ਯ⨠卥瑴楮杳⁣敬氠景爠䕭慩氠偲潴散瑩潮‪⼊≳整瑩湧献敭慩汐牯瑥捴楯渮摥獣物灴楯渢‽•䉬潣欠敭慩氠瑲慣步牳⁡湤⁨楤攠祯畲⁡摤牥獳∻ਊ⼪⁌慢敬映愠扵瑴潮⁥湡扬楮朠瑨攠敭慩氠灲潴散瑩潮⁦敡瑵牥‪⼊≳整瑩湧献敮慢汥⹥浡楬⹰牯瑥捴楯渢‽•䕮慢汥⁅浡楬⁐牯瑥捴楯渢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁴數琠景爠敮慢汩湧⁶潩捥⁳敡牣栠⨯ਢ獥瑴楮杳⹥湡扬攮癯楣攮獥慲捨∠㴠≅湡扬攠噯楣攠卥慲捨∻ਊ⼪⁓整瑩湧猠捥汬⁦潲⁆敥摢慣欠⨯ਢ獥瑴楮杳⹦敥摢慣欢‽•卨慲攠䙥敤扡捫∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁦楲攠扵瑴潮⁡湩浡瑩潮‪⼊≳整瑩湧献晩牥扵瑴潮∠㴠≆楲攠䉵瑴潮⁁湩浡瑩潮∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁆楲数牯潦⁓楴敳‪⼊≳整瑩湧献晩牥灲潯昮獩瑥猢‽•䙩牥灲潯映卩瑥猢㬊ਯ⨠周攠湡浥映瑨攠獥瑴楮杳⁳畢獥捴楯渠捯湴慩湩湧⁧敮敲慬⁳整瑩湧猠⨯ਢ獥瑴楮杳⹧敮敲慬∠㴠≇敮敲慬∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁇偃‪⼊≳整瑩湧献杰挢‽•䝬潢慬⁐物癡捹⁃潮瑲潬
䝐䌩∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁡灰⁩捯渠獥汥捴楯渠⨯ਢ獥瑴楮杳⹩捯渢‽•䅰瀠䥣潮∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠景爠䭥祢潡牤‪⼊≳整瑩湧献步祢潡牤∠㴠≋敹扯慲搢㬊ਯ⨠卷楴捨⁢畴瑯渠污扥氮‪⼊≳整瑩湧献汥琮摵捫摵捫杯⹭慮慧攮捯潫楥⹣潮獥湴⹰潰異猢‽•䱥琠䑵捫䑵捫䝯慮慧攠捯潫楥⁣潮獥湴⁰潰⵵灳∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁰慳獷潲摳‪⼊≳整瑩湧献汯杩湳∠㴠≐慳獷潲摳∻ਊ⼪⁔桥慭攠潦⁴桥⁳整瑩湧猠獥捴楯渠捯湴慩湩湧慩渠獥瑴楮杳‪⼊≳整瑩湧献浡楮⹳整瑩湧猢‽•䵡楮⁓整瑩湧猢㬊ਯ⨠䱡扥氠潦⁡⁢畴瑯渠浡湡杩湧⁥浡楬⁰牯瑥捴楯渠慣捯畮琠⨯ਢ獥瑴楮杳⹭慮慧攮慣捯畮琢‽•䵡湡来⁁捣潵湴∻ਊ⼪⁓整瑩湧猠瑩瑬攠景爠瑨攠❍潲攧⁳散瑩潮‪⼊≳整瑩湧献浯牥∠㴠≍潲攠晲潭⁄畣歄畣歇漢㬊ਯ⨠䉵瑴潮慶楧慴楮朠瑯瑨敲⁳整瑩湧猠牥污瑥搠瑯⁳敡牣栠⨯ਢ獥瑴楮杳⹭潲攮獥慲捨⹳整瑩湧猢‽•䵯牥⁓敡牣栠卥瑴楮杳∻ਊ⼪⁓畢瑩瑬攠潦⁴桥‧䵯牥⁓敡牣栠卥瑴楮杳✠扵瑴潮‪⼊≳整瑩湧献浯牥⹳敡牣栮獥瑴楮杳⹥硰污湡瑩潮∠㴠≃畳瑯浩穥⁹潵爠污湧畡来Ⱐ牥杩潮Ⱐ慮搠浯牥∻ਊ⼪⁔桥慭攠潦⁡⁳整瑩湧猠捡瑥杯特楳瑩湧數琠獴数猠⨯ਢ獥瑴楮杳⹮數琮獴数猢‽•乥硴⁓瑥灳∻ਊ⼪⁌慢敬⁤敳捲楢楮朠愠晥慴畲攠睨楣栠楳⁴畲湥搠潦映⨯ਢ獥瑴楮杳⹯晦∠㴠≏晦∻ਊ⼪⁌慢敬⁤敳捲楢楮朠愠晥慴畲攠睨楣栠楳⁴畲湥搠潮‪⼊≳整瑩湧献潮∠㴠≏渢㬊ਯ⨠偲潤畣琠湡浥⁦潲⁴桥⁳畢獣物灴楯渠扵湤汥‪⼊≳整瑩湧献灰牯∠㴠≐物癡捹⁐牯∻ਊ⼪⁔楴汥⁦潲⁌楮欠楮⁴桥⁆潯瑥爠潦⁐物癡捹⁐牯⁳散瑩潮‪⼊≳整瑩湧献灰牯⹦潯瑥爢‽•偲楶慣礠偯汩捹⁡湤⁔敲浳曂ꁓ敲癩捥∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠景爠汯湧⁰牥獳⁰牥癩敷猠⨯ਢ獥瑴楮杳⹰牥癩敷猢‽•䱯湧ⵐ牥獳⁐牥癩敷猢㬊ਯ⨠卥瑴楮杳⁴楴汥⁦潲⁴桥⁰物癡捹⁳散瑩潮‪⼊≳整瑩湧献灲楶慣礢‽•偲楶慣礢㬊ਯ⨠周攠湡浥映卥瑴楮杳⁣慴敧潲礠楮⁐物癡捹⁆敡瑵牥猠牥污瑥搠瑯⁣潮晩杵牡瑩潮映瑨攠獥慲捨‪⼊≳整瑩湧献灲楶慴攮獥慲捨∠㴠≐物癡瑥⁓敡牣栢㬊ਯ⨠䕸灬慮慴楯渠楮⁓整瑩湧猠桯眠瑨攠灲楶慴攠獥慲捨⁦敡瑵牥⁷潲歳‪⼊≳整瑩湧献灲楶慴攮獥慲捨⹥硰污湡瑩潮∠㴠≄畣歄畣歇漠偲楶慴攠卥慲捨⁩猠祯畲⁤敦慵汴⁳敡牣栠敮杩湥Ⱐ獯⁹潵⁣慮⁳敡牣栠瑨攠睥戠睩瑨潵琠扥楮朠瑲慣步搮∻ਊ⼪⁈敡摥爠潦⁳整瑩湧猠牥污瑥搠瑯⁳敡牣栠⨯ਢ獥瑴楮杳⹳敡牣栮獥瑴楮杳∠㴠≓敡牣栠卥瑴楮杳∻ਊ⼪⁓整瑩湧猠捥汬⁦潲⁓敮搠䍲慳栠剥灯牴猠⨯ਢ獥瑴楮杳⹳敮搮捲慳栮牥灯牴猢‽•卥湤⁃牡獨⁒数潲瑳∻ਊ⼪⁅硰污湡瑩潮映卥湤⁃牡獨⁒数潲瑳⁳整瑩湧猠潰瑩潮‪⼊≳整瑩湧献獥湤⹣牡獨⹲数潲瑳⹤敳捲楰瑩潮∠㴠≁畴潭慴楣慬汹⁳敮搠捲慳栠牥灯牴猠瑯⁄畣歄畣歇漮∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁳整瑩湧⁡摤牥獳⁢慲⁰潳楴楯渠⨯ਢ獥瑴楮杳⹳整⹹潵爮慤摲敳献扡爮灯獩瑩潮∠㴠≓整⁙潵爠䅤摲敳猠䉡爠偯獩瑩潮∻ਊ⼪⁐物癡捹⁰牯⁤敳捲楰瑩潮⁳畢瑩瑬攠楮⁳整瑩湧猠睨敮⁴桥⁩猠慣瑩癡瑩湧‪⼊≳整瑩湧献獵扳捲楰瑩潮⹡捴楶慴楮朢‽•䅣瑩癡瑩湧∻ਊ⼪⁓畢獣物灴楯渠慣瑩癡瑩潮⁰敮摩湧⁤敳捲楰瑩潮‪⼊≳整瑩湧献獵扳捲楰瑩潮⹡捴楶慴楯渮灥湤楮朮摥獣物灴楯渢‽•周楳⁩猠瑡歩湧潮来爠瑨慮⁵獵慬Ⱐ灬敡獥⁣桥捫⁢慣欠污瑥爮∻ਊ⼪⁄慴愠䉲潫敲⁰牯瑥捴楯渠捥汬⁳畢瑩瑬攠景爠灲楶慣礠灲漠⨯ਢ獥瑴楮杳⹳畢獣物灴楯渮䑂倮獵扴楴汥∠㴠≒敭潶攠祯畲⁩湦漠晲潭⁳楴敳⁴桡琠獥汬⁩琢㬊ਯ⨠䑡瑡⁂牯步爠灲潴散瑩潮⁣敬氠瑩瑬攠景爠灲楶慣礠灲漠⨯ਢ獥瑴楮杳⹳畢獣物灴楯渮䑂倮瑩瑬攢‽•健牳潮慬⁉湦潲浡瑩潮⁒敭潶慬∻ਊ⼪⁐物癡捹⁰牯⁤敳捲楰瑩潮⁳畢瑩瑬攠楮⁳整瑩湧猠⨯ਢ獥瑴楮杳⹳畢獣物灴楯渮摥獣物灴楯渢‽•䥮捬畤敳畲⁖偎Ⱐ健牳潮慬⁉湦潲浡瑩潮⁒敭潶慬Ⱐ慮搠䥤敮瑩瑹⁔桥晴⁒敳瑯牡瑩潮⸢㬊ਯ⨠䤠桡癥⁡⁓畢獣物灴楯渠扵瑴潮⁴數琠景爠灲楶慣礠灲漠⨯ਢ獥瑴楮杳⹳畢獣物灴楯渮數楳瑩湧⹳畢獣物灴楯渢‽•䤠䡡癥⁡⁓畢獣物灴楯渢㬊ਯ⨠卵扳捲楰瑩潮⁥硰楲敤⁤敳捲楰瑩潮‪⼊≳整瑩湧献獵扳捲楰瑩潮⹥硰楲敤⹣潭浥湴∠㴠≓畢獣物扥⁡条楮⁴漠捯湴楮略⁵獩湧⁐物癡捹⁐牯∻ਊ⼪⁓畢獣物灴楯渠數灩牥搠瑩瑴汥敳獡来‪⼊≳整瑩湧献獵扳捲楰瑩潮⹥硰楲敤⹴楴汥∠㴠≙潵爠偲楶慣礠偲漠獵扳捲楰瑩潮⁥硰楲敤∻ਊ⼪⁉摥湴楴礠瑨敦琠牥獴潲慴楯渠捥汬⁳畢瑩瑬攠景爠灲楶慣礠灲漠⨯ਢ獥瑴楮杳⹳畢獣物灴楯渮䥔刮獵扴楴汥∠㴠≉映祯畲⁩摥湴楴礠楳⁳瑯汥測⁷攧汬⁨敬瀠牥獴潲攠楴∻ਊ⼪⁉摥湴楴礠瑨敦琠牥獴潲慴楯渠捥汬⁴楴汥⁦潲⁰物癡捹⁰牯‪⼊≳整瑩湧献獵扳捲楰瑩潮⹉呒⹴楴汥∠㴠≉摥湴楴礠周敦琠剥獴潲慴楯渢㬊ਯ⨠䝥琠偲楶慣礠偲漠扵瑴潮⁴數琠景爠灲楶慣礠灲漠⨯ਢ獥瑴楮杳⹳畢獣物灴楯渮汥慲渮浯牥∠㴠≇整⁐物癡捹⁐牯∻ਊ⼪⁓畢獣物灴楯渠卥瑴楮杳⁢畴瑯渠瑥硴⁦潲⁰物癡捹⁰牯‪⼊≳整瑩湧献獵扳捲楰瑩潮⹭慮慧攢‽•卵扳捲楰瑩潮⁓整瑩湧猢㬊ਯ⨠䍡汬⁴漠慣瑩潮⁴楴汥⁦潲⁐物癡捹⁐牯⁳整瑩湧猠⨯ਢ獥瑴楮杳⹳畢獣物灴楯渮獵扳捲楢攢‽•偲潴散琠祯畲⁣潮湥捴楯渠慮搠楤敮瑩瑹⁷楴栠偲楶慣礠偲漢㬊ਯ⨠噐丠捥汬⁴楴汥⁦潲⁰物癡捹⁰牯‪⼊≳整瑩湧献獵扳捲楰瑩潮⹖偎⹴楴汥∠㴠≖偎∻ਊ⼪⁌慢敬映愠扵瑴潮慶楧慴楮朠瑯⁴桥⁓異灯牴⁰慧攠⨯ਢ獥瑴楮杳⹳異灯牴∠㴠≓異灯牴∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁳祮挠慮搠扡捫異‪⼊≳整瑩湧献獹湣∠㴠≓祮挠☠䉡捫異∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁴數琠獩穥‪⼊≳整瑩湧献瑥硴⹳楺攢‽•呥硴⁓楺攢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁴數琠景爠瑨敭攠⨯ਢ獥瑴楮杳⹴桥浥∠㴠≔桥浥∻ਊ⼪⁔楴汥⁦潲⁴桥⁓整瑩湧猠噩敷‪⼊≳整瑩湧献瑩瑬攢‽•卥瑴楮杳∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁕湰牯瑥捴敤⁓楴敳‪⼊≳整瑩湧献畮灲潴散瑥搮獩瑥猢‽•啮灲潴散瑥搠卩瑥猢㬊ਯ⨠卥瑴楮杳⁣敬氠景爠噥牳楯渠⨯ਢ獥瑴楮杳⹶敲獩潮∠㴠≖敲獩潮∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠景爠癯楣攠獥慲捨‪⼊≳整瑩湧献癯楣攮獥慲捨∠㴠≐物癡瑥⁖潩捥⁓敡牣栢㬊ਯ⨠周攠湡浥映卥瑴楮杳⁣慴敧潲礠楮⁐物癡捹⁆敡瑵牥猠牥污瑥搠瑯⁣潮晩杵牡瑩潮映瑨攠睥戠瑲慣歩湧⁰牯瑥捴楯渠晥慴畲攠⨯ਢ獥瑴楮杳⹷敢⹴牡捫楮朮灲潴散瑩潮∠㴠≗敢⁔牡捫楮朠偲潴散瑩潮∻ਊ⼪⁅硰污湡瑩潮⁩渠卥瑴楮杳⁨潷⁴桥⁷敢⁴牡捫楮朠灲潴散瑩潮⁦敡瑵牥⁷潲歳‪⼊≳整瑩湧献睥戮瑲慣歩湧⹰牯瑥捴楯渮數灬慮慴楯渢‽•䑵捫䑵捫䝯⁡畴潭慴楣慬汹⁢汯捫猠桩摤敮⁴牡捫敲猠慳⁹潵⁢牯睳攠瑨攠睥戮屮孌敡牮⁍潲敝⡤摧兵楣歌楮欺⼯摵捫摵捫杯⹣潭⽤畣此畣歧漭桥汰⵰慧敳⽰物癡捹⽷敢⵴牡捫楮札灲潴散瑩潮猯⤢㬊ਯ⨠剥灯牴⁡⁂牯步渠卩瑥⁳捲敥渠捯湦楲浡瑩潮⁢畴瑯渠⨯ਢ獩瑥䙥敤扡捫⹢畴瑯湔數琢‽•卵扭楴⁒数潲琢㬊ਯ⨠䑯浡楮⁩猠慮⁕剌⁡摤牥獳‪⼊≳楴敆敥摢慣欮摯浡楮䥮景∠㴠≄潭慩渠潦⁂牯步渠卩瑥㨢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≳楴敆敥摢慣欮浥獳慧敐污捥桯汤敲∠㴠≗桩捨⁣潮瑥湴爠晵湣瑩潮慬楴礠楳⁢牥慫楮朿∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ獩瑥䙥敤扡捫⹳畢瑩瑬攢‽•䉲潫敮⁳楴攠牥灯牴楮朠楳⁣潭灬整敬礠慮潮祭潵猠慮搠桥汰猠畳⁴漠業灲潶攠瑨攠慰瀡∻ਊ⼪⁔桩猠楳⁡⁦潲洠瑩瑬攠⨯ਢ獩瑥䙥敤扡捫⹴楴汥∠㴠≒数潲琠愠䉲潫敮⁓楴攢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≳楴敆敥摢慣欮畲汐污捥桯汤敲∠㴠≗桩捨⁷敢獩瑥⁩猠扲潫敮㼢㬊ਯ⨠卵扳捲楰瑩潮⁁捴楶慴楯渠䥮景‪⼊≳畢獣物灴楯渮慣瑩癡瑥⸮桥慤敲⹤敳捲楰瑩潮∠㴠≁捣敳猠祯畲⁐物癡捹⁐牯⁳畢獣物灴楯渠潮⁴桩猠摥癩捥⁶楡⁁灰汥⁉䐠潲⁡渠敭慩氠慤摲敳献∻ਊ⼪⁂畴瑯渠景爠慤摩湧⁥浡楬⁡摤牥獳⁴漠獵扳捲楰瑩潮‪⼊≳畢獣物灴楯渮慣瑩癡瑥⹡摤⹥浡楬⹢畴瑯渢‽•䅤搠䕭慩氢㬊ਯ⨠䅰灬攠䥄灴楯渠景爠慣瑩癡瑩潮‪⼊≳畢獣物灴楯渮慣瑩癡瑥⹡灰汥楤∠㴠≁灰汥⁉䐢㬊ਯ⨠䉵瑴潮⁴數琠景爠牥獴潲楮朠灵牣桡獥⁶楡⁁灰汥⁉䐠⨯ਢ獵扳捲楰瑩潮⹡捴楶慴攮慰灬敩搮扵瑴潮∠㴠≒敳瑯牥⁐畲捨慳攢㬊ਯ⨠䑥獣物灴楯渠景爠䅰灬攠䥄⁡捴楶慴楯渠⨯ਢ獵扳捲楰瑩潮⹡捴楶慴攮慰灬敩搮摥獣物灴楯渢‽•剥獴潲攠祯畲⁰畲捨慳攠瑯⁡捴楶慴攠祯畲⁳畢獣物灴楯渠潮⁴桩猠摥癩捥⸢㬊ਯ⨠卵扳捲楰瑩潮⁁捴楶慴楯渠䥮景‪⼊≳畢獣物灴楯渮慣瑩癡瑥⹤敳捲楰瑩潮∠㴠≙潵爠獵扳捲楰瑩潮⁩猠慵瑯浡瑩捡汬礠慶慩污扬攠楮⁄畣歄畣歇漠潮⁡湹⁤敶楣攠獩杮敤⁩渠瑯⁹潵爠䅰灬攠䥄⸢㬊ਯ⨠䉵瑴潮⁦潲⁥摩瑩湧⁥浡楬⁡摤牥獳⁡摤敤⁴漠獵扳捲楰瑩潮‪⼊≳畢獣物灴楯渮慣瑩癡瑥⹥摩琮敭慩氮扵瑴潮∠㴠≅摩琠䕭慩氢㬊ਯ⨠噩敷⁔楴汥⁦潲⁥摩瑩湧⁹潵爠敭慩氠慣捯畮琠⨯ਢ獵扳捲楰瑩潮⹡捴楶慴攮敤楴⹥浡楬⹴楴汥∠㴠≅摩琠䕭慩氢㬊ਯ⨠䕭慩氠潰瑩潮⁦潲⁡捴楶慴楯渠⨯ਢ獵扳捲楰瑩潮⹡捴楶慴攮敭慩氢‽•䕭慩氢㬊ਯ⨠剥獴潲攠扵瑴潮⁴楴汥⁦潲⁅浡楬‪⼊≳畢獣物灴楯渮慣瑩癡瑥⹥浡楬⹢畴瑯渢‽•䕮瑥爠䕭慩氢㬊ਯ⨠䑥獣物灴楯渠景爠䕭慩氠慣瑩癡瑩潮‪⼊≳畢獣物灴楯渮慣瑩癡瑥⹥浡楬⹤敳捲楰瑩潮∠㴠≕獥⁹潵爠敭慩氠瑯⁡捴楶慴攠祯畲⁳畢獣物灴楯渠潮⁴桩猠摥癩捥⸢㬊ਯ⨠䅣瑩癡瑥⁳畢獣物灴楯渠瑩瑬攠⨯ਢ獵扳捲楰瑩潮⹡捴楶慴攮敭慩氮瑩瑬攢‽•䅣瑩癡瑥⁓畢獣物灴楯渢㬊ਯ⨠䉵瑴潮⁴楴汥⁦潲⁣慮捥汬楮朠敭慩氠摥汥瑩潮‪⼊≳畢獣物灴楯渮慣瑩癡瑥⹭慮慧攮敭慩氮捡湣敬∠㴠≃慮捥氢㬊ਯ⨠䉵瑴潮⁴楴汥⁦潲⁣潮晩牭楮朠敭慩氠摥汥瑩潮‪⼊≳畢獣物灴楯渮慣瑩癡瑥⹭慮慧攮敭慩氮佋∠㴠≏䬢㬊ਯ⨠剥獴潲攠扵瑴潮⁴楴汥⁦潲⁁灰汥䥄‪⼊≳畢獣物灴楯渮慣瑩癡瑥⹲敳瑯牥⹡灰汥∠㴠≒敳瑯牥⁐畲捨慳攢㬊ਯ⨠卵扳捲楰瑩潮⁁捴楶慴楯渠呩瑬攠⨯ਢ獵扳捲楰瑩潮⹡捴楶慴攮瑩瑬攢‽•䅣瑩癡瑥⁹潵爠獵扳捲楰瑩潮渠瑨楳⁤敶楣攢㬊ਯ⨠剥獥湤⁡捴楶慴楯渠楮獴牵捴楯湳⁢畴瑯渠⨯ਢ獵扳捲楰瑩潮⹡摤⹤敶楣攮牥獥湤⹩湳瑲畣瑩潮猢‽•剥獥湤⁉湳瑲畣瑩潮猢㬊ਯ⨠䅤搠敭慩氠瑯⁡渠數楳瑩湧⁳畢獣物灴楯渠⨯ਢ獵扳捲楰瑩潮⹡摤⹥浡楬∠㴠≁摤⁡渠敭慩氠慤摲敳猠瑯⁡捴楶慴攠祯畲⁳畢獣物灴楯渠潮⁹潵爠潴桥爠摥癩捥献⁗既肙汬湬礠畳攠瑨楳⁡摤牥獳⁴漠癥物晹⁹潵爠獵扳捲楰瑩潮⸢㬊ਯ⨠噩敷⁴楴汥⁦潲⁡摤楮朠敭慩氠瑯⁳畢獣物灴楯渠⨯ਢ獵扳捲楰瑩潮⹡摤⹥浡楬⹴楴汥∠㴠≁摤⁅浡楬∻ਊ⼪⁔楴汥⁦潲⁁汥牴敳獡来猠⨯ਢ獵扳捲楰瑩潮⹡汥牴⹴楴汥∠㴠≳畢獣物灴楯渮慬敲琮瑩瑬攢㬊ਯ⨠卵扳捲楰瑩潮⁡癡楬慢楬楴礠浥獳慧攠潮⁁灰汥⁤敶楣敳‪⼊≳畢獣物灴楯渮慶慩污扬攮慰灬攢‽•偲楶慣礠偲漠楳⁡癡楬慢汥渠慮礠摥癩捥⁳楧湥搠楮⁴漠瑨攠獡浥⁁灰汥⁉䐮∻ਊ⼪⁔數琠景爠瑨攠浡湡来⁢楬汩湧⁰慧攠⨯ਢ獵扳捲楰瑩潮⹢楬汩湧⹧潯杬攮瑥硴∠㴠≙潵爠獵扳捲楰瑩潮⁷慳⁰畲捨慳敤⁴桲潵杨⁴桥⁇潯杬攠偬慹⁓瑯牥⸠呯⁲敮敷⁹潵爠獵扳捲楰瑩潮Ⱐ灬敡獥灥渠䝯潧汥⁐污礠却潲攠獵扳捲楰瑩潮⁳整瑩湧猠潮⁡⁤敶楣攠獩杮敤⁩渠瑯⁴桥⁳慭攠䝯潧汥⁁捣潵湴⁵獥搠瑯物杩湡汬礠灵牣桡獥⁹潵爠獵扳捲楰瑩潮⸢㬊ਯ⨠呩瑬攠景爠瑨攠浡湡来⁢楬汩湧⁰慧攠⨯ਢ獵扳捲楰瑩潮⹢楬汩湧⹧潯杬攮瑩瑬攢‽•卵扳捲楰瑩潮⁐污湳∻ਊ⼪⁓畢獣物灴楯渠慮湵慬⁢楬汩湧⁰敲楯搠瑹灥‪⼊≳畢獣物灴楯渮扩汬楮朮灥物潤⹡湮畡氢‽•慮湵慬∻ਊ⼪⁓畢獣物灴楯渠浯湴桬礠扩汬楮朠灥物潤⁴祰攠⨯ਢ獵扳捲楰瑩潮⹢楬汩湧⹰敲楯搮浯湴桬礢‽•浯湴桬礢㬊ਯ⨠卵扳捲楰瑩潮⁒敭潶慬⁣潮晩牭慴楯渠浥獳慧攠⨯ਢ獵扳捲楰瑩潮⹣慮捥氮浥獳慧攢‽•奯畲⁳畢獣物灴楯渠桡猠扥敮⁲敭潶敤⁦牯洠瑨楳⁤敶楣攮∻ਊ⼪⁃桡湧攠灬慮爠捡湣敬⁴楴汥‪⼊≳畢獣物灴楯渮捨慮来⹰污渢‽•啰摡瑥⁐污渠潲⁃慮捥氢㬊ਯ⨠乡癩条瑩潮⁂畴瑯渠景爠捬潳楮朠獵扳捲楰瑩潮⁶楥眠⨯ਢ獵扳捲楰瑩潮⹣汯獥∠㴠≃汯獥∻ਊ⼪⁔楴汥⁦潲⁃潮晩牭敳獡来猠⨯ਢ獵扳捲楰瑩潮⹣潮晩牭⹴楴汥∠㴠≁牥⁹潵⁳畲政∻ਊ⼪⁈敡摥爠景爠獥捴楯渠景爠慣瑩癡瑩湧⁳畢獣物灴楯渠潮瑨敲⁤敶楣敳‪⼊≳畢獣物灴楯渮摥癩捥献桥慤敲∠㴠≁捴楶慴攠潮⁏瑨敲⁄敶楣敳∻ਊ⼪⁆潯瑥爠景爠獥捴楯渠景爠慣瑩癡瑩湧⁳畢獣物灴楯渠潮瑨敲⁤敶楣敳⁷桥渠敭慩氠睡猠湯琠祥琠慤摥搠⨯ਢ獵扳捲楰瑩潮⹤敶楣敳⹮漮敭慩氮景潴敲∠㴠≁摤⁡渠潰瑩潮慬⁥浡楬⁴漠祯畲⁳畢獣物灴楯渠瑯⁡捣敳猠偲楶慣礠偲漠潮瑨敲⁤敶楣敳⸠⨪孌敡牮潲敝⡨瑴灳㨯⽤畣此畣歧漮捯洯摵捫摵捫杯⵨敬瀭灡来猯灲楶慣礭灲漯慤摩湧ⵥ浡楬⼩⨪∻ਊ⼪⁆潯瑥爠景爠獥捴楯渠景爠慣瑩癡瑩湧⁳畢獣物灴楯渠潮瑨敲⁤敶楣敳⁷桥渠敭慩氠楳⁡摤敤‪⼊≳畢獣物灴楯渮摥癩捥献睩瑨⹥浡楬⹦潯瑥爢‽•啳攠瑨楳⁥浡楬⁴漠慣瑩癡瑥⁹潵爠獵扳捲楰瑩潮⁩渠卥瑴楮杳‾⁐物癡捹⁐牯⁩渠瑨攠䑵捫䑵捫䝯⁡灰渠祯畲瑨敲⁤敶楣敳⸠⨪孌敡牮潲敝⡨瑴灳㨯⽤畣此畣歧漮捯洯摵捫摵捫杯⵨敬瀭灡来猯灲楶慣礭灲漯慤摩湧ⵥ浡楬⼩⨪∻ਊ⼪⁁汥牴⁣潮瑥湴⁦潲潴⁦潵湤⁳畢獣物灴楯渠⨯ਢ獵扳捲楰瑩潮⹥浡楬⹩湡捴楶攮慬敲琮浥獳慧攢‽•周攠獵扳捲楰瑩潮⁡獳潣楡瑥搠睩瑨⁴桩猠敭慩氠楳漠汯湧敲⁡捴楶攮∻ਊ⼪⁁汥牴⁴楴汥⁦潲潴⁦潵湤⁳畢獣物灴楯渠⨯ਢ獵扳捲楰瑩潮⹥浡楬⹩湡捴楶攮慬敲琮瑩瑬攢‽•卵扳捲楰瑩潮⁎潴⁆潵湤∻ਊ⼪⁁汥牴⁣潮瑥湴⁦潲潴⁦潵湤⁳畢獣物灴楯渠⨯ਢ獵扳捲楰瑩潮⹥硰楲敤⹡汥牴⹭敳獡来∠㴠≔桥⁳畢獣物灴楯渠慳獯捩慴敤⁷楴栠瑨楳⁁灰汥⁉䐠楳漠汯湧敲⁡捴楶攮∻ਊ⼪⁆䅑⁂畴瑯渠⨯ਢ獵扳捲楰瑩潮⹦慱∠㴠≆䅑猠慮搠卵灰潲琢㬊ਯ⨠䙁儠䑥獣物灴楯渠⨯ਢ獵扳捲楰瑩潮⹦慱⹤敳捲楰瑩潮∠㴠≇整⁡湳睥牳⁴漠晲敱略湴汹⁡獫敤ⁱ略獴楯湳爠捯湴慣琠偲楶慣礠偲漠獵灰潲琠晲潭畲⁨敬瀠灡来献∻ਊ⼪⁃慮捥氠慣瑩潮⁦潲⁴桥⁥硩獴楮朠獵扳捲楰瑩潮⁤楡汯朠⨯ਢ獵扳捲楰瑩潮⹦潵湤⹣慮捥氢‽•䍡湣敬∻ਊ⼪⁒敳瑯牥⁡捴楯渠景爠瑨攠數楳瑩湧⁳畢獣物灴楯渠摩慬潧‪⼊≳畢獣物灴楯渮景畮搮牥獴潲攢‽•剥獴潲攢㬊ਯ⨠䵥獳慧攠景爠瑨攠數楳瑩湧⁳畢獣物灴楯渠摩慬潧‪⼊≳畢獣物灴楯渮景畮搮瑥硴∠㴠≗攠景畮搠愠獵扳捲楰瑩潮⁡獳潣楡瑥搠睩瑨⁴桩猠䅰灬攠䥄⸢㬊ਯ⨠呩瑬攠景爠瑨攠數楳瑩湧⁳畢獣物灴楯渠摩慬潧‪⼊≳畢獣物灴楯渮景畮搮瑩瑬攢‽•卵扳捲楰瑩潮⁆潵湤∻ਊ⼪⁈敬瀠慮搠獵灰潲琠卥捴楯渠桥慤敲‪⼊≳畢獣物灴楯渮桥汰∠㴠≈敬瀠慮搠獵灰潲琢㬊ਯ⨠䵡湡来⁐污渠桥慤敲‪⼊≳畢獣物灴楯渮浡湡来⹰污渢‽•䵡湡来⁐污渢㬊ਯ⨠䡥慤敲⁦潲⁴桥⁳畢獣物灴楯渠獥捴楯渠⨯ਢ獵扳捲楰瑩潮⹭慮慧攮瑩瑬攢‽•卵扳捲楰瑩潮∻ਊ⼪⁁汥牴⁣潮瑥湴⁦潲潴⁦潵湤⁳畢獣物灴楯渠⨯ਢ獵扳捲楰瑩潮⹮潴䙯畮搮慬敲琮浥獳慧攢‽•周敲攠楳漠獵扳捲楰瑩潮⁡獳潣楡瑥搠睩瑨⁴桩猠䅰灬攠䥄⸢㬊ਯ⨠䅬敲琠瑩瑬攠景爠湯琠景畮搠獵扳捲楰瑩潮‪⼊≳畢獣物灴楯渮湯瑆潵湤⹡汥牴⹴楴汥∠㴠≓畢獣物灴楯渠乯琠䙯畮搢㬊ਯ⨠噩敷⁰污湳⁢畴瑯渠瑥硴‪⼊≳畢獣物灴楯渮湯瑆潵湤⹶楥眮灬慮猢‽•噩敷⁐污湳∻ਊ⼪⁈敲漠呥硴⁦潲⁐敲獯湡氠楮景牭慴楯渠牥浯癡氠⨯ਢ獵扳捲楰瑩潮⹰楲⹨敲漢‽•䅣瑩癡瑥⁐物癡捹⁐牯渠摥獫瑯瀠瑯⁳整⁵瀠健牳潮慬⁉湦潲浡瑩潮⁒敭潶慬∻ਊ⼪⁄敳捲楰瑩潮渠桯眠瑯⁵獥⁐敲獯湡氠楮景牭慴楯渠牥浯癡氠楮⁤敳歴潰⸠周攠晩牳琠灬慣敨潬摥爠牥晥牥湣敳⁡潣慴楯渠楮⁴桥⁄敳歴潰⁡灰汩捡瑩潮⸠㱩⹥㨠卥瑴楮杳‾⁐物癡捹⁐牯㸬⁡湤⁴桥⁳散潮搬⁴桥敮甠敮瑲礮⁩⹥⸠㱉⁨慶攠愠卵扳捲楰瑩潮㸠⨯ਢ獵扳捲楰瑩潮⹰楲⹨敲潔數琢‽•䥮⁴桥⁄畣歄畣歇漠扲潷獥爠景爠摥獫瑯瀬⁧漠瑯‥ㄤ䀠慮搠捬楣欠┲⑀⁴漠来琠獴慲瑥搮∻ਊ⼪⁓整瑩湧猠牥晥牥湣敳⁡敮甠楮⁴桥⁄敳歴潰⁡灰Ⱐ偲楶慣礠偲漬⁲敦敲敮捥猠潵爠灲潤畣琠湡浥‪⼊≳畢獣物灴楯渮灩爮桥牯呥硴䱯捡瑩潮∠㴠≓整瑩湧猠㸠偲楶慣礠偲漢㬊ਯ⨠䵥湵⁩瑥洠景爠敮慢汩湧⁐敲獯湡氠䥮景牭慴楯渠剥浯癡氠潮⁄敳歴潰‪⼊≳畢獣物灴楯渮灩爮桥牯呥硴䵥湹䕮瑲礢‽•䤠桡癥⁡⁳畢獣物灴楯渢㬊ਯ⨠呥硴⁦潲⁴桥‧浡捏匧⁢畴瑯渠⨯ਢ獵扳捲楰瑩潮⹰楲⹭慣潳∠㴠≍慣∻ਊ⼪⁔數琠景爠瑨攠❗楮摯睳✠扵瑴潮‪⼊≳畢獣物灴楯渮灩爮睩湤潷猢‽•坩湤潷猢㬊ਯ⨠偲潧牥獳⁶楥眠瑩瑬攠睨敮⁣潭灬整楮朠瑨攠灵牣桡獥‪⼊≳畢獣物灴楯渮灲潧牥獳⹶楥眮捯浰汥瑩湧⹰畲捨慳攢‽•䍯浰汥瑩湧⁰畲捨慳攮⸮∻ਊ⼪⁐牯杲敳猠癩敷⁴楴汥⁷桥渠獴慲瑩湧⁴桥⁰畲捨慳攠⨯ਢ獵扳捲楰瑩潮⹰牯杲敳献癩敷⹰畲捨慳楮朮獵扳捲楰瑩潮∠㴠≐畲捨慳攠楮⁰牯杲敳献⸮∻ਊ⼪⁐牯杲敳猠癩敷⁴楴汥⁷桥渠牥獴潲楮朠灡獴⁳畢獣物灴楯渠灵牣桡獥‪⼊≳畢獣物灴楯渮灲潧牥獳⹶楥眮牥獴潲楮朮獵扳捲楰瑩潮∠㴠≒敳瑯物湧⁳畢獣物灴楯渮⸮∻ਊ⼪⁒敭潶攠晲潭⁴桩猠摥癩捥⁢畴瑯渠⨯ਢ獵扳捲楰瑩潮⹲敭潶攮晲潭⹤敶楣攮扵瑴潮∠㴠≒敭潶攠䙲潭⁔桩猠䑥癩捥∻ਊ⼪⁒敭潶攠晲潭⁤敶楣攠捯湦楲浡瑩潮⁤楡汯朠瑥硴‪⼊≳畢獣物灴楯渮牥浯癥⹦牯洮摥癩捥⹴數琢‽•奯甠睩汬漠汯湧敲⁢攠慢汥⁴漠慣捥獳⁹潵爠偲楶慣礠偲漠獵扳捲楰瑩潮渠瑨楳⁤敶楣攮⁔桩猠睩汬潴⁣慮捥氠祯畲⁳畢獣物灴楯測⁡湤⁩琠睩汬⁲敭慩渠慣瑩癥渠祯畲瑨敲⁤敶楣敳⸢㬊ਯ⨠剥浯癥⁦牯洠摥癩捥⁣潮晩牭慴楯渠摩慬潧⁴楴汥‪⼊≳畢獣物灴楯渮牥浯癥⹦牯洮摥癩捥⹴楴汥∠㴠≒敭潶攠晲潭⁴桩猠摥癩捥㼢㬊ਯ⨠剥浯癥⁳畢獣物灴楯渠扵瑴潮⁴數琠⨯ਢ獵扳捲楰瑩潮⹲敭潶攮獵扳捲楰瑩潮∠㴠≒敭潶攠卵扳捲楰瑩潮∻ਊ⼪⁒敭潶攠獵扳捲楰瑩潮⁣慮捥氠扵瑴潮⁴數琠⨯ਢ獵扳捲楰瑩潮⹲敭潶攮獵扳捲楰瑩潮⹣慮捥氢‽•䍡湣敬∻ਊ⼪⁂畴瑯渠瑥硴⁦潲⁧敮敲慬⁥牲潲敳獡来‪⼊≳畢獣物灴楯渮牥獴潲攮扡捫敮搮敲牯爮扵瑴潮∠㴠≂慣欠瑯⁓整瑩湧猢㬊ਯ⨠䅬敲琠景爠来湥牡氠敲牯爠浥獳慧攠⨯ਢ獵扳捲楰瑩潮⹲敳瑯牥⹢慣步湤⹥牲潲⹭敳獡来∠㴠≗既肙牥⁨慶楮朠瑲潵扬攠捯湮散瑩湧⸠偬敡獥⁴特⁡条楮慴敲⸢㬊ਯ⨠䅬敲琠景爠来湥牡氠敲牯爠瑩瑬攠⨯ਢ獵扳捲楰瑩潮⹲敳瑯牥⹢慣步湤⹥牲潲⹴楴汥∠㴠≓潭整桩湧⁗敮琠坲潮朢㬊ਯ⨠䅬敲琠景爠来湥牡氠敲牯爠浥獳慧攠⨯ਢ獵扳捲楰瑩潮⹲敳瑯牥⹧敮敲慬⹥牲潲⹭敳獡来∠㴠≔桥⁁灰⁓瑯牥⁷慳⁵湡扬攠瑯⁰牯捥獳⁹潵爠灵牣桡獥⸠偬敡獥⁴特⁡条楮慴敲⸢㬊ਯ⨠䅬敲琠景爠来湥牡氠敲牯爠瑩瑬攠⨯ਢ獵扳捲楰瑩潮⹲敳瑯牥⹧敮敲慬⹥牲潲⹴楴汥∠㴠≓潭整桩湧⁗敮琠坲潮朢㬊ਯ⨠䅬敲琠扵瑴潮⁴數琠景爠牥獴潲敤⁰畲捨慳攠慬敲琠⨯ਢ獵扳捲楰瑩潮⹲敳瑯牥⹳畣捥獳⹡汥牴⹢畴瑯渢‽•佋∻ਊ⼪⁁汥牴敳獡来⁦潲⁲敳瑯牥搠灵牣桡獥‪⼊≳畢獣物灴楯渮牥獴潲攮獵捣敳献慬敲琮浥獳慧攢‽•奯畲⁰畲捨慳敳⁨慶攠扥敮⁲敳瑯牥搮∻ਊ⼪⁁汥牴⁴楴汥⁦潲⁲敳瑯牥搠灵牣桡獥‪⼊≳畢獣物灴楯渮牥獴潲攮獵捣敳献慬敲琮瑩瑬攢‽•奯痢肙牥⁡汬⁳整⸢㬊ਯ⨠卵扴楴汥⁩渠桥慤敲⁷桥渠獵扳捲楢敤‪⼊≳畢獣物灴楯渮獵扳捲楢敤∠㴠≓畢獣物扥搢㬊ਯ⨠卵扳捲楰瑩潮⁅硰楲敤⁄慴愮⁔桩猠牥慤猠慳‧奯畲⁳畢獣物灴楯渠數灩牥搠潮
摡瑥⤧‪⼊≳畢獣物灴楯渮獵扳捲楰瑩潮⹥硰楲敤⹣慰瑩潮∠㴠≙潵爠獵扳捲楰瑩潮⁥硰楲敤渠╀∻ਊ⼪⁓畢獣物灴楯渠數灩牡瑩潮⁩湦漮⁔桩猠牥慤猠慳‧奯畲
浯湴桬礠潲⁡湮畡氩⁳畢獣物灴楯渠數灩牥猠潮
摡瑥⤧‪⼊≳畢獣物灴楯渮獵扳捲楰瑩潮⹥硰楲楮朮捡灴楯渢‽•奯畲‥ㄤ䀠獵扳捲楰瑩潮⁥硰楲敳渠┲⑀⸢㬊ਯ⨠卵扳捲楰瑩潮⁲敮敷慬⁩湦漮⁔桩猠牥慤猠慳‧奯畲
浯湴桬礠潲⁡湮畡氩⁳畢獣物灴楯渠牥湥睳渠⡤慴攩✠⨯ਢ獵扳捲楰瑩潮⹳畢獣物灴楯渮牥湥睩湧⹣慰瑩潮∠㴠≙潵爠┱⑀⁳畢獣物灴楯渠牥湥睳渠┲⑀⸢㬊ਯ⨠乡癩条瑩潮⁢慲⁔楴汥⁦潲⁳畢獣物灴楯湳‪⼊≳畢獣物灴楯渮瑩瑬攢‽•偲楶慣礠偲漢㬊ਯ⨠䵥獳慧攠捯湦楲浩湧⁴桡琠牥捯癥特⁣潤攠睡猠捯灩敤⁴漠捬楰扯慲搠⨯ਢ獹湣⹣潤攮捯灩敤∠㴠≒散潶敲礠捯摥⁣潰楥搠瑯⁣汩灢潡牤∻ਊ⼪⁃慰瑩潮⁦潲⁡⁢畴瑯渠瑯⁤敬整攠卹湣⁳敲癥爠摡瑡‪⼊≳祮挮摥汥瑥⹡汬⹣潮晩牭⹡捴楯渢‽•䑥汥瑥⁓敲癥爠䑡瑡∻ਊ⼪⁍敳獡来⁦潲⁴桥⁤楡汯朠瑯⁣潮晩牭⁤敬整楮朠卹湣⁳敲癥爠摡瑡‪⼊≳祮挮摥汥瑥⹡汬⹣潮晩牭⹭敳獡来∠㴠≁汬⁤敶楣敳⁷楬氠扥⁤楳捯湮散瑥搠慮搠祯畲⁳祮捥搠摡瑡⁷楬氠扥⁤敬整敤⁦牯洠瑨攠獥牶敲⸢㬊ਯ⨠呩瑬攠潦⁴桥⁤楡汯朠瑯⁣潮晩牭⁤敬整楮朠卹湣⁳敲癥爠摡瑡‪⼊≳祮挮摥汥瑥⹡汬⹣潮晩牭⹴楴汥∠㴠≄敬整攠卥牶敲⁄慴愿∻ਊ⼪⁃慰瑩潮⁦潲⁡⁢畴瑯渠瑯⁲敭潶攠摥癩捥⁦牯洠卹湣‪⼊≳祮挮牥浯癥ⵤ敶楣攮慣瑩潮∠㴠≒敭潶攢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≳祮挮牥浯癥ⵤ敶楣攮浥獳慧攢‽•尢╀尢⁷楬氠湯潮来爠扥⁡扬攠瑯⁡捣敳猠祯畲⁳祮捥搠摡瑡⸢㬊ਯ⨠呩瑬攠潦⁴桥⁤楡汯朠瑯⁲敭潶攠摥癩捥⁦牯洠卹湣‪⼊≳祮挮牥浯癥ⵤ敶楣攮瑩瑬攢‽•剥浯癥⁄敶楣政∻ਊ⼪⁃慰瑩潮⁦潲⁡⁢畴瑯渠瑯⁲敭潶攠捵牲敮琠摥癩捥⁦牯洠卹湣‪⼊≳祮挮瑵牮⹯晦⹣潮晩牭⹡捴楯渢‽•剥浯癥∻ਊ⼪⁍敳獡来⁦潲⁴桥⁤楡汯朠瑯⁣潮晩牭⁴畲湩湧晦⁓祮挠⨯ਢ獹湣⹴畲渮潦昮捯湦楲洮浥獳慧攢‽•周楳⁄敶楣攠睩汬漠汯湧敲⁢攠慢汥⁴漠慣捥獳⁹潵爠獹湣敤⁤慴愮∻ਊ⼪⁔楴汥映瑨攠摩慬潧⁴漠捯湦楲洠瑵牮楮朠潦映卹湣‪⼊≳祮挮瑵牮⹯晦⹣潮晩牭⹴楴汥∠㴠≔畲渠佦映卹湣㼢㬊ਯ⨠剥慳潮⁦潲⁡畴栠睨敮⁳整瑩湧⁵瀠卹湣‪⼊≳祮挮畳敲⹡畴栮牥慳潮∠㴠≕湬潣欠摥癩捥⁴漠獥琠異⁓祮挠☠䉡捫異∻ਊ⼪⁄慴愠獹湣楮朠畮慶慩污扬攠睡牮楮朠浥獳慧攠⨯ਢ獹湣⹷慲湩湧⹤慴愮獹湣楮朮摩獡扬敤∠㴠≓潲特Ⱐ扵琠卹湣…⁂慣歵瀠楳⁣畲牥湴汹⁵湡癡楬慢汥⸠偬敡獥⁴特⁡条楮慴敲⸢㬊ਯ⨠䑡瑡⁳祮捩湧⁵湡癡楬慢汥⁷慲湩湧敳獡来‪⼊≳祮挮睡牮楮朮摡瑡⹳祮捩湧⹤楳慢汥搮異杲慤攮牥煵楲敤∠㴠≓潲特Ⱐ扵琠卹湣…⁂慣歵瀠楳漠汯湧敲⁡癡楬慢汥⁩渠瑨楳⁡灰⁶敲獩潮⸠偬敡獥⁵灤慴攠䑵捫䑵捫䝯⁴漠瑨攠污瑥獴⁶敲獩潮⁴漠捯湴楮略⸢㬊ਯ⨠䅣捥獳楢楬楴礠污扥氠潮⁲敭潶攠扵瑴潮‪⼊≴慢⹣汯獥⹨潭攢‽•䍬潳攠桯浥⁴慢∻ਊ⼪⁁捣敳楢楬楴礠污扥氺⁦楲獴⁳瑲楮朠楳⁷敢獩瑥⁴楴汥Ⱐ獥捯湤⁩猠慤摲敳猠⨯ਢ瑡戮捬潳攮睩瑨⹴楴汥⹡湤⹡摤牥獳∠㴠≃汯獥⁜∥ㄤ䁜∠慴‥㈤䀢㬊ਯ⨠䅣捥獳楢楬楴礠污扥氠潮⁴慢⁣敬氠⨯ਢ瑡戮潰敮⹨潭攢‽•佰敮⁨潭攠瑡戢㬊ਯ⨠䅣捥獩扩汩瑹慢敬㨠晩牳琠獴物湧⁩猠睥扳楴攠瑩瑬攬⁳散潮搠楳⁡摤牥獳‪⼊≴慢⹯灥渮睩瑨⹴楴汥⹡湤⹡摤牥獳∠㴠≏灥渠尢┱⑀尢⁡琠┲⑀∻ਊ⼪⁔慢⁓睩瑣桥爠䅣捥獳楢楬楴礠䱡扥氠⨯ਢ瑡戮獷楴捨敲⹡捣敳獩扩汩瑹⹬慢敬∠㴠≔慢⁓睩瑣桥爢㬊ਯ⨠䑥獣物灴楯渠瑥硴⁦潲⁴桥⁴數琠獩穥⁡摪畳瑭敮琠獥瑴楮朠⨯ਢ瑥硴卩穥⹤敳捲楰瑩潮∠㴠≃桯潳攠祯畲⁰牥晥牲敤⁴數琠獩穥⸠坥扳楴敳⁹潵⁶楥眠楮⁄畣歄畣歇漠睩汬⁡摪畳琠瑯⁩琮∻ਊ⼪⁒数污捥浥湴⁳瑲楮朠楳⁡⁣畲牥湴⁰敲捥湴⁶慬略⁥⹧⸠✱㈰┧‪⼊≴數瑓楺攮景潴敲∠㴠≔數琠卩穥‭‥䀢㬊ਯ⨠䑡牫⁔桥浥⁥湴特‪⼊≴桥浥⹡捣⹤慲欢‽•䑡牫∻ਊ⼪⁓桯牴⁥湴特⁦潲⁄敦慵汴⁓祳瑥洠瑨敭攠⨯ਢ瑨敭攮慣挮摥晡畬琢‽•卹獴敭∻ਊ⼪⁌楧桴⁔桥浥⁥湴特‪⼊≴桥浥⹡捣⹬楧桴∠㴠≌楧桴∻ਊ⼪⁄慲欠周敭攠敮瑲礠⨯ਢ瑨敭攮湡浥⹤慲欢‽•䑡牫∻ਊ⼪⁅湴特⁦潲⁄敦慵汴⁓祳瑥洠瑨敭攠⨯ਢ瑨敭攮湡浥⹤敦慵汴∠㴠≓祳瑥洠䑥晡畬琢㬊ਯ⨠䱩杨琠周敭攠敮瑲礠⨯ਢ瑨敭攮湡浥⹬楧桴∠㴠≌楧桴∻ਊ⼪⁃潮晩牭慴楯渠潦⁡渠慣瑩潮‭⁰潰畬慴敤⁷楴栠愠摯浡楮慭攠⨯ਢ瑯慳琮灲潴散瑩潮⹤楳慢汥搢‽•偲楶慣礠偲潴散瑩潮⁤楳慢汥搠景爠╀∻ਊ⼪⁃潮晩牭慴楯渠潦⁡渠慣瑩潮‭⁰潰畬慴敤⁷楴栠愠摯浡楮慭攠⨯ਢ瑯慳琮灲潴散瑩潮⹤楳慢汥搮慮搮瑯杧汥⹲数潲琮獥湴∠㴠≐物癡捹⁐牯瑥捴楯湳⁤楳慢汥搠景爠╀⁡湤⁲数潲琠獥湴⸢㬊ਯ⨠䍯湦楲浡瑩潮映慮⁡捴楯渠ⴠ灯灵污瑥搠睩瑨⁡⁤潭慩渠湡浥‪⼊≴潡獴⹰牯瑥捴楯渮敮慢汥搢‽•偲楶慣礠偲潴散瑩潮⁥湡扬敤⁦潲‥䀢㬊ਯ⨠䅵瑯捯浰汥瑥⁳敬散瑥搠獵杧敳瑩潮⁩湴漠瑨攠䅤摲敳猠䉡爠扵瑴潮⁡捣敳獩扩汩瑹慢敬‪⼊≶潩捥潶敲⹡捴楯渮獵杧敳瑩潮⹡畴潣潭灬整攢‽•䅵瑯捯浰汥瑥⁳畧来獴楯渢㬊ਯ⨠噯楣攭潶敲⁴楴汥⁦潲⁡⁂潯歭慲欠獵杧敳瑩潮⸠乯畮‪⼊≶潩捥潶敲⹳畧来獴楯渮瑹灥⹢潯歭慲欢‽•䉯潫浡牫∻ਊ⼪⁓敡牣栠景爠獵杧敳瑩潮⁡捴楯渠慣捥獳楢楬楴礠瑩瑬攠⨯ਢ癯楣敯癥爮獵杧敳瑩潮⹴祰攮獥慲捨∠㴠≓敡牣栠慴⁄畣歄畣歇漢㬊ਯ⨠佰敮⁳畧来獴敤⁷敢獩瑥⁡捴楯渠慣捥獳楢楬楴礠瑩瑬攠⨯ਢ癯楣敯癥爮獵杧敳瑩潮⹴祰攮睥扳楴攢‽•佰敮⁷敢獩瑥∻ਊ⼪⁎漠浩捲潰桯湥⁰敲浩獳楯渠慬敲琠慣瑩潮⁢畴瑯渠瑯灥渠瑨攠獥瑴楮杳⁡灰‪⼊≶潩捥卥慲捨⹡汥牴⹮漭灥牭楳獩潮⹡捴楯渮獥瑴楮杳∠㴠≓整瑩湧猢㬊ਯ⨠䵥獳慧攠景爠慬敲琠睡牮楮朠瑨攠畳敲⁡扯畴楳獩湧楣牯灨潮攠灥牭楳獩潮‪⼊≶潩捥卥慲捨⹡汥牴⹮漭灥牭楳獩潮⹭敳獡来∠㴠≐汥慳攠慬汯眠䵩捲潰桯湥⁡捣敳猠楮⁩体⁓祳瑥洠卥瑴楮杳⁦潲⁄畣歄畣歇漠瑯⁵獥⁶潩捥⁦敡瑵牥献∻ਊ⼪⁏䬠扵瑴潮⁡汥牴⁷慲湩湧⁴桥⁵獥爠慢潵琠浩獳楮朠浩捲潰桯湥⁰敲浩獳楯渠⨯ਢ癯楣敓敡牣栮慬敲琮湯⵰敲浩獳楯渮潫∠㴠≏䬢㬊ਯ⨠呩瑬攠景爠慬敲琠睡牮楮朠瑨攠畳敲⁡扯畴楳獩湧楣牯灨潮攠灥牭楳獩潮‪⼊≶潩捥卥慲捨⹡汥牴⹮漭灥牭楳獩潮⹴楴汥∠㴠≍楣牯灨潮攠䅣捥獳⁒敱畩牥搢㬊ਯ⨠䍡湣敬⁢畴瑯渠景爠癯楣攠獥慲捨‪⼊≶潩捥卥慲捨⹣慮捥氢‽•䍡湣敬∻ਊ⼪⁖潩捥⵳敡牣栠景潴敲潴攠睩瑨渭摥癩捥⁰物癡捹⁷慲湩湧‪⼊≶潩捥卥慲捨⹦潯瑥爮湯瑥∠㴠≁摤⁐物癡瑥⁖潩捥⁓敡牣栠潰瑩潮⁴漠瑨攠慤摲敳猠扡爮⁁畤楯⁩猠湯琠獴潲敤爠獨慲敤⁷楴栠慮祯湥Ⱐ楮捬畤楮朠䑵捫䑵捫䝯⸢㬊ਯ⨠噯楣攭獥慲捨⁦潯瑥爠湯瑥⁷楴栠潮ⵤ敶楣攠灲楶慣礠睡牮楮朠⨯ਢ癯楣敓敡牣栮景潴敲⹮潴攮潬搢‽•䅵摩漠楳⁰牯捥獳敤渭摥癩捥⸠䥴❳潴⁳瑯牥搠潲⁳桡牥搠睩瑨⁡湹潮攬⁩湣汵摩湧⁄畣歄畣歇漮∻ਊ⼪⁃慮捥氠慣瑩潮⁦潲⁴桥⁡汥牴⁷桥渠瑨攠獵扳捲楰瑩潮⁥硰楲敳‪⼊≶灮⹡捣敳猭牥癯步搮慬敲琮慣瑩潮⹣慮捥氢‽•䑩獭楳猢㬊ਯ⨠偲業慲礠慣瑩潮⁦潲⁴桥⁡汥牴⁷桥渠瑨攠獵扳捲楰瑩潮⁥硰楲敳‪⼊≶灮⹡捣敳猭牥癯步搮慬敲琮慣瑩潮⹳畢獣物扥∠㴠≓畢獣物扥∻ਊ⼪⁁汥牴敳獡来⁦潲⁴桥⁡汥牴⁷桥渠瑨攠偲楶慣礠偲漠獵扳捲楰瑩潮⁥硰楲敳猠⨯ਢ癰渮慣捥獳⵲敶潫敤⹡汥牴⹭敳獡来∠㴠≓畢獣物扥⁴漠偲楶慣礠偲漠瑯⁲散潮湥捴⁄畣歄畣歇漠噐丮∻ਊ⼪⁁汥牴⁴楴汥⁦潲⁴桥⁡汥牴⁷桥渠瑨攠偲楶慣礠偲漠獵扳捲楰瑩潮⁥硰楲敳‪⼊≶灮⹡捣敳猭牥癯步搮慬敲琮瑩瑬攢‽•噐丠摩獣潮湥捴敤⁤略⁴漠數灩牥搠獵扳捲楰瑩潮∻ਊ⼪⁔楴汥⁦潲⁴桥⁖偎⁷楤来琠潮扯慲摩湧⁳捲敥渠⨯ਢ癰渮慤摗楤来琮獥瑴楮杳⹴楴汥∠㴠≆楮搠慮搠獥汥捴⁄畣歄畣歇漮⁔桥渠獷楰攠瑯⁖偎⁡湤⁳敬散琠䅤搠坩摧整⸢㬊ਯ⨠呩瑬攠景爠瑨攠䍡湣敬⁢畴瑯渠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹢畴瑯渮捡湣敬∠㴠≃慮捥氢㬊ਯ⨠呩瑬攠景爠瑨攠䑯湥⁢畴瑯渠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹢畴瑯渮摯湥∠㴠≄潮攢㬊ਯ⨠呩瑬攠景爠瑨攠卵扭楴⁢畴瑯渠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹢畴瑯渮獵扭楴∠㴠≓畢浩琢㬊ਯ⨠呩瑬攠景爠瑨攠卵扭楴瑩湧⁳瑡瑥映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮扵瑴潮⹳畢浩瑴楮朢‽•卵扭楴瑩湧꘢㬊ਯ⨠呩瑬攠景爠瑨攠扲潷獥爠捲慳栯晲敥穥⁣慴敧潲礠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹣慴敧潲礮扲潷獥爭捲慳栭潲ⵦ牥敺攢‽•噐丠捡畳敳⁢牯睳敲⁴漠捲慳栠潲⁦牥敺攢㬊ਯ⨠呩瑬攠景爠瑨攠❖偎⁦慩汳⁴漠捯湮散琧⁣慴敧潲礠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹣慴敧潲礮晡楬猭瑯ⵣ潮湥捴∠㴠≖偎⁦慩汳⁴漠捯湮散琢㬊ਯ⨠呩瑬攠景爠瑨攠❖偎⁦敡瑵牥⁲敱略獴✠捡瑥杯特映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮捡瑥杯特⹦敡瑵牥⵲敱略獴∠㴠≖偎⁦敡瑵牥⁲敱略獴∻ਊ⼪⁔楴汥⁦潲⁴桥⁣慴敧潲礠❖偎⁣慵獥猠楳獵敳⁷楴栠潴桥爠慰灳爠睥扳楴敳✠捡瑥杯特映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮捡瑥杯特⹩獳略猭睩瑨ⵡ灰猢‽•噐丠捡畳敳⁩獳略猠睩瑨瑨敲⁡灰猠潲⁷敢獩瑥猢㬊ਯ⨠呩瑬攠景爠瑨攠汯捡氠摥癩捥⁣潮湥捴楶楴礠捡瑥杯特映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮捡瑥杯特⹬潣慬ⵤ敶楣攭捯湮散瑩癩瑹∠㴠≖偎⁷潮❴整攠捯湮散琠瑯潣慬⁤敶楣攢㬊ਯ⨠呩瑬攠景爠瑨攠❯瑨敲⁖偎⁦敥摢慣欧⁣慴敧潲礠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹣慴敧潲礮潴桥爢‽•佴桥爠噐丠晥敤扡捫∻ਊ⼪⁔楴汥⁦潲⁴桥⁣慴敧潲礠獥汥捴楯渠獴慴攠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹣慴敧潲礮獥汥捴ⵣ慴敧潲礢‽•卥汥捴⁡⁣慴敧潲礢㬊ਯ⨠呩瑬攠景爠瑨攠❖偎⁩猠瑯漠獬潷✠捡瑥杯特映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮捡瑥杯特⹴潯⵳汯眢‽•噐丠捯湮散瑩潮⁩猠瑯漠獬潷∻ਊ⼪⁔楴汥⁦潲⁴桥‧畮慢汥⁴漠楮獴慬氧⁣慴敧潲礠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹣慴敧潲礮畮慢汥⵴漭楮獴慬氢‽•啮慢汥⁴漠楮獴慬氠噐丢㬊ਯ⨠呩瑬攠景爠瑨攠晥敤扡捫⁳敮琠癩敷⁤敳捲楰瑩潮映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮獥湤楮札捯湦楲浡瑩潮⹤敳捲楰瑩潮∠㴠≙潵爠晥敤扡捫⁷楬氠桥汰⁵猠業灲潶攠瑨敜湄畣歄畣歇漠噐丮∻ਊ⼪⁔楴汥⁦潲⁴桥⁦敥摢慣欠獥湤楮朠敲牯爠瑥硴映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮獥湤楮札捯湦楲浡瑩潮⹥牲潲∠㴠≗攠捯畬摮❴⁳敮搠祯畲⁦敥摢慣欠物杨琠湯眬⁰汥慳攠瑲礠慧慩渮∻ਊ⼪⁔楴汥⁦潲⁴桥⁦敥摢慣欠獥湴⁶楥眠瑩瑬攠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹳敮摩湧ⵣ潮晩牭慴楯渮瑩瑬攢‽•周慮欠祯甡∻ਊ⼪⁔潡獴敳獡来⁷桥渠瑨攠噐丠晥敤扡捫⁦潲洠楳⁳畢浩瑴敤⁳畣捥獳晵汬礠⨯ਢ癰渮晥敤扡捫ⵦ潲洮獵扭楴瑥搮浥獳慧攢‽•周慮欠奯甡⁆敥摢慣欠獵扭楴瑥搮∻ਊ⼪⁔數琠景爠瑨攠扯摹映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮瑥硴ⴱ∠㴠≐汥慳攠摥獣物扥⁷桡琧猠桡灰敮楮本⁷桡琠祯甠數灥捴敤⁴漠桡灰敮Ⱐ慮搠瑨攠獴数猠瑨慴敤⁴漠瑨攠楳獵攺∻ਊ⼪⁔數琠景爠瑨攠扯摹映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮瑥硴ⴲ∠㴠≉渠慤摩瑩潮⁴漠瑨攠摥瑡楬猠敮瑥牥搠楮瑯⁴桩猠景牭Ⱐ祯畲⁡灰⁩獳略⁲数潲琠睩汬⁣潮瑡楮㨢㬊ਯ⨠䉵汬整⁴數琠景爠瑨攠扯摹映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮瑥硴ⴳ∠㴠⋢肢⁗桥瑨敲⁳灥捩晩挠䑵捫䑵捫䝯⁦敡瑵牥猠慲攠敮慢汥搢㬊ਯ⨠䉵汬整⁴數琠景爠瑨攠扯摹映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮瑥硴ⴴ∠㴠⋢肢⁁杧牥条瑥⁄畣歄畣歇漠慰瀠摩慧湯獴楣猢㬊ਯ⨠呥硴⁦潲⁴桥⁢潤礠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹴數琭㔢‽•䉹⁴慰灩湧⁜≓畢浩瑜∠䤠慧牥攠瑨慴⁄畣歄畣歇漠浡礠畳攠瑨攠楮景牭慴楯渠楮⁴桩猠牥灯牴⁦潲⁰畲灯獥猠潦⁩浰牯癩湧⁴桥⁡灰❳⁦敡瑵牥献∻ਊ⼪⁔楴汥⁦潲⁥慣栠獣牥敮映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮瑩瑬攢‽•䡥汰⁉浰牯癥⁴桥⁄畣歄畣歇漠噐丢㬊ਯ⨠噐丠獥瑴楮杳⁳捲敥渠捥汬⁴數琠景爠慤摩湧⁴桥⁖偎⁷楤来琠瑯⁴桥⁨潭攠獣牥敮‪⼊≶灮⹳整瑩湧献慤搮睩摧整∠㴠≁摤⁖偎⁗楤来琠瑯⁈潭攠卣牥敮∻ਊ⼪⁄楳捬慩浥爠景爠瑨攠䑎匠卥牶敲⁳散瑩潮渠瑨攠䑎匠卥牶敲⁳捲敥渠⨯ਢ癰渮獥瑴楮杳⹤湳⹳散瑩潮ⵤ楳捬慩浥爢‽•啳楮朠愠捵獴潭⁄乓⁳敲癥爠捡渠業灡捴⁢牯睳楮朠獰敥摳⁡湤⁥硰潳攠祯畲⁡捴楶楴礠瑯⁴桩牤⁰慲瑩敳⁩映瑨攠獥牶敲⁩獮❴⁳散畲攠潲⁲敬楡扬攮∻ਊ⼪⁈敡摥爠瑥硴⁦潲⁴桥⁄乓⁳散瑩潮渠瑨攠噐丠卥瑴楮杳⁳捲敥渠⨯ਢ癰渮獥瑴楮杳⹤湳⹳散瑩潮⵨敡摥爢‽•䑎匢㬊ਯ⨠呩瑬攠景爠瑨攠䅰灬礠扵瑴潮渠瑨攠䑎匠卥牶敲⁳整瑩湧⁳捲敥渠⨯ਢ癰渮獥瑴楮杳⹤湳⹳敲癥爮慰灬礮扵瑴潮⹴楴汥∠㴠≁灰汹∻ਊ⼪⁄敦慵汴⁶慬略⁦潲⁴桥⁄乓⁓敲癥爠牯眠潮⁴桥⁖偎⁓整瑩湧猠獣牥敮‪⼊≶灮⹳整瑩湧献摮献獥牶敲⹤敦慵汴⹶慬略∠㴠≄畣歄畣歇漢㬊ਯ⨠呩瑬攠景爠瑨攠䥐瘴⁁摤牥獳⁳整瑩湧‪⼊≶灮⹳整瑩湧献摮献獥牶敲⹩灶㐮瑩瑬攢‽•䥐瘴⁁摤牥獳∻ਊ⼪⁃畳瑯洠潰瑩潮⁦潲⁴桥⁄乓⁓敲癥爠獥瑴楮朠⨯ਢ癰渮獥瑴楮杳⹤湳⹳敲癥爮潰瑩潮⹣畳瑯洢‽•䍵獴潭∻ਊ⼪⁒散潭浥湤敤灴楯渠景爠瑨攠䑎匠卥牶敲⁳整瑩湧‪⼊≶灮⹳整瑩湧献摮献獥牶敲⹯灴楯渮摥晡畬琢‽•䑵捫䑵捫䝯
剥捯浭敮摥搩∻ਊ⼪⁔楴汥⁦潲⁴桥⁄乓⁓敲癥爠獥瑴楮朠獣牥敮‪⼊≶灮⹳整瑩湧献摮献獥牶敲⹳捲敥渮瑩瑬攢‽•䑎匠卥牶敲∻ਊ⼪⁔楴汥⁦潲⁴桥⁄乓⁓敲癥爠牯眠潮⁴桥⁖偎⁓整瑩湧猠獣牥敮‪⼊≶灮⹳整瑩湧献摮献獥牶敲⹴楴汥∠㴠≄乓⁓敲癥爢㬊ਯ⨠呩瑬攠景爠瑨攠扵瑴潮⁴漠敮慢汥⁰畳栠湯瑩晩捡瑩潮猠楮⁳祳瑥洠獥瑴楮杳‪⼊≷慩瑬楳琮慬汯眭湯瑩晩捡瑩潮猢‽•䅬汯眠乯瑩晩捡瑩潮猢㬊ਯ⨠䉯摹⁴數琠景爠瑨攠睡楴汩獴潴楦楣慴楯渠⨯ਢ睡楴汩獴⹡癡楬慢汥⹮潴楦楣慴楯渮扯摹∠㴠≏灥渠祯畲⁩湶楴攢㬊ਯ⨠呩瑬攠景爠瑨攠捯灹⁡捴楯渠⨯ਢ睡楴汩獴⹣潰礢‽•䍯灹∻ਊ⼪⁌慢敬⁴數琠景爠瑨攠楮癩瑥⁣潤攠⨯ਢ睡楴汩獴⹩湶楴攭捯摥∠㴠≉湶楴攠䍯摥∻ਊ⼪⁓瑥瀠瑩瑬攠潮⁴桥⁩湶楴攠獣牥敮‪⼊≷慩瑬楳琮楮癩瑥⵳捲敥渮獴数⹴楴汥∠㴠≓瑥瀠╤∻ਊ⼪⁔楴汥⁦潲⁴桥⁩湶楴攠捯摥⁳捲敥渠⨯ਢ睡楴汩獴⹩湶楴攭獣牥敮⹹潵牥⵩湶楴敤∠㴠≙潵饲攠䥮癩瑥搡∻ਊ⼪⁔楴汥⁦潲⁴桥⁊潩渠坡楴汩獴⁳捲敥渠⨯ਢ睡楴汩獴⹪潩渭睡楴汩獴⵳捲敥渮橯楮∠㴠≊潩渠瑨攠偲楶慴攠坡楴汩獴∻ਊ⼪⁔敭灯牡特⁳瑡瑵猠瑥硴⁦潲⁴桥⁊潩渠坡楴汩獴⁳捲敥渠⨯ਢ睡楴汩獴⹪潩渭睡楴汩獴⵳捲敥渮橯楮楮朢‽•䩯楮楮朠坡楴汩獴⸮⸢㬊ਯ⨠呩瑬攠景爠瑨攠卨慲攠䱩湫⁢畴瑯渠⨯ਢ睡楴汩獴⹪潩渭睡楴汩獴⵳捲敥渮獨慲攭汩湫∠㴠≓桡牥⁌楮欢㬊ਯ⨠乯瑩晩捡瑩潮⁴數琠景爠瑨攠睡楴汩獴‪⼊≷慩瑬楳琮橯楮敤⹮漭湯瑩晩捡瑩潮⹧整⵮潴楦楣慴楯渢‽•乯瑩晹⁍攢㬊ਯ⨠呩瑬攠景爠瑨攠慬敲琠瑯⁣潮晩牭⁥湡扬楮朠湯瑩晩捡瑩潮猠⨯ਢ睡楴汩獴⹪潩湥搮湯⵮潴楦楣慴楯渮来琭湯瑩晩捡瑩潮ⵣ潮晩牭慴楯渭瑩瑬攢‽•䝥琠愠湯瑩晩捡瑩潮⁷桥渠楴饳⁹潵爠瑵牮㼢㬊ਯ⨠䍡湣敬⁢畴瑯渠楮⁴桥⁡汥牴⁴漠捯湦楲洠敮慢汩湧潴楦楣慴楯湳‪⼊≷慩瑬楳琮橯楮敤⹮漭湯瑩晩捡瑩潮⹮漭瑨慮歳∠㴠≎漠周慮歳∻ਊ⼪⁔數琠畳敤⁦潲⁴桥⁎潴楦楣慴楯湳⁄楳慢汥搠獴慴攠⨯ਢ睡楴汩獴⹮潴楦楣慴楯渮摩獡扬敤∠㴠≗攠捡渠湯瑩晹⁹潵⁷桥渠楴饳⁹潵爠瑵牮Ⱐ扵琠湯瑩晩捡瑩潮猠慲攠捵牲敮瑬礠摩獡扬敤⁦潲⁄畣歄畣歇漮∻ਊ⼪⁐物癡捹⁤楳捬慩浥爠景爠瑨攠坡楴汩獴⁦敡瑵牥‪⼊≷慩瑬楳琮灲楶慣礭摩獣污業敲∠㴠≙潵⁷潮饴敥搠瑯⁳桡牥⁡湹⁰敲獯湡氠楮景牭慴楯渠瑯潩渠瑨攠睡楴汩獴⸠奯痢肙汬⁳散畲攠祯畲⁰污捥⁩渠汩湥⁷楴栠愠瑩浥獴慭瀠瑨慴⁥硩獴猠獯汥汹渠祯畲⁤敶楣攠獯⁷攠捡渠湯瑩晹⁹潵⁷桥渠楴饳⁹潵爠瑵牮⸢㬊ਯ⨠呩瑬攠景爠瑨攠煵敵攠獣牥敮‪⼊≷慩瑬楳琮煵敵攭獣牥敮⹯渭瑨攭汩獴∠㴠≙潵饲攠潮⁴桥楳琡∻ਊ⼪⁔楴汥⁦潲⁴桥⁳整瑩湧猠獵扴楴汥‪⼊≷慩瑬楳琮獥瑴楮杳⹤潷湬潡搭慶慩污扬攢‽•䑯睮汯慤⁡癡楬慢汥∻ਊ⼪⁔楴汥⁦潲⁴桥⁳桡牥⁳桥整⁥湴特‪⼊≷慩瑬楳琮獨慲攭獨敥琮瑩瑬攢‽•奯痢肙牥⁉湶楴敤™㬊ਯ⨠䍯湦楲浡瑩潮敳獡来‪⼊≷敢⹵牬⹲敭潶攮晡癯物瑥⹤潮攢‽•䙡癯物瑥⁲敭潶敤∻ਊ⼪⁃潮晩牭慴楯渠浥獳慧攠⨯ਢ睥戮畲氮獡癥⹢潯歭慲欮摯湥∠㴠≂潯歭慲欠慤摥搢㬊ਯ⨠䙬潡瑩湧⁉湦漠浥獳慧攠⨯ਢ睥戮畲氮獡癥⹢潯歭慲欮數楳瑳∠㴠≂潯歭慲欠慬牥慤礠獡癥搢㬊ਯ⨠䙬潡瑩湧敳獡来⁩湤楣慴楮朠晡楬畲攠⨯ਢ睥戮畲氮獡癥⹢潯歭慲欮湯湥∠㴠≎漠睥扰慧攠瑯⁢潯歭慲欢㬊ਯ⨠䍯湦楲浡瑩潮敳獡来‪⼊≷敢⹵牬⹳慶攮晡癯物瑥⹤潮攢‽•䙡癯物瑥⁡摤敤∻ਊ⼪⁃慮捥氠扵瑴潮⁦潲⁊慶慓捲楰琠慬敲瑳‪⼊≷敢䩓䅬敲琮捡湣敬⹢畴瑯渢‽•䍡湣敬∻ਊ⼪⁏䬠扵瑴潮⁦潲⁊慶慓捲楰琠慬敲瑳‪⼊≷敢䩓䅬敲琮佋⹢畴瑯渢‽•佋∻ਊ⼪⁁汥牴⁴楴汥⁥硰污楮楮朠瑨攠浥獳慧攠楳⁳桯睮⁢礠愠睥扳楴攠⨯ਢ睥扊十汥牴⹷敢獩瑥⵭敳獡来⹦潲浡琢‽•䄠浥獳慧攠晲潭‥䀺∻ਊ⼪⁔楴汥⁦潲⁴桥⁗楮摯睳⁷慩瑬楳琠扵瑴潮⁲敤楲散瑩湧⁴漠䵡挠睡楴汩獴‪⼊≷楮摯睳⵷慩瑬楳琮橯楮⵷慩瑬楳琭獣牥敮⹭慣⵷慩瑬楳琢‽•䱯潫楮朠景爠瑨攠䵡挠癥牳楯渿∻ਊ⼪⁔楴汥⁦潲⁴桥⁳整瑩湧猠獵扴楴汥‪⼊≷楮摯睳⵷慩瑬楳琮獥瑴楮杳⹢牯睳攭灲楶慴敬礢‽•䉲潷獥⁰物癡瑥汹⁷楴栠潵爠慰瀠景爠坩湤潷猢㬊ਯ⨠䵥獳慧攠畳敤⁷桥渠獨慲楮朠瑯⁩䵥獳慧攠⨯ਢ睩湤潷猭睡楴汩獴⹳桡牥⵳桥整⹭敳獡来∠㴠≒敡摹⁴漠獴慲琠扲潷獩湧⁰物癡瑥汹渠坩湤潷猿ਊ噩獩琠瑨楳⁕剌渠祯畲⁃潭灵瑥爠瑯⁤潷湬潡携੨瑴灳㨯⽤畣此畣歧漮捯洯睩湤潷猢㬊ਯ⨠卵浭慲礠瑥硴⁦潲⁴桥⁗楮摯睳⁢牯睳敲⁷慩瑬楳琠⨯ਢ睩湤潷猭睡楴汩獴⹳畭浡特∠㴠≄畣歄畣歇漠景爠坩湤潷猠桡猠睨慴⁹潵敥搠瑯⁢牯睳攠睩瑨潲攠灲楶慣礠鐠灲楶慴攠獥慲捨Ⱐ瑲慣步爠扬潣歩湧Ⱐ景牣敤⁥湣特灴楯測⁡湤⁣潯歩攠灯瀭異⁢汯捫楮本⁰汵猠浯牥⁢敳琭楮ⵣ污獳⁰牯瑥捴楯湳渠瑨攠睡礮∻ਊ⼪⁔楴汥⁦潲⁴桥⁗楮摯睳⁗慩瑬楳琠晥慴畲攠⨯ਢ睩湤潷猭睡楴汩獴⹴楴汥∠㴠≄畣歄畣歇漠䅰瀠景爠坩湤潷猢㬊ਯ⨠呩瑬攠景爠瑨攠坩湤潷猠扲潷獥爠摯睮汯慤楮欠灡来‪⼊≷楮摯睳⵷慩瑬楳琮睡楴汩獴ⵤ潷湬潡搭獣牥敮⹴特ⵤ畣此畣歧漭景爭睩湤潷猢‽•䝥琠䑵捫䑵捫䝯⁦潲⁗楮摯睳™㬊 \ No newline at end of file diff --git a/OpenAction/ActionViewController.swift b/OpenAction/ActionViewController.swift index 3aaae8e55d..2a4c493ebf 100644 --- a/OpenAction/ActionViewController.swift +++ b/OpenAction/ActionViewController.swift @@ -22,6 +22,7 @@ import UIKit import MobileCoreServices import Core import UniformTypeIdentifiers +import os.log class ActionViewController: UIViewController { @@ -35,7 +36,7 @@ class ActionViewController: UIViewController { provider.loadItem(forTypeIdentifier: UTType.text.identifier, options: nil) { text, _ in guard let text = text as? String else { return } guard let url = URL.makeSearchURL(text: text) else { - os_log("Couldn‘t for URL for query “%s”", log: .lifecycleLog, type: .error, text) + Logger.lifecycle.error("Couldn‘t form URL for query “\(text, privacy: .public)”") return } self.launchBrowser(withUrl: url) diff --git a/PacketTunnelProvider/NetworkProtection/VPNLogger.swift b/PacketTunnelProvider/NetworkProtection/VPNLogger.swift index 2fa2a2b26f..86bed3b686 100644 --- a/PacketTunnelProvider/NetworkProtection/VPNLogger.swift +++ b/PacketTunnelProvider/NetworkProtection/VPNLogger.swift @@ -19,14 +19,14 @@ import Foundation import NetworkProtection - -import OSLog +import os.log /// Logger for the VPN /// /// Since we'll want to ensure this adheres to our privacy standards, grouping the logging logic to be mostly /// handled by a single class sounds like a good approach to be able to review what's being logged.. /// +@available(*, deprecated, message: "This goes against Apple logging guidelines and will be removed, please don't use it anymore") public final class VPNLogger { public typealias AttemptStep = PacketTunnelProvider.AttemptStep public typealias ConnectionAttempt = PacketTunnelProvider.ConnectionAttempt @@ -36,89 +36,74 @@ public final class VPNLogger { public init() {} public func logStartingWithoutAuthToken() { - os_log("🔴 Starting tunnel without an auth token", log: .networkProtection, type: .error) + Logger.networkProtection.error("🔴 Starting tunnel without an auth token") } public func log(_ step: AttemptStep, named name: String) { - let log = OSLog.networkProtection - switch step { case .begin: - os_log("🔵 %{public}@ attempt begins", log: log, name) + Logger.networkProtection.debug("🔵 \(name, privacy: .public) attempt begins") case .failure(let error): - os_log("🔴 %{public}@ attempt failed with error: %{public}@", log: log, type: .error, name, error.localizedDescription) + Logger.networkProtection.error("🔴 \(name, privacy: .public) attempt failed with error: \(error.localizedDescription, privacy: .public)") case .success: - os_log("🟢 %{public}@ attempt succeeded", log: log, name) + Logger.networkProtection.debug("🟢 \(name, privacy: .public) attempt succeeded") } } - public func log(_ step: ConnectionAttempt) { - let log = OSLog.networkProtection + public func log(_ step: ConnectionAttempt) { switch step { case .connecting: - os_log("🔵 Connection attempt detected", log: log) + Logger.networkProtection.debug("🔵 Connection attempt detected") case .failure: - os_log("🔴 Connection attempt failed", log: log, type: .error) + Logger.networkProtection.error("🔴 Connection attempt failed") case .success: - os_log("🟢 Connection attempt successful", log: log) + Logger.networkProtection.debug("🟢 Connection attempt successful") } } public func log(_ status: ConnectionTesterStatus, server: String) { - let log = OSLog.networkProtectionConnectionTesterLog - switch status { case .failed(let duration): - os_log("🔴 Connection tester (%{public}@ - %{public}@) failure", log: log, type: .error, duration.rawValue, server) + Logger.networkProtectionConnectionTester.error("🔴 Connection tester (\(duration.rawValue, privacy: .public) - \(server, privacy: .public)) failure") case .recovered(let duration, let failureCount): - os_log("🟢 Connection tester (%{public}@ - %{public}@) recovery (after %{public}@ failures)", - log: log, - duration.rawValue, - server, - String(failureCount)) + Logger.networkProtectionConnectionTester.debug("🟢 Connection tester (\(duration.rawValue, privacy: .public) - \(server, privacy: .public)) recovery (after \(String(failureCount), privacy: .public) failures)") } } public func log(_ step: FailureRecoveryStep) { - let log = OSLog.networkProtectionTunnelFailureMonitorLog - switch step { case .started: - os_log("🔵 Failure Recovery attempt started", log: log) + Logger.networkProtectionTunnelFailureMonitor.debug("🔵 Failure Recovery attempt started") case .failed(let error): - os_log("🔴 Failure Recovery attempt failed with error: %{public}@", log: log, type: .error, error.localizedDescription) + Logger.networkProtectionTunnelFailureMonitor.error("🔴 Failure Recovery attempt failed with error: \(error.localizedDescription, privacy: .public)") case .completed(let health): switch health { case .healthy: - os_log("🟢 Failure Recovery attempt completed", log: log) + Logger.networkProtectionTunnelFailureMonitor.debug("🟢 Failure Recovery attempt completed") case .unhealthy: - os_log("🔴 Failure Recovery attempt ended as unhealthy", log: log, type: .error) + Logger.networkProtectionTunnelFailureMonitor.error("🔴 Failure Recovery attempt ended as unhealthy") } } } public func log(_ step: NetworkProtectionTunnelFailureMonitor.Result) { - let log = OSLog.networkProtectionTunnelFailureMonitorLog - switch step { case .failureDetected: - os_log("🔴 Tunnel failure detected", log: log, type: .error) + Logger.networkProtectionTunnelFailureMonitor.error("🔴 Tunnel failure detected") case .failureRecovered: - os_log("🟢 Tunnel failure recovered", log: log) + Logger.networkProtectionTunnelFailureMonitor.debug("🟢 Tunnel failure recovered") case .networkPathChanged: - os_log("🔵 Tunnel recovery detected path change", log: log) + Logger.networkProtectionTunnelFailureMonitor.debug("🔵 Tunnel recovery detected path change") } } public func log(_ result: NetworkProtectionLatencyMonitor.Result) { - let log = OSLog.networkProtectionLatencyMonitorLog - switch result { case .error: - os_log("🔴 There was an error logging the latency", log: log, type: .error) + Logger.networkProtectionLatencyMonitor.error("🔴 There was an error logging the latency") case .quality(let quality): - os_log("Connection quality is: %{public}@", log: log, quality.rawValue) + Logger.networkProtectionLatencyMonitor.debug("Connection quality is: \(quality.rawValue, privacy: .public)") } } } diff --git a/ShareExtension/ShareViewController.swift b/ShareExtension/ShareViewController.swift index e75d501857..98829b4cbe 100644 --- a/ShareExtension/ShareViewController.swift +++ b/ShareExtension/ShareViewController.swift @@ -21,6 +21,7 @@ import Common import UIKit import Social import Core +import os.log class ShareViewController: SLComposeServiceViewController { @@ -71,7 +72,7 @@ class ShareViewController: SLComposeServiceViewController { textProvider.loadItem(forTypeIdentifier: Identifier.text, options: nil) { [weak self] (item, _) in guard let query = item as? String else { return } guard let url = URL.makeSearchURL(query: query) else { - os_log("Couldn‘t form URL for query “%s”", log: .lifecycleLog, type: .error, query) + Logger.lifecycle.error("Couldn‘t form URL for query “\(query, privacy: .public)”") return } self?.open(url: url) diff --git a/Widgets/Widgets.swift b/Widgets/Widgets.swift index 0e9f995ed9..4972055a03 100644 --- a/Widgets/Widgets.swift +++ b/Widgets/Widgets.swift @@ -26,6 +26,7 @@ import Kingfisher import Bookmarks import Persistence import NetworkExtension +import os.log struct Favorite { @@ -103,24 +104,24 @@ class Provider: TimelineProvider { if bookmarksDB == nil { let db = BookmarksDatabase.make(readOnly: true) - os_log("BookmarksDatabase load store started") + Logger.general.debug("BookmarksDatabase load store started") db.loadStore { _, error in guard error == nil else { return } self.bookmarksDB = db } - os_log("BookmarksDatabase store loaded") + Logger.general.debug("BookmarksDatabase store loaded") } if maxFavorites > 0, let db = bookmarksDB { let model = FavoritesListViewModel(bookmarksDatabase: db, favoritesDisplayMode: fetchFavoritesDisplayMode()) - os_log("model created") + Logger.general.debug("model created") let dbFavorites = model.favorites - os_log("dbFavorites loaded %d", dbFavorites.count) + Logger.general.debug("dbFavorites loaded \(dbFavorites.count)") let favorites = coreDataFavoritesToFavorites(dbFavorites, returningNoMoreThan: maxFavorites) - os_log("favorites converted %d", favorites.count) + Logger.general.debug("favorites converted \(favorites.count)") let entry = FavoritesEntry(date: Date(), favorites: favorites, isPreview: favorites.isEmpty && context.isPreview) - os_log("entry created") + Logger.general.debug("entry created") completion(entry) } else { let entry = FavoritesEntry(date: Date(), favorites: [], isPreview: context.isPreview) From f43ff5ea6560bd57eb19c68c227707539b2119e8 Mon Sep 17 00:00:00 2001 From: Federico Cappelli Date: Thu, 22 Aug 2024 13:17:54 +0100 Subject: [PATCH 02/10] logging cleanup + lint --- Core/BookmarksImporter.swift | 4 +- Core/HistoryManager.swift | 8 +- Core/Logger+Multiple.swift | 26 +- Core/SyncMetadataDatabase.swift | 8 +- Core/TabInstrumentation.swift | 10 +- DuckDuckGo/AppDelegate.swift | 2 +- DuckDuckGo/BookmarksDatabase.swift | 6 +- DuckDuckGo/BookmarksViewController.swift | 2 +- DuckDuckGo/DuckPlayer/DuckPlayer.swift | 2 +- DuckDuckGo/Favicons.swift | 4 +- DuckDuckGo/FeedbackSender.swift | 1 + DuckDuckGo/MainViewController.swift | 2 +- .../PrivacyDashboardViewController.swift | 2 +- DuckDuckGo/ShortcutItemView.swift | 2 +- DuckDuckGo/TabViewController.swift | 6 +- DuckDuckGo/en.lproj/Localizable.strings | 2727 ++++++++++++++++- .../BrokenSiteReportingTests.swift | 2 +- .../DomainMatchingReportTests.swift | 5 +- DuckDuckGoTests/DomainMatchingTests.swift | 4 +- .../FireButtonReferenceTests.swift | 4 +- .../NetworkProtection/VPNLogger.swift | 10 +- 21 files changed, 2771 insertions(+), 66 deletions(-) diff --git a/Core/BookmarksImporter.swift b/Core/BookmarksImporter.swift index 2cf3c2016e..4996146f3e 100644 --- a/Core/BookmarksImporter.swift +++ b/Core/BookmarksImporter.swift @@ -95,7 +95,7 @@ final public class BookmarksImporter { if isDocumentInSafariFormat(document) { guard let newDocument = try transformSafariDocument(document: document) else { - os_log("Safari format could not be handled", type: .debug) + Logger.bookmarks.debug("Safari format could not be handled") throw BookmarksImportError.safariTransformFailure } try parse(documentElement: newDocument, importedBookmark: nil) @@ -209,7 +209,7 @@ final public class BookmarksImporter { do { try await coreDataStorage.importBookmarks(bookmarks) } catch { - os_log("Failed to save imported bookmarks to core data %s", type: .debug, error.localizedDescription) + Logger.bookmarks.error("Failed to save imported bookmarks to core data: \(error.localizedDescription, privacy: .public)") throw BookmarksImportError.saveFailure } } diff --git a/Core/HistoryManager.swift b/Core/HistoryManager.swift index 31491bac9a..272bee87dd 100644 --- a/Core/HistoryManager.swift +++ b/Core/HistoryManager.swift @@ -153,7 +153,7 @@ public class HistoryDatabase { public static var defaultDBLocation: URL = { guard let url = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first else { - os_log("HistoryDatabase.make - OUT, failed to get application support directory") + Logger.general.fault("HistoryDatabase.make - OUT, failed to get application support directory") fatalError("Failed to get location") } return url @@ -164,10 +164,10 @@ public class HistoryDatabase { }() public static func make(location: URL = defaultDBLocation, readOnly: Bool = false) -> CoreDataDatabase { - os_log("HistoryDatabase.make - IN - %s", location.absoluteString) + Logger.general.debug("HistoryDatabase.make - IN - \(location.absoluteString)") let bundle = History.bundle guard let model = CoreDataDatabase.loadModel(from: bundle, named: "BrowsingHistory") else { - os_log("HistoryDatabase.make - OUT, failed to loadModel") + Logger.general.debug("HistoryDatabase.make - OUT, failed to loadModel") fatalError("Failed to load model") } @@ -175,7 +175,7 @@ public class HistoryDatabase { containerLocation: location, model: model, readOnly: readOnly) - os_log("HistoryDatabase.make - OUT") + Logger.general.debug("HistoryDatabase.make - OUT") return db } } diff --git a/Core/Logger+Multiple.swift b/Core/Logger+Multiple.swift index 9462a637a8..d21fad0d64 100644 --- a/Core/Logger+Multiple.swift +++ b/Core/Logger+Multiple.swift @@ -1,7 +1,8 @@ // // Logger+Multiple.swift +// DuckDuckGo // -// Copyright © 2017 DuckDuckGo. All rights reserved. +// Copyright © 2024 DuckDuckGo. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -26,26 +27,3 @@ public extension Logger { static var configuration = { Logger(subsystem: "Configuration", category: "") }() static var duckPlayer = { Logger(subsystem: "DuckPlayer", category: "") }() } -// -// -// public extension OSLog { -// -// enum AppCategories: String, CaseIterable { -//// case generalLog = "DDG General" // BSK .general -//// case adAttributionLog = "DDG AdAttribution" -//// case lifecycleLog = "DDG Lifecycle" -//// case autoconsentLog = "DDG Autoconsent" -// case /*configuration*/Log = "DDG Configuration" -// case syncLog = "DDG Sync" -// case duckPlayerLog = "Duck Player" -// } -// -// @OSLogWrapper(.generalLog) static var generalLog -// @OSLogWrapper(.adAttributionLog) static var adAttributionLog -// @OSLogWrapper(.lifecycleLog) static var lifecycleLog -// @OSLogWrapper(.autoconsentLog) static var autoconsentLog -// @OSLogWrapper(.configurationLog) static var configurationLog -// @OSLogWrapper(.syncLog) static var syncLog -// @OSLogWrapper(.duckPlayerLog) static var duckPlayerLog -// -// } diff --git a/Core/SyncMetadataDatabase.swift b/Core/SyncMetadataDatabase.swift index b208847491..afb105d753 100644 --- a/Core/SyncMetadataDatabase.swift +++ b/Core/SyncMetadataDatabase.swift @@ -30,17 +30,17 @@ public final class SyncMetadataDatabase { public static var defaultDBLocation: URL = { guard let url = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first else { - os_log("SyncMetadataDatabase.make - OUT, failed to get location") + Logger.sync.fault("SyncMetadataDatabase.make - OUT, failed to get location") fatalError("Failed to get location") } return url }() public static func make(location: URL = defaultDBLocation, readOnly: Bool = false) -> CoreDataDatabase { - os_log("SyncMetadataDatabase.make - IN - %s", location.absoluteString) + Logger.sync.debug("SyncMetadataDatabase.make - IN - \(location.absoluteString)") let bundle = DDGSync.bundle guard let model = CoreDataDatabase.loadModel(from: bundle, named: "SyncMetadata") else { - os_log("SyncMetadataDatabase.make - OUT, failed to loadModel") + Logger.sync.fault("SyncMetadataDatabase.make - OUT, failed to loadModel") fatalError("Failed to load model") } @@ -48,7 +48,7 @@ public final class SyncMetadataDatabase { containerLocation: location, model: model, readOnly: readOnly) - os_log("SyncMetadataDatabase.make - OUT") + Logger.sync.debug("SyncMetadataDatabase.make - OUT") return db } diff --git a/Core/TabInstrumentation.swift b/Core/TabInstrumentation.swift index 039623cb46..af156a4dc2 100644 --- a/Core/TabInstrumentation.swift +++ b/Core/TabInstrumentation.swift @@ -92,10 +92,7 @@ public class TabInstrumentation { // 0 is treated as 1ms let timeInNS: UInt64 = timeInMs.asNanos - - os_log(.debug, - log: type(of: self).tabsLog, - "[%@] Request: %@ - %@ - %@ (%@) in %llu", currentURL, url, requestType, status, reason, timeInNS) + Logger.general.debug("[\(currentURL)] Request: \(url) - \(requestType) - \(status) (\(reason)) in \(timeInNS)") } } @@ -104,10 +101,7 @@ public class TabInstrumentation { let currentURL = self.currentURL ?? "unknown" // 0 is treated as 1ms let timeInNS: UInt64 = timeInMs.asNanos - - os_log(.debug, - log: type(of: self).tabsLog, - "[%@] JSEvent: %@ executedIn: %llu", currentURL, name, timeInNS) + Logger.general.debug("[\(currentURL)] JSEvent: \(name) executedIn: \(timeInNS)") } } } diff --git a/DuckDuckGo/AppDelegate.swift b/DuckDuckGo/AppDelegate.swift index c849cdbc6b..fee823c424 100644 --- a/DuckDuckGo/AppDelegate.swift +++ b/DuckDuckGo/AppDelegate.swift @@ -474,7 +474,7 @@ import os.log do { try FileManager.default.removeItem(at: tmp) } catch { - os_log("Failed to delete tmp dir") + Logger.general.error("Failed to delete tmp dir") } } diff --git a/DuckDuckGo/BookmarksDatabase.swift b/DuckDuckGo/BookmarksDatabase.swift index 8a655863b2..2b868b0d61 100644 --- a/DuckDuckGo/BookmarksDatabase.swift +++ b/DuckDuckGo/BookmarksDatabase.swift @@ -45,10 +45,10 @@ public class BookmarksDatabase { }() public static func make(location: URL = defaultDBLocation, readOnly: Bool = false) -> CoreDataDatabase { - os_log("BookmarksDatabase.make - IN - %s", location.absoluteString) + Logger.bookmarks.debug("BookmarksDatabase.make - IN - \(location.absoluteString, privacy: .public)") let bundle = Bookmarks.bundle guard let model = CoreDataDatabase.loadModel(from: bundle, named: "BookmarksModel") else { - os_log("BookmarksDatabase.make - OUT, failed to loadModel") + Logger.bookmarks.error("BookmarksDatabase.make - OUT, failed to loadModel") fatalError("Failed to load model") } @@ -56,7 +56,7 @@ public class BookmarksDatabase { containerLocation: location, model: model, readOnly: readOnly) - os_log("BookmarksDatabase.make - OUT") + Logger.bookmarks.debug("BookmarksDatabase.make - OUT") return db } } diff --git a/DuckDuckGo/BookmarksViewController.swift b/DuckDuckGo/BookmarksViewController.swift index 9cc215475a..6dd701b5bc 100644 --- a/DuckDuckGo/BookmarksViewController.swift +++ b/DuckDuckGo/BookmarksViewController.swift @@ -672,7 +672,7 @@ class BookmarksViewController: UIViewController, UITableViewDelegate { try BookmarksExporter(coreDataStore: bookmarksDatabase, favoritesDisplayMode: viewModel.favoritesDisplayMode) .exportBookmarksTo(url: tempFileUrl) } catch { - os_log("bookmarks failed to export %s", type: .debug, error.localizedDescription) + Logger.general.error("bookmarks failed to export: \(error.localizedDescription, privacy: .public)") ActionMessageView.present(message: UserText.exportBookmarksFailedMessage) return } diff --git a/DuckDuckGo/DuckPlayer/DuckPlayer.swift b/DuckDuckGo/DuckPlayer/DuckPlayer.swift index 38babbc8fe..2a74174274 100644 --- a/DuckDuckGo/DuckPlayer/DuckPlayer.swift +++ b/DuckDuckGo/DuckPlayer/DuckPlayer.swift @@ -213,7 +213,7 @@ final class DuckPlayer: DuckPlayerProtocol { let isPiPEnabled = webView?.configuration.allowsPictureInPictureMediaPlayback == true let pip = InitialPlayerSettings.PIP(status: isPiPEnabled ? .enabled : .disabled) let platform = InitialPlayerSettings.Platform(name: "ios") - let environment = InitialPlayerSettings.Environment.development +// let environment = InitialPlayerSettings.Environment.development let locale = InitialPlayerSettings.Locale.en let playerSettings = InitialPlayerSettings.PlayerSettings(pip: pip) let userValues = encodeUserValues() diff --git a/DuckDuckGo/Favicons.swift b/DuckDuckGo/Favicons.swift index 7cf63d3b91..ba17101c97 100644 --- a/DuckDuckGo/Favicons.swift +++ b/DuckDuckGo/Favicons.swift @@ -85,7 +85,7 @@ public class Favicons { try? url.setResourceValues(resourceValues) } - os_log("favicons %s location %s", type: .debug, rawValue, url.absoluteString) + Logger.general.debug("favicons \(rawValue) location \(url.absoluteString)") return try? ImageCache(name: self.rawValue, cacheDirectoryURL: url) } @@ -117,7 +117,7 @@ public class Favicons { do { try FileManager.default.removeItem(at: bookmarksCache) } catch { - os_log("Failed to remove favicon bookmarks cache: %s", type: .error, error.localizedDescription) + Logger.general.error("Failed to remove favicon bookmarks cache: \(error.localizedDescription, privacy: .public)") } } } diff --git a/DuckDuckGo/FeedbackSender.swift b/DuckDuckGo/FeedbackSender.swift index 5b81262044..1572232174 100644 --- a/DuckDuckGo/FeedbackSender.swift +++ b/DuckDuckGo/FeedbackSender.swift @@ -22,6 +22,7 @@ import Core import BrowserServicesKit import os.log import Networking +import Common /// Represents single component that is being sent to the server. /// Feedback as a whole can consist of multiple components. These components are included both in diff --git a/DuckDuckGo/MainViewController.swift b/DuckDuckGo/MainViewController.swift index 6674a5b641..79cc2a4ca0 100644 --- a/DuckDuckGo/MainViewController.swift +++ b/DuckDuckGo/MainViewController.swift @@ -935,7 +935,7 @@ class MainViewController: UIViewController { fileprivate func loadQuery(_ query: String) { guard let url = URL.makeSearchURL(query: query, queryContext: currentTab?.url) else { - os_log("Couldn‘t form URL for query “\(query, privacy: .public)” with context “\(self.currentTab?.url?.absoluteString ?? "", privacy: .public)”") + Logger.general.error("Couldn‘t form URL for query “\(query, privacy: .public)” with context “\(self.currentTab?.url?.absoluteString ?? "", privacy: .public)”") return } // Make sure that once query is submitted, we don't trigger the non-SERP flow diff --git a/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift b/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift index da08abaa34..fd759ebd1a 100644 --- a/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift +++ b/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift @@ -281,7 +281,7 @@ extension PrivacyDashboardViewController: PrivacyDashboardControllerDelegate { let report = try await makeBrokenSiteReport(source: source) try toggleProtectionsOffReporter.report(report, reportMode: .toggle) } catch { - os_log("Failed to generate or send the broken site report: %@", type: .error, error.localizedDescription) + Logger.general.error("Failed to generate or send the broken site report: \(error.localizedDescription, privacy: .public)") } privacyDashboardCloseHandler() diff --git a/DuckDuckGo/ShortcutItemView.swift b/DuckDuckGo/ShortcutItemView.swift index b7f9b4da19..deb085d0b0 100644 --- a/DuckDuckGo/ShortcutItemView.swift +++ b/DuckDuckGo/ShortcutItemView.swift @@ -101,7 +101,7 @@ private extension NewTabPageShortcut { private extension ShortcutAccessoryView { @ViewBuilder func alignedForOverlay(edgeSize: CGFloat) -> some View { let offset = CGSize(width: edgeSize/4.0, height: -edgeSize/4.0) - let size = CGSize(width: edgeSize, height: edgeSize) +// let size = CGSize(width: edgeSize, height: edgeSize) if #available(iOS 16, *) { frame(width: edgeSize) diff --git a/DuckDuckGo/TabViewController.swift b/DuckDuckGo/TabViewController.swift index 5d64d7b476..b909acee14 100644 --- a/DuckDuckGo/TabViewController.swift +++ b/DuckDuckGo/TabViewController.swift @@ -2788,7 +2788,7 @@ extension TabViewController: SaveLoginViewControllerDelegate { NotificationCenter.default.post(name: .autofillSaveEvent, object: nil) } catch { - os_log("%: failed to store credentials %s", type: .error, #function, error.localizedDescription) + Logger.general.error("failed to store credentials: \(error.localizedDescription, privacy: .public)") } } @@ -2810,7 +2810,7 @@ extension TabViewController: SaveLoginViewControllerDelegate { } } } catch { - os_log("%: failed to fetch credentials %s", type: .error, #function, error.localizedDescription) + Logger.general.error("failed to fetch credentials: \(error.localizedDescription, privacy: .public)") } } @@ -2838,7 +2838,7 @@ extension TabViewController: SaveLoginViewControllerDelegate { do { _ = try autofillNeverPromptWebsitesManager.saveNeverPromptWebsite(domain) } catch { - os_log("%: failed to save never prompt for website %s", type: .error, #function, error.localizedDescription) + Logger.general.error("failed to save never prompt for website: \(error.localizedDescription, privacy: .public)") } } diff --git a/DuckDuckGo/en.lproj/Localizable.strings b/DuckDuckGo/en.lproj/Localizable.strings index d2339932ce..b8e7ba707d 100644 --- a/DuckDuckGo/en.lproj/Localizable.strings +++ b/DuckDuckGo/en.lproj/Localizable.strings @@ -1 +1,2726 @@ -⼪⁂畴潮慢敬⁦潲⁅摩琠慣瑩潮‪⼊≡捴楯渮来湥物挮敤楴∠㴠≅摩琢㬊ਯ⨠䉵瑴潮慢敬⁦潲⁡⁧敮敲楣⁳桯眠慣瑩潮‪⼊≡捴楯渮来湥物挮獨潷∠㴠≓桯眢㬊ਯ⨠䉵瑴潮慢敬⁦潲⁕湤漠慣瑩潮‪⼊≡捴楯渮来湥物挮畮摯∠㴠≕湤漢㬊ਯ⨠䉵瑴潮慢敬⁦潲慮慧楮朠晡癯物瑥猠⨯ਢ慣瑩潮⹭慮慧攮晡癯物瑥猢‽•䵡湡来∻ਊ⼪⁂畴瑯渠污扥氠景爠佋⁡捴楯渠⨯ਢ慣瑩潮⹯欢‽•佋∻ਊ⼪⁁摤⁡捴楯渠ⴠ扵瑴潮⁳桯睮⁩渠慬敲琠⨯ਢ慣瑩潮⹴楴汥⹡摤∠㴠≁摤∻ਊ⼪⁁畴潦楬氠䱯杩湳敮甠楴敭灥湩湧⁴桥潧楮楳琠⨯ਢ慣瑩潮⹴楴汥⹡畴潦楬氮汯杩湳∠㴠≐慳獷潲摳∻ਊ⼪⁃潮晩牭慴楯渠潦⁁摤⁴漠䉯潫浡牫猠慣瑩潮⁩渠䅤搠䅬氠佰敮⁔慢猠瑯⁂潯歭慲歳⁡汥牴‪⼊≡捴楯渮瑩瑬攮扯潫浡牫∠㴠≂潯歭慲欢㬊ਯ⨠䉵瑴潮㨠佰敮⁢潯歭慲歳楳琠⨯ਢ慣瑩潮⹴楴汥⹢潯歭慲歳∠㴠≂潯歭慲歳∻ਊ⼪⁃慮捥氠慣瑩潮‭⁢畴瑯渠獨潷渠楮⁡汥牴‪⼊≡捴楯渮瑩瑬攮捡湣敬∠㴠≃慮捥氢㬊ਯ⨠䍯灹⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹣潰礢‽•䍯灹∻ਊ⼪⁆汯慴楮朠浥獳慧攠楮摩捡瑩湧⁕剌⁨慳⁢敥渠捯灩敤‪⼊≡捴楯渮瑩瑬攮捯灹⹭敳獡来∠㴠≕剌⁣潰楥搢㬊ਯ⨠䑥汥瑥⁡捴楯渠ⴠ扵瑴潮⁳桯睮⁩渠慬敲琠⨯ਢ慣瑩潮⹴楴汥⹤敬整攢‽•䑥汥瑥∻ਊ⼪⁄楳慢汥⁰牯瑥捴楯渠慣瑩潮‪⼊≡捴楯渮瑩瑬攮摩獡扬攮灲潴散瑩潮∠㴠≄楳慢汥⁐物癡捹⁐牯瑥捴楯渢㬊ਯ⨠䑯睮汯慤猠浥湵⁩瑥洠潰敮楮朠瑨攠摯睮汯摳楳琠⨯ਢ慣瑩潮⹴楴汥⹤潷湬潡摳∠㴠≄潷湬潡摳∻ਊ⼪⁅摩琠䉯潫浡牫⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹥摩琮扯潫浡牫∠㴠≅摩琠䉯潫浡牫∻ਊ⼪⁅湡扬攠灲潴散瑩潮⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹥湡扬攮灲潴散瑩潮∠㴠≅湡扬攠偲楶慣礠偲潴散瑩潮∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ慣瑩潮⹴楴汥⹦潲来瑁汬∠㴠≃汯獥⁔慢猠慮搠䍬敡爠䑡瑡∻ਊ⼪⁃潮晩牭慴楯渠浥獳慧攠⨯ਢ慣瑩潮⹴楴汥⹦潲来瑁汬䑯湥∠㴠≔慢猠慮搠摡瑡⁣汥慲敤∻ਊ⼪⁏灥渠楮⁎敷⁂慣歧牯畮搠呡戠慣瑩潮‪⼊≡捴楯渮瑩瑬攮湥睂慣歧牯畮摔慢䙯牕牬∠㴠≏灥渠楮⁂慣歧牯畮搢㬊ਯ⨠䍲敡瑥⁎敷⁔慢⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹮敷呡扁捴楯渢‽•乥眢㬊ਯ⨠佰敮⁩渠乥眠呡戠慣瑩潮‪⼊≡捴楯渮瑩瑬攮湥睔慢䙯牕牬∠㴠≏灥渠楮⁎敷⁔慢∻ਊ⼪⁏灥渠慣瑩潮‪⼊≡捴楯渮瑩瑬攮潰敮∠㴠≏灥渢㬊ਯ⨠偡獴攠慮搠䝯⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹰慳瑥䅮摇漢‽•偡獴攠☠䝯∻ਊ⼪⁐物湴⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹰物湴∠㴠≐物湴∻ਊ⼪⁒敦牥獨⁡捴楯渠ⴠ扵瑴潮⁳桯睮⁩渠慬敲琠⨯ਢ慣瑩潮⹴楴汥⹲敦牥獨∠㴠≒敦牥獨∻ਊ⼪⁒敭潶攠䙡癯物瑥⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹲敭潶攮晡癯物瑥∠㴠≒敭潶攠䙡癯物瑥∻ਊ⼪⁒数潲琠扲潫敮⁳楴攠慣瑩潮‪⼊≡捴楯渮瑩瑬攮牥灯牴䉲潫敮卩瑥∠㴠≒数潲琠䉲潫敮⁓楴攢㬊ਯ⨠䅣瑩潮⁴漠牥汯慤⁣畲牥湴⁰慧攠楮⁤敳歴潰潤攠⨯ਢ慣瑩潮⹴楴汥⹲敱略獴⹤敳歴潰⹳楴攢‽•䑥獫瑯瀠卩瑥∻ਊ⼪⁁捴楯渠瑯⁲敬潡搠捵牲敮琠灡来⁩渠浯扩汥潤攠⨯ਢ慣瑩潮⹴楴汥⹲敱略獴⹭潢楬攮獩瑥∠㴠≍潢楬攠卩瑥∻ਊ⼪⁓慶攠慣瑩潮‭⁢畴瑯渠獨潷渠楮⁡汥牴‪⼊≡捴楯渮瑩瑬攮獡癥∠㴠≓慶攢㬊ਯ⨠䅤搠瑯⁂潯歭慲歳⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹳慶攮扯潫浡牫∠㴠≁摤⁂潯歭慲欢㬊ਯ⨠䅤搠瑯⁆慶潲楴敳⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹳慶攮晡癯物瑥∠㴠≁摤⁆慶潲楴攢㬊ਯ⨠卥瑴楮杳⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹳整瑩湧猢‽•卥瑴楮杳∻ਊ⼪⁓桡牥⁡捴楯渠⨯ਢ慣瑩潮⹴楴汥⹳桡牥∠㴠≓桡牥∻ਊ⼪⁓整瑩湧猠污扥氠景爠扯瑴潭⁰潳楴楯渠景爠瑨攠慤摲敳猠扡爠⨯ਢ慤摲敳献扡爮扯瑴潭∠㴠≂潴瑯洢㬊ਯ⨠卥瑴楮杳慢敬⁦潲⁴潰⁰潳楴楯渠景爠瑨攠慤摲敳猠扡爠⨯ਢ慤摲敳献扡爮瑯瀢‽•呯瀢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≡摤坩摧整⹢畴瑯渢‽•䅤搠坩摧整∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ慤摗楤来琮摥獣物灴楯渢‽•䝥琠煵楣欠慣捥獳⁴漠灲楶慴攠獥慲捨⁡湤⁴桥⁳楴敳⁹潵潶攮∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ慤摗楤来琮獥瑴楮杳⹦楲獴偡牡杲慰栢‽•䱯湧⵰牥獳渠瑨攠䡯浥⁓捲敥渠瑯⁥湴敲楧杬攠浯摥⸢㬊ਯ⨠剥灬慣敭敮琠獴物湧⁩猠愠灬畳⁢畴瑯渠楣潮⸠⨯ਢ慤摗楤来琮獥瑴楮杳⹳散潮摐慲慧牡灨⸥䀢‽•呡瀠瑨攠灬畳‥䀠扵瑴潮⸢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≡摤坩摧整⹳整瑩湧献瑩瑬攢‽•䙩湤⁡湤⁳敬散琠䑵捫䑵捫䝯⸠周敮⁣桯潳攠愠睩摧整⸢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≡摤坩摧整⹴楴汥∠㴠≏湥⁴慰⁴漠祯畲⁦慶潲楴攠獩瑥献∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ慬敲琮浥獳慧攮扯潫浡牫䅬氢‽•䕸楳瑩湧⁢潯歭慲歳⁷楬氠湯琠扥⁤異汩捡瑥搮∻ਊ⼪⁄敳捲楰瑩潮⁦潲⁡汥牴⁳桯睮⁷桥渠獹湣⁥牲潲捣畲猠扥捡畳攠潦⁢慤⁢潯歭慲歳⁤慴愠⨯ਢ慬敲琮獹湣ⵢ潯歭慲歳ⵢ慤ⵤ慴愭敲牯爭摥獣物灴楯渢‽•卯浥⁢潯歭慲歳⁡牥⁦潲浡瑴敤⁩湣潲牥捴汹爠瑯漠汯湧⁡湤⁷敲攠湯琠獹湣敤⸢㬊ਯ⨠䑥獣物灴楯渠景爠慬敲琠獨潷渠睨敮⁳祮挠扯潫浡牫猠灡畳敤⁦潲⁴潯慮礠楴敭猠⨯ਢ慬敲琮獹湣ⵢ潯歭慲歳⵰慵獥搭摥獣物灴楯渢‽•奯甧癥⁲敡捨敤⁴桥慸業畭畭扥爠潦⁢潯歭慲歳⸠偬敡獥⁤敬整攠獯浥⁢潯歭慲歳⁴漠牥獵浥⁳祮挮∻ਊ⼪⁔楴汥⁦潲⁡汥牴⁳桯睮⁷桥渠獹湣⁢潯歭慲歳⁰慵獥搠景爠瑯漠浡湹⁩瑥浳‪⼊≡汥牴⹳祮挭扯潫浡牫猭灡畳敤⵴楴汥∠㴠≂潯歭慲欠卹湣⁩猠偡畳敤∻ਊ⼪⁄敳捲楰瑩潮⁦潲⁡汥牴⁳桯睮⁷桥渠獹湣⁥牲潲捣畲猠扥捡畳攠潦⁢慤⁣牥摥湴楡汳⁤慴愠⨯ਢ慬敲琮獹湣ⵣ牥摥湴楡汳ⵢ慤ⵤ慴愭敲牯爭摥獣物灴楯渢‽•卯浥⁰慳獷潲摳⁡牥⁦潲浡瑴敤⁩湣潲牥捴汹爠瑯漠汯湧⁡湤⁷敲攠湯琠獹湣敤⸢㬊ਯ⨠䑥獣物灴楯渠景爠慬敲琠獨潷渠睨敮⁳祮挠捲敤敮瑩慬猠灡畳敤⁦潲⁴潯慮礠楴敭猠⨯ਢ慬敲琮獹湣ⵣ牥摥湴楡汳⵰慵獥搭摥獣物灴楯渢‽•奯甧癥⁲敡捨敤⁴桥慸業畭畭扥爠潦⁰慳獷潲摳⸠偬敡獥⁤敬整攠獯浥⁰慳獷潲摳⁴漠牥獵浥⁳祮挮∻ਊ⼪⁔楴汥⁦潲⁡汥牴⁳桯睮⁷桥渠獹湣⁣牥摥湴楡汳⁰慵獥搠景爠瑯漠浡湹⁩瑥浳‪⼊≡汥牴⹳祮挭捲敤敮瑩慬猭灡畳敤⵴楴汥∠㴠≐慳獷潲搠卹湣⁩猠偡畳敤∻ਊ⼪⁔楴汥⁦潲⁳祮挠敲牯爠慬敲琠⨯ਢ慬敲琮獹湣ⵥ牲潲∠㴠≓祮挠☠䉡捫異⁅牲潲∻ਊ⼪⁓祮挠敲牯爠慬敲琠慣瑩潮⁢畴瑯渠瑩瑬攬⁴慫敳⁴桥⁵獥爠瑯⁴桥⁳祮挠獥瑴楮杳⁰慧攮‪⼊≡汥牴⹳祮挭敲牯爭慣瑩潮∠㴠≓祮挠卥瑴楮杳∻ਊ⼪⁄敳捲楰瑩潮⁦潲⁡汥牴⁳桯睮⁷桥渠畳敲潧来搠潦映晲潭⁳祮挠⨯ਢ慬敲琮獹湣⵩湶慬楤⵬潧楮ⵥ牲潲ⵤ敳捲楰瑩潮∠㴠≓祮挠桡猠扥敮⁰慵獥搮⁉映祯甠睡湴⁴漠捯湴楮略⁳祮捩湧⁴桩猠摥癩捥Ⱐ牥捯湮散琠畳楮朠慮潴桥爠摥癩捥爠祯畲⁲散潶敲礠捯摥⸢㬊ਯ⨠䱥慲渠浯牥⁢畴瑯渠楮⁡汥牴‪⼊≡汥牴⹳祮挭灡畳敤ⵡ汥牴⵬敡牮⵭潲攭扵瑴潮∠㴠≌敡牮⁍潲攢㬊ਯ⨠䍯湦楲浡瑩潮⁢畴瑯渠楮⁡汥牴‪⼊≡汥牴⹳祮挭灡畳敤ⵡ汥牴ⵯ欭扵瑴潮∠㴠≏䬢㬊ਯ⨠呩瑬攠景爠慬敲琠獨潷渠睨敮⁳祮挠灡畳敤⁦潲⁡渠敲牯爠⨯ਢ慬敲琮獹湣⵰慵獥搭瑩瑬攢‽•卹湣⁩猠偡畳敤∻ਊ⼪⁄敳捲楰瑩潮⁦潲⁡汥牴⁳桯睮⁷桥渠獹湣⁥牲潲捣畲猠扥捡畳攠潦⁴潯慮礠牥煵敳瑳‪⼊≡汥牴⹳祮挭瑯漭浡湹⵲敱略獴猭敲牯爭摥獣物灴楯渢‽•卹湣…⁂慣歵瀠楳⁴敭灯牡物汹⁵湡癡楬慢汥⸢㬊ਯ⨠呩瑬攠潦⁴桥⁷慲湩湧敳獡来⁴桡琠瑥汬猠瑨攠畳敲⁴桡琠瑨敲攠睡猠慮⁥牲潲⁷楴栠瑨攠獹湣⁦敡瑵牥⸠⨯ਢ慬敲琮獹湣⹷慲湩湧⹳祮挭敲牯爢‽•卹湣⁅牲潲∻ਊ⼪⁔楴汥映瑨攠睡牮楮朠浥獳慧攠⨯ਢ慬敲琮獹湣⹷慲湩湧⹳祮挭灡畳敤∠㴠≓祮挠☠䉡捫異⁩猠偡畳敤∻ਊ⼪⁑略獴楯渠晲潭⁣潮晩牭慴楯渠摩慬潧‪⼊≡汥牴⹴楴汥⹢潯歭慲歁汬∠㴠≂潯歭慲欠䅬氠呡扳㼢㬊ਯ⨠䑩獡扬攠灲潴散瑩潮⁡汥牴‪⼊≡汥牴⹴楴汥⹤楳慢汥⹰牯瑥捴楯渢‽•䅤搠瑯⁕湰牯瑥捴敤⁓楴敳∻ਊ⼪⁄楳慢汥⁰潴散瑩潮⁡汥牴⁰污捥桯汤敲‭敡癥⁡猠楴⁩猠⨯ਢ慬敲琮瑩瑬攮摩獡扬攮灲潴散瑩潮⹰污捥桯汤敲∠㴠≷睷⹥硡浰汥⹣潭∻ਊ⼪⁓慶攠䉯潫浡牫⁡捴楯渠⨯ਢ慬敲琮瑩瑬攮獡癥⹢潯歭慲欢‽•卡癥⁂潯歭慲欢㬊ਯ⨠卡癥⁆慶潲楴攠慣瑩潮‪⼊≡汥牴⹴楴汥⹳慶攮晡癯物瑥∠㴠≓慶攠䙡癯物瑥∻ਊ⼪⁄敳捲楰瑩潮⁦潲⁵湡扬攠瑯⁣牥慴攠牥捯癥特⁰摦⁥牲潲‪⼊≡汥牴⹵湡扬攭瑯ⵣ牥慴攭牥捯癥特⵰摦ⵤ敳捲楰瑩潮∠㴠≕湡扬攠瑯⁣牥慴攠瑨攠牥捯癥特⁐䑆⸢㬊ਯ⨠䑥獣物灴楯渠景爠畮慢汥⁴漠摥汥瑥⁤慴愠敲牯爠⨯ਢ慬敲琮畮慢汥⵴漭摥汥瑥ⵤ慴愭摥獣物灴楯渢‽•啮慢汥⁴漠摥汥瑥⁤慴愠潮⁴桥⁳敲癥爮∻ਊ⼪⁄敳捲楰瑩潮⁦潲⁵湡扬攠瑯敲来⁴睯⁡捣潵湴猠敲牯爠⨯ਢ慬敲琮畮慢汥⵴漭浥牧攭瑷漭慣捯畮瑳ⵤ敳捲楰瑩潮∠㴠≔漠灡楲⁴桥獥⁤敶楣敳Ⱐ瑵牮晦⁓祮挠☠䉡捫異渠潮攠摥癩捥⁴桥渠瑡瀠尢卹湣⁗楴栠䅮潴桥爠䑥癩捥尢渠瑨攠潴桥爠摥癩捥⸢㬊ਯ⨠䑥獣物灴楯渠景爠畮慢汥⁴漠牥浯癥⁤敶楣攠敲牯爠⨯ਢ慬敲琮畮慢汥⵴漭牥浯癥ⵤ敶楣攭摥獣物灴楯渢‽•啮慢汥⁴漠牥浯癥⁴桩猠摥癩捥⁦牯洠卹湣…⁂慣歵瀮∻ਊ⼪⁄敳捲楰瑩潮⁦潲⁵湡扬攠瑯⁳祮挠瑯⁳敲癥爠敲牯爠⨯ਢ慬敲琮畮慢汥⵴漭獹湣⵴漭獥牶敲ⵤ敳捲楰瑩潮∠㴠≕湡扬攠瑯⁣潮湥捴⁴漠瑨攠獥牶敲⸢㬊ਯ⨠䑥獣物灴楯渠景爠畮慢汥⁴漠獹湣⁷楴栠慮潴桥爠摥癩捥⁥牲潲‪⼊≡汥牴⹵湡扬攭瑯⵳祮挭睩瑨ⵯ瑨敲ⵤ敶楣攭摥獣物灴楯渢‽•啮慢汥⁴漠卹湣⁷楴栠慮潴桥爠摥癩捥⸢㬊ਯ⨠䑥獣物灴楯渠景爠畮慢汥⁴漠瑵牮⁳祮挠潦映敲牯爠⨯ਢ慬敲琮畮慢汥⵴漭瑵牮⵳祮挭潦昭摥獣物灴楯渢‽•啮慢汥⁴漠瑵牮⁓祮挠☠䉡捫異晦⸢㬊ਯ⨠䑥獣物灴楯渠景爠畮慢汥⁴漠異摡瑥⁤敶楣攠湡浥⁥牲潲‪⼊≡汥牴⹵湡扬攭瑯⵵灤慴攭摥癩捥⵮慭攭摥獣物灴楯渢‽•啮慢汥⁴漠異摡瑥⁴桥⁤敶楣攠湡浥⸢㬊ਯ⨠卨潷渠潮⁡畴桥湴楣慴楯渠獣牥敮‪⼊≡灰⹡畴桥湴楣慴楯渮畮汯捫∠㴠≕湬潣欠䑵捫䑵捫䝯⸢㬊ਯ⨠䅵瑨敮瑩捡瑩潮⁁汥牴⁓楧渠䥮⁂畴瑯渠⨯ਢ慵瑨⹡汥牴⹬潧楮⹢畴瑯渢‽•卩杮⁉渢㬊ਯ⨠䅵瑨敮瑩捡瑩潮⁁汥牴‭⁰潰畬慴敤⁷楴栠愠摯浡楮慭攠⨯ਢ慵瑨⹡汥牴⹭敳獡来⹥湣特灴敤∠㴠≓楧渠楮⁴漠╀⸠奯畲潧楮⁩湦潲浡瑩潮⁷楬氠扥⁳敮琠獥捵牥汹⸢㬊ਯ⨠䅵瑨敮瑩捡瑩潮⁁汥牴‭⁰潰畬慴敤⁷楴栠愠摯浡楮慭攠⨯ਢ慵瑨⹡汥牴⹭敳獡来⹰污楮∠㴠≌潧⁩渠瑯‥䀮⁙潵爠灡獳睯牤⁷楬氠扥⁳敮琠楮獥捵牥汹⁢散慵獥⁴桥⁣潮湥捴楯渠楳⁵湥湣特灴敤⸢㬊ਯ⨠䅵瑨敮瑩捡瑩潮⁐慳獷潲搠晩敬搠灬慣敨潬摥爠⨯ਢ慵瑨⹡汥牴⹰慳獷潲搮灬慣敨潬摥爢‽•偡獳睯牤∻ਊ⼪⁁畴桥湴楣慴楯渠䅬敲琠呩瑬攠⨯ਢ慵瑨⹡汥牴⹴楴汥∠㴠≁畴桥湴楣慴楯渠剥煵楲敤∻ਊ⼪⁁畴桥湴楣慴楯渠啳敲慭攠晩敬搠灬慣敨潬摥爠⨯ਢ慵瑨⹡汥牴⹵獥牮慭攮灬慣敨潬摥爢‽•啳敲湡浥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ慵瑯捬敡爮潦昢‽•佦昢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≡畴潣汥慲⹯渢‽•佮∻ਊ⼪⁓畢瑩瑬攠景爠獥慲捨⁨楳瑯特⁩瑥浳‪⼊≡畴潣潭灬整攮桩獴潲礮獥慲捨⹤畣此畣歧漢‽•卥慲捨⁄畣歄畣歇漢㬊ਯ⨠周攠浥獳慧攠瑥硴⁳桯睮⁩渠獵杧敳瑩潮猠⨯ਢ慵瑯捯浰汥瑥⹨楳瑯特⹷慲湩湧⹭敳獡来∠㴠≓敡牣栠獵杧敳瑩潮猠湯眠楮捬畤攠祯畲⁲散敮瑬礠癩獩瑥搠獩瑥献⁔畲渠潦映楮⁓整瑩湧猬爠捬敡爠慮祴業攠睩瑨⁴桥⃰龔ꔠ䙩牥⁂畴瑯渮∻ਊ⼪⁔楴汥⁦潲敳獡来⁳桯眠楮⁳畧来獴楯湳‪⼊≡畴潣潭灬整攮桩獴潲礮睡牮楮朮瑩瑬攢‽•卡浥⁰物癡捹⹜湂整瑥爠獥慲捨⁳畧来獴楯湳™㬊ਯ⨠䅵瑯捯湳敮琠景爠䍯潫楥⁍慮慧敭敮琠卥瑴楮朠獴慴攠⨯ਢ慵瑯捯湳敮琮摩獡扬敤∠㴠≄楳慢汥搢㬊ਯ⨠䅵瑯捯湳敮琠景爠䍯潫楥⁍慮慧敭敮琠卥瑴楮朠獴慴攠⨯ਢ慵瑯捯湳敮琮敮慢汥搢‽•䕮慢汥搢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≡畴潣潮獥湴⹩湦漮桥慤敲∠㴠≗桥渠䑵捫䑵捫䝯⁤整散瑳⁣潯歩攠捯湳敮琠灯瀭異猠潮⁳楴敳⁹潵⁶楳楴Ⱐ睥⁣慮⁴特⁴漠慵瑯浡瑩捡汬礠獥琠祯畲⁣潯歩攠灲敦敲敮捥猠瑯楮業楺攠捯潫楥猠慮搠浡硩浩穥⁰物癡捹Ⱐ瑨敮⁣汯獥⁴桥⁰潰⵵灳⸠卯浥⁳楴敳⁤潮❴⁰牯癩摥⁡渠潰瑩潮⁴漠浡湡来⁣潯歩攠灲敦敲敮捥猬⁳漠睥⁣慮湬礠桩摥⁰潰⵵灳楫攠瑨敳攮∻ਊ⼪⁄漠湯琠瑲慮獬慴攠ⴠ獴物湧獤楣琠敮瑲礠⨯ਢ慵瑯晩汬⹤敬整攮慬氮灡獳睯牤献捯浰汥瑩潮∠㴠≡畴潦楬氮摥汥瑥⹡汬⹰慳獷潲摳⹣潭灬整楯渢㬊ਯ⨠䑯潴⁴牡湳污瑥‭⁳瑲楮杳摩捴⁥湴特‪⼊≡畴潦楬氮摥汥瑥⹡汬⹰慳獷潲摳⹣潮晩牭慴楯渮扯摹∠㴠≡畴潦楬氮摥汥瑥⹡汬⹰慳獷潲摳⹣潮晩牭慴楯渮扯摹∻ਊ⼪⁄漠湯琠瑲慮獬慴攠ⴠ獴物湧獤楣琠敮瑲礠⨯ਢ慵瑯晩汬⹤敬整攮慬氮灡獳睯牤献捯湦楲浡瑩潮⹴楴汥∠㴠≡畴潦楬氮摥汥瑥⹡汬⹰慳獷潲摳⹣潮晩牭慴楯渮瑩瑬攢㬊ਯ⨠䑯潴⁴牡湳污瑥‭⁳瑲楮杳摩捴⁥湴特‪⼊≡畴潦楬氮摥汥瑥⹡汬⹰慳獷潲摳⹳祮挮捯湦楲浡瑩潮⹢潤礢‽•慵瑯晩汬⹤敬整攮慬氮灡獳睯牤献獹湣⹣潮晩牭慴楯渮扯摹∻ਊ⼪⁏灥渠卥瑴楮杳⁡捴楯渠景爠摩獡扬楮朠慵瑯晩汬⁩渠卥瑴楮杳‪⼊≡畴潦楬氮摩獡扬攮灲潭灴⹡捴楯渮潰敮⵳整瑩湧猢‽•佰敮⁓整瑩湧猢㬊ਯ⨠䵥獳慧攠景爠楮景牭楮朠畳敲⁴桡琠瑨敹⁣慮⁤楳慢汥⁡畴潦楬氠楮⁓整瑩湧猠⨯ਢ慵瑯晩汬⹤楳慢汥⹰牯浰琮浥獳慧攢‽•奯甠捡渠瑵牮晦⁰慳獷潲搠獡癩湧⁡湹瑩浥⸢㬊ਯ⨠呥硴楮欠瑯⁥浡楬⁰牯瑥捴楯渠睥扳楴攠⨯ਢ慵瑯晩汬⹥湡扬攮敭慩氮灲潴散瑩潮∠㴠≅湡扬攠䕭慩氠偲潴散瑩潮∻ਊ⼪⁁捣敳獩扩汩瑹⁴楴汥⁦潲⁡⁈楤攠偡獳睯牤⁢畴瑯渠牥灬慣楮朠摩獰污祥搠灡獳睯牤⁷楴栠⨪⨪⨠⨯ਢ慵瑯晩汬⹨楤攭灡獳睯牤∠㴠≈楤攠偡獳睯牤∻ਊ⼪⁂畴瑯渠污扥氠瑯⁧整楮欠瑯⁤潷湬潡搠瑨攠摥獫瑯瀠扲潷獥爠⨯ਢ慵瑯晩汬⹩浰潲琮灡獳睯牤献来琭扲潷獥爭扵瑴潮∠㴠≇整⁄敳歴潰⁂牯睳敲∻ਊ⼪⁓瑥瀠ㄠ景爠楮獴牵捴楯湳⁴漠業灯牴⁰慳獷潲摳‪⼊≡畴潦楬氮業灯牴⹰慳獷潲摳⹩湳瑲畣瑩潮献獴数ㄢ‽•佰敮⁄畣歄畣歇漠潮⁍慣爠坩湤潷猢㬊ਯ⨠却数′⁦潲⁩湳瑲畣瑩潮猠瑯⁩浰潲琠灡獳睯牤献⁔桩猠牥慤猠慳‧䝯⁴漠卥瑴楮杳‾⁐慳獷潲摳✠⨯ਢ慵瑯晩汬⹩浰潲琮灡獳睯牤献楮獴牵捴楯湳⹳瑥瀲∠㴠≇漠瑯‥ㄤ䀠㸠┲⑀∻ਊ⼪⁳散潮搠灡牡浥瑥爠景爠慵瑯晩汬⹩浰潲琮灡獳睯牤献楮獴牵捴楯湳⹳瑥瀲‪⼊≡畴潦楬氮業灯牴⹰慳獷潲摳⹩湳瑲畣瑩潮献獴数㈮灡獳睯牤猢‽•偡獳睯牤猢㬊ਯ⨠晩牳琠灡牡浥瑥爠景爠慵瑯晩汬⹩浰潲琮灡獳睯牤献楮獴牵捴楯湳⹳瑥瀲‪⼊≡畴潦楬氮業灯牴⹰慳獷潲摳⹩湳瑲畣瑩潮献獴数㈮獥瑴楮杳∠㴠≓整瑩湧猢㬊ਯ⨠却数″⁦潲⁩湳瑲畣瑩潮猠瑯⁩浰潲琠灡獳睯牤献⁔桩猠牥慤猠慳‧卥汥捴⁉浰潲琠偡獳睯牤猠慮搠景汬潷⁴桥⁳瑥灳✠⨯ਢ慵瑯晩汬⹩浰潲琮灡獳睯牤献楮獴牵捴楯湳⹳瑥瀳∠㴠≓敬散琠╀⁡湤⁦潬汯眠瑨攠獴数猠瑯⁩浰潲琢㬊ਯ⨠偡牡浥瑥爠景爠慵瑯晩汬⹩浰潲琮灡獳睯牤献楮獴牵捴楯湳⹳瑥瀳‪⼊≡畴潦楬氮業灯牴⹰慳獷潲摳⹩湳瑲畣瑩潮献獴数㌮業灯牴∠㴠≉浰潲琠偡獳睯牤献⸮∻ਊ⼪⁓瑥瀠㐠景爠楮獴牵捴楯湳⁴漠業灯牴⁰慳獷潲摳㨠佮捥⁩浰潲瑥搠潮⁹潵爠捯浰畴敲⁹潵⁣慮⁳整⁵瀠獹湣渠瑨楳⁩偨潮敼楐慤籤敶楣攠⨯ਢ慵瑯晩汬⹩浰潲琮灡獳睯牤献楮獴牵捴楯湳⹳瑥瀴∠㴠≏湣攠業灯牴敤渠祯畲⁣潭灵瑥爠祯甠捡渠獥琠異⁳祮挠潮⁴桩猠╀∻ਊ⼪⁔楴汥⁦潲⁳散瑩潮⁷楴栠楮獴牵捴楯湳⁴漠業灯牴⁰慳獷潲摳‪⼊≡畴潦楬氮業灯牴⹰慳獷潲摳⹩湳瑲畣瑩潮献瑩瑬攢‽•䥭灯牴⁦牯洠瑨攠摥獫瑯瀠扲潷獥爺∻ਊ⼪⁓畢瑩瑬攠景爠獣牥敮⁴漠業灯牴⁰慳獷潲摳‪⼊≡畴潦楬氮業灯牴⹰慳獷潲摳⹳畢瑩瑬攢‽•䥭灯牴⁰慳獷潲摳⁩渠瑨攠摥獫瑯瀠癥牳楯渠潦⁴桥⁄畣歄畣歇漠扲潷獥爬⁴桥渠獹湣⁡捲潳猠摥癩捥献∻ਊ⼪⁂畴瑯渠污扥氠瑯⁳祮挠灡獳睯牤猠睩瑨⁤敳歴潰⁢牯睳敲‪⼊≡畴潦楬氮業灯牴⹰慳獷潲摳⹳祮挭扵瑴潮∠㴠≓祮挠坩瑨⁄敳歴潰∻ਊ⼪⁔楴汥⁦潲⁳捲敥渠瑯⁩浰潲琠灡獳睯牤猠⨯ਢ慵瑯晩汬⹩浰潲琮灡獳睯牤献瑩瑬攢‽•䡯眠呯⁉浰潲琠偡獳睯牤猢㬊ਯ⨠䑩獡扬攠慣瑩潮⁦潲⁡汥牴⁷桥渠慳歩湧⁴桥⁵獥爠楦⁴桥礠睡湴⁴漠步数⁵獩湧⁡畴潦楬氠⨯ਢ慵瑯晩汬⹫敥瀭敮慢汥搮慬敲琮摩獡扬攢‽•䑩獡扬攢㬊ਯ⨠䉵瑴潮⁤楳灬慹敤⁡晴敲⁳慶楮术異摡瑩湧⁡渠慵瑯晩汬潧楮⁴桡琠瑡步猠瑨攠畳敲⁴漠瑨攠獡癥搠汯杩渠⨯ਢ慵瑯晩汬⹬潧楮⵳慶攭慣瑩潮ⵢ畴瑯渮瑯慳琢‽•噩敷∻ਊ⼪⁍敳獡来⁤楳灬慹敤⁡晴敲⁳慶楮朠慮⁡畴潦楬氠汯杩渠⨯ਢ慵瑯晩汬⹬潧楮⵳慶敤⹴潡獴∠㴠≐慳獷潲搠獡癥搢㬊ਯ⨠䵥獳慧攠摩獰污祥搠慦瑥爠異摡瑩湧⁡渠慵瑯晩汬潧楮‪⼊≡畴潦楬氮汯杩渭異摡瑥搮瑯慳琢‽•偡獳睯牤⁵灤慴敤∻ਊ⼪⁍敮甠楴敭⁴數琠景爠捯灹楮朠慵瑯晩汬潧楮⁤整慩汳‪⼊≡畴潦楬氮汯杩湳⹣潰礭灲潭灴∠㴠≃潰礠╀∻ਊ⼪⁔楴汥⁦潲⁴潡獴⁷桥渠捯灹楮朠慤摲敳猠⨯ਢ慵瑯晩汬⹬潧楮献捯灹⵴潡獴⹡摤牥獳ⵣ潰楥搢‽•䅤摲敳猠捯灩敤∻ਊ⼪⁔楴汥⁦潲⁴潡獴⁷桥渠捯灹楮朠湯瑥猠⨯ਢ慵瑯晩汬⹬潧楮献捯灹⵴潡獴⹮潴敳ⵣ潰楥搢‽•乯瑥猠捯灩敤∻ਊ⼪⁔楴汥⁦潲⁴潡獴⁷桥渠捯灹楮朠灡獳睯牤‪⼊≡畴潦楬氮汯杩湳⹣潰礭瑯慳琮灡獳睯牤ⵣ潰楥搢‽•偡獳睯牤⁣潰楥搢㬊ਯ⨠呩瑬攠景爠瑯慳琠睨敮⁣潰祩湧⁵獥牮慭攠⨯ਢ慵瑯晩汬⹬潧楮献捯灹⵴潡獴⹵獥牮慭攭捯灩敤∠㴠≕獥牮慭攠捯灩敤∻ਊ⼪⁔楴汥映扵瑴潮⁩渠灲潭灴⁲敱畩物湧⁡畴桥湴楣慴楯渠扥景牥⁡汬⁰慳獷潲摳⁡牥⁤敬整敤‪⼊≡畴潦楬氮汯杩湳⹤敬整攮慬氮慵瑨敮瑩捡瑩潮⹰牯浰琮扵瑴潮∠㴠≁畴桥湴楣慴攠乯眢㬊ਯ⨠呩瑬攠潦⁰牯浰琠牥煵楲楮朠慵瑨敮瑩捡瑩潮⁢敦潲攠慬氠灡獳睯牤猠慲攠摥汥瑥搠⨯ਢ慵瑯晩汬⹬潧楮献摥汥瑥⹡汬⹡畴桥湴楣慴楯渮灲潭灴⹴楴汥∠㴠≁畴桥湴楣慴攠呯⁄敬整攠䅬氠偡獳睯牤猢㬊ਯ⨠剥慳潮⁦潲⁡畴桥湴楣慴楯渠睨敮⁤敬整楮朠慬氠汯杩湳‪⼊≡畴潦楬氮汯杩湳⹤敬整攮慬氮慵瑨敮瑩捡瑩潮⹲敡獯渢‽•䅵瑨敮瑩捡瑥⁴漠捯湦楲洠祯甠睡湴⁴漠摥汥瑥⁡汬⁰慳獷潲摳∻ਊ⼪⁁摤牥獳慢敬⁦潲潧楮⁤整慩汳渠慵瑯晩汬‪⼊≡畴潦楬氮汯杩湳⹤整慩汳⹡摤牥獳∠㴠≗敢獩瑥⁕剌∻ਊ⼪⁔楴汥⁦潲⁡畴潦楬氠汯杩渠摥瑡楬猠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献摥晡畬琭瑩瑬攢‽•偡獳睯牤∻ਊ⼪⁄敬整攠扵瑴潮⁷桥渠摥汥瑩湧⁡渠慵瑯晩汬潧楮‪⼊≡畴潦楬氮汯杩湳⹤整慩汳⹤敬整攢‽•䑥汥瑥⁐慳獷潲搢㬊ਯ⨠䅵瑯晩汬⁡汥牴⁢畴瑯渠捯湦楲浩湧⁤敬整攠慵瑯晩汬潧楮‪⼊≡畴潦楬氮汯杩湳⹤整慩汳⹤敬整攭捯湦楲浡瑩潮⹢畴瑯渢‽•䑥汥瑥⁐慳獷潲搢㬊ਯ⨠呩瑬攠睨敮⁥摩瑩湧⁡畴潦楬氠汯杩渠摥瑡楬猠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献敤楴⵴楴汥∠㴠≅摩琠偡獳睯牤∻ਊ⼪⁐污捥桯汤敲⁦潲⁰慳獷潲搠晩敬搠潮⁡畴潦楬氠汯杩渠摥瑡楬猠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献敤楴⹰慳獷潲搭灬慣敨潬摥爢‽•偡獳睯牤∻ਊ⼪⁐污捥桯汤敲⁦潲⁴楴汥⁦楥汤渠慵瑯晩汬潧楮⁤整慩汳‪⼊≡畴潦楬氮汯杩湳⹤整慩汳⹥摩琮瑩瑬攭灬慣敨潬摥爢‽•呩瑬攢㬊ਯ⨠偬慣敨潬摥爠景爠畲氠晩敬搠潮⁡畴潦楬氠汯杩渠摥瑡楬猠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献敤楴⹵牬⵰污捥桯汤敲∠㴠≥硡浰汥⹣潭∻ਊ⼪⁐污捥桯汤敲⁦潲⁵獥牢慮攠晩敬搠潮⁡畴潦楬氠汯杩渠摥瑡楬猠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献敤楴⹵獥牮慭攭灬慣敨潬摥爢‽•畳敲湡浥䁥硡浰汥⹣潭∻ਊ⼪⁍敳獡来⁤楳灬慹楮朠睨敮⁴桥潧楮⁷慳慳琠異摡瑥搠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献污獴⵵灤慴敤∠㴠≌慳琠異摡瑥搠╀∻ਊ⼪⁌潧楮慭攠污扥氠景爠汯杩渠摥瑡楬猠潮⁡畴潦楬氠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献汯杩渭湡浥∠㴠≔楴汥∻ਊ⼪⁔楴汥⁷桥渠慤摩湧敷⁡畴潦楬氠汯杩渠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献湥眭瑩瑬攢‽•䅤搠灡獳睯牤∻ਊ⼪⁎潴敳慢敬⁦潲潧楮⁤整慩汳渠慵瑯晩汬‪⼊≡畴潦楬氮汯杩湳⹤整慩汳⹮潴敳∠㴠≎潴敳∻ਊ⼪⁍敮甠楴敭⁴楴汥⁦潲灴楯渠瑯灥渠睥扳楴攠晲潭⁳敬散瑥搠畲氠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献潰敮⵷敢獩瑥⵰牯浰琮瑩瑬攢‽•佰敮⁗敢獩瑥∻ਊ⼪⁐慳獷潲搠污扥氠景爠汯杩渠摥瑡楬猠潮⁡畴潦楬氠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献灡獳睯牤∠㴠≐慳獷潲搢㬊ਯ⨠䅣瑩潮⁴數琠景爠慬敲琠睨敮⁡瑴敭灴楮朠瑯⁳慶攠愠摵灬楣慴攠汯杩渠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献獡癥ⵤ異汩捡瑥ⵡ汥牴⹡捴楯渢‽•佋∻ਊ⼪⁍敳獡来⁦潲⁡汥牴⁷桥渠慴瑥浰瑩湧⁴漠獡癥⁡⁤異汩捡瑥潧楮‪⼊≡畴潦楬氮汯杩湳⹤整慩汳⹳慶攭摵灬楣慴攭慬敲琮浥獳慧攢‽•奯甠慬牥慤礠桡癥⁡⁰慳獷潲搠獡癥搠景爠瑨楳⁵獥牮慭攠慮搠睥扳楴攮∻ਊ⼪⁔楴汥⁦潲⁡汥牴⁷桥渠慴瑥浰瑩湧⁴漠獡癥⁡⁤異汩捡瑥潧楮‪⼊≡畴潦楬氮汯杩湳⹤整慩汳⹳慶攭摵灬楣慴攭慬敲琮瑩瑬攢‽•䑵灬楣慴攠偡獳睯牤∻ਊ⼪⁕獥牮慭攠污扥氠景爠汯杩渠摥瑡楬猠潮⁡畴潦楬氠⨯ਢ慵瑯晩汬⹬潧楮献摥瑡楬献畳敲湡浥∠㴠≕獥牮慭攢㬊ਯ⨠呩瑬攠景爠扵瑴潮⁴漠䥭灯牴⁐慳獷潲摳⁷桥渠慵瑯晩汬⁨慳漠楴敭猠⨯ਢ慵瑯晩汬⹬潧楮献敭灴礭癩敷⹢畴瑯渮瑩瑬攢‽•䥭灯牴⁐慳獷潲摳∻ਊ⼪⁓畢瑩瑬攠景爠癩敷⁤楳灬慹敤⁷桥渠湯⁡畴潦楬氠灡獳睯牤猠桡癥⁢敥渠獡癥搠⨯ਢ慵瑯晩汬⹬潧楮献敭灴礭癩敷⹳畢瑩瑬攢‽•偡獳睯牤猠晲潭瑨敲⁢牯睳敲猠潲⁡灰猠捡渠扥⁩浰潲瑥搠畳楮朠瑨攠摥獫瑯瀠癥牳楯渠潦⁴桥⁄畣歄畣歇漠扲潷獥爮∻ਊ⼪⁔楴汥⁦潲⁶楥眠摩獰污祥搠睨敮⁡畴潦楬氠桡猠湯⁩瑥浳‪⼊≡畴潦楬氮汯杩湳⹥浰瑹⵶楥眮瑩瑬攢‽•乯⁰慳獷潲摳⁳慶敤⁹整∻ਊ⼪⁃慮捥氠扵瑴潮⁦潲⁡畴栠睨敮灥湩湧潧楮楳琠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹡畴栮捡湣敬∠㴠≃慮捥氢㬊ਯ⨠剥慳潮⁦潲⁡畴栠睨敮灥湩湧潧楮楳琠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹡畴栮牥慳潮∠㴠≕湬潣欠摥癩捥⁴漠慣捥獳⁰慳獷潲摳∻ਊ⼪⁔楴汥⁦潲⁣汯獥慶楧慴楯渠扵瑴潮‪⼊≡畴潦楬氮汯杩湳⹬楳琮捬潳攭瑩瑬攢‽•䍬潳攢㬊ਯ⨠呩瑬攠景爠扵瑴潮⁴漠摥汥瑥⁡汬⁳慶敤⁡畴潦楬氠灡獳睯牤猠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹤敬整攮慬氢‽•䑥汥瑥⁁汬∻ਊ⼪⁔楴汥⁦潲⁡⁴潧杬攠瑨慴⁥湡扬敳⁡畴潦楬氠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹥湡扬攢‽•卡癥⁡湤⁡畴潦楬氠灡獳睯牤猢㬊ਯ⨠䙯潴敲慢敬⁤楳灬慹敤⁢敬潷⁴慢汥⁳散瑩潮⁷楴栠潰瑩潮⁴漠敮慢汥⁡畴潦楬氠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹥湡扬攮景潴敲∠㴠≐慳獷潲摳⁡牥⁳瑯牥搠獥捵牥汹渠祯畲⁤敶楣攮∻ਊ⼪⁔潡獴敳獡来⁷桥渠愠汯杩渠楴敭⁩猠摥汥瑥搠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹬潧楮ⵤ敬整敤⵭敳獡来∠㴠≐慳獷潲搠景爠╀⁤敬整敤∻ਊ⼪⁔潡獴敳獡来⁷桥渠愠汯杩渠楴敭⁷楴桯畴⁡⁴楴汥⁩猠摥汥瑥搠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹬潧楮ⵤ敬整敤⵭敳獡来⵮漭瑩瑬攢‽•偡獳睯牤⁤敬整敤∻ਊ⼪⁔楴汥⁦潲⁡⁢畴瑯渠瑨慴⁡汬潷猠愠畳敲⁴漠牥獥琠瑨敩爠汩獴映湥癥爠獡癥搠獩瑥猠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹮敶敲⹳慶敤∠㴠≒敳整⁅硣汵摥搠卩瑥猢㬊ਯ⨠䍡湣敬⁢畴瑯渠景爠牥獥瑴楮朠汩獴映湥癥爠獡癥搠獩瑥猠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹮敶敲⹳慶敤⹲敳整⹡捴楯渮捡湣敬∠㴠≃慮捥氢㬊ਯ⨠䍯湦楲洠扵瑴潮⁴漠牥獥琠汩獴映湥癥爠獡癥搠獩瑥猠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹮敶敲⹳慶敤⹲敳整⹡捴楯渮捯湦楲洢‽•剥獥琠䕸捬畤敤⁓楴敳∻ਊ⼪⁁汥牴⁴楴汥‪⼊≡畴潦楬氮汯杩湳⹬楳琮湥癥爮獡癥搮牥獥琮慣瑩潮⹴楴汥∠㴠≉映祯甠牥獥琠數捬畤敤⁳楴敳Ⱐ祯甠睩汬⁢攠灲潭灴敤⁴漠獡癥⁹潵爠灡獳睯牤數琠瑩浥⁹潵⁳楧渠楮⁴漠慮礠潦⁴桥獥⁳楴敳⸢㬊ਯ⨠偬慣敨潬摥爠景爠獥慲捨⁦楥汤渠慵瑯晩汬潧楮楳瑩湧‪⼊≡畴潦楬氮汯杩湳⹬楳琮獥慲捨⵰污捥桯汤敲∠㴠≓敡牣栠灡獳睯牤猢㬊ਯ⨠卥捴楯渠瑩瑬攠景爠杲潵瀠潦⁳畧来獴敤⁳慶敤潧楮猠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹳畧来獴敤∠㴠≓畧来獴敤∻ਊ⼪⁔楴汥⁦潲⁳捲敥渠汩獴楮朠慵瑯晩汬潧楮猠⨯ਢ慵瑯晩汬⹬潧楮献汩獴⹴楴汥∠㴠≐慳獷潲摳∻ਊ⼪⁔楴汥⁦潲⁶楥眠摩獰污祥搠睨敮⁡畴潦楬氠楳潣步搠潮⁤敶楣敳⁷桥牥⁡⁰慳獣潤攠桡猠湯琠扥敮⁳整‪⼊≡畴潦楬氮汯杩湳⹮漭慵瑨⹳畢瑩瑬攢‽•䄠灡獳捯摥⁩猠牥煵楲敤⁴漠灲潴散琠祯畲⁰慳獷潲摳⸢㬊ਯ⨠呩瑬攠景爠癩敷⁤楳灬慹敤⁷桥渠慵瑯晩汬⁩猠汯捫敤渠摥癩捥猠睨敲攠愠灡獳捯摥⁨慳潴⁢敥渠獥琠⨯ਢ慵瑯晩汬⹬潧楮献湯ⵡ畴栮瑩瑬攢‽•卥捵牥⁹潵爠摥癩捥⁴漠獡癥⁰慳獷潲摳∻ਊ⼪⁃慮捥氠扵瑴潮⁦潲⁡畴栠摵物湧潧楮⁰牯浰琠⨯ਢ慵瑯晩汬⹬潧楮献灲潭灴⹡畴栮捡湣敬∠㴠≃慮捥氢㬊ਯ⨠剥慳潮⁦潲⁡畴栠摵物湧潧楮⁰牯浰琠⨯ਢ慵瑯晩汬⹬潧楮献灲潭灴⹡畴栮牥慳潮∠㴠≕湬潣欠摥癩捥⁴漠畳攠獡癥搠灡獳睯牤∻ਊ⼪⁔楴汥⁦潲⁳散瑩潮映慵瑯晩汬潧楮猠瑨慴⁡牥⁡渠數慣琠浡瑣栠瑯⁴桥⁣畲牥湴⁷敢獩瑥‪⼊≡畴潦楬氮汯杩湳⹰牯浰琮數慣琮浡瑣栮瑩瑬攢‽•䙲潭⁴桩猠睥扳楴攢㬊ਯ⨠䉵瑴潮⁴楴汥⁦潲⁡畴潦楬氠汯杩渠灲潭灴⁩映浯牥灴楯湳⁡牥⁡癡楬慢汥‪⼊≡畴潦楬氮汯杩湳⹰牯浰琮浯牥ⵯ灴楯湳∠㴠≍潲攠佰瑩潮猢㬊ਯ⨠呩瑬攠景爠獥捴楯渠潦⁡畴潦楬氠汯杩湳⁴桡琠慲攠慮⁡灰牯硩浡瑥慴捨⁴漠瑨攠捵牲敮琠睥扳楴攠⨯ਢ慵瑯晩汬⹬潧楮献灲潭灴⹰慲瑩慬⹭慴捨⹴楴汥∠㴠≆牯洠╀∻ਊ⼪⁔楴汥映扵瑴潮⁦潲⁡畴潦楬氠汯杩渠灲潭灴⁴漠畳攠愠獡癥搠灡獳睯牤⁦潲⁡⁷敢獩瑥‪⼊≡畴潦楬氮汯杩湳⹰牯浰琮灡獳睯牤⹢畴瑯渮瑩瑬攢‽•偡獳睯牤⁦潲‥䀢㬊ਯ⨠呩瑬攠景爠慵瑯晩汬潧楮⁰牯浰琠⨯ਢ慵瑯晩汬⹬潧楮献灲潭灴⹴楴汥∠㴠≕獥⁡⁳慶敤⁰慳獷潲搿∻ਊ⼪⁓畢瑩瑬攠摩獰污祥搠睨敮⁴桥牥⁡牥漠牥獵汴猠潮⁁畴潦楬氠獥慲捨Ⱐ數慭灬攠㨠乯⁒敳畬琠⡔楴汥⤠景爠䑵捫
卵扴楴汥⤠⨯ਢ慵瑯晩汬⹬潧楮献獥慲捨⹮漭牥獵汴献獵扴楴汥∠㴠≦潲‧╀✢㬊ਯ⨠呩瑬攠摩獰污祥搠睨敮⁴桥牥⁡牥漠牥獵汴猠潮⁁畴潦楬氠獥慲捨‪⼊≡畴潦楬氮汯杩湳⹳敡牣栮湯⵲敳畬瑳⹴楴汥∠㴠≎漠剥獵汴猢㬊ਯ⨠䑯潴⁴牡湳污瑥‭⁳瑲楮杳摩捴⁥湴特‪⼊≡畴潦楬氮湵浢敲⹯昮灡獳睯牤猢‽•慵瑯晩汬⹮畭扥爮潦⹰慳獷潲摳∻ਊ⼪⁄敳捲楰瑩潮映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁳散畲攠獴潲慧攠晥慴畲攊†⁄敳捲楰瑩潮映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁳散畲攠獴潲慧攠晥慴畲攠睩瑨⁡⁳瑲楮朠摥獣物扩湧⁴桥⁡癡楬慢汥⁢楯浥瑲礠⬠灡獳捯摥⁡猠愠灡牡浥瑥爠⨯ਢ慵瑯晩汬⹯湢潡牤楮朮步礭晥慴畲敳⹳散畲攭獴潲慧攮摥獣物灴楯渢‽•偡獳睯牤猠慲攠敮捲祰瑥搬⁳瑯牥搠潮⁤敶楣攬⁡湤潣步搠睩瑨‥䀮∻ਊ⼪⁐慲慭整敲⁦潲⁴桥⁤敳捲楰瑩潮映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁳散畲攠獴潲慧攠晥慴畲攠摥獣物扩湧⁆慣攠䥄⁢楯浥瑲礠⬠灡獳捯摥‪⼊≡畴潦楬氮潮扯慲摩湧⹫敹ⵦ敡瑵牥献獥捵牥⵳瑯牡来⹤敳捲楰瑩潮⹰慲慭整敲⹦慣攭楤∠㴠≆慣攠䥄爠灡獳捯摥∻ਊ⼪⁐慲慭整敲⁦潲⁴桥⁤敳捲楰瑩潮映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁳散畲攠獴潲慧攠晥慴畲攠摥獣物扩湧⁰慳獣潤攠潮汹⁩映湯⁢楯浥瑲礠慲攠慶慩污扬攠⨯ਢ慵瑯晩汬⹯湢潡牤楮朮步礭晥慴畲敳⹳散畲攭獴潲慧攮摥獣物灴楯渮灡牡浥瑥爮灡獳捯摥∠㴠≰慳獣潤攢㬊ਯ⨠偡牡浥瑥爠景爠瑨攠摥獣物灴楯渠潦⁡畴潦楬氠潮扯慲摩湧⁰牯浰琧猠獥捵牥⁳瑯牡来⁦敡瑵牥⁤敳捲楢楮朠呯畣栠䥄⁢楯浥瑲礠⬠灡獳捯摥‪⼊≡畴潦楬氮潮扯慲摩湧⹫敹ⵦ敡瑵牥献獥捵牥⵳瑯牡来⹤敳捲楰瑩潮⹰慲慭整敲⹴潵捨⵩搢‽•呯畣栠䥄爠灡獳捯摥∻ਊ⼪⁔楴汥映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁳散畲攠獴潲慧攠晥慴畲攠⨯ਢ慵瑯晩汬⹯湢潡牤楮朮步礭晥慴畲敳⹳散畲攭獴潲慧攮瑩瑬攢‽•卥捵牥⁳瑯牡来∻ਊ⼪⁄敳捲楰瑩潮映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁳楧渭楮⁦敡瑵牥‪⼊≡畴潦楬氮潮扯慲摩湧⹫敹ⵦ敡瑵牥献獩杮⵩湳⹤敳捲楰瑩潮∠㴠≎漠湥敤⁴漠牥浥浢敲潧楮⁩湦漮∻ਊ⼪⁔楴汥映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁳楧渭楮⁦敡瑵牥‪⼊≡畴潦楬氮潮扯慲摩湧⹫敹ⵦ敡瑵牥献獩杮⵩湳⹴楴汥∠㴠≓敡浬敳猠獩杮⵩湳∻ਊ⼪⁄敳捲楰瑩潮映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁳祮挠晥慴畲攠⨯ਢ慵瑯晩汬⹯湢潡牤楮朮步礭晥慴畲敳⹳祮挮摥獣物灴楯渢‽•䕮搭瑯ⵥ湤⁥湣特灴敤⁡湤⁥慳礠瑯⁳整⁵瀠睨敮⁹潵饲攠牥慤礮∻ਊ⼪⁔楴汥映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁳祮挠晥慴畲攠⨯ਢ慵瑯晩汬⹯湢潡牤楮朮步礭晥慴畲敳⹳祮挮瑩瑬攢‽•卹湣⁢整睥敮⁤敶楣敳∻ਊ⼪⁔楴汥映慵瑯晩汬湢潡牤楮朠灲潭灴❳⁦敡瑵牥猠汩獴‪⼊≡畴潦楬氮潮扯慲摩湧⹫敹ⵦ敡瑵牥献瑩瑬攢‽•䭥礠䙥慴畲敳∻ਊ⼪⁓畢瑩瑬攠景爠灲潭灴⁴漠畳攠獵杧敳瑥搠獴牯湧⁰慳獷潲搠景爠捲敡瑩湧⁡潧楮‪⼊≡畴潦楬氮灡獳睯牤ⵧ敮敲慴楯渭灲潭灴⹳畢瑩瑬攢‽•偡獳睯牤猠慲攠獴潲敤⁳散畲敬礠潮⁹潵爠摥癩捥⸢㬊ਯ⨠呩瑬攠景爠灲潭灴⁴漠畳攠獵杧敳瑥搠獴牯湧⁰慳獷潲搠景爠捲敡瑩湧⁡潧楮‪⼊≡畴潦楬氮灡獳睯牤ⵧ敮敲慴楯渭灲潭灴⹴楴汥∠㴠≕獥⁡⁳瑲潮朠灡獳睯牤⁦牯洠䑵捫䑵捫䝯㼢㬊ਯ⨠䉵瑴潮⁴楴汥⁣桯潳楮朠瑯⁵獥⁴桥⁳畧来獴敤⁧敮敲慴敤⁰慳獷潲搠景爠捲敡瑩湧⁡潧楮‪⼊≡畴潦楬氮灡獳睯牤ⵧ敮敲慴楯渭灲潭灴⹵獥ⵧ敮敲慴敤⵰慳獷潲搮捴愢‽•啳攠却牯湧⁐慳獷潲搢㬊ਯ⨠䉵瑴潮⁴楴汥⁣桯潳楮朠瑯⁵獥睮⁰慳獷潲搠景爠捲敡瑩湧⁡潧楮‪⼊≡畴潦楬氮灡獳睯牤ⵧ敮敲慴楯渭灲潭灴⹵獥ⵯ睮⵰慳獷潲搮捴愢‽•䍲敡瑥⁍礠佷渢㬊ਯ⨠呥硴⁦潲⁴桥⁣潮晩牭慴楯渠浥獳慧攠摩獰污祥搠睨敮⁡⁵獥爠瑲楥猠慣瑩癡瑥⁡⁐物癡瑥⁅浡楬⁁摤牥獳‪⼊≡畴潦楬氮灲楶慴攮敭慩氮浥獡来⹡捴楶慴攮捯湦楲洮捯湴敮琢‽•䕭慩汳⁳敮琠瑯‥䀠睩汬⁡条楮⁢攠景牷慲摥搠瑯⁹潵爠楮扯砮∻ਊ⼪⁔楴汥⁦潲⁴桥⁣潮晩牭慴楯渠浥獳慧攠⁤楳灬慹敤⁷桥渠愠畳敲⁴物敳⁡捴楶慴攠愠偲楶慴攠䕭慩氠䅤摲敳猠⨯ਢ慵瑯晩汬⹰物癡瑥⹥浡楬⹭敳慧攮慣瑩癡瑥⹣潮晩牭⹴楴汥∠㴠≒敡捴楶慴攠偲楶慴攠䑵捫⁁摤牥獳㼢㬊ਯ⨠䵥獡獡来⁤楳灬慹敤⁷桥渠愠灲楶慴攠敭慩氠慤摲敳猠楳⁡捴楶攠⨯ਢ慵瑯晩汬⹰物癡瑥⹥浡楬⹭敳慧攮慣瑩癥∠㴠≁捴楶攢㬊ਯ⨠呥硴⁦潲⁴桥⁣潮晩牭慴楯渠浥獳慧攠摩獰污祥搠睨敮⁡⁵獥爠瑲楥猠摥慣瑩癡瑥⁡⁐物癡瑥⁅浡楬⁁摤牥獳‪⼊≡畴潦楬氮灲楶慴攮敭慩氮浥獡来⹤敡捴楶慴攮捯湦楲洮捯湴敮琢‽•䕭慩汳⁳敮琠瑯‥䀠睩汬漠汯湧敲⁢攠景牷慲摥搠瑯⁹潵爠楮扯砮∻ਊ⼪⁔楴汥⁦潲⁴桥⁣潮晩牭慴楯渠浥獳慧攠摩獰污祥搠睨敮⁡⁵獥爠瑲楥猠摥慣瑩癡瑥⁡⁐物癡瑥⁅浡楬⁁摤牥獳‪⼊≡畴潦楬氮灲楶慴攮敭慩氮浥獡来⹤敡捴楶慴攮捯湦楲洮瑩瑬攢‽•䑥慣瑩癡瑥⁐物癡瑥⁄畣欠䅤摲敳猿∻ਊ⼪⁍敳慳慧攠摩獰污祥搠睨敮⁡⁵獥爠瑲楥猠瑯慮慧攠愠灲楶慴攠敭慩氠慤摲敳猠扵琠瑨攠獥牶楣攠楳潴⁡癡楬慢汥Ⱐ牥瑵牮猠慮⁥牲潲爠湥瑷潲欠楳⁤潷渠⨯ਢ慵瑯晩汬⹰物癡瑥⹥浡楬⹭敳慧攮敲牯爢‽•䵡湡来浥湴映瑨楳⁡摤牥獳⁩猠瑥浰潲慲楬礠畮慶慩污扬攢㬊ਯ⨠䵥獡獡来⁤楳灬慹敤⁷桥渠愠灲楶慴攠敭慩氠慤摲敳猠楳⁩湡捴楶攠⨯ਢ慵瑯晩汬⹰物癡瑥⹥浡楬⹭敳慧攮楮慣瑩癥∠㴠≄敡捴楶慴敤∻ਊ⼪⁂畴瑯渠瑥硴⁦潲⁴桥⁡汥牴⁤楡汯朠瑥汬楮朠瑨攠畳敲⁡渠異摡瑥搠畳敲湡浥⁩猠湯潮来爠愠灲楶慴攠敭慩氠慤摲敳猠⨯ਢ慵瑯晩汬⹲敭潶敤⹤畣欮慤摲敳献扵瑴潮∠㴠≇潴⁩琢㬊ਯ⨠䍯湴敮琠景爠瑨攠慬敲琠摩慬潧⁴敬汩湧⁴桥⁵獥爠慮⁵灤慴敤⁵獥牮慭攠楳漠汯湧敲⁡⁰物癡瑥⁥浡楬⁡摤牥獳‪⼊≡畴潦楬氮牥浯癥搮摵捫⹡摤牥獳⹣潮瑥湴∠㴠≙潵⁣慮⁳瑩汬慮慧攠瑨楳⁄畣欠䅤摲敳猠晲潭⁥浡楬猠牥捥楶敤⁦牯洠楴⁩渠祯畲⁰敲獯湡氠楮扯砮∻ਊ⼪⁔楴汥⁦潲⁴桥⁡汥牴⁤楡汯朠瑥汬楮朠瑨攠畳敲⁡渠異摡瑥搠畳敲湡浥⁩猠湯潮来爠愠灲楶慴攠敭慩氠慤摲敳猠⨯ਢ慵瑯晩汬⹲敭潶敤⹤畣欮慤摲敳献瑩瑬攢‽•偲楶慴攠䑵捫⁁摤牥獳⁵獥牮慭攠睡猠牥浯癥搢㬊ਯ⨠䍔䄠摩獰污祥搠潮潤慬⁡獫楮朠楦⁴桥⁵獥爠湥癥爠睡湴猠瑯⁢攠灲潭灴敤⁴漠獡癥⁡潧楮⁦潲⁴桩猠睥扳楴攠慧楮‪⼊≡畴潦楬氮獡癥⵬潧楮⹮敶敲⵰牯浰琮䍔䄢‽•乥癥爠䅳欠景爠周楳⁓楴攢㬊ਯ⨠䵥獳慧攠摩獰污祥搠潮潤慬⁡獫楮朠景爠瑨攠畳敲⁴漠獡癥⁴桥潧楮⁦潲⁴桥⁦楲獴⁴業攠⨯ਢ慵瑯晩汬⹳慶攭汯杩渮湥眭畳敲⹭敳獡来∠㴠≄畣歄畣歇漠偡獳睯牤猠☠䅵瑯晩汬⁳瑯牥猠灡獳睯牤猠獥捵牥汹渠祯畲⁤敶楣攮∻ਊ⼪⁔楴汥⁤楳灬慹敤渠浯摡氠慳歩湧⁦潲⁴桥⁵獥爠瑯⁳慶攠瑨攠汯杩渠景爠瑨攠晩牳琠瑩浥‪⼊≡畴潦楬氮獡癥⵬潧楮⹮敷⵵獥爮瑩瑬攢‽•卡癥⁴桩猠灡獳睯牤㼢㬊ਯ⨠呩瑬攠摩獰污祥搠潮潤慬⁡獫楮朠景爠瑨攠畳敲⁴漠獡癥⁴桥潧楮‪⼊≡畴潦楬氮獡癥⵬潧楮⹴楴汥∠㴠≓慶攠灡獳睯牤㼢㬊ਯ⨠䍯湦楲洠䍔䄠摩獰污祥搠潮潤慬⁡獫楮朠景爠瑨攠畳敲⁴漠獡癥⁴桥⁰慳獷潲搠⨯ਢ慵瑯晩汬⹳慶攭灡獳睯牤⹳慶攮䍔䄢‽•卡癥⁐慳獷潲搢㬊ਯ⨠呩瑬攠景爠瑨攠扵瑴潮⁴漠牥灯牴⁴桡琠慵瑯晩汬⁩猠湯琠睯牫楮朠潮⁡⁳楴攠楮⁡畴潦楬氠獥瑴楮杳‪⼊≡畴潦楬氮獥瑴楮杳⹲数潲琮湯琮睯牫楮朮扵瑴潮⹴楴汥∠㴠≒数潲琠愠灲潢汥洠睩瑨⁡畴潦楬氢㬊ਯ⨠䉵瑴潮⁴楴汥⁦潲⁴桥⁣潮晩牭慴楯渠灲潭灴⁷桥渠牥灯牴楮朠慵瑯晩汬⁩猠湯琠睯牫楮朠景爠愠睥扳楴攠⨯ਢ慵瑯晩汬⹳整瑩湧献牥灯牴⹮潴⹷潲歩湧⹣潮晩牭慴楯渮扵瑴潮∠㴠≓敮搠剥灯牴∻ਊ⼪⁍敳獡来⁦潲⁴桥⁣潮晩牭慴楯渠灲潭灴⁷桥渠牥灯牴楮朠慵瑯晩汬⁩猠湯琠睯牫楮朠景爠愠睥扳楴攠⨯ਢ慵瑯晩汬⹳整瑩湧献牥灯牴⹮潴⹷潲歩湧⹣潮晩牭慴楯渮浥獳慧攢‽•剥灯牴猠獥湴⁴漠䑵捫䑵捫䝯⁡牥⁡湯湹浯畳⁡湤⁤漠湯琠楮捬畤攠祯畲⁵獥牮慭攬⁰慳獷潲搬爠慮礠潴桥爠灥牳潮慬汹⁩摥湴楦楡扬攠楮景牭慴楯渮屮屮周攠牥灯牴湬礠楮捬畤敳⁴桥⁷敢獩瑥⁵牬⁡湤⁡湤⁴桥⁳瑡瑵猠潦⁳潭攠慵瑯晩汬⁳整瑩湧献∻ਊ⼪⁔楴汥⁦潲⁴桥⁣潮晩牭慴楯渠灲潭灴⁷桥渠牥灯牴楮朠慵瑯晩汬⁩猠湯琠睯牫楮朠景爠愠睥扳楴攠⨯ਢ慵瑯晩汬⹳整瑩湧献牥灯牴⹮潴⹷潲歩湧⹣潮晩牭慴楯渮瑩瑬攢‽•剥灯牴⁡畴潦楬氠湯琠睯牫楮朠潮‥䀿∻ਊ⼪⁍敳獡来⁳桯睮⁴漠畳敲⁷桥渠瑨敹⁳畢浩琠愠牥灯牴⁴桡琠慵瑯晩汬⁩猠湯琠睯牫楮朠景爠愠睥扳楴攠⨯ਢ慵瑯晩汬⹳整瑩湧献牥灯牴⹮潴⹷潲歩湧⹳敮琮捯湦楲浡瑩潮∠㴠≔桡湫⁹潵℠奯畲⁲数潲琠睩汬⁨敬瀠畳慫攠䑵捫䑵捫䝯⁢整瑥爠景爠敶敲祯湥⸢㬊ਯ⨠卵扴楴汥⁦潲⁴桥⁲潷⁴漠牥灯牴⁴桡琠慵瑯晩汬⁩猠湯琠睯牫楮朠潮⁡⁳楴攠楮⁡畴潦楬氠獥瑴楮杳‪⼊≡畴潦楬氮獥瑴楮杳⹲数潲琮湯琮睯牫楮朮獵扴楴汥∠㴠≁湯湹浯畳汹⁲数潲琠慵瑯晩汬潴⁷潲歩湧渠瑨楳⁳楴攮⁐慳獷潲摳⁡牥敶敲⁳桡牥搮∻ਊ⼪⁔楴汥⁦潲⁴桥⁲潷⁴漠牥灯牴⁴桡琠慵瑯晩汬⁩猠湯琠睯牫楮朠潮⁡⁳楴攠楮⁡畴潦楬氠獥瑴楮杳‪⼊≡畴潦楬氮獥瑴楮杳⹲数潲琮湯琮睯牫楮朮瑩瑬攢‽•䅵瑯晩汬潴⁷潲歩湧㼢㬊ਯ⨠䅣捥獳楢楬楴礠瑩瑬攠景爠愠卨潷⁐慳獷潲搠扵瑴潮⁤楳灬慹楮朠慣瑩慬⁰慳獷潲搠楮獴敡搠潦‪⨪⨪‪⼊≡畴潦楬氮獨潷⵰慳獷潲搢‽•卨潷⁐慳獷潲搢㬊ਯ⨠䵥獳慧攠摩獰污祥搠瑯⁴桥⁵獥爠睨敮⁴桥礠慲攠汯杧敤畴映䕭慩氠灲潴散瑩潮⸠⨯ਢ慵瑯晩汬⹳楧湩渮瑯⹭慮慧攢‽•╀⁴漠浡湡来⁹潵爠䑵捫⁁摤牥獳敳渠瑨楳⁤敶楣攮∻ਊ⼪⁍敳獡来⁤楳灬慹敤渠浯摡氠慳歩湧⁦潲⁴桥⁵獥爠瑯⁵灤慴攠瑨攠灡獳睯牤‪⼊≡畴潦楬氮異摡瑥⵰慳獷潲搮浥獳慧攢‽•䑵捫䑵捫䝯⁷楬氠異摡瑥⁴桩猠獴潲敤⁰慳獷潲搠潮⁹潵爠摥癩捥⸢㬊ਯ⨠䍯湦楲洠䍔䄠摩獰污祥搠潮潤慬⁡獫楮朠景爠瑨攠畳敲⁴漠異摡瑥⁴桥⁰慳獷潲搠⨯ਢ慵瑯晩汬⹵灤慴攭灡獳睯牤⹳慶攮䍔䄢‽•啰摡瑥⁐慳獷潲搢㬊ਯ⨠呩瑬攠摩獰污祥搠潮潤慬⁡獫楮朠景爠瑨攠畳敲⁴漠異摡瑥⁴桥⁰慳獷潲搠⨯ਢ慵瑯晩汬⹵灤慴攭灡獳睯牤⹴楴汥∠㴠≕灤慴攠灡獳睯牤⁦潲屮╀㼢㬊ਯ⨠䍯湦楲洠䍔䄠摩獰污祥搠潮潤慬⁡獫楮朠景爠瑨攠畳敲⁴漠異摡瑥⁴桥潧楮‪⼊≡畴潦楬氮異摡瑥⵵獥牮慭攮獡癥⹃呁∠㴠≕灤慴攠啳敲湡浥∻ਊ⼪⁔楴汥⁤楳灬慹敤渠浯摡氠慳歩湧⁦潲⁴桥⁵獥爠瑯⁵灤慴攠瑨攠畳敲湡浥‪⼊≡畴潦楬氮異摡瑥⵵獥牮慭爮瑩瑬攢‽•啰摡瑥⁵獥牮慭政∻ਊ⼪⁁摤⁢潯歭慲欠獣牥敮⁴楴汥‪⼊≢潯歭慲欮慤摂潯歭慲欮瑩瑬攢‽•䅤搠䉯潫浡牫∻ਊ⼪⁁摤⁦慶潲楴攠獣牥敮⁴楴汥‪⼊≢潯歭慲欮慤摆慶潲楴攮瑩瑬攢‽•䅤搠䙡癯物瑥∻ਊ⼪⁁摤⁦潬摥爠獣牥敮⁴楴汥‪⼊≢潯歭慲欮慤摆潬摥爮瑩瑬攢‽•䅤搠䙯汤敲∻ਊ⼪⁁摤⁢潯歭慲欠景汤敲⁢畴瑯渠瑥硴‪⼊≢潯歭慲欮慤摆潬摥牂畴瑯渢‽•䅤搠䙯汤敲∻ਊ⼪⁐污捥桯汤敲⁩渠瑨攠慤搠扯潫浡牫⁦潲洠⨯ਢ扯潫浡牫⹡摤牥獳⹰污捥桯汤敲∠㴠≷睷⹥硡浰汥⹣潭∻ਊ⼪⁄敬整攠扯潫浡牫⁡汥牴敳獡来‪⼊≢潯歭慲欮摥汥瑥⹡汥牴⹭敳獡来∠㴠≔桩猠睩汬⁤敬整攠祯畲⁢潯歭慲欠景爠尢╀尢∻ਊ⼪⁄敬整攠扯潫浡牫⁡汥牴⁴楴汥‪⼊≢潯歭慲欮摥汥瑥⹡汥牴⹴楴汥∠㴠≄敬整政∻ਊ⼪⁔桥敳獡来⁳桯睮⁡晴敲⁡⁢潯歭慲欠桡猠扥敮⁤敬整敤‪⼊≢潯歭慲欮摥汥瑥搮瑯慳琢‽•䉯潫浡牫⁤敬整敤∻ਊ⼪⁄敬整攠扯潫浡牫⁦潬摥爠慬敲琠摥汥瑥⁢畴瑯渠⨯ਢ扯潫浡牫⹤敬整敆潬摥牁汥牴⹤敬整敂畴瑯渢‽•䑥汥瑥∻ਊ⼪⁄漠湯琠瑲慮獬慴攠ⴠ獴物湧獤楣琠敮瑲礠⨯ਢ扯潫浡牫⹤敬整敆潬摥牁汥牴⹭敳獡来∠㴠≢潯歭慲欮摥汥瑥䙯汤敲䅬敲琮浥獳慧攢㬊ਯ⨠䑥汥瑥⁢潯歭慲欠景汤敲⁡汥牴⁴楴汥‪⼊≢潯歭慲欮摥汥瑥䙯汤敲䅬敲琮瑩瑬攢‽•䑥汥瑥‥䀿∻ਊ⼪⁅摩琠扯潫浡牫⁳捲敥渠瑩瑬攠⨯ਢ扯潫浡牫⹥摩瑂潯歭慲欮瑩瑬攢‽•䕤楴⁂潯歭慲欢㬊ਯ⨠䕤楴⁦慶潲楴攠獣牥敮⁴楴汥‪⼊≢潯歭慲欮敤楴䙡癯物瑥⹴楴汥∠㴠≅摩琠䙡癯物瑥∻ਊ⼪⁅摩琠景汤敲⁳捲敥渠瑩瑬攠⨯ਢ扯潫浡牫⹥摩瑆潬摥爮瑩瑬攢‽•䕤楴⁆潬摥爢㬊ਯ⨠䡥慤敲⁦潲⁦潬摥爠獥汥捴楯渠景爠扯潫浡牫猠⨯ਢ扯潫浡牫⹦潬摥牓敬散琮瑩瑬攢‽•䱯捡瑩潮∻ਊ⼪⁍潲攠潰瑩潮猠扵瑴潮⁴數琠⨯ਢ扯潫浡牫⹭潲敂畴瑯渢‽•䵯牥∻ਊ⼪⁐污捥桯汤敲⁩渠瑨攠慤搠扯潫浡牫⁦潲洠⨯ਢ扯潫浡牫⹴楴汥⹰污捥桯汤敲∠㴠≗敢獩瑥⁴楴汥∻ਊ⼪⁔潰敶敬⁢潯歭慲歳⁦潬摥爠瑩瑬攠⨯ਢ扯潫浡牫⹴潰䱥癥汆潬摥爮瑩瑬攢‽•䉯潫浡牫猢㬊ਯ⨠䥮景敳獡来⁡晴敲⁳敬散瑩湧⁂潯歭慲欠䅬氠扵瑴潮‪⼊≢潯歭慲歁汬⹴慢献晡楬敤∠㴠≁摤敤敷⁢潯歭慲歳⁦潲⁡汬⁴慢猢㬊ਯ⨠䍯湦楲浡瑩潮敳獡来⁡晴敲⁳敬散瑩湧⁂潯歭慲欠䅬氠扵瑴潮‪⼊≢潯歭慲歁汬⹴慢献獡癥搢‽•䅬氠瑡扳⁢潯歭慲步搢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≢潯歭慲歳⹢畴瑯渮桩湴∠㴠≂潯歭慲歳∻ਊ⼪⁆慩汵牥敳獡来⁷桥渠扯潫浡牫猠晡楬敤⁴漠數灯牴‪⼊≢潯歭慲歳⹥硰潲琮晡楬敤⹭敳獡来∠㴠≗攠捯畬摮饴⁥硰潲琠祯畲⁢潯歭慲歳Ⱐ灬敡獥⁴特⁡条楮⸢㬊ਯ⨠䍯湦楲浡瑩潮敳獡来⁴桡琠扯潫浡牫猠桡癥⁢敥渠數灯牴敤⁴漠瑨攠晩汥⁳祳瑥洠⨯ਢ扯潫浡牫献數灯牴⹦楬敳⹳畣捥獳⹭敳獡来∠㴠≙潵爠扯潫浡牫猠桡癥⁢敥渠數灯牴敤⸢㬊ਯ⨠䍯湦楲浡瑩潮敳獡来⁴桡琠扯潫浡牫猠桡癥⁢敥渠獨慲敤⁳畣捥獳晵汬礠瑯⁡湯瑨敲⁡灰‪⼊≢潯歭慲歳⹥硰潲琮獨慲攮獵捣敳献浥獳慧攢‽•奯畲⁢潯歭慲歳⁨慶攠扥敮⁳桡牥搮∻ਊ⼪⁔楴汥映潰瑩潮⁴漠數灯牴⁈呍䰠⨯ਢ扯潫浡牫献數灯牴䅣瑩潮⹴楴汥∠㴠≅硰潲琠䡔䵌⁆楬攢㬊ਯ⨠䙡楬畲攠浥獳慧攠睨敮⁢潯歭慲歳⁦慩汥搠瑯⁩浰潲琠⨯ਢ扯潫浡牫献業灯牴⹦慩汥搮浥獳慧攢‽•卯牲礬⁷攠慲敮饴⁡扬攠瑯⁩浰潲琠瑨楳⁦楬攮∻ਊ⼪⁃潮晩牭慴楯渠浥獳慧攠瑨慴⁢潯歭慲歳⁨慶攠扥敮⁩浰潲瑥搠⨯ਢ扯潫浡牫献業灯牴⹳畣捥獳⹭敳獡来∠㴠≙潵爠扯潫浡牫猠桡癥⁢敥渠業灯牴敤⸢㬊ਯ⨠呩瑬攠潦灴楯渠瑯⁩浰潲琠䡔䵌‪⼊≢潯歭慲歳⹩浰潲瑁捴楯渮瑩瑬攢‽•䥭灯牴⁈呍䰠䙩汥∻ਊ⼪⁉浰潲琠扯潫浡牫⁦楬攠扵瑴潮⁴數琠⨯ਢ扯潫浡牫献業灯牴䕸灯牴⹦潯瑥爮扵瑴潮⹴楴汥∠㴠≉浰潲琠扯潫浡牫⁦楬攠晲潭⁡湯瑨敲⁢牯睳敲∻ਊ⼪⁔楴汥映灲潭灴⁦潲⁵獥牳⁷桥牥⁴桥礠捡渠捨潯獥⁴漠業灯牴爠數灯牴⁡渠䡔䵌⁦楬攠捯湴慩湩湧⁷敢灡来⁢潯歭慲歳‪⼊≢潯歭慲歳⹩浰潲瑅硰潲琮瑩瑬攢‽•䥭灯牴⁡渠䡔䵌⁦楬攠潦⁢潯歭慲歳⁦牯洠慮潴桥爠扲潷獥爬爠數灯牴⁹潵爠數楳瑩湧⁢潯歭慲歳⸢㬊ਯ⨠䉵瑴潮⁴漠潰敮⁲数潲琠景牭‪⼊≢牯步渮獩瑥⹲数潲琮浥湵⹴楴汥∠㴠≒数潲琠偲潢汥洠坩瑨⁔桩猠卩瑥∻ਊ⼪⁁捫湯睬敤来⁢畴瑯渠⨯ਢ扲潫敮⹳楴攮牥灯牴⹭楳獩湧⹤敳捲楰瑩潮⹡汥牴⹢畴瑯渢‽•䝯琠䥴∻ਊ⼪⁉琠慰灥慲猠慳⁡渠慬敲琠慦瑥爠畳敲⁴物敳⁴漠獥湤⁡⁲数潲琠睩瑨潵琠獵扭楴瑩湧⁡湹⁤整慩汳‪⼊≢牯步渮獩瑥⹲数潲琮浩獳楮朮摥獣物灴楯渮慬敲琮摥獣物灴楯渢‽•偬敡獥⁤敳捲楢攠瑨攠楳獵攠祯甠數灥物敮捥搠潮⁴桩猠獩瑥⁳漠睥⁣慮⁢整瑥爠畮摥牳瑡湤⁨潷⁴漠晩砠楴⸢㬊ਯ⨠䥴⁡灰敡牳⁡猠慮⁡汥牴⁡晴敲⁵獥爠瑲楥猠瑯⁳敮搠愠牥灯牴⁷楴桯畴⁳畢浩瑴楮朠慮礠摥瑡楬猠⨯ਢ扲潫敮⹳楴攮牥灯牴⹭楳獩湧⹤敳捲楰瑩潮⹡汥牴⹴楴汥∠㴠≄敳捲楰瑩潮⁒敱畩牥搢㬊ਯ⨠䵥獳慧攠瑨慴⁡灰敡牳⁡晴敲⁳畢浩瑴楮朠牥灯牴‪⼊≢牯步渮獩瑥⹲数潲琮獵捣敳献瑯慳琢‽•奯畲⁲数潲琠桥汰猠浡步⁄畣歄畣歇漠扥瑴敲⁦潲⁥癥特潮攡∻ਊ⼪⁂畴瑯渠瑯⁡湳睥爠煵敳瑩潮‧䑩搠瑵牮楮朠潦映灲潴散瑩潮猠牥獯汶攠瑨攠楳獵攠潮⁴桩猠獩瑥㼧‪⼊≢牯步渮獩瑥⹲数潲琮瑯杧汥⹡汥牴⹮漮扵瑴潮∠㴠≎漢㬊ਯ⨠䅮⁡汥牴⁴桡琠慰灥慲猠慦瑥爠畳敲⁴畲湳晦⁴桥⁰物癡捹⁰牯瑥捴楯渠⨯ਢ扲潫敮⹳楴攮牥灯牴⹴潧杬攮慬敲琮瑩瑬攢‽•䑩搠瑵牮楮朠偲楶慣礠偲潴散瑩潮猠潦映牥獯汶攠瑨攠楳獵攠潮⁴桩猠獩瑥㼢㬊ਯ⨠䉵瑴潮⁴漠慮獷敲ⁱ略獴楯渠❄楤⁴畲湩湧晦⁰牯瑥捴楯湳⁲敳潬癥⁴桥⁩獳略渠瑨楳⁳楴政✠⨯ਢ扲潫敮⹳楴攮牥灯牴⹴潧杬攮慬敲琮祥献扵瑴潮∠㴠≙敳∻ਊ⼪⁆楲獴⁰慲慭整敲⁩猠愠捯畮琠潦⁡摤楴楯湡氠瑲慣步牳Ⱐ獥捯湤⁡湤⁴桩牤⁡牥慭敳映瑨攠瑲慣步爠湥瑷潲歳
獴物湧猩‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹢牯睳楮朮浵汴楰汥⹴牡捫敲猢‽•捯湴數瑵慬⹯湢潡牤楮朮扲潷獩湧⹭畬瑩灬攮瑲慣步牳∻ਊ⼪⁐慲慭整敲⁩猠摯浡楮慭攠⡳瑲楮朩‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹢牯睳楮朮潮攮瑲慣步爢‽•⨥ㄤ䀪⁷慳⁴特楮朠瑯⁴牡捫⁹潵⁨敲攮⁉⁢汯捫敤⁴桥洡屮屮鷯뢏⁔慰⁴桥⁳桩敬搠景爠浯牥⁩湦漮∻ਊ⼪⁂畴瑯渠潮⁴桥慳琠獣牥敮映瑨攠潮扯慲摩湧Ⱐ楴⁷楬氠摩獭楳猠瑨攠潮扯慲摩湧⁳捲敥渮‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹦楮慬⵳捲敥渮扵瑴潮∠㴠≈楧栠晩癥™㬊ਯ⨠䵥獳慧攠潦⁴桥慳琠獣牥敮映瑨攠潮扯慲摩湧⁴漠瑨攠扲潷獥爠慰瀮‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹦楮慬⵳捲敥渮浥獳慧攢‽•剥浥浢敲㨠敶敲礠瑩浥⁹潵⁢牯睳攠睩瑨攠愠捲敥灹⁡搠汯獥猠楴猠睩湧献⃰龑谢㬊ਯ⨠呩瑬攠潦⁴桥慳琠獣牥敮映瑨攠潮扯慲摩湧⁴漠瑨攠扲潷獥爠慰瀠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮晩湡氭獣牥敮⹴楴汥∠㴠≙潵饶攠杯琠瑨楳™㬊ਯ⨠䅦瑥爠瑨攠畳敲⁰敲景牭猠瑨敩爠晩牳琠獥慲捨⁵獩湧⁴桥⁢牯睳敲Ⱐ瑨楳⁤楡汯朠數灬慩湳⁴桥⁡摶慮瑡来猠潦⁵獩湧⁄畣歄畣歇漠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮晩牳琭獥慲捨ⵤ潮攮浥獳慧攢‽•周慴饳⁄畣歄畣歇漠卥慲捨⸠偲楶慴攮⁆慳琮⁆敷敲⁡摳⸢㬊ਯ⨠䑵物湧湢潡牤楮朠獴数猠瑨楳⁢畴瑯渠楳⁳桯睮⁡湤⁴慫敳⁥楴桥爠瑯⁴桥數琠獴数猠潲⁣汯獥猠瑨攠潮扯慲摩湧⸠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮杯琭楴⹢畴瑯渢‽•䝯琠楴™㬊ਯ⨠呩瑬攠潦⁡⁰潰潶敲渠瑨攠湥眠瑡戠灡来⁢牯睳敲⁴桡琠楮癩瑥猠瑨攠畳敲⁴漠瑲礠愠癩獩瑩湧⁡⁷敢獩瑥‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹮瑰⹴特ⵡ⵳楴攮瑩瑬攢‽•呲礠癩獩瑩湧⁡⁳楴攡∻ਊ⼪⁍敳獡来映愠灯灯癥爠潮⁴桥⁢牯睳敲⁴桡琠楮癩瑥猠瑨攠畳敲⁴漠瑲礠愠獥慲捨⁥硰污楮楮朠瑨慴⁴桥楲⁳敡牣桥猠慲攠慮潮祭潵猠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮瑲礭愭獥慲捨⹭敳獡来∠㴠≙潵爠䑵捫䑵捫䝯⁳敡牣桥猠慲攠慬睡祳⁡湯湹浯畳⸢㬊ਯ⨠呩瑬攠潦⁡⁰潰潶敲渠瑨攠扲潷獥爠瑨慴⁩湶楴敳⁴桥⁵獥爠瑯⁴特⁡⁳敡牣栠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮瑲礭愭獥慲捨⹴楴汥∠㴠≒敡摹⁴漠来琠獴慲瑥搿屮呲礠愠獥慲捨™㬊ਯ⨠䵥獳慧攠潦⁡⁰潰潶敲渠瑨攠扲潷獥爠瑨慴⁩湶楴敳⁴桥⁵獥爠瑯⁴特⁶楳楴楮朠愠睥扳楴攠瑯⁥硰污楮⁴桡琠睥⁢汯捫⁴牡捫敲猠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮瑲礭愭獩瑥⹭敳獡来∠㴠≉饬氠扬潣欠瑲慣步牳⁳漠瑨敹⁣慮饴⁳灹渠祯甮∻ਊ⼪⁔楴汥映愠灯灯癥爠潮⁴桥⁢牯睳敲⁴桡琠楮癩瑥猠瑨攠畳敲⁴漠瑲礠愠癩獩瑩湧⁡⁷敢獩瑥‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹴特ⵡ⵳楴攮瑩瑬攢‽•乥硴Ⱐ瑲礠癩獩瑩湧⁡⁳楴攡∻ਊ⼪⁍敳獡来映愠灯灯癥爠潮⁴桥⁢牯睳敲⁴桡琠楮癩瑥猠瑨攠畳敲⁴漠瑲礠癩獩瑩湧⁴桥⁢牯睳敲⁆楲攠䉵瑴潮⸠偬敡獥敡癥⁴桥楮攠扲敡欠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮瑲礭晩牥ⵢ畴瑯渮浥獳慧攢‽•䥮獴慮瑬礠捬敡爠祯畲⁢牯睳楮朠慣瑩癩瑹⁷楴栠瑨攠䙩牥⁂畴瑯渮屮屮䝩癥⁩琠愠瑲礡⃰龔ꔢ㬊ਯ⨠䉲潷獥爠卥慲捨ⁱ略特⁦潲⁨潷⁴漠獡礠摵捫⁩渠敮杬楳栠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮瑲礭獥慲捨⹯灴楯渱ⵅ湧汩獨∠㴠≨潷⁴漠獡礠鱤畣毢肝⁩渠獰慮楳栢㬊ਯ⨠䉲潷獥爠卥慲捨ⁱ略特⁦潲⁨潷⁴漠獡礠摵捫⁩渠敮杬楳栠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮瑲礭獥慲捨⹯灴楯渱楮瑥牮慴楯湡氢‽•桯眠瑯⁳慹⃢肜摵捫鴠楮⁥湧汩獨∻ਊ⼪⁓敡牣栠煵敲礠景爠瑨攠捡獴映䵩杨瑹⁄畣歳‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹴特⵳敡牣栮潰瑩潮㈭敮杬楳栢‽•浩杨瑹⁤畣歳⁣慳琢㬊ਯ⨠卥慲捨ⁱ略特⁦潲⁴桥⁣慳琠潦⁁癡瑡爠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮瑲礭獥慲捨⹯灴楯渲⵩湴敲湡瑩潮慬∠㴠≣慳琠潦⁡癡瑡爢㬊ਯ⨠䉲潷獥爠卥慲捨ⁱ略特⁦潲潣慬⁷敡瑨敲‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹴特⵳敡牣栮潰瑩潮㌢‽•汯捡氠睥慴桥爢㬊ਯ⨠䉲潷獥爠卥慲捨ⁱ略特⁦潲⁣桯捯污瑥⁣桩瀠捯潫楥⁲散楰敳‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹴特⵳敡牣栮獵牰物獥⵭攭敮杬楳栢‽•捨潣潬慴攠捨楰⁣潯歩攠牥捩灥猢㬊ਯ⨠䉲潷獥爠卥慲捨ⁱ略特⁦潲⁤楮湥爠牥捩灥猠⨯ਢ捯湴數瑵慬⹯湢潡牤楮朮瑲礭獥慲捨⹳畲灲楳攭浥⵩湴敲湡瑩潮慬∠㴠≤楮湥爠牥捩灥猢㬊ਯ⨠呩瑬攠景爠愠扵瑴潮⁴桡琠瑲楧来牳⁡渠畮歮潷渠獥慲捨ⁱ略特⁦潲⁴桥⁵獥爮‪⼊≣潮瑥硴畡氮潮扯慲摩湧⹴特⵳敡牣栮獵牰物獥⵭攭瑩瑬攢‽•卵牰物獥攡∻ਊ⼪⁃牡獨⁒数潲琠慬睡祳⁳敮搠扵瑴潮⁴楴汥‪⼊≣牡獨⹲数潲琮摩慬潧⹡汷慹献獥湤∠㴠≁汷慹猠卥湤⁃牡獨⁒数潲瑳∻ਊ⼪⁃牡獨⁒数潲琠桩摥⁤整慩汳⁢畴瑯渠瑩瑬攠⨯ਢ捲慳栮牥灯牴⹤楡汯朮桩摥⹤整慩汳∠㴠≈楤攢㬊ਯ⨠䍲慳栠剥灯牴⁤楡汯朠浥獳慧攠⨯ਢ捲慳栮牥灯牴⹤楡汯朮浥獳慧攢‽•䍲慳栠牥灯牴猠桥汰⁄畣歄畣歇漠摩慧湯獥⁩獳略猠慮搠業灲潶攠潵爠灲潤畣瑳⸠周敹⁣潮瑡楮漠灥牳潮慬汹⁩摥湴楦楡扬攠楮景牭慴楯渮∻ਊ⼪⁃牡獨⁒数潲琠湥癥爠獥湤⁢畴瑯渠瑩瑬攠⨯ਢ捲慳栮牥灯牴⹤楡汯朮湥癥爮獥湤∠㴠≎敶敲⁓敮搢㬊ਯ⨠䍲慳栠剥灯牴⁳桯眠摥瑡楬猠扵瑴潮⁴楴汥‪⼊≣牡獨⹲数潲琮摩慬潧⹳桯眮摥瑡楬猢‽•卥攠睨慴❳⁳敮琢㬊ਯ⨠䍲慳栠剥灯牴⁤楡汯朠瑩瑬攠⨯ਢ捲慳栮牥灯牴⹤楡汯朮瑩瑬攢‽•䅵瑯浡瑩捡汬礠獥湤⁣牡獨⁲数潲瑳㼢㬊ਯ⨠呩瑬攠景爠愠獥捴楯渠捯湴慩湩湧湬礠楴敭猠晲潭⁰慳琠浯湴栠⨯ਢ摡瑥⹲慮来⹰慳琭浯湴栢‽•偡獴潮瑨∻ਊ⼪⁔楴汥⁦潲⁡⁳散瑩潮⁣潮瑡楮楮朠潮汹⁩瑥浳⁦牯洠灡獴⁷敥欠⨯ਢ摡瑥⹲慮来⹰慳琭睥敫∠㴠≐慳琠睥敫∻ਊ⼪⁔楴汥⁦潲⁡⁳散瑩潮⁣潮瑡楮楮朠潮汹⁩瑥浳⁦牯洠瑯摡礠⨯ਢ摡瑥⹲慮来⹴潤慹∠㴠≔潤慹∻ਊ⼪⁔楴汥⁦潲⁡⁳散瑩潮⁣潮瑡楮楮朠潮汹⁩瑥浳⁦牯洠祥獴敲摡礠⨯ਢ摡瑥⹲慮来⹹敳瑥牤慹∠㴠≙敳瑥牤慹∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ摡砮桩摥⹢畴瑯渢‽•䡩摥⁔楰猠䙯牥癥爢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≤慸⹨楤攮捡湣敬∠㴠≃慮捥氢㬊ਯ⨠卵扴楴汥⁩渠䡩摥⁄慸⁤楡汯朠⨯ਢ摡砮桩摥⹭敳獡来∠㴠≔桥牥⁡牥湬礠愠晥眬⁡湤⁷攠瑲楥搠瑯慫攠瑨敭⁩湦潲浡瑩癥⸢㬊ਯ⨠呩瑬攠楮⁈楤攠䑡砠摩慬潧‪⼊≤慸⹨楤攮瑩瑬攢‽•䡩摥⁲敭慩湩湧⁴楰猿∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ摡砮潮扯慲摩湧⹢牯睳楮朮慦瑥爮獥慲捨∠㴠≙潵爠䑵捫䑵捫䝯⁳敡牣桥猠慲攠慮潮祭潵献⁁汷慹献⃰龙谢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≤慸⹯湢潡牤楮朮扲潷獩湧⹡晴敲⹳敡牣栮捴愢‽•偨敷™㬊ਯ⨠䙩牳琠灡牡浥瑥爠楳⁡⁣潵湴映慤摩瑩潮慬⁴牡捫敲猬⁳散潮搠慮搠瑨楲搠慲攠湡浥猠潦⁴桥⁴牡捫敲整睯牫猠⡳瑲楮杳⤠⨯ਢ摡砮潮扯慲摩湧⹢牯睳楮朮浵汴楰汥⹴牡捫敲猢‽•摡砮潮扯慲摩湧⹢牯睳楮朮浵汴楰汥⹴牡捫敲猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≤慸⹯湢潡牤楮朮扲潷獩湧⹭畬瑩灬攮瑲慣步牳⹣瑡∠㴠≈楧栠䙩癥™㬊ਯ⨠偡牡浥瑥爠楳⁤潭慩渠湡浥
獴物湧⤠⨯ਢ摡砮潮扯慲摩湧⹢牯睳楮朮潮攮瑲慣步爢‽•⨥ㄤ䀪⁷慳⁴特楮朠瑯⁴牡捫⁹潵⁨敲攮屮屮䤠扬潣步搠瑨敭⅜湜滢额輠奯甠捡渠捨散欠瑨攠慤摲敳猠扡爠瑯⁳敥⁷桯⁩猠瑲祩湧⁴漠瑲慣欠祯甠睨敮⁹潵⁶楳楴⁡敷⁳楴攮∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ摡砮潮扯慲摩湧⹢牯睳楮朮潮攮瑲慣步爮捴愢‽•䡩杨⁆楶攡∻ਊ⼪⁆楲獴⁰慲慭瑥爠楳⁡⁳瑲楮朠ⴠ湥瑷潲欠湡浥Ⱐ㉮搠灡牡浥瑥爠楳⁡⁳瑲楮朠ⴠ摯浡楮慭攠⨯ਢ摡砮潮扯慲摩湧⹢牯睳楮朮獩瑥⹩献浡橯爮瑲慣步爢‽•䡥慤猠異℠䤠捡滢肙琠獴潰‥ㄤ䀠晲潭⁳敥楮朠祯畲⁡捴楶楴礠潮‥㈤䀮屮屮䉵琠扲潷獥⁷楴栠浥Ⱐ慮搠䤠捡渠牥摵捥⁷桡琠┱⑀湯睳⁡扯畴⁹潵癥牡汬⁢礠扬潣歩湧⁴桥楲⁴牡捫敲猠潮潴猠潦瑨敲⁳楴敳⸢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≤慸⹯湢潡牤楮朮扲潷獩湧⹳楴攮楳⹭慪潲⹴牡捫敲⹣瑡∠㴠≇潴⁉琢㬊ਯ⨠偡牡浥瑥牳⁡牥⁤潭慩渠湡浥猠⡳瑲楮杳⤠⨯ਢ摡砮潮扯慲摩湧⹢牯睳楮朮獩瑥⹯睮敤⹢礮浡橯爮瑲慣步爢‽•䡥慤猠異℠卩湣攠┲⑀睮猠┱⑀Ⱐ䤠捡滢肙琠獴潰⁴桥洠晲潭⁳敥楮朠祯畲⁡捴楶楴礠桥牥⹜湜湂畴⁢牯睳攠睩瑨攬⁡湤⁉⁣慮⁲敤畣攠睨慴‥㈤䀠歮潷猠慢潵琠祯甠潶敲慬氠批⁢汯捫楮朠瑨敩爠瑲慣步牳渠汯瑳映潴桥爠獩瑥献∻ਊ⼪⁇潴⁉琠⨯ਢ摡砮潮扯慲摩湧⹢牯睳楮朮獩瑥⹯睮敤⹢礮浡橯爮瑲慣步爮捴愢‽•䝯琠䥴∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ摡砮潮扯慲摩湧⹢牯睳楮朮睩瑨潵琮瑲慣步牳∠㴠≁猠祯甠瑡瀠慮搠獣牯汬Ⱐ䧢肙汬⁢汯捫⁰敳歹⁴牡捫敲献屮屮䝯⁡桥慤‭敥瀠扲潷獩湧™㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≤慸⹯湢潡牤楮朮扲潷獩湧⹷楴桯畴⹴牡捫敲献捴愢‽•䝯琠䥴∻ਊ⼪⁅湣潵牡来⁵獥爠瑯⁴特⁣汥慲楮朠摡瑡⁷楴栠瑨攠晩牥⁢畴瑯渠⨯ਢ摡砮潮扯慲摩湧⹦楲攮扵瑴潮∠㴠≐敲獯湡氠摡瑡⁣慮⁢畩汤⁵瀠楮⁹潵爠扲潷獥爮⁙畣欮⁕獥⁴桥⁆楲攠䉵瑴潮⁴漠扵牮⁩琠慬氠慷慹⸠䝩癥⁩琠愠瑲礠湯眡⃰龑蜢㬊ਯ⨠䍡湣敬⁡捴楯渠⨯ਢ摡砮潮扯慲摩湧⹦楲攮扵瑴潮⹣慮捥汁捴楯渢‽•䍡湣敬∻ਊ⼪⁅湣潵牡来⁵獥爠瑯⁴特⁣汥慲楮朠摡瑡⁷楴栠瑨攠晩牥⁢畴瑯渠⨯ਢ摡砮潮扯慲摩湧⹦楲攮扵瑴潮⹣潮晩牭䅣瑩潮∠㴠≃汯獥⁔慢猠慮搠䍬敡爠䑡瑡∻ਊ⼪⁅湣潵牡来⁵獥爠瑯⁡摤⁦慶潲楴攠獩瑥⁵獩湧⁴桥⁢牯睳楮朠浥湵⸠⨯ਢ摡砮潮扯慲摩湧⹨潭攮慤搮晡癯物瑥∠㴠≖楳楴⁹潵爠晡癯物瑥⁳楴敳⁩渠愠晬慳校屮屮䝯⁴漠愠獩瑥⁹潵潶攮⁔桥渠瑡瀠瑨攠尢꽜∠楣潮⁡湤⁳敬散琠⩁摤⁴漠䙡癯物瑥猪⸢㬊ਯ⨠䅣捥獳楢汥⁶敲獩潮映摡砮潮扯慲摩湧⹨潭攮慤搮晡癯物瑥‪⼊≤慸⹯湢潡牤楮朮桯浥⹡摤⹦慶潲楴攮慣捥獳楢汥∠㴠≖楳楴⁹潵爠晡癯物瑥⁳楴敳⁩渠愠晬慳校⁖楳楴湥映祯畲⁦慶潲楴攠獩瑥献⁔桥渠瑡瀠瑨攠潰敮敮甠扵瑴潮⁡湤⁳敬散琠䅤搠瑯⁆慶潲楴敳⸢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≤慸⹯湢潡牤楮朮桯浥⹩湩瑩慬∠㴠≎數琬⁴特⁶楳楴楮朠潮攠潦⁹潵爠晡癯物瑥⁳楴敳⅜湜湉饬氠扬潣欠瑲慣步牳⁳漠瑨敹⁣慮饴⁳灹渠祯甮⁉饬氠慬獯⁵灧牡摥⁴桥⁳散畲楴礠潦⁹潵爠捯湮散瑩潮⁩映灯獳楢汥⸠钒∻ਊ⼪⁡搠㴠慤癥牴楳浥湴‪⼊≤慸⹯湢潡牤楮朮桯浥⹳畢獥煵敮琢‽•奯痢肙癥⁧潴⁴桩猡屮屮剥浥浢敲㨠䕶敲礠瑩浥⁹潵⁢牯睳攠睩瑨攬⁡⁣牥数礠慤潳敳⁩瑳⁷楮杳⸠醍∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ摡砮潮扯慲摩湧⹭敳獡来∠㴠≔桥⁉湴敲湥琠捡渠扥楮摡⁣牥数礮屮屮乯琠瑯⁷潲特℠卥慲捨楮朠慮搠扲潷獩湧⁰物癡瑥汹⁩猠敡獩敲⁴桡渠祯甠瑨楮欮∻ਊ⼪⁄敦慵汴⁳瑲楮朠畳敤⁩映畳敲猠摥癩捥⁩猠湯琠楐桯湥爠楐慤‪⼊≤敶楣攮瑹灥⹤敦慵汴∠㴠≤敶楣攢㬊ਯ⨠䑥癩捥⁴祰攠楳⁩偨潮攠⨯ਢ摥癩捥⹴祰攮楰桯湥∠㴠≩偨潮攢㬊ਯ⨠䑥癩捥⁴祰攠楳⁩偡搠⨯ਢ摥癩捥⹴祰攮灡搢‽•楐慤∻ਊ⼪⁇偃⁓整瑩湧⁳瑡瑥‪⼊≤潮潴獥汬⹤楳慢汥搢‽•䑩獡扬敤∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ摯湯瑳敬氮摩獣污業敲⹬敡牮浯牥∠㴠≌敡牮⁍潲攢㬊ਯ⨠䝐䌠卥瑴楮朠獴慴攠⨯ਢ摯湯瑳敬氮敮慢汥搢‽•䕮慢汥搢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≤潮潴獥汬⹩湦漮桥慤敲瑥硴∠㴠≄畣歄畣歇漠慵瑯浡瑩捡汬礠扬潣歳慮礠瑲慣步牳⸠坩瑨⁇汯扡氠偲楶慣礠䍯湴牯氠⡇偃⤬⁹潵⁣慮⁡汳漠慳欠灡牴楣楰慴楮朠睥扳楴敳⁴漠牥獴物捴⁳敬汩湧爠獨慲楮朠祯畲⁰敲獯湡氠摡瑡⁷楴栠潴桥爠捯浰慮楥献∻ਊ⼪⁁汥牴⁡捴楯渠景爠獴慲瑩湧⁡⁦楬攠摯睬潡搠⨯ਢ摯睮汯慤献慬敲琮慣瑩潮⹳慶攭瑯ⵤ潷湬潡摳∠㴠≓慶攠瑯⁄潷湬潡摳∻ਊ⼪⁃慮捥氠摯睮汯慤⁡捴楯渠景爠摯睮汯慤猠⨯ਢ摯睮汯慤献捡湣敬ⵤ潷湬潡搮慬敲琮捡湣敬∠㴠≃慮捥氢㬊ਯ⨠䵥獳慧攠景爠慬敲琠睨敮⁴特楮朠瑯⁣慮捥氠瑨攠晩汥⁤潷湬潡搠⨯ਢ摯睮汯慤献捡湣敬ⵤ潷湬潡搮慬敲琮浥獳慧攢‽•䅲攠祯甠獵牥⁹潵⁷慮琠瑯⁣慮捥氠瑨楳⁤潷湬潡搿∻ਊ⼪⁃潮晩牭⁡捴楯渠景爠慬敲琠睨敮⁴特楮朠瑯⁣慮捥氠瑨攠晩汥⁤潷湬潡搠⨯ਢ摯睮汯慤献捡湣敬ⵤ潷湬潡搮慬敲琮湯∠㴠≎漢㬊ਯ⨠呩瑬攠景爠慬敲琠睨敮⁴特楮朠瑯⁣慮捥氠瑨攠晩汥⁤潷湬潡搠⨯ਢ摯睮汯慤献捡湣敬ⵤ潷湬潡搮慬敲琮瑩瑬攢‽•䍡湣敬⁤潷湬潡搿∻ਊ⼪⁃潮晩牭⁡捴楯渠景爠景爠慬敲琠睨敮⁴特楮朠瑯⁣慮捥氠瑨攠晩汥⁤潷湬潡搠⨯ਢ摯睮汯慤献捡湣敬ⵤ潷湬潡搮慬敲琮祥猢‽•奥猢㬊ਯ⨠䉵瑴潮⁦潲⁤敬整楮朠慬氠楴敭猠潮⁤潷湬潡摳楳琠⨯ਢ摯睮汯慤献摯睮汯慤猭汩獴⹤敬整攭慬氢‽•䑥汥瑥⁁汬∻ਊ⼪⁅浰瑹⁤潷湬潡摳楳琠灬慣桯汤敲‪⼊≤潷湬潡摳⹤潷湬潡摳⵬楳琮敭灴礢‽•乯⁦楬敳⁤潷湬潡摥搠祥琢㬊ਯ⨠䱡扥氠摩獰污祩湧⁦楬攠摯睮汯慤⁰牯杲敳献⁂潴栠灡牡浥瑥牳⁡牥⁦潲浡瑴敤⁤慴愠獩穥敡獵牥浥湴猠攮朮‵䵂⸠䙩牳琠灡牡浥瑥爠楳⁤慴愠獩穥⁣畲牥湴汹⁤潷湬潡摥搮⁓散潮搠灡牡浥瑥爠楳⁴潴慬⁥硰散瑥搠摡瑡⁳楺攠潦⁴桥⁦楬攮‪⼊≤潷湬潡摳⹤潷湬潡摳⵬楳琮牯眮摯睮汯慤楮朢‽•䑯睮汯慤楮朠ⴠ┱⑀映┲⑀∻ਊ⼪⁌慢敬⁤楳灬慹楮朠晩汥⁤潷湬潡搠灲潧牥獳⸠周攠灡牡浥瑥爠楳⁦潲浡瑴敤⁤慴愠獩穥敡獵牥浥湴猠捵牲敮瑬礠摯睮汯慤敤⁥⹧⸠㕍䈮‪⼊≤潷湬潡摳⹤潷湬潡摳⵬楳琮牯眮摯睮汯慤楮杕湫湯睮呯瑡汓楺攢‽•䑯睮汯慤楮朠ⴠ╀∻ਊ⼪⁄潷湬潡摳楳琠獣牥敮⁴楴汥‪⼊≤潷湬潡摳⹤潷湬潡摳⵬楳琮瑩瑬攢‽•䑯睮汯慤猢㬊ਯ⨠䅤摩瑩潮慬⁡汥牴敳獡来⁳桯睮⁷桥渠瑨敲攠慲攠慣瑩癥⁤潷湬潡摳⁷桥渠畳楮朠瑨攠晩牥⁢畴瑯渠⨯ਢ摯睮汯慤献晩牥ⵢ畴瑯渮慬敲琮浥獳慧攢‽•周楳⁷楬氠慬獯⁣慮捥氠摯睮汯慤猠楮⁰牯杲敳猢㬊ਯ⨠䵥獳慧攠捯湦楲浩湧⁴桡琠慬氠晩汥猠潮⁴桥⁤潷湬潡摳楳琠桡癥⁢敥渠摥汥瑥搠⨯ਢ摯睮汯慤献浥獳慧攮慬氭晩汥猭摥汥瑥搢‽•䅬氠晩汥猠摥汥瑥搢㬊ਯ⨠䵥獳慧攠捯湦楲浩湧⁴桡琠瑨攠摯睮汯慤⁰牯捥獳⁨慳⁣潭灬整敤⸠偡牡浥瑥爠楳⁤潷湬潡摥搠晩汥❳⁦楬敮慭攠⨯ਢ摯睮汯慤献浥獳慧攮摯睮汯慤ⵣ潭灬整攢‽•䑯睮汯慤⁣潭灬整攠景爠╀∻ਊ⼪⁍敳獡来⁣潮晩牭楮朠瑨攠晩汥⁷慳⁤敬整敤⸠偡牡浥瑥爠楳⁦楬攧猠晩汥湡浥‪⼊≤潷湬潡摳⹭敳獡来⹤潷湬潡搭摥汥瑥搢‽•䑥汥瑥搠╀∻ਊ⼪⁍敳獡来⁩湦潲浩湧⁴桡琠瑨攠摯睮汯慤⁨慳⁦慩汥搠摵攠瑯⁣潮湥捴楯渠楳獵敳‪⼊≤潷湬潡摳⹭敳獡来⹤潷湬潡搭晡楬敤∠㴠≆慩汥搠瑯⁤潷湬潡搮⁃桥捫⁩湴敲湥琠捯湮散瑩潮⸢㬊ਯ⨠䵥獳慧攠捯湦楲浩湧⁴桡琠瑨攠摯睮汯慤⁰牯捥獳⁨慳⁳瑡牴敤⸠偡牡浥瑥爠楳⁤潷湬潡摥搠晩汥❳⁦楬敮慭攠⨯ਢ摯睮汯慤献浥獳慧攮摯睮汯慤⵳瑡牴敤∠㴠≄潷湬潡搠獴慲瑥搠景爠╀∻ਊ⼪⁔楴汥⁦潲敳獡来⁥硰污楮楮朠瑯⁴桥⁵獥爠瑨慴⁄畣欠偬慹敲⁩猠湯琠慶慩污扬攠⨯ਢ摵捫⵰污祥爮捯湴楮来湣礭瑩瑬攢‽•䑵捫⁐污祥爠啮慶慩污扬攢㬊ਯ⨠䉵瑴潮⁦潲⁴桥敳獡来⁥硰污楮楮朠瑯⁴桥⁵獥爠瑨慴⁄畣欠偬慹敲⁩猠湯琠慶慩污扬攠獯⁴桥⁵獥爠捡渠汥慲渠浯牥‪⼊≤畣欭灬慹敲⹶楤敯ⵣ潮瑩湧敮捹ⵣ瑡∠㴠≌敡牮⁍潲攢㬊ਯ⨠䵥獳慧攠數灬慩湩湧⁴漠瑨攠畳敲⁴桡琠䑵捫⁐污祥爠楳潴⁡癡楬慢汥‪⼊≤畣欭灬慹敲⹶楤敯ⵣ潮瑩湧敮捹⵭敳獡来∠㴠≄畣欠偬慹敲❳⁦畮捴楯湡汩瑹⁨慳⁢敥渠慦晥捴敤⁢礠牥捥湴⁣桡湧敳⁴漠奯畔畢攮⁗既肙牥⁷潲歩湧⁴漠晩砠瑨敳攠楳獵敳⁡湤⁡灰牥捩慴攠祯畲⁵湤敲獴慮摩湧⸢㬊ਯ⨠呥硴⁤楳灬慹敤⁷桥渠䑵捫偬慹敲⁩猠慬睡祳⁥湡扬敤‪⼊≤畣歐污祥爮慬睡祳䕮慢汥搮污扥氢‽•䅬睡祳∻ਊ⼪⁔數琠摩獰污祥搠睨敮⁄畣歐污祥爠楳⁩渠❁獫✠浯摥⸠⨯ਢ摵捫偬慹敲⹡獫⹬慢敬∠㴠≁獫⁥癥特⁴業攢㬊ਯ⨠呥硴⁤楳灬慹敤⁷桥渠䑵捫偬慹敲⁩猠楮晦⸠⨯ਢ摵捫偬慹敲⹮敶敲⹬慢敬∠㴠≎敶敲∻ਊ⼪⁂潤礠瑥硴⁦潲⁴桥潤慬⁦敡瑵牥⁥硰污湡瑩潮‪⼊≤畣歰污祥爮灲敳敮瑡瑩潮⹭潤慬⹢潤礢‽•䑵捫⁐污祥爠汥瑳⁹潵⁷慴捨⁙潵呵扥⁷楴桯畴⁴慲来瑥搠慤猠楮⁡⁴桥慴敲⵬楫攠數灥物敮捥⁩渠䑵捫䑵捫䝯⁡湤⁷桡琠祯甠睡瑣栠睯滢肙琠楮晬略湣攠祯畲⁲散潭浥湤慴楯湳⸢㬊ਯ⨠䉵瑴潮⁴桡琠睩汬⁤楳浩獳⁴桥潤慬‪⼊≤畣歰污祥爮灲敳敮瑡瑩潮⹭潤慬⹤楳浩獳ⵢ畴瑯渢‽•䝯琠楴™㬊ਯ⨠呷漠汩湥⁴楴汥
獥灡牡瑥搠批⁜温⁦潲⁴桥⁦敡瑵牥⁥硰污湡瑩潮‪⼊≤畣歰污祥爮灲敳敮瑡瑩潮⹭潤慬⹴楴汥∠㴠≄牯睮楮朠楮⁡摳渠奯畔畢政⁔特⁄畣欠偬慹敲™㬊ਯ⨠䙯潴敲慢敬⁩渠瑨攠獥瑴楮杳⁳捲敥渠景爠䑵捫⁐污祥爠⨯ਢ摵捫灬慹敲⹳整瑩湧献景潴敲∠㴠≄畣歄畣歇漠灲潶楤敳⁡汬⁴桥⁰物癡捹⁥獳敮瑩慬猠祯甠湥敤⁴漠灲潴散琠祯畲獥汦⁡猠祯甠扲潷獥⁴桥⁷敢⸢㬊ਯ⨠呥硴⁥硰污楮楮朠睨慴⁄畣欠偬慹敲⁩猠楮⁴桥⁳整瑩湧猠獣牥敮⸠⨯ਢ摵捫灬慹敲⹳整瑩湧献楮景⵴數琢‽•䑵捫⁐污祥爠灲潶楤敳⁡⁣汥慮⁶楥睩湧⁥硰敲楥湣攠睩瑨潵琠灥牳潮慬楺敤⁡摳⁡湤⁰牥癥湴猠癩敷楮朠慣瑩癩瑹⁦牯洠楮晬略湣楮朠祯畲⁙潵呵扥⁲散潭浥湤慴楯湳⸢㬊ਯ⨠䉵瑴潮⁴桡琠瑡步猠瑨攠畳敲⁴漠汥慲渠浯牥⁡扯畴⁄畣欠偬慹敲⸠⨯ਢ摵捫灬慹敲⹳整瑩湧献汥慲渭浯牥∠㴠≌敡牮⁍潲攢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁴數琠景爠䑵捫偬慹敲⁳整瑩湧猠⨯ਢ摵捫灬慹敲⹳整瑩湧献潰敮⵶楤敯猭楮∠㴠≏灥渠噩摥潳⁩渠䑵捫⁐污祥爢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁴數琠景爠䑵捫偬慹敲⁳整瑩湧猠⨯ਢ摵捫灬慹敲⹳整瑩湧献瑩瑬攢‽•䑵捫⁐污祥爢㬊ਯ⨠䕭慩氠灲潴散瑩潮⁳敲癩捥晦敲敤⁢礠䑵捫䑵捫䝯‪⼊≥浡楬⵰牯瑥捴楯渢‽•䕭慩氠偲潴散瑩潮∻ਊ⼪⁃慮捥氠潰瑩潮⁦潲⁴桥⁥浡楬⁡汩慳⁡汥牴‪⼊≥浡楬⹡汩慳䅬敲琮摥捬楮攢‽•䍡湣敬∻ਊ⼪⁏灴楯渠景爠来湥牡瑩湧⁡⁰物癡瑥⁥浡楬⁡摤牥獳‪⼊≥浡楬⹡汩慳䅬敲琮来湥牡瑥偲楶慴敁摤牥獳∠㴠≇敮敲慴攠偲楶慴攠䑵捫⁁摤牥獳∻ਊ⼪⁏灴楯渠景爠来湥牡瑩湧⁡⁰物癡瑥⁥浡楬⁡摤牥獳‪⼊≥浡楬⹡汩慳䅬敲琮灲潭灴⹧敮敲慴敐物癡瑥䅤摲敳猢‽•䝥湥牡瑥⁐物癡瑥⁄畣欠䅤摲敳猢㬊ਯ⨠卵扴楴汥⁦潲⁧敮敲慴楮朠愠灲楶慴攠敭慩氠慤摲敳猠⨯ਢ敭慩氮慬楡獁汥牴⹰牯浰琮来湥牡瑥偲楶慴敁摤牥獳⹳畢瑩瑬攢‽•䉬潣欠敭慩氠瑲慣步牳…⁨楤攠慤摲敳猢㬊ਯ⨠呩瑬攠景爠瑨攠敭慩氠慬楡猠獥汥捴楯渠灲潭灴‪⼊≥浡楬⹡汩慳䅬敲琮灲潭灴⹴楴汥∠㴠≓敬散琠敭慩氠慤摲敳猢㬊ਯ⨠卵扴楴汥⁦潲⁣桯潳楮朠灲業慲礠畳敲⁥浡楬⁡摤牥獳‪⼊≥浡楬⹡汩慳䅬敲琮灲潭灴⹵獥啳敲䅤摲敳献獵扴楴汥∠㴠≂汯捫⁥浡楬⁴牡捫敲猢㬊ਯ⨠呩瑬攠景爠瑨攠敭慩氠慬楡猠獥汥捴楯渠慬敲琠⨯ਢ敭慩氮慬楡獁汥牴⹴楴汥∠㴠≂汯捫⁥浡楬⁴牡捫敲猠睩瑨⁡⁄畣欠䅤摲敳猢㬊ਯ⨠偡牡浥瑥爠楳⁡渠敭慩氠慤摲敳猠⡳瑲楮朩‪⼊≥浡楬⹡汩慳䅬敲琮畳敕獥牁摤牥獳∠㴠≕獥‥䀢㬊ਯ⨠呩瑬攠景爠瑨攠敭慩氠捯灹⁢牯睳楮朠浥湵⁡汥牴‪⼊≥浡楬⹢牯睳楮杍敮甮慬敲琢‽•乥眠慤摲敳猠捯灩敤⁴漠祯畲⁣汩灢潡牤∻ਊ⼪⁅浡楬灴楯渠瑩瑬攠楮⁴桥⁢牯睳楮朠浥湵‪⼊≥浡楬⹢牯睳楮杍敮甮畳敎敷䑵捫䅤摲敳猢‽•䝥湥牡瑥⁐物癡瑥⁄畣欠䅤摲敳猢㬊ਯ⨠卩杮敤⁩渠獴慴攠景爠瑨攠敭慩氠晥慴畲攠⨯ਢ敭慩氮獥瑴楮杳⹥湡扬敤∠㴠≅湡扬敤∻ਊ⼪⁆潯瑥爠瑥硴⁦潲⁴桥⁥浡楬⁦敡瑵牥‪⼊≥浡楬⹳整瑩湧献景潴敲∠㴠≒敭潶楮朠䕭慩氠偲潴散瑩潮⁦牯洠瑨楳⁤敶楣攠牥浯癥猠瑨攠潰瑩潮⁴漠晩汬⁩渠祯畲⁐敲獯湡氠䑵捫⁁摤牥獳爠愠湥睬礠来湥牡瑥搠偲楶慴攠䑵捫⁁摤牥獳⁩湴漠敭慩氠晩敬摳⁡猠祯甠扲潷獥⁴桥⁷敢⹜湜湔漠摥汥瑥⁹潵爠䑵捫⁁摤牥獳敳⁥湴楲敬礬爠景爠慮礠潴桥爠煵敳瑩潮猠潲⁦敥摢慣欬⁲敡捨畴⁴漠畳⁡琠獵灰潲瑀摵捫⹣潭⸢㬊ਯ⨠卩杮敤畴⁳瑡瑥⁦潲⁴桥⁥浡楬⁦敡瑵牥‪⼊≥浡楬⹳整瑩湧献潦昢‽•佦昢㬊ਯ⨠卵扴楴汥⁦潲⁴桥⁥浡楬⁳整瑩湧猠捥汬‪⼊≥浡楬⹳整瑩湧献獵扴楴汥∠㴠≂汯捫⁥浡楬⁴牡捫敲猠慮搠桩摥⁹潵爠慤摲敳猢㬊ਯ⨠佰瑩潮⁴漠捯湴楮略⁴桥⁅浡楬⁐牯瑥捴楯渠獩杮異‪⼊≥浡楬⹳楧湵瀭灲潭灴⹡汥牴⹣潮瑩湵攢‽•䍯湴楮略⁓整異∻ਊ⼪⁏灴楯渠瑯⁥硩琠瑨攠䕭慩氠偲潴散瑩潮⁳楧湵瀠⨯ਢ敭慩氮獩杮異⵰牯浰琮慬敲琮數楴∠㴠≅硩琠卥瑵瀢㬊ਯ⨠呩瑬攠景爠數楴楮朠瑨攠䕭慩氠偲潴散瑩潮⁳楧湵瀠敡牬礠慬敲琠⨯ਢ敭慩氮獩杮異⵰牯浰琮慬敲琮瑩瑬攢‽•䥦⁹潵⁥硩琠湯眬⁹潵爠䑵捫⁁摤牥獳⁷楬氠湯琠扥⁳慶敤™㬊ਯ⨠䉵瑴潮⁴楴汥⁣桯潳楮朠湯琠瑯⁳楧渠異⁦潲⁥浡楬⁰牯瑥捴楯渠慮搠湯琠瑯⁢攠灲潭灴敤⁡条楮‪⼊≥浡楬⹳楧湵瀭灲潭灴⹤漭湯琭獩杮異ⵢ畴瑯渮捴愢‽•䑯滢肙琠卨潷⁁条楮∻ਊ⼪⁂畴瑯渠瑩瑬攠捨潯獩湧⁴漠獩杮⁵瀠景爠敭慩氠灲潴散瑩潮‪⼊≥浡楬⹳楧湵瀭灲潭灴⹳楧湵瀭扵瑴潮⹣瑡∠㴠≐牯瑥捴⁍礠䕭慩氢㬊ਯ⨠卵扴楴汥⁦潲⁰牯浰琠瑯⁳楧渠異⁦潲⁥浡楬⁰牯瑥捴楯渠⨯ਢ敭慩氮獩杮異⵰牯浰琮獵扴楴汥∠㴠≃牥慴攠愠畮楱略Ⱐ牡湤潭⁡摤牥獳⁴桡琠慬獯⁲敭潶敳⁨楤摥渠瑲慣步牳⁡湤⁦潲睡牤猠敭慩氠瑯⁹潵爠楮扯砮∻ਊ⼪⁔楴汥⁦潲⁰牯浰琠瑯⁳楧渠異⁦潲⁥浡楬⁰牯瑥捴楯渠⨯ਢ敭慩氮獩杮異⵰牯浰琮瑩瑬攢‽•䡩摥⁙潵爠䕭慩氠慮摜湂汯捫⁔牡捫敲猢㬊ਯ⨠䕭灴礠汩獴⁳瑡瑥⁰污捨潬摥爠⨯ਢ敭灴礮扯潫浡牫猢‽•乯⁢潯歭慲歳⁡摤敤⁹整∻ਊ⼪⁅浰瑹⁳敡牣栠灬慣敨潬摥爠潮⁢潯歭慲歳⁳敡牣栠⨯ਢ敭灴礮獥慲捨∠㴠≎漠浡瑣桥猠景畮搢㬊ਯ⨠䉵瑴潮⁴楴汥⁴漠卩杮⁉渠⨯ਢ敲牯爮敭慩氭灲潴散瑩潮⵳楧渭楮⹡捴楯渢‽•卩杮⁉渢㬊ਯ⨠䅬敲琠浥獳慧攠⨯ਢ敲牯爮敭慩氭灲潴散瑩潮⵳楧渭楮⹢潤礢‽•卯牲礬⁰汥慳攠獩杮⁩渠慧慩渠瑯⁲攭敮慢汥⁅浡楬⁐牯瑥捴楯渠晥慴畲敳渠瑨楳⁢牯睳敲⸢㬊ਯ⨠䅬敲琠瑩瑬攠⨯ਢ敲牯爮敭慩氭灲潴散瑩潮⵳楧渭楮⹴楴汥∠㴠≅浡楬⁐牯瑥捴楯渠䕲牯爢㬊ਯ⨠䉵瑴潮⁴楴汥⁴漠潰敮⁤敶楣攠獥瑴楮杳‪⼊≥牲潲⹩湳畦晩捩敮琭摩獫⵳灡捥⹡捴楯渢‽•佰敮⁓整瑩湧猢㬊ਯ⨠䅬敲琠浥獳慧攠⨯ਢ敲牯爮楮獵晦楣楥湴ⵤ楳欭獰慣攮扯摹∠㴠≌潯歳楫攠祯畲⁤敶楣攠桡猠牵渠潵琠潦⁳瑯牡来⁳灡捥⸠偬敡獥⁦牥攠異⁳灡捥⁴漠捯湴楮略⸢㬊ਯ⨠䅬敲琠瑩瑬攠⨯ਢ敲牯爮楮獵晦楣楥湴ⵤ楳欭獰慣攮瑩瑬攢‽•乯琠敮潵杨⁳瑯牡来∻ਊ⼪⁂畴瑯渠瑩瑬攠瑨慴⁩猠獨畴瑩湧⁤潷渠瑨攠慰瀠⨯ਢ敲牯爮灲敥浰瑩癥ⵣ牡獨⹡捴楯渢‽•䍬潳攠䅰瀢㬊ਯ⨠䅬敲琠浥獳慧攠⨯ਢ敲牯爮灲敥浰瑩癥ⵣ牡獨⹢潤礢‽•䱯潫猠汩步⁴桥牥❳⁡渠楳獵攠睩瑨⁴桥⁡灰⁡湤⁩琠湥敤猠瑯⁣汯獥⸠偬敡獥⁲敯灥渠瑯⁣潮瑩湵攮∻ਊ⼪⁁汥牴⁴楴汥‪⼊≥牲潲⹰牥敭灴楶攭捲慳栮瑩瑬攢‽•䅰瀠楳獵攠摥瑥捴敤∻ਊ⼪⁇敮敲楣⁥牲潲敳獡来渠愠摩慬潧⁦潲⁷桥渠瑨攠捡畳攠楳潴湯睮⸠⨯ਢ敲牯爮畮歮潷渮瑲礮慧慩渢‽•䅮⁵湫湯睮⁥牲潲⁨慳捣畲牥搢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦慶潲楴攢‽•䙡癯物瑥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晡癯物瑥⹭敮甮敤楴∠㴠≅摩琢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦慶潲楴攮浥湵⹲敭潶攢‽•剥浯癥∻ਊ⼪⁄楳灬慹⁍潤攠景爠晡癯物瑥猠⨯ਢ晡癯物瑥献獥瑴楮杳⹡汬ⵤ敶楣敳∠㴠≁汬⁄敶楣攠䙡癯物瑥猢㬊ਯ⨠䙯潴敲映瑨攠晡癯物瑥猠獥瑴楮杳⁴慢汥‪⼊≦慶潲楴敳⹳整瑩湧献景潴敲∠㴠≃桯潳攠睨楣栠晡癯物瑥猠瑯⁤楳灬慹渠愠湥眠瑡戠扡獥搠潮⁴桥楲物杩渮∻ਊ⼪⁈敡摥爠潦⁴桥⁦慶潲楴敳⁳整瑩湧猠瑡扬攠⨯ਢ晡癯物瑥献獥瑴楮杳⹨敡摥爢‽•䑩獰污礠偲敦敲敮捥猢㬊ਯ⨠䑩獰污礠䵯摥⁦潲⁦慶潲楴敳‪⼊≦慶潲楴敳⹳整瑩湧献浯扩汥ⵯ湬礢‽•䵯扩汥⁆慶潲楴敳⁏湬礢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮扲潷獥牆敡瑵牥献慤猢‽•䅤⁡湤⁰潰⵵瀠扬潣歩湧∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹢牯睳敲䙥慴畲敳⹢潯歭慲歳∠㴠≃牥慴楮朠慮搠浡湡杩湧⁢潯歭慲歳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹢牯睳敲䙥慴畲敳⹣慰瑩潮∠㴠≗桩捨⁢牯睳楮朠晥慴畲攠捡渠睥⁡摤爠業灲潶政∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹢牯睳敲䙥慴畲敳⹤敳捲楰瑩潮∠㴠≂牯睳敲⁆敡瑵牥⁉獳略猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮扲潷獥牆敡瑵牥献敮瑲礢‽•䉲潷獩湧⁦敡瑵牥猠慲攠浩獳楮朠潲⁦牵獴牡瑩湧∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹢牯睳敲䙥慴畲敳⹩浡来猢‽•䥮瑥牡捴楮朠睩瑨⁩浡来猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮扲潷獥牆敡瑵牥献湡癩条瑩潮∠㴠≎慶楧慴楮朠景牷慲搬⁢慣歷慲搬⁡湤⽯爠牥晲敳桩湧∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹢牯睳敲䙥慴畲敳⹯瑨敲∠㴠≎潮攠潦⁴桥獥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹢牯睳敲䙥慴畲敳⹴慢猢‽•䍲敡瑩湧⁡湤慮慧楮朠瑡扳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹢牯睳敲䙥慴畲敳⹶楤敯猢‽•坡瑣桩湧⁶楤敯猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮捵獴潭楺慴楯渮扯潫浡牫猢‽•䡯眠扯潫浡牫猠慲攠摩獰污祥搢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮捵獴潭楺慴楯渮捡灴楯渢‽•坨楣栠捵獴潭楺慴楯渠潰瑩潮⁣慮⁷攠慤搠潲⁩浰牯癥㼢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮捵獴潭楺慴楯渮摥獣物灴楯渢‽•䍵獴潭楺慴楯渠䥳獵敳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹣畳瑯浩穡瑩潮⹥湴特∠㴠≔桥牥⁡牥滢肙琠敮潵杨⁷慹猠瑯⁣畳瑯浩穥⁴桥⁡灰∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹣畳瑯浩穡瑩潮⹨潭敓捲敥渢‽•周攠桯浥⁳捲敥渠捯湦楧畲慴楯渢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮捵獴潭楺慴楯渮潴桥爢‽•乯湥映瑨敳攢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮捵獴潭楺慴楯渮瑡扳∠㴠≈潷⁴慢猠慲攠摩獰污祥搢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮捵獴潭楺慴楯渮畩∠㴠≈潷⁴桥⁡灰潯歳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹣畳瑯浩穡瑩潮⹷桡瑉獃汥慲敤∠㴠≗桩捨⁤慴愠楳⁣汥慲敤∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹣畳瑯浩穡瑩潮⹷桥湉獃汥慲敤∠㴠≗桥渠摡瑡⁩猠捬敡牥搢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮摤杓敡牣栮慵瑯捯浰汥瑥∠㴠≂整瑥爠慵瑯捯浰汥瑥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹤摧卥慲捨⹣慰瑩潮∠㴠≗桩捨⁳敡牣栠晥慴畲攠捡渠睥⁡摤爠業灲潶政∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹤摧卥慲捨⹤敳捲楰瑩潮∠㴠≄畣歄畣歇漠卥慲捨⁉獳略猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮摤杓敡牣栮敮瑲礢‽•䑵捫䑵捫䝯⁳敡牣栠楳滢肙琠杯潤⁥湯畧栢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮摤杓敡牣栮污湧畡来佲剥杩潮∠㴠≓敡牣桩湧⁩渠愠獰散楦楣慮杵慧攠潲⁲敧楯渢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮摤杓敡牣栮污祯畴∠㴠≔桥慹潵琠獨潵汤⁢攠浯牥楫攠䝯潧汥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹤摧卥慲捨⹬潡摔業攢‽•䙡獴敲潡搠瑩浥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹤摧卥慲捨⹯瑨敲∠㴠≎潮攠潦⁴桥獥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹤摧卥慲捨⹴散桮楣慬∠㴠≐牯杲慭浩湧⽴散桮楣慬⁳敡牣栢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮景牭⹣慰瑩潮∠㴠≐汥慳攠瑥汬⁵猠睨慴⁷攠捡渠業灲潶攢㬊ਯ⨠䍯湦楲浡瑩潮⁢畴瑯渠⨯ਢ晥敤扡捫⹦潲洮獵扭楴∠㴠≓畢浩琢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮湥条瑩癥⹦潲洮来湥物捐污捥桯汤敲∠㴠≐汥慳攠扥⁡猠獰散楦楣⁡猠灯獳楢汥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹮敧慴楶攮景牭⹰污捥桯汤敲∠㴠≁牥⁴桥牥⁡湹⁳灥捩晩捳⁹潵饤楫攠瑯⁩湣汵摥㼢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮湥条瑩癥⹨敡摥爢‽•坥饲攠卯牲礠瑯⁈敡爠周慴∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹮敧慴楶攮獵灰汥浥湴慲礢‽•坨慴⁩猠祯畲⁦牵獴牡瑩潮潳琠牥污瑥搠瑯㼢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮潴桥爮摥獣物灴楯渢‽•佴桥爠䥳獵敳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹯瑨敲⹥湴特∠㴠≎潮攠潦⁴桥獥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹰敲景牭慮捥⹣慰瑩潮∠㴠≗桩捨⁩獳略⁡牥⁹潵⁥硰敲楥湣楮朿∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹰敲景牭慮捥⹣牡獨敳∠㴠≔桥⁡灰⁣牡獨敳爠晲敥穥猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮灥牦潲浡湣攮摥獣物灴楯渢‽•健牦潲浡湣攠䥳獵敳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹰敲景牭慮捥⹥湴特∠㴠≔桥⁡灰⁩猠獬潷Ⱐ扵杧礬爠捲慳桥猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮灥牦潲浡湣攮潴桥爢‽•乯湥映瑨敳攢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮灥牦潲浡湣攮灬慹扡捫∠㴠≖楤敯爠浥摩愠灬慹扡捫⁢畧猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮灥牦潲浡湣攮獬潷䱯慤楮朢‽•坥戠灡来猠潲⁳敡牣栠牥獵汴猠汯慤⁳汯睬礢㬊ਯ⨠䡥慤敲⁡扯癥⁩湰畴⁦楥汤‪⼊≦敥摢慣欮灯獩瑩癥⹦潲洮桥慤敲∠㴠≓桡牥⁄整慩汳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹰潳楴楶攮景牭⹰污捥桯汤敲∠㴠≗桡琠桡癥⁹潵⁢敥渠敮橯祩湧㼢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮灯獩瑩癥⹦潲洮獵灰汥浥湴慲礢‽•䅲攠瑨敲攠慮礠摥瑡楬猠祯痢肙搠汩步⁴漠獨慲攠睩瑨⁴桥⁴敡洿∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹰潳楴楶攮桥慤敲∠㴠≁睥獯浥⁴漠䡥慲™㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮灯獩瑩癥⹮潔桡湫猢‽•乯⁔桡湫猡⁉饭⁄潮攢㬊ਯ⨠䉵瑴潮⁥湣潵牡杩湧⁵獥猠瑯⁳桡牥⁤整慩汳⁡扯潵琠瑨敩爠晥敤扡捫‪⼊≦敥摢慣欮灯獩瑩癥⹳畢浩琢‽•卨慲攠䑥瑡楬猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮獴慲琮景潴敲∠㴠≙潵爠慮潮祭潵猠晥敤扡捫⁩猠業灯牴慮琠瑯⁵献∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹳瑡牴⹨敡摥爢‽•䱥瓢肙猠䝥琠却慲瑥搡∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹳瑡牴⹳異灬敭敮瑡特∠㴠≈潷⁷潵汤⁹潵⁣慴敧潲楺攠祯畲⁦敥摢慣欿∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹳畢浩瑴敤⹣潮晩牭慴楯渢‽•周慮欠奯甡⁆敥摢慣欠獵扭楴瑥搮∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹷敢獩瑥䱯慤楮朮摥獣物灴楯渢‽•坥扳楴攠䱯慤楮朠䥳獵敳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹷敢獩瑥䱯慤楮朮敮瑲礢‽•䍥牴慩渠睥扳楴敳⁤潮饴潡搠捯牲散瑬礢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮睥扳楴敌潡摩湧⹦潲洮灬慣敨潬摥爢‽•坨慴⁣潮瑥湴⁳敥浳⁴漠扥⁡晦散瑥搿∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晥敤扡捫⹷敢獩瑥䱯慤楮朮景牭⹳異灬敭敮瑡特∠㴠≗桥牥⁡牥⁹潵⁳敥楮朠瑨敳攠楳獵敳㼢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦敥摢慣欮睥扳楴敌潡摩湧⹦潲洮畲汐污捥桯汤敲∠㴠≗桩捨⁷敢獩瑥⁨慳⁩獳略猿∻ਊ⼪⁕獥搠瑯⁩湤楣慴攠湵浢敲映敮瑲楥猠景畮搠慮搠灯獩瑩潮映瑨攠捵牲敮瑬礠癩敷敤湥㨠攮朮‱映㄰‪⼊≦楮摩湰慧攮捯畮琢‽•┱⑤映┲⑤∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晩湤楮灡来⹴楴汥∠㴠≆楮搠楮⁐慧攢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦楲敂畴瑯湁湩浡瑩潮⹡楲獴牥慭⹮慭攢‽•䅩牳瑲敡洢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≦楲敂畴瑯湁湩浡瑩潮⹦楲敒楳楮朮湡浥∠㴠≉湦敲湯∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晩牥䉵瑴潮䅮業慴楯渮湯湥⹮慭攢‽•乯湥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ晩牥䉵瑴潮䅮業慴楯渮睡瑥牓睩牬⹮慭攢‽•坨楲汰潯氢㬊ਯ⨠䑥獣物灴楯渠瑥硴⁡扯癥⁴桥⁓桡牥⁌楮欠扵瑴潮‪⼊≧整⹢牯睳敲⹯渭祯畲ⵤ敳歴潰ⵧ漭瑯∠㴠≏渠祯畲⁣潭灵瑥爬⁧漠瑯㨢㬊ਯ⨠呩瑬攠景爠瑨攠卨慲攠䑯睮汯慤⁌楮欠扵瑴潮‪⼊≧整⹢牯睳敲⹳桡牥⵬楮欢‽•卨慲攠䑯睮汯慤⁌楮欢㬊ਯ⨠䵥獳慧攠摩獰污祥搠楮⁴桥⁳桡牥⁡捴楯渠睨敮⁳桡物湧⁶楡⁥浡楬‪⼊≧整⹢牯睳敲⹳桡牥⵬楮欮浥獳慧攢‽•卥慲捨⁰物癡瑥汹⁡湤⁢汯捫⁴牡捫敲猠睩瑨⁴桥⁄畣歄畣歇漠摥獫瑯瀠扲潷獥爮⁖楳楴⁴桩猠汩湫渠祯畲⁣潭灵瑥爠瑯⁤潷湬潡搠瑯摡礮∻ਊ⼪⁔楴汥⁤楳灬慹敤⁩渠瑨攠獨慲攠慣瑩潮‪⼊≧整⹢牯睳敲⹳桡牥⵬楮欮瑩瑬攢‽•䝥琠䑵捫䑵捫䝯⁂牯睳敲⁦潲⁍慣爠坩湤潷猢㬊ਯ⨠呩瑬攠景爠瑨攠来琠摥獫瑯瀠扲潷獥爠晥慴畲攠⨯ਢ来琮扲潷獥爮瑩瑬攢‽•䝥琠䑵捫䑵捫䝯⁦潲⁍慣爠坩湤潷猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≨潭攮牯眮潮扯慲摩湧⹨敡摥爢‽•䅤搠䑵捫䑵捫䝯⁴漠祯畲⁨潭攠獣牥敮™㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≨潭攮牯眮牥浩湤敲⹭敳獡来∠㴠≁摤⁄畣歄畣歇漠瑯⁹潵爠摯捫⁦潲⁥慳礠慣捥獳™㬊ਯ⨠䡯浥⁩猠瑨楳⁣潮瑥硴⁩猠瑨攠扯瑴潭⁨潭攠牯眠⡤潣欩‪⼊≨潭攮牯眮牥浩湤敲⹴楴汥∠㴠≔慫攠䑵捫䑵捫䝯⁨潭攢㬊ਯ⨠周楳⁤敳捲楢敳⁥浰瑹⁴慢‪⼊≨潭敔慢⹳敡牣桁湤䙡癯物瑥猢‽•卥慲捨爠敮瑥爠慤摲敳猢㬊ਯ⨠䡯浥⁴慢⁴楴汥‪⼊≨潭敔慢⹴楴汥∠㴠≈潭攢㬊ਯ⨠佋⁴楴汥⁦潲⁩湶楴攠獣牥敮⁡汥牴⁤楳浩獳慬⁢畴瑯渠⨯ਢ楮癩瑥⹡汥牴⹯欮扵瑴潮∠㴠≏䬢㬊ਯ⨠䍯湴楮略⁢畴瑯渠潮⁡渠楮癩瑥⁤楡汯朠⨯ਢ楮癩瑥⹤楡汯朮捯湴楮略⹢畴瑯渢‽•䍯湴楮略∻ਊ⼪⁇整⁓瑡牴敤⁢畴瑯渠潮⁡渠楮癩瑥⁤楡汯朠⨯ਢ楮癩瑥⹤楡汯朮来琮獴慲瑥搮扵瑴潮∠㴠≇整⁓瑡牴敤∻ਊ⼪⁍敳獡来⁴漠獨潷⁡晴敲⁵獥爠敮瑥牳⁡渠畮牥捯杮楺敤⁩湶楴攠捯摥‪⼊≩湶楴攮摩慬潧⹵湲散潧湩穥搮捯摥⹭敳獡来∠㴠≗攠摩摮饴⁲散潧湩穥⁴桩猠䥮癩瑥⁃潤攮∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤䅤摂潯歭慲欢‽•䅤搠䉯潫浡牫∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤䅤摆慶潲楴攢‽•䅤搠䙡癯物瑥∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤䉲潷獥牂慣欢‽•䉲潷獥⁂慣欢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≫敹䍯浭慮摂牯睳敲䙯牷慲搢‽•䉲潷獥⁆潲睡牤∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤䍬潳攢‽•䍬潳攢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≫敹䍯浭慮摃汯獥呡戢‽•䍬潳攠呡戢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≫敹䍯浭慮摆楮搢‽•䙩湤⁩渠偡来∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤䙩湤乥硴∠㴠≆楮搠乥硴∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤䙩湤偲敶楯畳∠㴠≆楮搠偲敶楯畳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤䙩牥∠㴠≃汥慲⁁汬⁔慢猠慮搠䑡瑡∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤䱯捡瑩潮∠㴠≓敡牣栠潲⁅湴敲⁁摤牥獳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤乥睔慢∠㴠≎敷⁔慢∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤乥硴呡戢‽•乥硴⁔慢∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤佰敮䥮乥睂慣歧牯畮摔慢∠㴠≏灥渠䱩湫⁩渠䉡捫杲潵湤∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤佰敮䥮乥睔慢∠㴠≏灥渠䱩湫⁩渠乥眠呡戢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≫敹䍯浭慮摐牥癩潵獔慢∠㴠≐牥癩潵猠呡戢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≫敹䍯浭慮摐物湴∠㴠≐物湴∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤剥汯慤∠㴠≒敬潡搢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≫敹䍯浭慮摓敬散琢‽•卥汥捴∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ步祃潭浡湤卨潷䅬汔慢猢‽•卨潷⁁汬⁔慢猢㬊ਯ⨠偬敡獥⁰牥獥牶攠湥睬楮攠捨慲慣瑥爠⨯ਢ污畮捨獣牥敮坥汣潭敍敳獡来∠㴠≗敬捯浥⁴潜湄畣歄畣歇漡∻ਊ⼪⁓畭浡特⁴數琠景爠瑨攠浡捏匠扲潷獥爠睡楴汩獴‪⼊≭慣ⵢ牯睳敲⹷慩瑬楳琮獵浭慲礢‽•䑵捫䑵捫䝯⁦潲⁍慣⁨慳⁴桥⁳灥敤⁹潵敥搬⁴桥⁢牯睳楮朠晥慴畲敳⁹潵⁥硰散琬⁡湤⁣潭敳⁰慣步搠睩瑨畲⁢敳琭楮ⵣ污獳⁰物癡捹⁥獳敮瑩慬献∻ਊ⼪⁔楴汥⁦潲⁴桥慣体⁷慩瑬楳琠湯瑩晩捡瑩潮‪⼊≭慣⵷慩瑬楳琮慶慩污扬攮湯瑩晩捡瑩潮⹴楴汥∠㴠≄畣歄畣歇漠景爠䵡挠楳⁲敡摹™㬊ਯ⨠呩瑬攠景爠瑨攠捯灹⁡捴楯渠⨯ਢ浡挭睡楴汩獴⹣潰礢‽•䍯灹∻ਊ⼪⁄敳捲楰瑩潮⁴數琠慢潶攠瑨攠卨慲攠䱩湫⁢畴瑯渠⨯ਢ浡挭睡楴汩獴⹪潩渭睡楴汩獴⵳捲敥渮潮⵹潵爭捯浰畴敲ⵧ漭瑯∠㴠≏渠祯畲⁗楮摯睳⁣潭灵瑥爬⁧漠瑯㨢㬊ਯ⨠䑥獣物灴楯渠瑥硴⁡扯癥⁴桥⁓桡牥⁌楮欠扵瑴潮‪⼊≭慣⵷慩瑬楳琮橯楮⵷慩瑬楳琭獣牥敮⹯渭祯畲⵭慣ⵧ漭瑯∠㴠≏渠祯畲⁍慣Ⱐ杯⁴漺∻ਊ⼪⁔楴汥⁦潲⁴桥⁓桡牥⁌楮欠扵瑴潮‪⼊≭慣⵷慩瑬楳琮橯楮⵷慩瑬楳琭獣牥敮⹳桡牥⵬楮欢‽•卨慲攠䱩湫∻ਊ⼪⁔楴汥⁦潲⁴桥⁊潩渠坡楴汩獴⁳捲敥渠⨯ਢ浡挭睡楴汩獴⹪潩渭睡楴汩獴⵳捲敥渮瑲礭摵捫摵捫杯ⵦ潲⵭慣∠㴠≇整⁄畣歄畣歇漠景爠䵡挡∻ਊ⼪⁔楴汥⁦潲⁴桥慣体⁷慩瑬楳琠扵瑴潮⁲敤楲散瑩湧⁴漠坩湤潷猠睡楴汩獴‪⼊≭慣⵷慩瑬楳琮橯楮⵷慩瑬楳琭獣牥敮⹷楮摯睳⵷慩瑬楳琢‽•䱯潫楮朠景爠瑨攠坩湤潷猠癥牳楯渿∻ਊ⼪⁔楴汥⁦潲⁴桥⁳整瑩湧猠獵扴楴汥‪⼊≭慣⵷慩瑬楳琮獥瑴楮杳⹢牯睳攭灲楶慴敬礢‽•䉲潷獥⁰物癡瑥汹⁷楴栠潵爠慰瀠景爠䵡挢㬊ਯ⨠䵥獳慧攠畳敤⁷桥渠獨慲楮朠瑯⁩䵥獳慧攠⨯ਢ浡挭睡楴汩獴⹳桡牥⵳桥整⹭敳獡来∠㴠≒敡摹⁴漠獴慲琠扲潷獩湧⁰物癡瑥汹渠䵡挿ਊ噩獩琠瑨楳⁕剌渠祯畲⁍慣⁴漠摯睮汯慤㨊桴瑰猺⼯摵捫摵捫杯⹣潭⽭慣∻ਊ⼪⁔楴汥⁦潲⁴桥⁳桡牥⁳桥整⁥湴特‪⼊≭慣⵷慩瑬楳琮獨慲攭獨敥琮瑩瑬攢‽•䑵捫䑵捫䝯⁦潲⁍慣∻ਊ⼪⁔楴汥⁦潲⁴桥⁍慣⁗慩瑬楳琠晥慴畲攠⨯ਢ浡挭睡楴汩獴⹴楴汥∠㴠≄畣歄畣歇漠䅰瀠景爠䵡挢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≭敮甮扵瑴潮⹨楮琢‽•䉲潷獩湧⁍敮產㬊ਯ⨠呩瑬攠景爠扡捫⁢畴瑯渠楮慶楧慴楯渠扡爠⨯ਢ湡癢慲⹢慣欭扵瑴潮⹴楴汥∠㴠≂慣欢㬊ਯ⨠呩瑬攠景爠湥硴⁢畴瑯渠楮慶楧慴楯渠扡爠瑯⁰牯杲敳猠景牷慲搠⨯ਢ湡癢慲⹮數琭扵瑴潮⹴楴汥∠㴠≎數琢㬊ਯ⨠䙩湩獨⁥摩瑩湧⁢潯歭慲歳⁢畴瑯渠⨯ਢ湡癩条瑩潮⹴楴汥⹤潮攢‽•䑯湥∻ਊ⼪⁅摩琠扵瑴潮‪⼊≮慶楧慴楯渮瑩瑬攮敤楴∠㴠≅摩琢㬊ਯ⨠却物湧⁩湤楣慴楮朠乥瑐⁩猠獮潯穩湧⁷桥渠癩敷敤⁦牯洠瑨攠獥瑴楮杳⁳捲敥渠⨯ਢ湥瑐⹣敬氮獮潯穩湧∠㴠≓湯潺楮朢㬊ਯ⨠呩瑬攠景爠瑨攠䑵捫䑵捫䝯⁖偎⁦敡瑵牥‪⼊≮整倮瑩瑬攢‽•䑵捫䑵捫䝯⁖偎∻ਊ⼪⁔桥⁢潤礠潦⁴桥潴楦楣慴楯渠睨敮⁐物癡捹⁐牯⁳畢獣物灴楯渠數灩牥搠⨯ਢ湥瑷潲欮灲潴散瑩潮⹥湴楴汥浥湴⹥硰楲敤⹮潴楦楣慴楯渮扯摹∠㴠≖偎⁤楳捯湮散瑥搠摵攠瑯⁥硰楲敤⁳畢獣物灴楯渮⁓畢獣物扥⁴漠偲楶慣礠偲漠瑯⁲散潮湥捴⁄畣歄畣歇漠噐丮∻ਊ⼪⁔桥⁢潤礠潦⁴桥潴楦楣慴楯渠獨潷渠睨敮⁎整睯牫⁐牯瑥捴楯渠晡楬猠瑯⁲散潮湥捴‪⼊≮整睯牫⹰牯瑥捴楯渮晡楬畲攮湯瑩晩捡瑩潮⹢潤礢‽•乥瑷潲欠偲潴散瑩潮⁦慩汥搠瑯⁣潮湥捴⸠偬敡獥⁴特⁡条楮慴敲⸢㬊ਯ⨠呩瑬攠景爠瑨攠噐丠䙁儠獣牥敮⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹦慱⹴楴汥∠㴠≄畣歄畣歇漠噐丠䙁儢㬊ਯ⨠周攠扯摹映瑨攠湯瑩晩捡瑩潮⁳桯睮⁷桥渠乥瑷潲欠偲潴散瑩潮❳⁣潮湥捴楯渠楳⁩湴敲牵灴敤‪⼊≮整睯牫⹰牯瑥捴楯渮楮瑥牲異瑥搮湯瑩晩捡瑩潮⹢潤礢‽•乥瑷潲欠偲潴散瑩潮⁷慳⁩湴敲牵灴敤⸠䅴瑥浰瑩湧⁴漠牥捯湮散琠湯眮⸮∻ਊ⼪⁍敳獡来⁦潲⁴桥整睯牫⁰牯瑥捴楯渠楮癩瑥⁤楡汯朠⨯ਢ湥瑷潲欮灲潴散瑩潮⹩湶楴攮摩慬潧⹭敳獡来∠㴠≅湴敲⁹潵爠楮癩瑥⁣潤攠瑯⁧整⁳瑡牴敤⸢㬊ਯ⨠呩瑬攠景爠瑨攠湥瑷潲欠灲潴散瑩潮⁩湶楴攠獣牥敮‪⼊≮整睯牫⹰牯瑥捴楯渮楮癩瑥⹤楡汯朮瑩瑬攢‽•奯痢肙牥⁩湶楴敤⁴漠瑲礠䑵捫䑵捫䝯⁖偎∻ਊ⼪⁐牯浰琠景爠瑨攠湥瑷潲欠灲潴散瑩潮⁩湶楴攠捯摥⁴數琠晩敬搠⨯ਢ湥瑷潲欮灲潴散瑩潮⹩湶楴攮晩敬搮灲潭灴∠㴠≉湶楴攠䍯摥∻ਊ⼪⁍敳獡来⁦潲⁴桥整睯牫⁰牯瑥捴楯渠楮癩瑥⁳畣捥獳⁶楥眠⨯ਢ湥瑷潲欮灲潴散瑩潮⹩湶楴攮獵捣敳献浥獳慧攢‽•䡩摥⁹潵爠汯捡瑩潮⁦牯洠睥扳楴敳⁡湤⁣潮捥慬⁹潵爠潮汩湥⁡捴楶楴礠晲潭⁉湴敲湥琠灲潶楤敲猠慮搠潴桥牳渠祯畲整睯牫⸢㬊ਯ⨠呩瑬攠景爠瑨攠湥瑷潲欠灲潴散瑩潮⁩湶楴攠獵捣敳猠癩敷‪⼊≮整睯牫⹰牯瑥捴楯渮楮癩瑥⹳畣捥獳⹴楴汥∠㴠≓畣捥獳℠奯痢肙牥⁩渮∻ਊ⼪⁔桥⁴楴汥映瑨攠湯瑩晩捡瑩潮猠獨潷渠晲潭⁎整睯牫⁐牯瑥捴楯渠⨯ਢ湥瑷潲欮灲潴散瑩潮⹮潴楦楣慴楯渮瑩瑬攢‽•䑵捫䑵捫䝯∻ਊ⼪⁔楴汥⁴數琠景爠慮⁩体ⁱ畩捫⁡捴楯渠瑨慴灥湳⁖偎⁳整瑩湧猠⨯ਢ湥瑷潲欮灲潴散瑩潮⹱畩捫ⵡ捴楯渮潰敮⵶灮∠㴠≏灥渠噐丢㬊ਯ⨠周攠扯摹映瑨攠湯瑩晩捡瑩潮⁷桥渠瑨攠噐丠楳⁳湯潺敤Ⱐ睩瑨⁡⁤畲慴楯渠獴物湧⁡猠灡牡浥瑥爠⡥⹧Ⱐ㌰楮畴敳⤠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳湯潺敤⹮潴楦楣慴楯渮扯摹∠㴠≖偎⁳湯潺敤⁦潲‥䀢㬊ਯ⨠周攠污扥氠景爠睨敮⁎整倠噐丠楳⁣潮湥捴敤⁰汵猠瑨攠汥湧瑨映瑩浥⁣潮湥捴敤⁡猠愠景牭慴瑥爠䡈㩍䴺卓⁳瑲楮朠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献捯湮散瑥搮景牭慴∠㴠≃潮湥捴敤⃂뜠╀∻ਊ⼪⁔桥慢敬⁦潲⁴桥⁎整倠噐丠睨敮⁣潮湥捴楮朠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献捯湮散瑩湧∠㴠≃潮湥捴楮朮⸮∻ਊ⼪⁔桥慢敬⁦潲⁴桥⁎整倠噐丠睨敮⁤楳捯湮散瑥搠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献摩獣潮湥捴敤∠㴠≎潴⁣潮湥捴敤∻ਊ⼪⁔桥慢敬⁦潲⁴桥⁎整倠噐丠睨敮⁤楳捯湮散瑩湧‪⼊≮整睯牫⹰牯瑥捴楯渮獴慴畳⹤楳捯湮散瑩湧∠㴠≄楳捯湮散瑩湧⸮⸢㬊ਯ⨠䵥獳慧攠污扥氠瑥硴⁦潲⁴桥⁳瑡瑵猠癩敷⁷桥渠噐丠楳⁤楳捯湮散瑥搠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献桥慤敲⹭敳獡来⹯晦∠㴠≃潮湥捴⁴漠獥捵牥⁡汬映祯畲⁤敶楣既肙獜湉湴敲湥琠瑲慦晩挮∻ਊ⼪⁍敳獡来慢敬⁴數琠景爠瑨攠獴慴畳⁶楥眠睨敮⁖偎⁩猠摩獣潮湥捴敤‪⼊≮整睯牫⹰牯瑥捴楯渮獴慴畳⹨敡摥爮浥獳慧攮潮∠㴠≁汬⁤敶楣攠䥮瑥牮整⁴牡晦楣⁩猠扥楮朠獥捵牥摜湴桲潵杨⁴桥⁖偎⸢㬊ਯ⨠䡥慤敲⁴楴汥慢敬⁴數琠景爠瑨攠獴慴畳⁶楥眠睨敮⁖偎⁩猠摩獣潮湥捴敤‪⼊≮整睯牫⹰牯瑥捴楯渮獴慴畳⹨敡摥爮瑩瑬攮潦昢‽•䑵捫䑵捫䝯⁖偎⁩猠佦昢㬊ਯ⨠䡥慤敲⁴楴汥慢敬⁴數琠景爠瑨攠獴慴畳⁶楥眠睨敮⁖偎⁩猠捯湮散瑥搠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献桥慤敲⹴楴汥⹯渢‽•䑵捫䑵捫䝯⁖偎⁩猠佮∻ਊ⼪⁈敡摥爠瑩瑬攠污扥氠瑥硴⁦潲⁴桥⁳瑡瑵猠癩敷⁷桥渠噐丠楳⁳湯潺楮朠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献桥慤敲⹴楴汥⹳湯潺敤∠㴠≄畣歄畣歇漠噐丠楳⁓湯潺敤∻ਊ⼪⁔桥⁳瑡瑵猠癩敷‧卨慲攠䙥敤扡捫✠扵瑴潮⁷桩捨⁩猠獨潷渠楮汩湥渠瑨攠獴慴畳⁶楥眠慦瑥爠瑨攠瑥浰潲慲礠晲敥⁵獥⁦潯瑥爠瑥硴‪⼊≮整睯牫⹰牯瑥捴楯渮獴慴畳⹭敮甮獨慲攮晥敤扡捫∠㴠≓桡牥⁆敥摢慣欢㬊ਯ⨠周攠污扥氠景爠瑨攠乥瑐⁖偎⁷桥渠灡畳敤‪⼊≮整睯牫⹰牯瑥捴楯渮獴慴畳⹰慵獥搢‽•偡畳敤∻ਊ⼪⁔桥慢敬⁦潲⁷桥渠乥瑐⁖偎⁩猠獮潯穩湧⁰汵猠瑨攠汥湧瑨映瑩浥⁲敭慩湩湧⁦潲浡瑴敤⁡猠✰㨰〧‪⼊≮整睯牫⹰牯瑥捴楯渮獴慴畳⹳湯潺楮朮景牭慴∠㴠≓湯潺楮本‥䀠牥浡楮楮朢㬊ਯ⨠卮潯穥⁢畴瑯渠瑩瑬攠獨潷渠楮⁎整睯牫偲潴散瑩潮❳⁳瑡瑵猠癩敷⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献癩敷⹡捴楯渮獮潯穥∠㴠≓湯潺攠䙯爠㈰⁍楮畴敳∻ਊ⼪⁗慫攠啰⁢畴瑯渠瑩瑬攠獨潷渠楮⁎整睯牫偲潴散瑩潮❳⁳瑡瑵猠癩敷⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献癩敷⹡捴楯渮睡步⵵瀢‽•坡步⁕瀢㬊ਯ⨠䍯湮散瑩潮⁤整慩汳慢敬⁳桯睮⁩渠乥瑷潲歐牯瑥捴楯渧猠獴慴畳⁶楥眮‪⼊≮整睯牫⹰牯瑥捴楯渮獴慴畳⹶楥眮捯湮散瑩潮⹤整慩汳∠㴠≃潮湥捴楯渠䑥瑡楬猢㬊ਯ⨠䍵獴潭⁄乓慢敬⁳桯睮⁩渠乥瑷潲歐牯瑥捴楯渧猠獴慴畳⁶楥眮‪⼊≮整睯牫⹰牯瑥捴楯渮獴慴畳⹶楥眮捵獴潭⹤湳∠㴠≄乓⁓敲癥爢㬊ਯ⨠䝥湥物挠捯湮散瑩潮⁦慩汥搠敲牯爠浥獳慧攠獨潷渠楮⁎整睯牫偲潴散瑩潮❳⁳瑡瑵猠癩敷⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献癩敷⹥牲潲⹣潮湥捴楯渮晡楬敤⹭敳獡来∠㴠≐汥慳攠瑲礠慧慩渠污瑥爮∻ਊ⼪⁇敮敲楣⁣潮湥捴楯渠晡楬敤⁥牲潲⁴楴汥⁳桯睮⁩渠乥瑷潲歐牯瑥捴楯渧猠獴慴畳⁶楥眮‪⼊≮整睯牫⹰牯瑥捴楯渮獴慴畳⹶楥眮敲牯爮捯湮散瑩潮⹦慩汥搮瑩瑬攢‽•䙡楬敤⁴漠䍯湮散琮∻ਊ⼪⁉倠䅤摲敳猠污扥氠獨潷渠楮⁎整睯牫偲潴散瑩潮❳⁳瑡瑵猠癩敷⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献癩敷⹩瀮慤摲敳猢‽•䥐⁁摤牥獳∻ਊ⼪⁌潣慴楯渠污扥氠獨潷渠楮⁎整睯牫偲潴散瑩潮❳⁳瑡瑵猠癩敷⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献癩敷⹬潣慴楯渢‽•䱯捡瑩潮∻ਊ⼪⁌慢敬⁳桯睮渠瑨攠瑩瑬攠潦⁴桥⁳整瑩湧猠獥捴楯渠楮⁎整睯牫偲潴散瑩潮❳⁳瑡瑵猠癩敷⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献癩敷⹳整瑩湧献獥捴楯渮瑩瑬攢‽•䵡湡来∻ਊ⼪⁔楴汥慢敬⁴數琠景爠瑨攠獴慴畳⁶楥眠睨敮整倠楳⁤楳捯湮散瑥搠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳瑡瑵献癩敷⹴楴汥∠㴠≖偎∻ਊ⼪⁔桥⁢潤礠潦⁴桥潴楦楣慴楯渠獨潷渠睨敮⁎整睯牫⁐牯瑥捴楯渠牥捯湮散瑳⁳畣捥獳晵汬礠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳畣捥獳⹮潴楦楣慴楯渮扯摹∠㴠≎整睯牫⁐牯瑥捴楯渠楳⁏渮⁙潵爠汯捡瑩潮⁡湤湬楮攠慣瑩癩瑹⁡牥⁰牯瑥捴敤⸢㬊ਯ⨠周攠扯摹映瑨攠湯瑩晩捡瑩潮⁳桯睮⁷桥渠乥瑷潲欠偲潴散瑩潮⁣潮湥捴猠獵捣敳獦畬汹⁷楴栠瑨攠捩瑹‫⁳瑡瑥⽣潵湴特⁡猠景牭慴瑥搠灡牡浥瑥爠⨯ਢ湥瑷潲欮灲潴散瑩潮⹳畣捥獳⹮潴楦楣慴楯渮獵扴楴汥⹩湣汵摩湧⹳敲癥牌潣慴楯渢‽•副畴楮朠摥癩捥⁴牡晦楣⁴桲潵杨‥䀮∻ਊ⼪⁔桥⁢潤礠潦⁴桥潴楦楣慴楯渠獨潷渠睨敮⁎整睯牫⁐牯瑥捴楯渠捯湮散瑳⁳畣捥獳晵汬礠睩瑨⁴桥⁣楴礠⬠獴慴支捯畮瑲礠慳⁦潲浡瑴敤⁰慲慭整敲‪⼊≮整睯牫⹰牯瑥捴楯渮獵捣敳献湯瑩晩捡瑩潮⹳畢瑩瑬攮獮潯穥⹥湤敤⹩湣汵摩湧⹳敲癥牌潣慴楯渢‽•噐丠獮潯穥⁨慳⁥湤敤⸠副畴楮朠摥癩捥⁴牡晦楣⁴桲潵杨‥䀮∻ਊ⼪⁔楴汥⁦潲⁴桥⁢畴瑯渠瑯楮欠瑯⁴桥⁩体⁡灰⁳整瑩湧猠慮搠敮慢汥潴楦楣慴楯湳⁡灰⵷楤攮‪⼊≮整睯牫⹰牯瑥捴楯渮瑵牮⹯渮湯瑩晩捡瑩潮献扵瑴潮⹴楴汥∠㴠≔畲渠佮⁎潴楦楣慴楯湳∻ਊ⼪⁆潯瑥爠瑥硴⁵湤敲⁴桥⁢畴瑯渠瑯楮欠瑯⁴桥⁩体⁡灰⁳整瑩湧猠慮搠敮慢汥潴楦楣慴楯湳⁡灰⵷楤攮‪⼊≮整睯牫⹰牯瑥捴楯渮瑵牮⹯渮湯瑩晩捡瑩潮献獥捴楯渮景潴敲∠㴠≁汬潷⁄畣歄畣歇漠瑯潴楦礠祯甠楦⁹潵爠捯湮散瑩潮⁤牯灳爠噐丠獴慴畳⁣桡湧敳⸢㬊ਯ⨠呩瑬攠潦⁴桥⁁扯畴⁳散瑩潮⁩渠瑨攠噐丠獴慴畳⁳捲敥渠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹡扯畴∠㴠≁扯畴∻ਊ⼪⁓散瑩潮⁨敡摥爠景爠瑨攠瑯杧汥⁦潲⁖偎潴楦楣慴楯湳⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹡汥牴献獥捴楯渮桥慤敲∠㴠≎潴楦楣慴楯湳∻ਊ⼪⁌楳琠獥捴楯渠景潴敲⁦潲⁴桥⁴潧杬攠景爠噐丠慬敲瑳⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹡汥牴献瑯杧汥⹳散瑩潮⹦潯瑥爢‽•䝥琠湯瑩晩敤⁩映祯畲⁣潮湥捴楯渠摲潰猠潲⁖偎⁳瑡瑵猠捨慮来献∻ਊ⼪⁔楴汥⁦潲⁴桥⁴潧杬攠景爠噐丠湯瑩晩捡瑩潮献‪⼊≮整睯牫⹰牯瑥捴楯渮癰渮慬敲瑳⹴潧杬攮瑩瑬攢‽•噐丠乯瑩晩捡瑩潮猢㬊ਯ⨠呩瑬攠景爠瑨攠摡瑡⁶潬畭攠獥捴楯渠楮⁴桥⁖偎⁳瑡瑵猠獣牥敮‪⼊≮整睯牫⹰牯瑥捴楯渮癰渮摡瑡⵶潬畭攢‽•䑡瑡⁖潬畭攢㬊ਯ⨠䙯潴敲⁴數琠景爠瑨攠䕸捬畤攠䱯捡氠乥瑷潲歳⁳整瑩湧⁩瑥洮‪⼊≮整睯牫⹰牯瑥捴楯渮癰渮數捬畤攮汯捡氮湥瑷潲歳⹳整瑩湧⹦潯瑥爢‽•䱥琠汯捡氠瑲慦晩挠批灡獳⁴桥⁖偎⁡湤⁣潮湥捴⁴漠摥癩捥猠潮⁹潵爠汯捡氠湥瑷潲欬楫攠愠灲楮瑥爮∻ਊ⼪⁈敡摥爠瑥硴⁦潲⁴桥⁅硣汵摥⁌潣慬⁎整睯牫猠獥瑴楮朠楴敭⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹥硣汵摥⹬潣慬⹮整睯牫献獥瑴楮朮桥慤敲∠㴠≇敮敲慬∻ਊ⼪⁔楴汥⁦潲⁴桥⁅硣汵摥⁌潣慬⁎整睯牫猠獥瑴楮朠楴敭⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹥硣汵摥⹬潣慬⹮整睯牫献獥瑴楮朮瑩瑬攢‽•䕸捬畤攠䱯捡氠乥瑷潲歳∻ਊ⼪⁔楴汥⁦潲⁴桥⁖偎⁌潣慴楯渠獣牥敮❳⁁汬⁃潵湴物敳⁳散瑩潮⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹬潣慴楯渮慬氮捯畮瑲楥献獥捴楯渮瑩瑬攢‽•䅬氠䍯畮瑲楥猢㬊ਯ⨠䑥獣物灴楯渠潦⁴桥潣慴楯渠瑹灥⁩渠瑨攠噐丠獴慴畳⁳捲敥渠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹬潣慴楯渮捯湮散瑥搢‽•䍯湮散瑥搠䱯捡瑩潮∻ਊ⼪⁓畢瑩瑬攠潦⁣潵湴物敳⁩瑥洠睨敮⁴桥牥⁡牥畬瑩灬攠捩瑩敳Ⱐ數慭灬攠㨠‪⼊≮整睯牫⹰牯瑥捴楯渮癰渮汯捡瑩潮⹣潵湴特⹩瑥洮景牭慴瑥搮捩瑩敳⹣潵湴∠㴠∥搠捩瑩敳∻ਊ⼪⁄敳捲楰瑩潮映瑨攠汯捡瑩潮⁴祰攠楮⁴桥⁖偎⁳瑡瑵猠獣牥敮‪⼊≮整睯牫⹰牯瑥捴楯渮癰渮汯捡瑩潮⹮敡牥獴∠㴠∨乥慲敳琩∻ਊ⼪⁆潯瑥爠摥獣物扩湧⁴桥⁖偎⁌潣慴楯渠獣牥敮❳⁒散潭浥湤敤⁳散瑩潮⁷桩捨畳琠桡猠乥慲敳琠䅶慩污扬攮‪⼊≮整睯牫⹰牯瑥捴楯渮癰渮汯捡瑩潮⹲散潭浥湤敤⹳散瑩潮⹦潯瑥爢‽•䅵瑯浡瑩捡汬礠捯湮散琠瑯⁴桥敡牥獴⁳敲癥爠睥⁣慮⁦楮搮∻ਊ⼪⁔楴汥⁦潲⁴桥⁖偎⁌潣慴楯渠獣牥敮❳⁒散潭浥湤敤⁳散瑩潮⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹬潣慴楯渮牥捯浭敮摥搮獥捴楯渮瑩瑬攢‽•剥捯浭敮摥搢㬊ਯ⨠䑥獣物灴楯渠潦⁴桥潣慴楯渠瑹灥⁩渠瑨攠噐丠獴慴畳⁳捲敥渠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹬潣慴楯渮獥汥捴敤∠㴠≓敬散瑥搠䱯捡瑩潮∻ਊ⼪⁓畢瑩瑬攠景爠瑨攠灲敦敲牥搠汯捡瑩潮⁩瑥洠瑨慴⁦潲浡瑳⁡⁣楴礠慮搠捯畮瑲礮⁅⹧⁃桩捡杯Ⱐ啮楴敤⁓瑡瑥猠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹬潣慴楯渮獵扴楴汥⹦潲浡瑴敤⹣楴礮慮搮捯畮瑲礢‽•┱⑀Ⱐ┲⑀∻ਊ⼪⁔楴汥⁦潲⁴桥⁖偎⁌潣慴楯渠獣牥敮⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹬潣慴楯渮瑩瑬攢‽•噐丠䱯捡瑩潮∻ਊ⼪⁔楴汥⁦潲⁴桥⁖偎⁎潴楦楣慴楯湳慮慧敭敮琠獣牥敮⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹮潴楦楣慴楯湳⹴楴汥∠㴠≖偎⁎潴楦楣慴楯湳∻ਊ⼪⁌慢敬⁦潲⁴桥⁐牥晥牲敤⁌潣慴楯渠噐丠卥瑴楮杳⁩瑥洠睨敮⁴桥敡牥獴⁡癡楬慢汥潣慴楯渠楳⁳敬散瑥搮‪⼊≮整睯牫⹰牯瑥捴楯渮癰渮灲敦敲牥搮汯捡瑩潮⹮敡牥獴∠㴠≎敡牥獴⁌潣慴楯渢㬊ਯ⨠呩瑬攠景爠瑨攠偲敦敲牥搠䱯捡瑩潮⁖偎⁓整瑩湧猠楴敭⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹰牥晥牲敤⹬潣慴楯渮瑩瑬攢‽•偲敦敲牥搠䱯捡瑩潮∻ਊ⼪⁆潯瑥爠瑥硴⁦潲⁴桥⁄乓⁳敲癥爠獥瑴楮朠楴敭⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹳散畲攮摮献獥瑴楮朮景潴敲∠㴠≄畣歄畣歇漠牯畴敳⁄乓ⁱ略物敳⁴桲潵杨畲⁄乓⁳敲癥牳⁳漠祯畲⁩湴敲湥琠灲潶楤敲⁣慮❴⁳敥⁷桡琠睥扳楴敳⁹潵⁶楳楴⸢㬊ਯ⨠呩瑬攠景爠瑨攠䙁儠牯眠楮⁴桥⁖偎⁳瑡瑵猠獣牥敮⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹳整瑩湧献晡焢‽•䙁关⁡湤⁓異灯牴∻ਊ⼪⁔楴汥⁦潲⁴桥⁦敥摢慣欠牯眠楮⁴桥⁖偎⁳瑡瑵猠獣牥敮⸠⨯ਢ湥瑷潲欮灲潴散瑩潮⹶灮⹳整瑩湧献獨慲攭晥敤扡捫∠㴠≓桡牥⁖偎⁆敥摢慣欢㬊ਯ⨠呩瑬攠景爠瑨攠噐丠卥瑴楮杳⁳捲敥渮‪⼊≮整睯牫⹰牯瑥捴楯渮癰渮獥瑴楮杳⹴楴汥∠㴠≖偎⁓整瑩湧猢㬊ਯ⨠䥮景牭慴楯渠浥獳慧攠慢潵琠乥眠呡戠偡来⁲敤敳楧渠⨯ਢ湥眮瑡戮灡来⹩湴牯⹭敳獡来⹢潤礢‽•䍵獴潭楺攠祯畲⁆慶潲楴敳⁡湤⁧漭瑯⁦敡瑵牥献⁒敯牤敲⁴桩湧猠潲⁨楤攠瑨敭⁴漠步数⁩琠捬敡渮∻ਊ⼪⁔楴汥映楮景牭慴楯渠浥獳慧攠慢潵琠乥眠呡戠偡来⁲敤敳楧渠⨯ਢ湥眮瑡戮灡来⹩湴牯⹭敳獡来⹴楴汥∠㴠≙潵爠乥眠呡戠偡来⁩献⸮⁎敷™㬊ਯ⨠䙯潴敲映瑨攠杲潵瀠慬汯睩湧⁦潲⁳整瑩湧⁵瀠湥眠瑡戠灡来⁳散瑩潮猠⨯ਢ湥眮瑡戮灡来⹳整瑩湧献獥捴楯湳⹤敳捲楰瑩潮∠㴠≓桯眬⁨楤攬⁡湤⁲敯牤敲⁳散瑩潮猠潮⁴桥敷⁴慢⁰慧攢㬊ਯ⨠䡥慤敲⁴楴汥映瑨攠杲潵瀠慬汯睩湧⁦潲⁳整瑩湧⁵瀠湥眠瑡戠灡来⁳散瑩潮猠⨯ਢ湥眮瑡戮灡来⹳整瑩湧献獥捴楯湳⹨敡摥爮瑩瑬攢‽•卅䍔䥏乓∻ਊ⼪⁈敡摥爠瑩瑬攠潦⁴桥⁳桯牴捵瑳⁩渠乥眠呡戠偡来⁰牥晥牥湣敳⸠⨯ਢ湥眮瑡戮灡来⹳整瑩湧献獨潲瑣畴献桥慤敲⹴楴汥∠㴠≓䡏剔䍕呓∻ਊ⼪⁔楴汥映乥眠呡戠偡来⁰牥晥牥湣敳⁰慧攮‪⼊≮敷⹴慢⹰慧攮獥瑴楮杳⹴楴汥∠㴠≃畳瑯浩穥⁎敷⁔慢∻ਊ⼪⁓桯牴捵琠瑩瑬攠汥慤楮朠瑯⁁䤠䍨慴‪⼊≮敷⹴慢⹰慧攮獨潲瑣畴⹡椮捨慴∠㴠≁䤠䍨慴∻ਊ⼪⁓桯牴捵琠瑩瑬攠汥慤楮朠瑯⁂潯歭慲歳‪⼊≮敷⹴慢⹰慧攮獨潲瑣畴⹢潯歭慲歳∠㴠≂潯歭慲歳∻ਊ⼪⁓桯牴捵琠瑩瑬攠汥慤楮朠瑯⁄潷湬潡摳‪⼊≮敷⹴慢⹰慧攮獨潲瑣畴⹤潷湬潡摳∠㴠≄潷湬潡摳∻ਊ⼪⁓桯牴捵琠瑩瑬攠汥慤楮朠瑯⁐慳獷潲摳‪⼊≮敷⹴慢⹰慧攮獨潲瑣畴⹰慳獷潲摳∠㴠≐慳獷潲摳∻ਊ⼪⁓桯牴捵琠瑩瑬攠汥慤楮朠瑯⁡灰⁳整瑩湧猠⨯ਢ湥眮瑡戮灡来⹳桯牴捵琮獥瑴楮杳∠㴠≓整瑩湧猢㬊ਯ⨠呥硴⁳桯睮渠瑨攠晡癯物瑥猠楮景⁴潯汴楰‪⼊≮敷⹴慢⹰慧攮瑯潬瑩瀮扯摹∠㴠≏渠慮礠獩瑥Ⱐ潰敮⁴桥⃢肢ꋢ肢敮甠慮搠獥汥捴‪⩁摤⁆慶潲楴攪⨠瑯⁡摤⁩琠瑯⁹潵爠湥眠瑡戠灡来⸢㬊ਯ⨠䑯潴⁴牡湳污瑥‭⁳瑲楮杳摩捴⁥湴特‪⼊≮畭扥爮潦⹴慢猢‽•湵浢敲⹯昮瑡扳∻ਊ⼪⁔數琠摩獰污祥搠潮潴楦楣慴楯渠慰灥慲楮朠楮⁴桥⁡摤牥獳⁢慲⁷桥渠瑨攠扲潷獥爠⁤楳浩獳敤⁴桥⁣潯歩攠灯灵瀠慵瑯浡瑩捡汬礠牥橥捴楮朠楴‪⼊≯浮楢慲⹮潴楦楣慴楯渮捯潫楥猭浡湡来搢‽•䍯潫楥猠䵡湡来搢㬊ਯ⨠呥硴⁤楳灬慹敤渠湯瑩晩捡瑩潮⁡灰敡物湧⁩渠瑨攠慤摲敳猠扡爠睨敮⁴桥⁢牯睳敲†桩摥猠愠捯潫楥⁰潰異‪⼊≯浮楢慲⹮潴楦楣慴楯渮灯灵瀭桩摤敮∠㴠≐潰⵵瀠䡩摤敮∻ਊ⼪⁂畴瑯渠瑯⁣桡湧攠瑨攠摥晡畬琠扲潷獥爠⨯ਢ潮扯慲摩湧⹢牯睳敲献捴愢‽•䍨潯獥⁙潵爠䉲潷獥爢㬊ਯ⨠䵥獳慧攠瑯⁨楧桬楧桴⁢牯睳敲⁣慰慢楬楴礠潦⁢汯捫楮朠捯潫楥⁰潰⵵灳‪⼊≯湢潡牤楮朮扲潷獥牳⹦敡瑵牥献捯潫楥偯灵灳⹴楴汥∠㴠≂汯捫⁣潯歩攠灯瀭異猢㬊ਯ⨠䵥獳慧攠瑯⁨楧桬楧桴⁢牯睳敲⁣慰慢楬楴礠潦⁢汯捫楮朠捲敥灹⁡摳‪⼊≯湢潡牤楮朮扲潷獥牳⹦敡瑵牥献捲敥灹䅤献瑩瑬攢‽•䉬潣欠捲敥灹⁡摳∻ਊ⼪⁍敳獡来⁴漠桩杨汩杨琠扲潷獥爠捡灡扩汩瑹晳睩晴汹⁥牡獥⁢牯睳楮朠摡瑡‪⼊≯湢潡牤楮朮扲潷獥牳⹦敡瑵牥献敲慳敂牯睳楮杄慴愮瑩瑬攢‽•卷楦瑬礠敲慳攠扲潷獩湧⁤慴愢㬊ਯ⨠䵥獳慧攠瑯⁨楧桬楧桴⁢牯睳敲⁣慰慢楬楴礠潦⁰物癡瑥⁳敡牣桥猠⨯ਢ潮扯慲摩湧⹢牯睳敲献晥慴畲敳⹰物癡瑥卥慲捨⹴楴汥∠㴠≓敡牣栠灲楶慴敬礠批⁤敦慵汴∻ਊ⼪⁍敳獡来⁴漠桩杨汩杨琠扲潷獥爠捡灡扩汩瑹晢汯捫楮朠㍲搠灡牴礠瑲慣步牳‪⼊≯湢潡牤楮朮扲潷獥牳⹦敡瑵牥献瑲慣步牂汯捫敲⹴楴汥∠㴠≂汯捫″牤⵰慲瑹⁴牡捫敲猢㬊ਯ⨠周攠瑩瑬攠潦⁴桥⁤楡汯朠瑯⁳桯眠瑨攠灲楶慣礠晥慴畲敳⁴桡琠䑵捫䑵捫䝯晦敲猠⨯ਢ潮扯慲摩湧⹢牯睳敲献瑩瑬攢‽•偲楶慣礠灲潴散瑩潮猠慣瑩癡瑥搡∻ਊ⼪⁂畴瑯渠瑯⁣潮瑩湵攠瑨攠潮扯慲摩湧⁰牯捥獳‪⼊≯湢潡牤楮朮楮瑲漮捴愢‽•䱥瓢肙猠摯⁩琡∻ਊ⼪⁔桥⁴楴汥映瑨攠潮扯慲摩湧⁤楡汯朠灯灵瀠⨯ਢ潮扯慲摩湧⹩湴牯⹴楴汥∠㴠≈椠瑨敲攮屮屮剥慤礠景爠愠扥瑴敲Ⱐ浯牥⁰物癡瑥⁩湴敲湥琿∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ潮扯慲摩湧⹷楤来瑳⹣潮瑩湵敂畴瑯渢‽•䅤搠坩摧整∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ潮扯慲摩湧⹷楤来瑳⹨敡摥爢‽•啳楮朠䑵捫䑵捫䝯畳琠杯琠敡獩敲⸢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≯湢潡牤楮朮睩摧整献獫楰䉵瑴潮∠㴠≍慹扥⁌慴敲∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ潮扯慲摩湧䍯湴楮略∠㴠≃潮瑩湵攢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≯湢潡牤楮杄敦慵汴䉲潷獥牍慹扥䱡瑥爢‽•䵡祢攠䱡瑥爢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≯湢潡牤楮杄敦慵汴䉲潷獥牔楴汥∠㴠≍慫攠䑵捫䑵捫䝯⁹潵爠摥晡畬琠扲潷獥爮∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ潮扯慲摩湧卥瑁獄敦慵汴䉲潷獥爢‽•卥琠慳⁄敦慵汴⁂牯睳敲∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ潮扯慲摩湧卫楰∠㴠≓歩瀢㬊ਯ⨠周楳⁩猠潮⁡⁢畴瑯渠灲敳敮瑥搠潮⁴桥慳琠潦⁴桥湢潡牤楮朠獣牥敮献‪⼊≯湢潡牤楮杓瑡牴䉲潷獩湧∠㴠≓瑡牴⁂牯睳楮朢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≯湢潡牤楮杗敬捯浥䡥慤敲∠㴠≗敬捯浥⁴漠䑵捫䑵捫䝯™㬊ਯ⨠饌楮毢肙⁩猠汩湫渠愠睥扳楴攠⨯ਢ潰敮⹥硴敲湡汬礮晡楬敤∠㴠≔桥⁡灰⁲敱畩牥搠瑯灥渠瑨慴楮欠捡滢肙琠扥⁦潵湤∻ਊ⼪⁁捴楶慴攠扵瑴潮‪⼊≰洮慣瑩癡瑥∠㴠≒敡捴楶慴攢㬊ਯ⨠䍡湣敬⁢畴瑯渠⨯ਢ灭⹣慮捥氢‽•䍡湣敬∻ਊ⼪⁄敡捴楶慴攠扵瑴潮‪⼊≰洮摥慣瑩癡瑥∠㴠≄敡捴楶慴攢㬊ਯ⨠䉵瑴潮⁴楴汥⁦潲⁳祮挠扯潫浡牫猠汩浩瑳⁥硣敥摥搠睡牮楮朠瑯⁧漠瑯慮慧攠扯潫浡牫猠⨯ਢ灲敦牥湣敳⹳祮挮扯潫浡牫猭汩浩琭數捥敤敤ⵡ捴楯渢‽•䵡湡来⁂潯歭慲歳∻ਊ⼪⁄敳捲楰瑩潮⁦潲⁳祮挠扯潫浡牫猠汩浩瑳⁥硣敥摥搠睡牮楮朠⨯ਢ灲敦牥湣敳⹳祮挮扯潫浡牫猭汩浩琭數捥敤敤ⵤ敳捲楰瑩潮∠㴠≙潵❶攠牥慣桥搠瑨攠浡硩浵洠湵浢敲映扯潫浡牫献⁐汥慳攠摥汥瑥⁳潭攠瑯⁲敳畭攠獹湣⸢㬊ਯ⨠䉵瑴潮⁴楴汥⁦潲⁳祮挠捲敤敮瑩慬猠汩浩瑳⁥硣敥摥搠睡牮楮朠瑯⁧漠瑯慮慧攠灡獳睯牤猠⨯ਢ灲敦牥湣敳⹳祮挮捲敤敮瑩慬猭汩浩琭數捥敤敤ⵡ捴楯渢‽•䵡湡来⁰慳獷潲摳꘢㬊ਯ⨠䑥獣物灴楯渠景爠獹湣⁣牥摥湴楡汳業楴猠數捥敤敤⁷慲湩湧‪⼊≰牥晲敮捥献獹湣⹣牥摥湴楡汳⵬業楴ⵥ硣敥摥搭摥獣物灴楯渢‽•奯甧癥⁲敡捨敤⁴桥慸業畭畭扥爠潦⁰慳獷潲摳⸠偬敡獥⁤敬整攠獯浥⁴漠牥獵浥⁳祮挮∻ਊ⼪⁄敳捲楰瑩潮⁩湶慬楤⁣牥摥湴楡汳⁥牲潲⁷桥渠獹湣楮朮ਠ†䑥獣物灴楯渠潦⁩湣潲牥捴汹⁦潲浡瑴敤⁤慴愠敲牯爠睨敮⁳祮捩湧⸊†⁄敳捲楰瑩潮映瑯漠浡湹⁲敱略獴猠敲牯爠睨敮⁳祮捩湧⸠⨯ਢ灲敦牥湣敳⹳祮挮楮癡汩搭汯杩渭摥獣物灴楯渢‽•卹湣⁥湣潵湴敲敤⁡渠敲牯爮⁔特⁤楳慢汩湧⁳祮挠潮⁴桩猠摥癩捥⁡湤⁴桥渠牥捯湮散琠畳楮朠慮潴桥爠摥癩捥爠祯畲⁲散潶敲礠捯摥⸢㬊ਯ⨠呩瑬攠景爠獹湣業楴猠數捥敤敤⁷慲湩湧‪⼊≰牥晲敮捥献獹湣⹬業楴ⵥ硣敥摥搭瑩瑬攢‽•卹湣⁐慵獥搢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≰牥獥牶敌潧楮献摯浡楮⹬楳琮景潴敲∠㴠≗敢獩瑥猠牥汹渠捯潫楥猠瑯敥瀠祯甠獩杮敤⁩渮⁗桥渠祯甠䙩牥灲潯映愠獩瑥Ⱐ捯潫楥猠睯滢肙琠扥⁥牡獥搠慮搠祯痢肙汬⁳瑡礠獩杮敤⁩測⁥癥渠慦瑥爠畳楮朠瑨攠䙩牥⁂畴瑯渮⁗攠獴楬氠扬潣欠瑨楲搭灡牴礠瑲慣步牳⁦潵湤渠䙩牥灲潯映睥扳楴敳⸢㬊ਯ⨠卥捴楯渠桥慤敲⁡扯癥⁆楲数牯潦敤⁷敢獩瑥猠汩獴‪⼊≰牥獥牶敌潧楮献摯浡楮⹬楳琮瑩瑬攢‽•䙩牥灲潯映卩瑥猢㬊ਯ⨠䅬敲琠浥獳慧攠數灬慩湩湧⁴漠畳敲猠瑨慴⁴桥⁢敮敦楴映晩牥灲潯晩湧⁡⁳楴攠楳⁴桡琠瑨敹⁷楬氠扥数琠獩杮敤⁩渠⨯ਢ灲敳敲癥䱯杩湳⹦楲数牯潦⹭敳獡来∠㴠≆楲数牯潦楮朠瑨楳⁳楴攠睩汬敥瀠祯甠獩杮敤⁩渠慦瑥爠畳楮朠瑨攠䙩牥⁂畴瑯渮∻ਊ⼪⁐慲慭整敲⁩猠愠獴物湧‭⁤潭慩渠湡浥⸠䅬敲琠瑩瑬攠灲潭灴楮朠畳敲⁴漠晩牥灲潯映愠獩瑥⁳漠瑨敹⁣慮⁳瑡礠獩杮敤⁩渠⨯ਢ灲敳敲癥䱯杩湳⹦楲数牯潦⹴楴汥∠㴠≆楲数牯潦‥䀠瑯⁳瑡礠獩杮敤⁩渿∻ਊ⼪⁃潮晩牭⁦楲数牯潦楮朠慣瑩潮‪⼊≰牥獥牶敌潧楮献浥湵⹣潮晩牭∠㴠≆楲数牯潦∻ਊ⼪⁐慲慭整敲⁩猠愠睥扳楴攠啒䰮⁍敳獥来⁣潮晩牭猠瑨慴⁧楶敮⁷敢獩瑥⁨慳⁢敥渠晩牥灲潯晥搮‪⼊≰牥獥牶敌潧楮献浥湵⹣潮晩牭⹭敳獡来∠㴠∥䀠楳潷⁆楲数牯潦∻ਊ⼪⁄敮礠晩牥灲潯晩湧⁡捴楯渠⨯ਢ灲敳敲癥䱯杩湳⹭敮甮摥晥爢‽•乯琠乯眢㬊ਯ⨠䑩獡扬攠晩牥灲潯晩湧⁦潲⁳楴攠⨯ਢ灲敳敲癥䱯杩湳⹭敮甮摩獡扬攢‽•剥浯癥⁆楲数牯潦楮朢㬊ਯ⨠䕮慢汥⁦楲数牯潦楮朠景爠獩瑥‪⼊≰牥獥牶敌潧楮献浥湵⹥湡扬攢‽•䙩牥灲潯映周楳⁓楴攢㬊ਯ⨠⁍敳獥来⁣潮晩牭猠瑨慴⁷敢獩瑥⁩猠湯潮来爠晩牥灲潯晥搮‪⼊≰牥獥牶敌潧楮献浥湵⹲敭潶慬⹭敳獡来∠㴠≆楲数牯潦楮朠牥浯癥搢㬊ਯ⨠䅬敲琠瑩瑬攠⨯ਢ灲敳敲癥䱯杩湳⹲敭潶攮慬氢‽•剥浯癥⁁汬∻ਊ⼪⁃潮晩牭慴楯渠扵瑴潮⁩渠慬敲琠⨯ਢ灲敳敲癥䱯杩湳⹲敭潶攮慬氮潫∠㴠≏䬢㬊ਯ⨠偲楶慣礠䥣潮⁡捣敳獩扩汩瑹⁴楴汥‪⼊≰物癡捹⹩捯渮摡砢‽•䑵捫䑵捫䝯潧漢㬊ਯ⨠偲楶慣礠䥣潮⁡捣敳獩扩汩瑹⁨楮琠⨯ਢ灲楶慣礮楣潮⹨楮琢‽•呡瀠瑯灥渠偲楶慣礠䑡獨扯慲搠獣牥敮∻ਊ⼪⁐物癡捹⁉捯渠慣捥獳楢楬楴礠瑩瑬攠⨯ਢ灲楶慣礮楣潮⹳桩敬搢‽•偲楶慣礠䥣潮∻ਊ⼪⁄敮礠慣瑩潮‪⼊≰牯浰琮捵獴潭⹵牬⹳捨敭攮摯湴潰敮∠㴠≃慮捥氢㬊ਯ⨠䍯湦楲洠慣瑩潮‪⼊≰牯浰琮捵獴潭⹵牬⹳捨敭攮潰敮∠㴠≏灥渢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≰牯浰琮捵獴潭⹵牬⹳捨敭攮灲潭灴∠㴠≗潵汤⁹潵楫攠瑯敡癥⁄畣歄畣歇漠瑯⁶楥眠瑨楳⁣潮瑥湴㼢㬊ਯ⨠䅬敲琠瑩瑬攠⨯ਢ灲潭灴⹣畳瑯洮畲氮獣桥浥⹴楴汥∠㴠≏灥渠楮⁁湯瑨敲⁁灰㼢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≳敡牣栮桩湴⹤畣此畣歧漢‽•卥慲捨爠敮瑥爠慤摲敳猢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≳散瑩潮⹴楴汥⹢潯歭慲歳∠㴠≂潯歭慲歳∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ獥捴楯渮瑩瑬攮晡癯物瑥猢‽•䙡癯物瑥猢㬊ਯ⨠卥瑴楮杳⁣敬氠景爠䅢潵琠䑄䜠⨯ਢ獥瑴楮杳⹡扯畴⹤摧∠㴠≁扯畴⁄畣歄畣歇漢㬊ਯ⨠卥瑴楮杳⁳散瑩潮⁴楴汥⁦潲⁁扯畴⁄畣歄畣歇漠⨯ਢ獥瑴楮杳⹡扯畴⹳散瑩潮∠㴠≁扯畴∻ਊ⼪⁡扯畴⁰慧攠⨯ਢ獥瑴楮杳⹡扯畴⹴數琢‽•䑵捫䑵捫䝯⁩猠瑨攠楮摥灥湤敮琠䥮瑥牮整⁰物癡捹⁣潭灡湹⁦潵湤敤⁩渠㈰〸⁦潲⁡湹潮攠睨濢肙猠瑩牥搠潦⁢敩湧⁴牡捫敤湬楮攠慮搠睡湴猠慮⁥慳礠獯汵瑩潮⸠坥饲攠灲潯映祯甠捡渠来琠牥慬⁰物癡捹⁰牯瑥捴楯渠潮汩湥⁷楴桯畴⁴牡摥潦晳⸊੔桥⁄畣歄畣歇漠扲潷獥爠捯浥猠睩瑨⁴桥⁦敡瑵牥猠祯甠數灥捴⁦牯洠愠杯⵴漠扲潷獥爬楫攠扯潫浡牫猬⁴慢猬⁰慳獷潲摳Ⱐ慮搠浯牥Ⱐ灬畳癥爠孡⁤潺敮⁰潷敲晵氠灲楶慣礠灲潴散瑩潮獝⡤摧兵楣歌楮欺⼯摵捫摵捫杯⹣潭⽤畣此畣歧漭桥汰⵰慧敳⽰物癡捹⽷敢⵴牡捫楮札灲潴散瑩潮猯⤠湯琠潦晥牥搠楮潳琠灯灵污爠扲潷獥牳⁢礠摥晡畬琮⁔桩猠畮楱略汹⁣潭灲敨敮獩癥⁳整映灲楶慣礠灲潴散瑩潮猠桥汰猠灲潴散琠祯畲湬楮攠慣瑩癩瑩敳Ⱐ晲潭⁳敡牣桩湧⁴漠扲潷獩湧Ⱐ敭慩汩湧Ⱐ慮搠浯牥⸊੏畲⁰物癡捹⁰牯瑥捴楯湳⁷潲欠睩瑨潵琠桡癩湧⁴漠歮潷⁡湹瑨楮朠慢潵琠瑨攠瑥捨湩捡氠摥瑡楬猠潲⁤敡氠睩瑨⁣潭灬楣慴敤⁳整瑩湧献⁁汬⁹潵⁨慶攠瑯⁤漠楳⁳睩瑣栠祯畲⁢牯睳敲⁴漠䑵捫䑵捫䝯⁡捲潳猠慬氠祯畲⁤敶楣敳⁡湤⁹潵⁧整⁰物癡捹⁢礠摥晡畬琮ਊ䉵琠楦⁹潵‪摯⨠睡湴⁡⁰敥欠畮摥爠瑨攠桯潤Ⱐ祯甠捡渠晩湤潲攠楮景牭慴楯渠慢潵琠桯眠䑵捫䑵捫䝯⁰物癡捹⁰牯瑥捴楯湳⁷潲欠潮畲⁛桥汰⁰慧敳崨摤村畩捫䱩湫㨯⽤畣此畣歧漮捯洯摵捫摵捫杯⵨敬瀭灡来猯⤮∻ਊ⼪⁓整瑩湧猠獣牥敮⁡捣敳獩扩汩瑹⁳散瑩潮⁴楴汥‪⼊≳整瑩湧献慣捥獳楢楬楴礢‽•䅣捥獳楢楬楴礢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁴數琠景爠慤摩湧⁴桥⁡灰⁴漠瑨攠摯捫‪⼊≳整瑩湧献慤搮瑯⹤潣欢‽•䅤搠䅰瀠瑯⁙潵爠䑯捫∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁡摤⁷楤来琠瑯⁴桥⁨潭攠獣牥敮‪⼊≳整瑩湧献慤搮睩摧整∠㴠≁摤⁗楤来琠瑯⁈潭攠卣牥敮∻ਊ⼪⁎慭攠潦⁴桥⁳整瑩湧猠獵扳散瑩潮⁲敬慴敤⁴漠瑨攠慤摲敳猠扡爊†⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁡摤敳猠扡爠灯獩瑩潮‪⼊≳整瑩湧献慤摲敳献扡爢‽•䅤摲敳猠䉡爢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁴楴汥⁦潲⁴潧杬楮朠晵汬⁕剌⁶楳楢楬楴礠楮⁡摤牥獳⁢慲‪⼊≳整瑩湧献慤摲敳献晵汬⹵牬∠㴠≓桯眠䙵汬⁓楴攠䅤摲敳猢㬊ਯ⨠䱡扥氠摥獣物扩湧⁡⁦敡瑵牥⁷桩捨⁩猠瑵牮敤渠慬睡祳‪⼊≳整瑩湧献慬睡祳⹯渢‽•䅬睡祳⁏渢㬊ਯ⨠卥瑴楮杳⁳捲敥渠慰灥慲慮捥⁳散瑩潮⁴楴汥‪⼊≳整瑩湧献慰灥慲慮捥∠㴠≁灰敡牡湣攢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁦潲灥湩湧楮歳⁩渠慳獯捩慴敤⁡灰猠⨯ਢ獥瑴楮杳⹡獳潣楡瑥搮慰灳∠㴠≏灥渠䱩湫猠楮⁁獳潣楡瑥搠䅰灳∻ਊ⼪⁄敳捲楰瑩潮⁦潲⁡獳潣楡瑥搠慰灳⁤敳捲楰瑩潮‪⼊≳整瑩湧献慳獯捩慴敤⹡灰献摥獣物灴楯渢‽•䑩獡扬攠瑯⁰牥癥湴楮歳⁦牯洠慵瑯浡瑩捡汬礠潰敮楮朠楮瑨敲⁩湳瑡汬敤⁡灰献∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠景爠慵瑯捯浰汥瑥‪⼊≳整瑩湧献慵瑯捯浰汥瑥∠㴠≓敡牣栠卵杧敳瑩潮猢㬊ਯ⨠卥瑴楮杳慢敬⁦潲⁥湡扬楮朠潲⁤楳慢汩湧⁲散敮瑬礠癩獩瑥搠獩瑥猠⨯ਢ獥瑴楮杳⹡畴潣潭灬整攮牥捥湴汹癩獩瑥搢‽•剥捥湴汹⁖楳楴敤⁓楴敳∻ਊ⼪⁓整瑩湧猠污扥氠景爠敮慢汩湧爠摩獡扬楮朠牥捥湴汹⁶楳楴敤⁳楴敳‪⼊≳整瑩湧献慵瑯捯浰汥瑥⹲散敮瑬祶楳楴敤⹳畢瑩瑬攢‽•卨潷⁲散敮瑬礠癩獩瑥搠獩瑥猠楮⁳敡牣栠獵杧敳瑩潮献⁒散敮瑬礠癩獩瑥搠獩瑥猠慲攠灲楶慴攬湬礠獴潲敤渠祯畲⁤敶楣攬⁡湤⁣慮⁢攠捬敡牥搠睩瑨⁴桥⁆楲攠䉵瑴潮⸢㬊ਯ⨠卵扴楴汥⁦潲⁓敡牣栠卵杧敳瑩潮猠獥瑴楮朠⨯ਢ獥瑴楮杳⹡畴潣潭灬整攮獵扴楴汥∠㴠≓桯眠獥慲捨⁳畧来獴楯湳⁡猠祯甠瑹灥Ⱐ楮捬畤楮朠祯畲⁢潯歭慲歳⸠䅬氠獥慲捨敳⁡牥⁰物癡瑥⸢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁴數琠景爠䅰灬楣慴楯渠䱯捫‪⼊≳整瑩湧献慵瑯汯捫∠㴠≁灰汩捡瑩潮⁌潣欢㬊ਯ⨠卥捴楯渠景潴敲⁁畴潬潣欠摥獣物灴楯渠⨯ਢ獥瑴楮杳⹡畴潬潣欮摥獣物灴楯渢‽•䥦⁔潵捨⁉䐬⁆慣攠䥄Ⱐ潲⁡⁳祳瑥洠灡獳捯摥⁩猠敮慢汥搬⁹潵❬氠扥⁡獫敤⁴漠畮汯捫⁴桥⁡灰⁷桥渠潰敮楮朠楴⸢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁴數琠景爠䅵瑯浡瑩捡汬礠䍬敡物湧⁄慴愠⨯ਢ獥瑴楮杳⹣汥慲⹤慴愢‽•䅵瑯浡瑩捡汬礠䍬敡爠䑡瑡∻ਊ⼪⁔桥慭攠潦⁓整瑩湧猠捡瑥杯特⁩渠偲楶慣礠䙥慴畲敳⁲敬慴敤⁴漠捯湦楧畲慴楯渠潦⁴桥⁰物癡捹⁦敡瑵牥⁲敬慴敤⁴漠捯潫楥⁰潰⵵灳‪⼊≳整瑩湧献捯潫楥⹰潰⵵瀭灲潴散瑩潮⹰牯瑥捴楯渢‽•䍯潫楥⁐潰ⵕ瀠偲潴散瑩潮∻ਊ⼪⁅硰污湡瑩潮⁩渠卥瑴楮杳⁨潷⁴桥⁣潯歩攠灯瀠異⁰牯瑥捴楯渠晥慴畲攠睯牫猠⨯ਢ獥瑴楮杳⹣潯歩攮灯瀮異⹰牯瑥捴楯渮數灬慮慴楯渢‽•䑵捫䑵捫䝯⁷楬氠瑲礠瑯⁳敬散琠瑨攠浯獴⁰物癡瑥⁳整瑩湧猠慶慩污扬攠慮搠桩摥⁴桥獥⁰潰⵵灳⁦潲⁹潵⹜湛䱥慲渠䵯牥崨摤村畩捫䱩湫㨯⽤畣此畣歧漮捯洯摵捫摵捫杯⵨敬瀭灡来猯灲楶慣礯睥戭瑲慣歩湧⵰牯瑥捴楯湳⼣捯潫楥⵰潰⵵瀭浡湡来浥湴⤢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁴數琠景爠䍯潫楥⁰潰異猠⨯ਢ獥瑴楮杳⹣潯歩攮灯灵灳∠㴠≍慮慧攠䍯潫楥⁐潰⵵灳∻ਊ⼪⁓整瑩湧猠瑩瑬攠景爠瑨攠捵獴潭楺攠獥捴楯渠⨯ਢ獥瑴楮杳⹣畳瑯浩穥∠㴠≃畳瑯浩穥∻ਊ⼪⁔桥慭攠潦⁡⁳整瑩湧猠獵扳散瑩潮⁲敬慴敤⁴漠瑨攠摡瑡⁣汥慲楮朠⨯ਢ獥瑴楮杳⹤慴愮捬敡物湧∠㴠≄慴愠䍬敡物湧∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁳整瑩湧⁴桥⁡灰⁡猠摥晡畬琠扲潷獥爊†⁔桥慭攠潦⁓整瑩湧猠捡瑥杯特⁩渠偲楶慣礠䙥慴畲敳⁲敬慴敤⁴漠捯湦楧畲慴楯渠潦⁴桥⁤敦慵汴⁢牯睳敲‪⼊≳整瑩湧献摥晡畬琮扲潷獥爢‽•䑥晡畬琠䉲潷獥爢㬊ਯ⨠䱡扥氠潦⁡⁢畴瑯渠摩獡扬楮朠敭慩氠灲潴散瑩潮‪⼊≳整瑩湧献摩獡扬攮敭慩氮灲潴散瑩潮⹡畴潦楬氢‽•䑩獡扬攠䕭慩氠偲潴散瑩潮⁁畴潦楬氢㬊ਯ⨠卥瑴楮杳⁣敬氠瑯楮欠畳敲猠瑯瑨敲⁰牯摵捴猠批⁄畣歄畣歇漠⨯ਢ獥瑴楮杳⹤畣此畣歧漮潮⹯瑨敲⹰污瑦潲浳∠㴠≄畣歄畣歇漠潮⁏瑨敲⁐污瑦潲浳∻ਊ⼪⁅硰污湡瑩潮⁩渠卥瑴楮杳⁨潷⁴桥⁥浡楬⁰牯瑥捴楯渠晥慴畲攠睯牫猠⨯ਢ獥瑴楮杳⹥浡楬⹰牯瑥捴楯渮數灬慮慴楯渢‽•䉬潣欠敭慩氠瑲慣步牳⁡湤⁨楤攠祯畲⁡摤牥獳⁷楴桯畴⁳睩瑣桩湧⁹潵爠敭慩氠灲潶楤敲⹜湛䱥慲渠䵯牥崨摤村畩捫䱩湫㨯⽤畣此畣歧漮捯洯摵捫摵捫杯⵨敬瀭灡来猯敭慩氭灲潴散瑩潮⽷桡琭楳ⵤ畣此畣歧漭敭慩氭灲潴散瑩潮⼩∻ਊ⼪⁁汥牴⁰牥獥湴敤⁴漠畳敲⁡晴敲⁣汩捫楮朠潮‧卩杮畴✠楮⁅浡楬⁐牯瑥捴楯渠卥瑴楮杳‪⼊≳整瑩湧献敭慩氮灲潴散瑩潮⹳楧湩湧⹯畴⹡汥牴∠㴠≓楧湩湧畴映祯畲⁅浡楬⁐牯瑥捴楯渠慣捯畮琠睩汬⁤楳慢汥⁄畣欠䅤摲敳猠慵瑯晩汬⁩渠瑨楳⁢牯睳敲⸠奯甠捡渠獴楬氠畳攠瑨敳攠慤摲敳獥猠慮搠牥捥楶攠景牷慲摥搠敭慩氠慳⁵獵慬⸢㬊ਯ⨠卥瑴楮杳⁣敬氠景爠䕭慩氠偲潴散瑩潮‪⼊≳整瑩湧献敭慩汐牯瑥捴楯渮摥獣物灴楯渢‽•䉬潣欠敭慩氠瑲慣步牳⁡湤⁨楤攠祯畲⁡摤牥獳∻ਊ⼪⁌慢敬映愠扵瑴潮⁥湡扬楮朠瑨攠敭慩氠灲潴散瑩潮⁦敡瑵牥‪⼊≳整瑩湧献敮慢汥⹥浡楬⹰牯瑥捴楯渢‽•䕮慢汥⁅浡楬⁐牯瑥捴楯渢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁴數琠景爠敮慢汩湧⁶潩捥⁳敡牣栠⨯ਢ獥瑴楮杳⹥湡扬攮癯楣攮獥慲捨∠㴠≅湡扬攠噯楣攠卥慲捨∻ਊ⼪⁓整瑩湧猠捥汬⁦潲⁆敥摢慣欠⨯ਢ獥瑴楮杳⹦敥摢慣欢‽•卨慲攠䙥敤扡捫∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁦楲攠扵瑴潮⁡湩浡瑩潮‪⼊≳整瑩湧献晩牥扵瑴潮∠㴠≆楲攠䉵瑴潮⁁湩浡瑩潮∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁆楲数牯潦⁓楴敳‪⼊≳整瑩湧献晩牥灲潯昮獩瑥猢‽•䙩牥灲潯映卩瑥猢㬊ਯ⨠周攠湡浥映瑨攠獥瑴楮杳⁳畢獥捴楯渠捯湴慩湩湧⁧敮敲慬⁳整瑩湧猠⨯ਢ獥瑴楮杳⹧敮敲慬∠㴠≇敮敲慬∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁇偃‪⼊≳整瑩湧献杰挢‽•䝬潢慬⁐物癡捹⁃潮瑲潬
䝐䌩∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁡灰⁩捯渠獥汥捴楯渠⨯ਢ獥瑴楮杳⹩捯渢‽•䅰瀠䥣潮∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠景爠䭥祢潡牤‪⼊≳整瑩湧献步祢潡牤∠㴠≋敹扯慲搢㬊ਯ⨠卷楴捨⁢畴瑯渠污扥氮‪⼊≳整瑩湧献汥琮摵捫摵捫杯⹭慮慧攮捯潫楥⹣潮獥湴⹰潰異猢‽•䱥琠䑵捫䑵捫䝯慮慧攠捯潫楥⁣潮獥湴⁰潰⵵灳∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁰慳獷潲摳‪⼊≳整瑩湧献汯杩湳∠㴠≐慳獷潲摳∻ਊ⼪⁔桥慭攠潦⁴桥⁳整瑩湧猠獥捴楯渠捯湴慩湩湧慩渠獥瑴楮杳‪⼊≳整瑩湧献浡楮⹳整瑩湧猢‽•䵡楮⁓整瑩湧猢㬊ਯ⨠䱡扥氠潦⁡⁢畴瑯渠浡湡杩湧⁥浡楬⁰牯瑥捴楯渠慣捯畮琠⨯ਢ獥瑴楮杳⹭慮慧攮慣捯畮琢‽•䵡湡来⁁捣潵湴∻ਊ⼪⁓整瑩湧猠瑩瑬攠景爠瑨攠❍潲攧⁳散瑩潮‪⼊≳整瑩湧献浯牥∠㴠≍潲攠晲潭⁄畣歄畣歇漢㬊ਯ⨠䉵瑴潮慶楧慴楮朠瑯瑨敲⁳整瑩湧猠牥污瑥搠瑯⁳敡牣栠⨯ਢ獥瑴楮杳⹭潲攮獥慲捨⹳整瑩湧猢‽•䵯牥⁓敡牣栠卥瑴楮杳∻ਊ⼪⁓畢瑩瑬攠潦⁴桥‧䵯牥⁓敡牣栠卥瑴楮杳✠扵瑴潮‪⼊≳整瑩湧献浯牥⹳敡牣栮獥瑴楮杳⹥硰污湡瑩潮∠㴠≃畳瑯浩穥⁹潵爠污湧畡来Ⱐ牥杩潮Ⱐ慮搠浯牥∻ਊ⼪⁔桥慭攠潦⁡⁳整瑩湧猠捡瑥杯特楳瑩湧數琠獴数猠⨯ਢ獥瑴楮杳⹮數琮獴数猢‽•乥硴⁓瑥灳∻ਊ⼪⁌慢敬⁤敳捲楢楮朠愠晥慴畲攠睨楣栠楳⁴畲湥搠潦映⨯ਢ獥瑴楮杳⹯晦∠㴠≏晦∻ਊ⼪⁌慢敬⁤敳捲楢楮朠愠晥慴畲攠睨楣栠楳⁴畲湥搠潮‪⼊≳整瑩湧献潮∠㴠≏渢㬊ਯ⨠偲潤畣琠湡浥⁦潲⁴桥⁳畢獣物灴楯渠扵湤汥‪⼊≳整瑩湧献灰牯∠㴠≐物癡捹⁐牯∻ਊ⼪⁔楴汥⁦潲⁌楮欠楮⁴桥⁆潯瑥爠潦⁐物癡捹⁐牯⁳散瑩潮‪⼊≳整瑩湧献灰牯⹦潯瑥爢‽•偲楶慣礠偯汩捹⁡湤⁔敲浳曂ꁓ敲癩捥∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠景爠汯湧⁰牥獳⁰牥癩敷猠⨯ਢ獥瑴楮杳⹰牥癩敷猢‽•䱯湧ⵐ牥獳⁐牥癩敷猢㬊ਯ⨠卥瑴楮杳⁴楴汥⁦潲⁴桥⁰物癡捹⁳散瑩潮‪⼊≳整瑩湧献灲楶慣礢‽•偲楶慣礢㬊ਯ⨠周攠湡浥映卥瑴楮杳⁣慴敧潲礠楮⁐物癡捹⁆敡瑵牥猠牥污瑥搠瑯⁣潮晩杵牡瑩潮映瑨攠獥慲捨‪⼊≳整瑩湧献灲楶慴攮獥慲捨∠㴠≐物癡瑥⁓敡牣栢㬊ਯ⨠䕸灬慮慴楯渠楮⁓整瑩湧猠桯眠瑨攠灲楶慴攠獥慲捨⁦敡瑵牥⁷潲歳‪⼊≳整瑩湧献灲楶慴攮獥慲捨⹥硰污湡瑩潮∠㴠≄畣歄畣歇漠偲楶慴攠卥慲捨⁩猠祯畲⁤敦慵汴⁳敡牣栠敮杩湥Ⱐ獯⁹潵⁣慮⁳敡牣栠瑨攠睥戠睩瑨潵琠扥楮朠瑲慣步搮∻ਊ⼪⁈敡摥爠潦⁳整瑩湧猠牥污瑥搠瑯⁳敡牣栠⨯ਢ獥瑴楮杳⹳敡牣栮獥瑴楮杳∠㴠≓敡牣栠卥瑴楮杳∻ਊ⼪⁓整瑩湧猠捥汬⁦潲⁓敮搠䍲慳栠剥灯牴猠⨯ਢ獥瑴楮杳⹳敮搮捲慳栮牥灯牴猢‽•卥湤⁃牡獨⁒数潲瑳∻ਊ⼪⁅硰污湡瑩潮映卥湤⁃牡獨⁒数潲瑳⁳整瑩湧猠潰瑩潮‪⼊≳整瑩湧献獥湤⹣牡獨⹲数潲瑳⹤敳捲楰瑩潮∠㴠≁畴潭慴楣慬汹⁳敮搠捲慳栠牥灯牴猠瑯⁄畣歄畣歇漮∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁳整瑩湧⁡摤牥獳⁢慲⁰潳楴楯渠⨯ਢ獥瑴楮杳⹳整⹹潵爮慤摲敳献扡爮灯獩瑩潮∠㴠≓整⁙潵爠䅤摲敳猠䉡爠偯獩瑩潮∻ਊ⼪⁐物癡捹⁰牯⁤敳捲楰瑩潮⁳畢瑩瑬攠楮⁳整瑩湧猠睨敮⁴桥⁩猠慣瑩癡瑩湧‪⼊≳整瑩湧献獵扳捲楰瑩潮⹡捴楶慴楮朢‽•䅣瑩癡瑩湧∻ਊ⼪⁓畢獣物灴楯渠慣瑩癡瑩潮⁰敮摩湧⁤敳捲楰瑩潮‪⼊≳整瑩湧献獵扳捲楰瑩潮⹡捴楶慴楯渮灥湤楮朮摥獣物灴楯渢‽•周楳⁩猠瑡歩湧潮来爠瑨慮⁵獵慬Ⱐ灬敡獥⁣桥捫⁢慣欠污瑥爮∻ਊ⼪⁄慴愠䉲潫敲⁰牯瑥捴楯渠捥汬⁳畢瑩瑬攠景爠灲楶慣礠灲漠⨯ਢ獥瑴楮杳⹳畢獣物灴楯渮䑂倮獵扴楴汥∠㴠≒敭潶攠祯畲⁩湦漠晲潭⁳楴敳⁴桡琠獥汬⁩琢㬊ਯ⨠䑡瑡⁂牯步爠灲潴散瑩潮⁣敬氠瑩瑬攠景爠灲楶慣礠灲漠⨯ਢ獥瑴楮杳⹳畢獣物灴楯渮䑂倮瑩瑬攢‽•健牳潮慬⁉湦潲浡瑩潮⁒敭潶慬∻ਊ⼪⁐物癡捹⁰牯⁤敳捲楰瑩潮⁳畢瑩瑬攠楮⁳整瑩湧猠⨯ਢ獥瑴楮杳⹳畢獣物灴楯渮摥獣物灴楯渢‽•䥮捬畤敳畲⁖偎Ⱐ健牳潮慬⁉湦潲浡瑩潮⁒敭潶慬Ⱐ慮搠䥤敮瑩瑹⁔桥晴⁒敳瑯牡瑩潮⸢㬊ਯ⨠䤠桡癥⁡⁓畢獣物灴楯渠扵瑴潮⁴數琠景爠灲楶慣礠灲漠⨯ਢ獥瑴楮杳⹳畢獣物灴楯渮數楳瑩湧⹳畢獣物灴楯渢‽•䤠䡡癥⁡⁓畢獣物灴楯渢㬊ਯ⨠卵扳捲楰瑩潮⁥硰楲敤⁤敳捲楰瑩潮‪⼊≳整瑩湧献獵扳捲楰瑩潮⹥硰楲敤⹣潭浥湴∠㴠≓畢獣物扥⁡条楮⁴漠捯湴楮略⁵獩湧⁐物癡捹⁐牯∻ਊ⼪⁓畢獣物灴楯渠數灩牥搠瑩瑴汥敳獡来‪⼊≳整瑩湧献獵扳捲楰瑩潮⹥硰楲敤⹴楴汥∠㴠≙潵爠偲楶慣礠偲漠獵扳捲楰瑩潮⁥硰楲敤∻ਊ⼪⁉摥湴楴礠瑨敦琠牥獴潲慴楯渠捥汬⁳畢瑩瑬攠景爠灲楶慣礠灲漠⨯ਢ獥瑴楮杳⹳畢獣物灴楯渮䥔刮獵扴楴汥∠㴠≉映祯畲⁩摥湴楴礠楳⁳瑯汥測⁷攧汬⁨敬瀠牥獴潲攠楴∻ਊ⼪⁉摥湴楴礠瑨敦琠牥獴潲慴楯渠捥汬⁴楴汥⁦潲⁰物癡捹⁰牯‪⼊≳整瑩湧献獵扳捲楰瑩潮⹉呒⹴楴汥∠㴠≉摥湴楴礠周敦琠剥獴潲慴楯渢㬊ਯ⨠䝥琠偲楶慣礠偲漠扵瑴潮⁴數琠景爠灲楶慣礠灲漠⨯ਢ獥瑴楮杳⹳畢獣物灴楯渮汥慲渮浯牥∠㴠≇整⁐物癡捹⁐牯∻ਊ⼪⁓畢獣物灴楯渠卥瑴楮杳⁢畴瑯渠瑥硴⁦潲⁰物癡捹⁰牯‪⼊≳整瑩湧献獵扳捲楰瑩潮⹭慮慧攢‽•卵扳捲楰瑩潮⁓整瑩湧猢㬊ਯ⨠䍡汬⁴漠慣瑩潮⁴楴汥⁦潲⁐物癡捹⁐牯⁳整瑩湧猠⨯ਢ獥瑴楮杳⹳畢獣物灴楯渮獵扳捲楢攢‽•偲潴散琠祯畲⁣潮湥捴楯渠慮搠楤敮瑩瑹⁷楴栠偲楶慣礠偲漢㬊ਯ⨠噐丠捥汬⁴楴汥⁦潲⁰物癡捹⁰牯‪⼊≳整瑩湧献獵扳捲楰瑩潮⹖偎⹴楴汥∠㴠≖偎∻ਊ⼪⁌慢敬映愠扵瑴潮慶楧慴楮朠瑯⁴桥⁓異灯牴⁰慧攠⨯ਢ獥瑴楮杳⹳異灯牴∠㴠≓異灯牴∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁳祮挠慮搠扡捫異‪⼊≳整瑩湧献獹湣∠㴠≓祮挠☠䉡捫異∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁴數琠獩穥‪⼊≳整瑩湧献瑥硴⹳楺攢‽•呥硴⁓楺攢㬊ਯ⨠卥瑴楮杳⁳捲敥渠捥汬⁴數琠景爠瑨敭攠⨯ਢ獥瑴楮杳⹴桥浥∠㴠≔桥浥∻ਊ⼪⁔楴汥⁦潲⁴桥⁓整瑩湧猠噩敷‪⼊≳整瑩湧献瑩瑬攢‽•卥瑴楮杳∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠瑥硴⁦潲⁕湰牯瑥捴敤⁓楴敳‪⼊≳整瑩湧献畮灲潴散瑥搮獩瑥猢‽•啮灲潴散瑥搠卩瑥猢㬊ਯ⨠卥瑴楮杳⁣敬氠景爠噥牳楯渠⨯ਢ獥瑴楮杳⹶敲獩潮∠㴠≖敲獩潮∻ਊ⼪⁓整瑩湧猠獣牥敮⁣敬氠景爠癯楣攠獥慲捨‪⼊≳整瑩湧献癯楣攮獥慲捨∠㴠≐物癡瑥⁖潩捥⁓敡牣栢㬊ਯ⨠周攠湡浥映卥瑴楮杳⁣慴敧潲礠楮⁐物癡捹⁆敡瑵牥猠牥污瑥搠瑯⁣潮晩杵牡瑩潮映瑨攠睥戠瑲慣歩湧⁰牯瑥捴楯渠晥慴畲攠⨯ਢ獥瑴楮杳⹷敢⹴牡捫楮朮灲潴散瑩潮∠㴠≗敢⁔牡捫楮朠偲潴散瑩潮∻ਊ⼪⁅硰污湡瑩潮⁩渠卥瑴楮杳⁨潷⁴桥⁷敢⁴牡捫楮朠灲潴散瑩潮⁦敡瑵牥⁷潲歳‪⼊≳整瑩湧献睥戮瑲慣歩湧⹰牯瑥捴楯渮數灬慮慴楯渢‽•䑵捫䑵捫䝯⁡畴潭慴楣慬汹⁢汯捫猠桩摤敮⁴牡捫敲猠慳⁹潵⁢牯睳攠瑨攠睥戮屮孌敡牮⁍潲敝⡤摧兵楣歌楮欺⼯摵捫摵捫杯⹣潭⽤畣此畣歧漭桥汰⵰慧敳⽰物癡捹⽷敢⵴牡捫楮札灲潴散瑩潮猯⤢㬊ਯ⨠剥灯牴⁡⁂牯步渠卩瑥⁳捲敥渠捯湦楲浡瑩潮⁢畴瑯渠⨯ਢ獩瑥䙥敤扡捫⹢畴瑯湔數琢‽•卵扭楴⁒数潲琢㬊ਯ⨠䑯浡楮⁩猠慮⁕剌⁡摤牥獳‪⼊≳楴敆敥摢慣欮摯浡楮䥮景∠㴠≄潭慩渠潦⁂牯步渠卩瑥㨢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≳楴敆敥摢慣欮浥獳慧敐污捥桯汤敲∠㴠≗桩捨⁣潮瑥湴爠晵湣瑩潮慬楴礠楳⁢牥慫楮朿∻ਊ⼪⁎漠捯浭敮琠灲潶楤敤⁢礠敮杩湥敲⸠⨯ਢ獩瑥䙥敤扡捫⹳畢瑩瑬攢‽•䉲潫敮⁳楴攠牥灯牴楮朠楳⁣潭灬整敬礠慮潮祭潵猠慮搠桥汰猠畳⁴漠業灲潶攠瑨攠慰瀡∻ਊ⼪⁔桩猠楳⁡⁦潲洠瑩瑬攠⨯ਢ獩瑥䙥敤扡捫⹴楴汥∠㴠≒数潲琠愠䉲潫敮⁓楴攢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≳楴敆敥摢慣欮畲汐污捥桯汤敲∠㴠≗桩捨⁷敢獩瑥⁩猠扲潫敮㼢㬊ਯ⨠卵扳捲楰瑩潮⁁捴楶慴楯渠䥮景‪⼊≳畢獣物灴楯渮慣瑩癡瑥⸮桥慤敲⹤敳捲楰瑩潮∠㴠≁捣敳猠祯畲⁐物癡捹⁐牯⁳畢獣物灴楯渠潮⁴桩猠摥癩捥⁶楡⁁灰汥⁉䐠潲⁡渠敭慩氠慤摲敳献∻ਊ⼪⁂畴瑯渠景爠慤摩湧⁥浡楬⁡摤牥獳⁴漠獵扳捲楰瑩潮‪⼊≳畢獣物灴楯渮慣瑩癡瑥⹡摤⹥浡楬⹢畴瑯渢‽•䅤搠䕭慩氢㬊ਯ⨠䅰灬攠䥄灴楯渠景爠慣瑩癡瑩潮‪⼊≳畢獣物灴楯渮慣瑩癡瑥⹡灰汥楤∠㴠≁灰汥⁉䐢㬊ਯ⨠䉵瑴潮⁴數琠景爠牥獴潲楮朠灵牣桡獥⁶楡⁁灰汥⁉䐠⨯ਢ獵扳捲楰瑩潮⹡捴楶慴攮慰灬敩搮扵瑴潮∠㴠≒敳瑯牥⁐畲捨慳攢㬊ਯ⨠䑥獣物灴楯渠景爠䅰灬攠䥄⁡捴楶慴楯渠⨯ਢ獵扳捲楰瑩潮⹡捴楶慴攮慰灬敩搮摥獣物灴楯渢‽•剥獴潲攠祯畲⁰畲捨慳攠瑯⁡捴楶慴攠祯畲⁳畢獣物灴楯渠潮⁴桩猠摥癩捥⸢㬊ਯ⨠卵扳捲楰瑩潮⁁捴楶慴楯渠䥮景‪⼊≳畢獣物灴楯渮慣瑩癡瑥⹤敳捲楰瑩潮∠㴠≙潵爠獵扳捲楰瑩潮⁩猠慵瑯浡瑩捡汬礠慶慩污扬攠楮⁄畣歄畣歇漠潮⁡湹⁤敶楣攠獩杮敤⁩渠瑯⁹潵爠䅰灬攠䥄⸢㬊ਯ⨠䉵瑴潮⁦潲⁥摩瑩湧⁥浡楬⁡摤牥獳⁡摤敤⁴漠獵扳捲楰瑩潮‪⼊≳畢獣物灴楯渮慣瑩癡瑥⹥摩琮敭慩氮扵瑴潮∠㴠≅摩琠䕭慩氢㬊ਯ⨠噩敷⁔楴汥⁦潲⁥摩瑩湧⁹潵爠敭慩氠慣捯畮琠⨯ਢ獵扳捲楰瑩潮⹡捴楶慴攮敤楴⹥浡楬⹴楴汥∠㴠≅摩琠䕭慩氢㬊ਯ⨠䕭慩氠潰瑩潮⁦潲⁡捴楶慴楯渠⨯ਢ獵扳捲楰瑩潮⹡捴楶慴攮敭慩氢‽•䕭慩氢㬊ਯ⨠剥獴潲攠扵瑴潮⁴楴汥⁦潲⁅浡楬‪⼊≳畢獣物灴楯渮慣瑩癡瑥⹥浡楬⹢畴瑯渢‽•䕮瑥爠䕭慩氢㬊ਯ⨠䑥獣物灴楯渠景爠䕭慩氠慣瑩癡瑩潮‪⼊≳畢獣物灴楯渮慣瑩癡瑥⹥浡楬⹤敳捲楰瑩潮∠㴠≕獥⁹潵爠敭慩氠瑯⁡捴楶慴攠祯畲⁳畢獣物灴楯渠潮⁴桩猠摥癩捥⸢㬊ਯ⨠䅣瑩癡瑥⁳畢獣物灴楯渠瑩瑬攠⨯ਢ獵扳捲楰瑩潮⹡捴楶慴攮敭慩氮瑩瑬攢‽•䅣瑩癡瑥⁓畢獣物灴楯渢㬊ਯ⨠䉵瑴潮⁴楴汥⁦潲⁣慮捥汬楮朠敭慩氠摥汥瑩潮‪⼊≳畢獣物灴楯渮慣瑩癡瑥⹭慮慧攮敭慩氮捡湣敬∠㴠≃慮捥氢㬊ਯ⨠䉵瑴潮⁴楴汥⁦潲⁣潮晩牭楮朠敭慩氠摥汥瑩潮‪⼊≳畢獣物灴楯渮慣瑩癡瑥⹭慮慧攮敭慩氮佋∠㴠≏䬢㬊ਯ⨠剥獴潲攠扵瑴潮⁴楴汥⁦潲⁁灰汥䥄‪⼊≳畢獣物灴楯渮慣瑩癡瑥⹲敳瑯牥⹡灰汥∠㴠≒敳瑯牥⁐畲捨慳攢㬊ਯ⨠卵扳捲楰瑩潮⁁捴楶慴楯渠呩瑬攠⨯ਢ獵扳捲楰瑩潮⹡捴楶慴攮瑩瑬攢‽•䅣瑩癡瑥⁹潵爠獵扳捲楰瑩潮渠瑨楳⁤敶楣攢㬊ਯ⨠剥獥湤⁡捴楶慴楯渠楮獴牵捴楯湳⁢畴瑯渠⨯ਢ獵扳捲楰瑩潮⹡摤⹤敶楣攮牥獥湤⹩湳瑲畣瑩潮猢‽•剥獥湤⁉湳瑲畣瑩潮猢㬊ਯ⨠䅤搠敭慩氠瑯⁡渠數楳瑩湧⁳畢獣物灴楯渠⨯ਢ獵扳捲楰瑩潮⹡摤⹥浡楬∠㴠≁摤⁡渠敭慩氠慤摲敳猠瑯⁡捴楶慴攠祯畲⁳畢獣物灴楯渠潮⁹潵爠潴桥爠摥癩捥献⁗既肙汬湬礠畳攠瑨楳⁡摤牥獳⁴漠癥物晹⁹潵爠獵扳捲楰瑩潮⸢㬊ਯ⨠噩敷⁴楴汥⁦潲⁡摤楮朠敭慩氠瑯⁳畢獣物灴楯渠⨯ਢ獵扳捲楰瑩潮⹡摤⹥浡楬⹴楴汥∠㴠≁摤⁅浡楬∻ਊ⼪⁔楴汥⁦潲⁁汥牴敳獡来猠⨯ਢ獵扳捲楰瑩潮⹡汥牴⹴楴汥∠㴠≳畢獣物灴楯渮慬敲琮瑩瑬攢㬊ਯ⨠卵扳捲楰瑩潮⁡癡楬慢楬楴礠浥獳慧攠潮⁁灰汥⁤敶楣敳‪⼊≳畢獣物灴楯渮慶慩污扬攮慰灬攢‽•偲楶慣礠偲漠楳⁡癡楬慢汥渠慮礠摥癩捥⁳楧湥搠楮⁴漠瑨攠獡浥⁁灰汥⁉䐮∻ਊ⼪⁔數琠景爠瑨攠浡湡来⁢楬汩湧⁰慧攠⨯ਢ獵扳捲楰瑩潮⹢楬汩湧⹧潯杬攮瑥硴∠㴠≙潵爠獵扳捲楰瑩潮⁷慳⁰畲捨慳敤⁴桲潵杨⁴桥⁇潯杬攠偬慹⁓瑯牥⸠呯⁲敮敷⁹潵爠獵扳捲楰瑩潮Ⱐ灬敡獥灥渠䝯潧汥⁐污礠却潲攠獵扳捲楰瑩潮⁳整瑩湧猠潮⁡⁤敶楣攠獩杮敤⁩渠瑯⁴桥⁳慭攠䝯潧汥⁁捣潵湴⁵獥搠瑯物杩湡汬礠灵牣桡獥⁹潵爠獵扳捲楰瑩潮⸢㬊ਯ⨠呩瑬攠景爠瑨攠浡湡来⁢楬汩湧⁰慧攠⨯ਢ獵扳捲楰瑩潮⹢楬汩湧⹧潯杬攮瑩瑬攢‽•卵扳捲楰瑩潮⁐污湳∻ਊ⼪⁓畢獣物灴楯渠慮湵慬⁢楬汩湧⁰敲楯搠瑹灥‪⼊≳畢獣物灴楯渮扩汬楮朮灥物潤⹡湮畡氢‽•慮湵慬∻ਊ⼪⁓畢獣物灴楯渠浯湴桬礠扩汬楮朠灥物潤⁴祰攠⨯ਢ獵扳捲楰瑩潮⹢楬汩湧⹰敲楯搮浯湴桬礢‽•浯湴桬礢㬊ਯ⨠卵扳捲楰瑩潮⁒敭潶慬⁣潮晩牭慴楯渠浥獳慧攠⨯ਢ獵扳捲楰瑩潮⹣慮捥氮浥獳慧攢‽•奯畲⁳畢獣物灴楯渠桡猠扥敮⁲敭潶敤⁦牯洠瑨楳⁤敶楣攮∻ਊ⼪⁃桡湧攠灬慮爠捡湣敬⁴楴汥‪⼊≳畢獣物灴楯渮捨慮来⹰污渢‽•啰摡瑥⁐污渠潲⁃慮捥氢㬊ਯ⨠乡癩条瑩潮⁂畴瑯渠景爠捬潳楮朠獵扳捲楰瑩潮⁶楥眠⨯ਢ獵扳捲楰瑩潮⹣汯獥∠㴠≃汯獥∻ਊ⼪⁔楴汥⁦潲⁃潮晩牭敳獡来猠⨯ਢ獵扳捲楰瑩潮⹣潮晩牭⹴楴汥∠㴠≁牥⁹潵⁳畲政∻ਊ⼪⁈敡摥爠景爠獥捴楯渠景爠慣瑩癡瑩湧⁳畢獣物灴楯渠潮瑨敲⁤敶楣敳‪⼊≳畢獣物灴楯渮摥癩捥献桥慤敲∠㴠≁捴楶慴攠潮⁏瑨敲⁄敶楣敳∻ਊ⼪⁆潯瑥爠景爠獥捴楯渠景爠慣瑩癡瑩湧⁳畢獣物灴楯渠潮瑨敲⁤敶楣敳⁷桥渠敭慩氠睡猠湯琠祥琠慤摥搠⨯ਢ獵扳捲楰瑩潮⹤敶楣敳⹮漮敭慩氮景潴敲∠㴠≁摤⁡渠潰瑩潮慬⁥浡楬⁴漠祯畲⁳畢獣物灴楯渠瑯⁡捣敳猠偲楶慣礠偲漠潮瑨敲⁤敶楣敳⸠⨪孌敡牮潲敝⡨瑴灳㨯⽤畣此畣歧漮捯洯摵捫摵捫杯⵨敬瀭灡来猯灲楶慣礭灲漯慤摩湧ⵥ浡楬⼩⨪∻ਊ⼪⁆潯瑥爠景爠獥捴楯渠景爠慣瑩癡瑩湧⁳畢獣物灴楯渠潮瑨敲⁤敶楣敳⁷桥渠敭慩氠楳⁡摤敤‪⼊≳畢獣物灴楯渮摥癩捥献睩瑨⹥浡楬⹦潯瑥爢‽•啳攠瑨楳⁥浡楬⁴漠慣瑩癡瑥⁹潵爠獵扳捲楰瑩潮⁩渠卥瑴楮杳‾⁐物癡捹⁐牯⁩渠瑨攠䑵捫䑵捫䝯⁡灰渠祯畲瑨敲⁤敶楣敳⸠⨪孌敡牮潲敝⡨瑴灳㨯⽤畣此畣歧漮捯洯摵捫摵捫杯⵨敬瀭灡来猯灲楶慣礭灲漯慤摩湧ⵥ浡楬⼩⨪∻ਊ⼪⁁汥牴⁣潮瑥湴⁦潲潴⁦潵湤⁳畢獣物灴楯渠⨯ਢ獵扳捲楰瑩潮⹥浡楬⹩湡捴楶攮慬敲琮浥獳慧攢‽•周攠獵扳捲楰瑩潮⁡獳潣楡瑥搠睩瑨⁴桩猠敭慩氠楳漠汯湧敲⁡捴楶攮∻ਊ⼪⁁汥牴⁴楴汥⁦潲潴⁦潵湤⁳畢獣物灴楯渠⨯ਢ獵扳捲楰瑩潮⹥浡楬⹩湡捴楶攮慬敲琮瑩瑬攢‽•卵扳捲楰瑩潮⁎潴⁆潵湤∻ਊ⼪⁁汥牴⁣潮瑥湴⁦潲潴⁦潵湤⁳畢獣物灴楯渠⨯ਢ獵扳捲楰瑩潮⹥硰楲敤⹡汥牴⹭敳獡来∠㴠≔桥⁳畢獣物灴楯渠慳獯捩慴敤⁷楴栠瑨楳⁁灰汥⁉䐠楳漠汯湧敲⁡捴楶攮∻ਊ⼪⁆䅑⁂畴瑯渠⨯ਢ獵扳捲楰瑩潮⹦慱∠㴠≆䅑猠慮搠卵灰潲琢㬊ਯ⨠䙁儠䑥獣物灴楯渠⨯ਢ獵扳捲楰瑩潮⹦慱⹤敳捲楰瑩潮∠㴠≇整⁡湳睥牳⁴漠晲敱略湴汹⁡獫敤ⁱ略獴楯湳爠捯湴慣琠偲楶慣礠偲漠獵灰潲琠晲潭畲⁨敬瀠灡来献∻ਊ⼪⁃慮捥氠慣瑩潮⁦潲⁴桥⁥硩獴楮朠獵扳捲楰瑩潮⁤楡汯朠⨯ਢ獵扳捲楰瑩潮⹦潵湤⹣慮捥氢‽•䍡湣敬∻ਊ⼪⁒敳瑯牥⁡捴楯渠景爠瑨攠數楳瑩湧⁳畢獣物灴楯渠摩慬潧‪⼊≳畢獣物灴楯渮景畮搮牥獴潲攢‽•剥獴潲攢㬊ਯ⨠䵥獳慧攠景爠瑨攠數楳瑩湧⁳畢獣物灴楯渠摩慬潧‪⼊≳畢獣物灴楯渮景畮搮瑥硴∠㴠≗攠景畮搠愠獵扳捲楰瑩潮⁡獳潣楡瑥搠睩瑨⁴桩猠䅰灬攠䥄⸢㬊ਯ⨠呩瑬攠景爠瑨攠數楳瑩湧⁳畢獣物灴楯渠摩慬潧‪⼊≳畢獣物灴楯渮景畮搮瑩瑬攢‽•卵扳捲楰瑩潮⁆潵湤∻ਊ⼪⁈敬瀠慮搠獵灰潲琠卥捴楯渠桥慤敲‪⼊≳畢獣物灴楯渮桥汰∠㴠≈敬瀠慮搠獵灰潲琢㬊ਯ⨠䵡湡来⁐污渠桥慤敲‪⼊≳畢獣物灴楯渮浡湡来⹰污渢‽•䵡湡来⁐污渢㬊ਯ⨠䡥慤敲⁦潲⁴桥⁳畢獣物灴楯渠獥捴楯渠⨯ਢ獵扳捲楰瑩潮⹭慮慧攮瑩瑬攢‽•卵扳捲楰瑩潮∻ਊ⼪⁁汥牴⁣潮瑥湴⁦潲潴⁦潵湤⁳畢獣物灴楯渠⨯ਢ獵扳捲楰瑩潮⹮潴䙯畮搮慬敲琮浥獳慧攢‽•周敲攠楳漠獵扳捲楰瑩潮⁡獳潣楡瑥搠睩瑨⁴桩猠䅰灬攠䥄⸢㬊ਯ⨠䅬敲琠瑩瑬攠景爠湯琠景畮搠獵扳捲楰瑩潮‪⼊≳畢獣物灴楯渮湯瑆潵湤⹡汥牴⹴楴汥∠㴠≓畢獣物灴楯渠乯琠䙯畮搢㬊ਯ⨠噩敷⁰污湳⁢畴瑯渠瑥硴‪⼊≳畢獣物灴楯渮湯瑆潵湤⹶楥眮灬慮猢‽•噩敷⁐污湳∻ਊ⼪⁈敲漠呥硴⁦潲⁐敲獯湡氠楮景牭慴楯渠牥浯癡氠⨯ਢ獵扳捲楰瑩潮⹰楲⹨敲漢‽•䅣瑩癡瑥⁐物癡捹⁐牯渠摥獫瑯瀠瑯⁳整⁵瀠健牳潮慬⁉湦潲浡瑩潮⁒敭潶慬∻ਊ⼪⁄敳捲楰瑩潮渠桯眠瑯⁵獥⁐敲獯湡氠楮景牭慴楯渠牥浯癡氠楮⁤敳歴潰⸠周攠晩牳琠灬慣敨潬摥爠牥晥牥湣敳⁡潣慴楯渠楮⁴桥⁄敳歴潰⁡灰汩捡瑩潮⸠㱩⹥㨠卥瑴楮杳‾⁐物癡捹⁐牯㸬⁡湤⁴桥⁳散潮搬⁴桥敮甠敮瑲礮⁩⹥⸠㱉⁨慶攠愠卵扳捲楰瑩潮㸠⨯ਢ獵扳捲楰瑩潮⹰楲⹨敲潔數琢‽•䥮⁴桥⁄畣歄畣歇漠扲潷獥爠景爠摥獫瑯瀬⁧漠瑯‥ㄤ䀠慮搠捬楣欠┲⑀⁴漠来琠獴慲瑥搮∻ਊ⼪⁓整瑩湧猠牥晥牥湣敳⁡敮甠楮⁴桥⁄敳歴潰⁡灰Ⱐ偲楶慣礠偲漬⁲敦敲敮捥猠潵爠灲潤畣琠湡浥‪⼊≳畢獣物灴楯渮灩爮桥牯呥硴䱯捡瑩潮∠㴠≓整瑩湧猠㸠偲楶慣礠偲漢㬊ਯ⨠䵥湵⁩瑥洠景爠敮慢汩湧⁐敲獯湡氠䥮景牭慴楯渠剥浯癡氠潮⁄敳歴潰‪⼊≳畢獣物灴楯渮灩爮桥牯呥硴䵥湹䕮瑲礢‽•䤠桡癥⁡⁳畢獣物灴楯渢㬊ਯ⨠呥硴⁦潲⁴桥‧浡捏匧⁢畴瑯渠⨯ਢ獵扳捲楰瑩潮⹰楲⹭慣潳∠㴠≍慣∻ਊ⼪⁔數琠景爠瑨攠❗楮摯睳✠扵瑴潮‪⼊≳畢獣物灴楯渮灩爮睩湤潷猢‽•坩湤潷猢㬊ਯ⨠偲潧牥獳⁶楥眠瑩瑬攠睨敮⁣潭灬整楮朠瑨攠灵牣桡獥‪⼊≳畢獣物灴楯渮灲潧牥獳⹶楥眮捯浰汥瑩湧⹰畲捨慳攢‽•䍯浰汥瑩湧⁰畲捨慳攮⸮∻ਊ⼪⁐牯杲敳猠癩敷⁴楴汥⁷桥渠獴慲瑩湧⁴桥⁰畲捨慳攠⨯ਢ獵扳捲楰瑩潮⹰牯杲敳献癩敷⹰畲捨慳楮朮獵扳捲楰瑩潮∠㴠≐畲捨慳攠楮⁰牯杲敳献⸮∻ਊ⼪⁐牯杲敳猠癩敷⁴楴汥⁷桥渠牥獴潲楮朠灡獴⁳畢獣物灴楯渠灵牣桡獥‪⼊≳畢獣物灴楯渮灲潧牥獳⹶楥眮牥獴潲楮朮獵扳捲楰瑩潮∠㴠≒敳瑯物湧⁳畢獣物灴楯渮⸮∻ਊ⼪⁒敭潶攠晲潭⁴桩猠摥癩捥⁢畴瑯渠⨯ਢ獵扳捲楰瑩潮⹲敭潶攮晲潭⹤敶楣攮扵瑴潮∠㴠≒敭潶攠䙲潭⁔桩猠䑥癩捥∻ਊ⼪⁒敭潶攠晲潭⁤敶楣攠捯湦楲浡瑩潮⁤楡汯朠瑥硴‪⼊≳畢獣物灴楯渮牥浯癥⹦牯洮摥癩捥⹴數琢‽•奯甠睩汬漠汯湧敲⁢攠慢汥⁴漠慣捥獳⁹潵爠偲楶慣礠偲漠獵扳捲楰瑩潮渠瑨楳⁤敶楣攮⁔桩猠睩汬潴⁣慮捥氠祯畲⁳畢獣物灴楯測⁡湤⁩琠睩汬⁲敭慩渠慣瑩癥渠祯畲瑨敲⁤敶楣敳⸢㬊ਯ⨠剥浯癥⁦牯洠摥癩捥⁣潮晩牭慴楯渠摩慬潧⁴楴汥‪⼊≳畢獣物灴楯渮牥浯癥⹦牯洮摥癩捥⹴楴汥∠㴠≒敭潶攠晲潭⁴桩猠摥癩捥㼢㬊ਯ⨠剥浯癥⁳畢獣物灴楯渠扵瑴潮⁴數琠⨯ਢ獵扳捲楰瑩潮⹲敭潶攮獵扳捲楰瑩潮∠㴠≒敭潶攠卵扳捲楰瑩潮∻ਊ⼪⁒敭潶攠獵扳捲楰瑩潮⁣慮捥氠扵瑴潮⁴數琠⨯ਢ獵扳捲楰瑩潮⹲敭潶攮獵扳捲楰瑩潮⹣慮捥氢‽•䍡湣敬∻ਊ⼪⁂畴瑯渠瑥硴⁦潲⁧敮敲慬⁥牲潲敳獡来‪⼊≳畢獣物灴楯渮牥獴潲攮扡捫敮搮敲牯爮扵瑴潮∠㴠≂慣欠瑯⁓整瑩湧猢㬊ਯ⨠䅬敲琠景爠来湥牡氠敲牯爠浥獳慧攠⨯ਢ獵扳捲楰瑩潮⹲敳瑯牥⹢慣步湤⹥牲潲⹭敳獡来∠㴠≗既肙牥⁨慶楮朠瑲潵扬攠捯湮散瑩湧⸠偬敡獥⁴特⁡条楮慴敲⸢㬊ਯ⨠䅬敲琠景爠来湥牡氠敲牯爠瑩瑬攠⨯ਢ獵扳捲楰瑩潮⹲敳瑯牥⹢慣步湤⹥牲潲⹴楴汥∠㴠≓潭整桩湧⁗敮琠坲潮朢㬊ਯ⨠䅬敲琠景爠来湥牡氠敲牯爠浥獳慧攠⨯ਢ獵扳捲楰瑩潮⹲敳瑯牥⹧敮敲慬⹥牲潲⹭敳獡来∠㴠≔桥⁁灰⁓瑯牥⁷慳⁵湡扬攠瑯⁰牯捥獳⁹潵爠灵牣桡獥⸠偬敡獥⁴特⁡条楮慴敲⸢㬊ਯ⨠䅬敲琠景爠来湥牡氠敲牯爠瑩瑬攠⨯ਢ獵扳捲楰瑩潮⹲敳瑯牥⹧敮敲慬⹥牲潲⹴楴汥∠㴠≓潭整桩湧⁗敮琠坲潮朢㬊ਯ⨠䅬敲琠扵瑴潮⁴數琠景爠牥獴潲敤⁰畲捨慳攠慬敲琠⨯ਢ獵扳捲楰瑩潮⹲敳瑯牥⹳畣捥獳⹡汥牴⹢畴瑯渢‽•佋∻ਊ⼪⁁汥牴敳獡来⁦潲⁲敳瑯牥搠灵牣桡獥‪⼊≳畢獣物灴楯渮牥獴潲攮獵捣敳献慬敲琮浥獳慧攢‽•奯畲⁰畲捨慳敳⁨慶攠扥敮⁲敳瑯牥搮∻ਊ⼪⁁汥牴⁴楴汥⁦潲⁲敳瑯牥搠灵牣桡獥‪⼊≳畢獣物灴楯渮牥獴潲攮獵捣敳献慬敲琮瑩瑬攢‽•奯痢肙牥⁡汬⁳整⸢㬊ਯ⨠卵扴楴汥⁩渠桥慤敲⁷桥渠獵扳捲楢敤‪⼊≳畢獣物灴楯渮獵扳捲楢敤∠㴠≓畢獣物扥搢㬊ਯ⨠卵扳捲楰瑩潮⁅硰楲敤⁄慴愮⁔桩猠牥慤猠慳‧奯畲⁳畢獣物灴楯渠數灩牥搠潮
摡瑥⤧‪⼊≳畢獣物灴楯渮獵扳捲楰瑩潮⹥硰楲敤⹣慰瑩潮∠㴠≙潵爠獵扳捲楰瑩潮⁥硰楲敤渠╀∻ਊ⼪⁓畢獣物灴楯渠數灩牡瑩潮⁩湦漮⁔桩猠牥慤猠慳‧奯畲
浯湴桬礠潲⁡湮畡氩⁳畢獣物灴楯渠數灩牥猠潮
摡瑥⤧‪⼊≳畢獣物灴楯渮獵扳捲楰瑩潮⹥硰楲楮朮捡灴楯渢‽•奯畲‥ㄤ䀠獵扳捲楰瑩潮⁥硰楲敳渠┲⑀⸢㬊ਯ⨠卵扳捲楰瑩潮⁲敮敷慬⁩湦漮⁔桩猠牥慤猠慳‧奯畲
浯湴桬礠潲⁡湮畡氩⁳畢獣物灴楯渠牥湥睳渠⡤慴攩✠⨯ਢ獵扳捲楰瑩潮⹳畢獣物灴楯渮牥湥睩湧⹣慰瑩潮∠㴠≙潵爠┱⑀⁳畢獣物灴楯渠牥湥睳渠┲⑀⸢㬊ਯ⨠乡癩条瑩潮⁢慲⁔楴汥⁦潲⁳畢獣物灴楯湳‪⼊≳畢獣物灴楯渮瑩瑬攢‽•偲楶慣礠偲漢㬊ਯ⨠䵥獳慧攠捯湦楲浩湧⁴桡琠牥捯癥特⁣潤攠睡猠捯灩敤⁴漠捬楰扯慲搠⨯ਢ獹湣⹣潤攮捯灩敤∠㴠≒散潶敲礠捯摥⁣潰楥搠瑯⁣汩灢潡牤∻ਊ⼪⁃慰瑩潮⁦潲⁡⁢畴瑯渠瑯⁤敬整攠卹湣⁳敲癥爠摡瑡‪⼊≳祮挮摥汥瑥⹡汬⹣潮晩牭⹡捴楯渢‽•䑥汥瑥⁓敲癥爠䑡瑡∻ਊ⼪⁍敳獡来⁦潲⁴桥⁤楡汯朠瑯⁣潮晩牭⁤敬整楮朠卹湣⁳敲癥爠摡瑡‪⼊≳祮挮摥汥瑥⹡汬⹣潮晩牭⹭敳獡来∠㴠≁汬⁤敶楣敳⁷楬氠扥⁤楳捯湮散瑥搠慮搠祯畲⁳祮捥搠摡瑡⁷楬氠扥⁤敬整敤⁦牯洠瑨攠獥牶敲⸢㬊ਯ⨠呩瑬攠潦⁴桥⁤楡汯朠瑯⁣潮晩牭⁤敬整楮朠卹湣⁳敲癥爠摡瑡‪⼊≳祮挮摥汥瑥⹡汬⹣潮晩牭⹴楴汥∠㴠≄敬整攠卥牶敲⁄慴愿∻ਊ⼪⁃慰瑩潮⁦潲⁡⁢畴瑯渠瑯⁲敭潶攠摥癩捥⁦牯洠卹湣‪⼊≳祮挮牥浯癥ⵤ敶楣攮慣瑩潮∠㴠≒敭潶攢㬊ਯ⨠乯⁣潭浥湴⁰牯癩摥搠批⁥湧楮敥爮‪⼊≳祮挮牥浯癥ⵤ敶楣攮浥獳慧攢‽•尢╀尢⁷楬氠湯潮来爠扥⁡扬攠瑯⁡捣敳猠祯畲⁳祮捥搠摡瑡⸢㬊ਯ⨠呩瑬攠潦⁴桥⁤楡汯朠瑯⁲敭潶攠摥癩捥⁦牯洠卹湣‪⼊≳祮挮牥浯癥ⵤ敶楣攮瑩瑬攢‽•剥浯癥⁄敶楣政∻ਊ⼪⁃慰瑩潮⁦潲⁡⁢畴瑯渠瑯⁲敭潶攠捵牲敮琠摥癩捥⁦牯洠卹湣‪⼊≳祮挮瑵牮⹯晦⹣潮晩牭⹡捴楯渢‽•剥浯癥∻ਊ⼪⁍敳獡来⁦潲⁴桥⁤楡汯朠瑯⁣潮晩牭⁴畲湩湧晦⁓祮挠⨯ਢ獹湣⹴畲渮潦昮捯湦楲洮浥獳慧攢‽•周楳⁄敶楣攠睩汬漠汯湧敲⁢攠慢汥⁴漠慣捥獳⁹潵爠獹湣敤⁤慴愮∻ਊ⼪⁔楴汥映瑨攠摩慬潧⁴漠捯湦楲洠瑵牮楮朠潦映卹湣‪⼊≳祮挮瑵牮⹯晦⹣潮晩牭⹴楴汥∠㴠≔畲渠佦映卹湣㼢㬊ਯ⨠剥慳潮⁦潲⁡畴栠睨敮⁳整瑩湧⁵瀠卹湣‪⼊≳祮挮畳敲⹡畴栮牥慳潮∠㴠≕湬潣欠摥癩捥⁴漠獥琠異⁓祮挠☠䉡捫異∻ਊ⼪⁄慴愠獹湣楮朠畮慶慩污扬攠睡牮楮朠浥獳慧攠⨯ਢ獹湣⹷慲湩湧⹤慴愮獹湣楮朮摩獡扬敤∠㴠≓潲特Ⱐ扵琠卹湣…⁂慣歵瀠楳⁣畲牥湴汹⁵湡癡楬慢汥⸠偬敡獥⁴特⁡条楮慴敲⸢㬊ਯ⨠䑡瑡⁳祮捩湧⁵湡癡楬慢汥⁷慲湩湧敳獡来‪⼊≳祮挮睡牮楮朮摡瑡⹳祮捩湧⹤楳慢汥搮異杲慤攮牥煵楲敤∠㴠≓潲特Ⱐ扵琠卹湣…⁂慣歵瀠楳漠汯湧敲⁡癡楬慢汥⁩渠瑨楳⁡灰⁶敲獩潮⸠偬敡獥⁵灤慴攠䑵捫䑵捫䝯⁴漠瑨攠污瑥獴⁶敲獩潮⁴漠捯湴楮略⸢㬊ਯ⨠䅣捥獳楢楬楴礠污扥氠潮⁲敭潶攠扵瑴潮‪⼊≴慢⹣汯獥⹨潭攢‽•䍬潳攠桯浥⁴慢∻ਊ⼪⁁捣敳楢楬楴礠污扥氺⁦楲獴⁳瑲楮朠楳⁷敢獩瑥⁴楴汥Ⱐ獥捯湤⁩猠慤摲敳猠⨯ਢ瑡戮捬潳攮睩瑨⹴楴汥⹡湤⹡摤牥獳∠㴠≃汯獥⁜∥ㄤ䁜∠慴‥㈤䀢㬊ਯ⨠䅣捥獳楢楬楴礠污扥氠潮⁴慢⁣敬氠⨯ਢ瑡戮潰敮⹨潭攢‽•佰敮⁨潭攠瑡戢㬊ਯ⨠䅣捥獩扩汩瑹慢敬㨠晩牳琠獴物湧⁩猠睥扳楴攠瑩瑬攬⁳散潮搠楳⁡摤牥獳‪⼊≴慢⹯灥渮睩瑨⹴楴汥⹡湤⹡摤牥獳∠㴠≏灥渠尢┱⑀尢⁡琠┲⑀∻ਊ⼪⁔慢⁓睩瑣桥爠䅣捥獳楢楬楴礠䱡扥氠⨯ਢ瑡戮獷楴捨敲⹡捣敳獩扩汩瑹⹬慢敬∠㴠≔慢⁓睩瑣桥爢㬊ਯ⨠䑥獣物灴楯渠瑥硴⁦潲⁴桥⁴數琠獩穥⁡摪畳瑭敮琠獥瑴楮朠⨯ਢ瑥硴卩穥⹤敳捲楰瑩潮∠㴠≃桯潳攠祯畲⁰牥晥牲敤⁴數琠獩穥⸠坥扳楴敳⁹潵⁶楥眠楮⁄畣歄畣歇漠睩汬⁡摪畳琠瑯⁩琮∻ਊ⼪⁒数污捥浥湴⁳瑲楮朠楳⁡⁣畲牥湴⁰敲捥湴⁶慬略⁥⹧⸠✱㈰┧‪⼊≴數瑓楺攮景潴敲∠㴠≔數琠卩穥‭‥䀢㬊ਯ⨠䑡牫⁔桥浥⁥湴特‪⼊≴桥浥⹡捣⹤慲欢‽•䑡牫∻ਊ⼪⁓桯牴⁥湴特⁦潲⁄敦慵汴⁓祳瑥洠瑨敭攠⨯ਢ瑨敭攮慣挮摥晡畬琢‽•卹獴敭∻ਊ⼪⁌楧桴⁔桥浥⁥湴特‪⼊≴桥浥⹡捣⹬楧桴∠㴠≌楧桴∻ਊ⼪⁄慲欠周敭攠敮瑲礠⨯ਢ瑨敭攮湡浥⹤慲欢‽•䑡牫∻ਊ⼪⁅湴特⁦潲⁄敦慵汴⁓祳瑥洠瑨敭攠⨯ਢ瑨敭攮湡浥⹤敦慵汴∠㴠≓祳瑥洠䑥晡畬琢㬊ਯ⨠䱩杨琠周敭攠敮瑲礠⨯ਢ瑨敭攮湡浥⹬楧桴∠㴠≌楧桴∻ਊ⼪⁃潮晩牭慴楯渠潦⁡渠慣瑩潮‭⁰潰畬慴敤⁷楴栠愠摯浡楮慭攠⨯ਢ瑯慳琮灲潴散瑩潮⹤楳慢汥搢‽•偲楶慣礠偲潴散瑩潮⁤楳慢汥搠景爠╀∻ਊ⼪⁃潮晩牭慴楯渠潦⁡渠慣瑩潮‭⁰潰畬慴敤⁷楴栠愠摯浡楮慭攠⨯ਢ瑯慳琮灲潴散瑩潮⹤楳慢汥搮慮搮瑯杧汥⹲数潲琮獥湴∠㴠≐物癡捹⁐牯瑥捴楯湳⁤楳慢汥搠景爠╀⁡湤⁲数潲琠獥湴⸢㬊ਯ⨠䍯湦楲浡瑩潮映慮⁡捴楯渠ⴠ灯灵污瑥搠睩瑨⁡⁤潭慩渠湡浥‪⼊≴潡獴⹰牯瑥捴楯渮敮慢汥搢‽•偲楶慣礠偲潴散瑩潮⁥湡扬敤⁦潲‥䀢㬊ਯ⨠䅵瑯捯浰汥瑥⁳敬散瑥搠獵杧敳瑩潮⁩湴漠瑨攠䅤摲敳猠䉡爠扵瑴潮⁡捣敳獩扩汩瑹慢敬‪⼊≶潩捥潶敲⹡捴楯渮獵杧敳瑩潮⹡畴潣潭灬整攢‽•䅵瑯捯浰汥瑥⁳畧来獴楯渢㬊ਯ⨠噯楣攭潶敲⁴楴汥⁦潲⁡⁂潯歭慲欠獵杧敳瑩潮⸠乯畮‪⼊≶潩捥潶敲⹳畧来獴楯渮瑹灥⹢潯歭慲欢‽•䉯潫浡牫∻ਊ⼪⁓敡牣栠景爠獵杧敳瑩潮⁡捴楯渠慣捥獳楢楬楴礠瑩瑬攠⨯ਢ癯楣敯癥爮獵杧敳瑩潮⹴祰攮獥慲捨∠㴠≓敡牣栠慴⁄畣歄畣歇漢㬊ਯ⨠佰敮⁳畧来獴敤⁷敢獩瑥⁡捴楯渠慣捥獳楢楬楴礠瑩瑬攠⨯ਢ癯楣敯癥爮獵杧敳瑩潮⹴祰攮睥扳楴攢‽•佰敮⁷敢獩瑥∻ਊ⼪⁎漠浩捲潰桯湥⁰敲浩獳楯渠慬敲琠慣瑩潮⁢畴瑯渠瑯灥渠瑨攠獥瑴楮杳⁡灰‪⼊≶潩捥卥慲捨⹡汥牴⹮漭灥牭楳獩潮⹡捴楯渮獥瑴楮杳∠㴠≓整瑩湧猢㬊ਯ⨠䵥獳慧攠景爠慬敲琠睡牮楮朠瑨攠畳敲⁡扯畴楳獩湧楣牯灨潮攠灥牭楳獩潮‪⼊≶潩捥卥慲捨⹡汥牴⹮漭灥牭楳獩潮⹭敳獡来∠㴠≐汥慳攠慬汯眠䵩捲潰桯湥⁡捣敳猠楮⁩体⁓祳瑥洠卥瑴楮杳⁦潲⁄畣歄畣歇漠瑯⁵獥⁶潩捥⁦敡瑵牥献∻ਊ⼪⁏䬠扵瑴潮⁡汥牴⁷慲湩湧⁴桥⁵獥爠慢潵琠浩獳楮朠浩捲潰桯湥⁰敲浩獳楯渠⨯ਢ癯楣敓敡牣栮慬敲琮湯⵰敲浩獳楯渮潫∠㴠≏䬢㬊ਯ⨠呩瑬攠景爠慬敲琠睡牮楮朠瑨攠畳敲⁡扯畴楳獩湧楣牯灨潮攠灥牭楳獩潮‪⼊≶潩捥卥慲捨⹡汥牴⹮漭灥牭楳獩潮⹴楴汥∠㴠≍楣牯灨潮攠䅣捥獳⁒敱畩牥搢㬊ਯ⨠䍡湣敬⁢畴瑯渠景爠癯楣攠獥慲捨‪⼊≶潩捥卥慲捨⹣慮捥氢‽•䍡湣敬∻ਊ⼪⁖潩捥⵳敡牣栠景潴敲潴攠睩瑨渭摥癩捥⁰物癡捹⁷慲湩湧‪⼊≶潩捥卥慲捨⹦潯瑥爮湯瑥∠㴠≁摤⁐物癡瑥⁖潩捥⁓敡牣栠潰瑩潮⁴漠瑨攠慤摲敳猠扡爮⁁畤楯⁩猠湯琠獴潲敤爠獨慲敤⁷楴栠慮祯湥Ⱐ楮捬畤楮朠䑵捫䑵捫䝯⸢㬊ਯ⨠噯楣攭獥慲捨⁦潯瑥爠湯瑥⁷楴栠潮ⵤ敶楣攠灲楶慣礠睡牮楮朠⨯ਢ癯楣敓敡牣栮景潴敲⹮潴攮潬搢‽•䅵摩漠楳⁰牯捥獳敤渭摥癩捥⸠䥴❳潴⁳瑯牥搠潲⁳桡牥搠睩瑨⁡湹潮攬⁩湣汵摩湧⁄畣歄畣歇漮∻ਊ⼪⁃慮捥氠慣瑩潮⁦潲⁴桥⁡汥牴⁷桥渠瑨攠獵扳捲楰瑩潮⁥硰楲敳‪⼊≶灮⹡捣敳猭牥癯步搮慬敲琮慣瑩潮⹣慮捥氢‽•䑩獭楳猢㬊ਯ⨠偲業慲礠慣瑩潮⁦潲⁴桥⁡汥牴⁷桥渠瑨攠獵扳捲楰瑩潮⁥硰楲敳‪⼊≶灮⹡捣敳猭牥癯步搮慬敲琮慣瑩潮⹳畢獣物扥∠㴠≓畢獣物扥∻ਊ⼪⁁汥牴敳獡来⁦潲⁴桥⁡汥牴⁷桥渠瑨攠偲楶慣礠偲漠獵扳捲楰瑩潮⁥硰楲敳猠⨯ਢ癰渮慣捥獳⵲敶潫敤⹡汥牴⹭敳獡来∠㴠≓畢獣物扥⁴漠偲楶慣礠偲漠瑯⁲散潮湥捴⁄畣歄畣歇漠噐丮∻ਊ⼪⁁汥牴⁴楴汥⁦潲⁴桥⁡汥牴⁷桥渠瑨攠偲楶慣礠偲漠獵扳捲楰瑩潮⁥硰楲敳‪⼊≶灮⹡捣敳猭牥癯步搮慬敲琮瑩瑬攢‽•噐丠摩獣潮湥捴敤⁤略⁴漠數灩牥搠獵扳捲楰瑩潮∻ਊ⼪⁔楴汥⁦潲⁴桥⁖偎⁷楤来琠潮扯慲摩湧⁳捲敥渠⨯ਢ癰渮慤摗楤来琮獥瑴楮杳⹴楴汥∠㴠≆楮搠慮搠獥汥捴⁄畣歄畣歇漮⁔桥渠獷楰攠瑯⁖偎⁡湤⁳敬散琠䅤搠坩摧整⸢㬊ਯ⨠呩瑬攠景爠瑨攠䍡湣敬⁢畴瑯渠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹢畴瑯渮捡湣敬∠㴠≃慮捥氢㬊ਯ⨠呩瑬攠景爠瑨攠䑯湥⁢畴瑯渠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹢畴瑯渮摯湥∠㴠≄潮攢㬊ਯ⨠呩瑬攠景爠瑨攠卵扭楴⁢畴瑯渠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹢畴瑯渮獵扭楴∠㴠≓畢浩琢㬊ਯ⨠呩瑬攠景爠瑨攠卵扭楴瑩湧⁳瑡瑥映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮扵瑴潮⹳畢浩瑴楮朢‽•卵扭楴瑩湧꘢㬊ਯ⨠呩瑬攠景爠瑨攠扲潷獥爠捲慳栯晲敥穥⁣慴敧潲礠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹣慴敧潲礮扲潷獥爭捲慳栭潲ⵦ牥敺攢‽•噐丠捡畳敳⁢牯睳敲⁴漠捲慳栠潲⁦牥敺攢㬊ਯ⨠呩瑬攠景爠瑨攠❖偎⁦慩汳⁴漠捯湮散琧⁣慴敧潲礠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹣慴敧潲礮晡楬猭瑯ⵣ潮湥捴∠㴠≖偎⁦慩汳⁴漠捯湮散琢㬊ਯ⨠呩瑬攠景爠瑨攠❖偎⁦敡瑵牥⁲敱略獴✠捡瑥杯特映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮捡瑥杯特⹦敡瑵牥⵲敱略獴∠㴠≖偎⁦敡瑵牥⁲敱略獴∻ਊ⼪⁔楴汥⁦潲⁴桥⁣慴敧潲礠❖偎⁣慵獥猠楳獵敳⁷楴栠潴桥爠慰灳爠睥扳楴敳✠捡瑥杯特映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮捡瑥杯特⹩獳略猭睩瑨ⵡ灰猢‽•噐丠捡畳敳⁩獳略猠睩瑨瑨敲⁡灰猠潲⁷敢獩瑥猢㬊ਯ⨠呩瑬攠景爠瑨攠汯捡氠摥癩捥⁣潮湥捴楶楴礠捡瑥杯特映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮捡瑥杯特⹬潣慬ⵤ敶楣攭捯湮散瑩癩瑹∠㴠≖偎⁷潮❴整攠捯湮散琠瑯潣慬⁤敶楣攢㬊ਯ⨠呩瑬攠景爠瑨攠❯瑨敲⁖偎⁦敥摢慣欧⁣慴敧潲礠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹣慴敧潲礮潴桥爢‽•佴桥爠噐丠晥敤扡捫∻ਊ⼪⁔楴汥⁦潲⁴桥⁣慴敧潲礠獥汥捴楯渠獴慴攠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹣慴敧潲礮獥汥捴ⵣ慴敧潲礢‽•卥汥捴⁡⁣慴敧潲礢㬊ਯ⨠呩瑬攠景爠瑨攠❖偎⁩猠瑯漠獬潷✠捡瑥杯特映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮捡瑥杯特⹴潯⵳汯眢‽•噐丠捯湮散瑩潮⁩猠瑯漠獬潷∻ਊ⼪⁔楴汥⁦潲⁴桥‧畮慢汥⁴漠楮獴慬氧⁣慴敧潲礠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹣慴敧潲礮畮慢汥⵴漭楮獴慬氢‽•啮慢汥⁴漠楮獴慬氠噐丢㬊ਯ⨠呩瑬攠景爠瑨攠晥敤扡捫⁳敮琠癩敷⁤敳捲楰瑩潮映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮獥湤楮札捯湦楲浡瑩潮⹤敳捲楰瑩潮∠㴠≙潵爠晥敤扡捫⁷楬氠桥汰⁵猠業灲潶攠瑨敜湄畣歄畣歇漠噐丮∻ਊ⼪⁔楴汥⁦潲⁴桥⁦敥摢慣欠獥湤楮朠敲牯爠瑥硴映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮獥湤楮札捯湦楲浡瑩潮⹥牲潲∠㴠≗攠捯畬摮❴⁳敮搠祯畲⁦敥摢慣欠物杨琠湯眬⁰汥慳攠瑲礠慧慩渮∻ਊ⼪⁔楴汥⁦潲⁴桥⁦敥摢慣欠獥湴⁶楥眠瑩瑬攠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹳敮摩湧ⵣ潮晩牭慴楯渮瑩瑬攢‽•周慮欠祯甡∻ਊ⼪⁔潡獴敳獡来⁷桥渠瑨攠噐丠晥敤扡捫⁦潲洠楳⁳畢浩瑴敤⁳畣捥獳晵汬礠⨯ਢ癰渮晥敤扡捫ⵦ潲洮獵扭楴瑥搮浥獳慧攢‽•周慮欠奯甡⁆敥摢慣欠獵扭楴瑥搮∻ਊ⼪⁔數琠景爠瑨攠扯摹映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮瑥硴ⴱ∠㴠≐汥慳攠摥獣物扥⁷桡琧猠桡灰敮楮本⁷桡琠祯甠數灥捴敤⁴漠桡灰敮Ⱐ慮搠瑨攠獴数猠瑨慴敤⁴漠瑨攠楳獵攺∻ਊ⼪⁔數琠景爠瑨攠扯摹映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮瑥硴ⴲ∠㴠≉渠慤摩瑩潮⁴漠瑨攠摥瑡楬猠敮瑥牥搠楮瑯⁴桩猠景牭Ⱐ祯畲⁡灰⁩獳略⁲数潲琠睩汬⁣潮瑡楮㨢㬊ਯ⨠䉵汬整⁴數琠景爠瑨攠扯摹映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮瑥硴ⴳ∠㴠⋢肢⁗桥瑨敲⁳灥捩晩挠䑵捫䑵捫䝯⁦敡瑵牥猠慲攠敮慢汥搢㬊ਯ⨠䉵汬整⁴數琠景爠瑨攠扯摹映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮瑥硴ⴴ∠㴠⋢肢⁁杧牥条瑥⁄畣歄畣歇漠慰瀠摩慧湯獴楣猢㬊ਯ⨠呥硴⁦潲⁴桥⁢潤礠潦⁴桥⁖偎⁦敥摢慣欠景牭‪⼊≶灮⹦敥摢慣欭景牭⹴數琭㔢‽•䉹⁴慰灩湧⁜≓畢浩瑜∠䤠慧牥攠瑨慴⁄畣歄畣歇漠浡礠畳攠瑨攠楮景牭慴楯渠楮⁴桩猠牥灯牴⁦潲⁰畲灯獥猠潦⁩浰牯癩湧⁴桥⁡灰❳⁦敡瑵牥献∻ਊ⼪⁔楴汥⁦潲⁥慣栠獣牥敮映瑨攠噐丠晥敤扡捫⁦潲洠⨯ਢ癰渮晥敤扡捫ⵦ潲洮瑩瑬攢‽•䡥汰⁉浰牯癥⁴桥⁄畣歄畣歇漠噐丢㬊ਯ⨠噐丠獥瑴楮杳⁳捲敥渠捥汬⁴數琠景爠慤摩湧⁴桥⁖偎⁷楤来琠瑯⁴桥⁨潭攠獣牥敮‪⼊≶灮⹳整瑩湧献慤搮睩摧整∠㴠≁摤⁖偎⁗楤来琠瑯⁈潭攠卣牥敮∻ਊ⼪⁄楳捬慩浥爠景爠瑨攠䑎匠卥牶敲⁳散瑩潮渠瑨攠䑎匠卥牶敲⁳捲敥渠⨯ਢ癰渮獥瑴楮杳⹤湳⹳散瑩潮ⵤ楳捬慩浥爢‽•啳楮朠愠捵獴潭⁄乓⁳敲癥爠捡渠業灡捴⁢牯睳楮朠獰敥摳⁡湤⁥硰潳攠祯畲⁡捴楶楴礠瑯⁴桩牤⁰慲瑩敳⁩映瑨攠獥牶敲⁩獮❴⁳散畲攠潲⁲敬楡扬攮∻ਊ⼪⁈敡摥爠瑥硴⁦潲⁴桥⁄乓⁳散瑩潮渠瑨攠噐丠卥瑴楮杳⁳捲敥渠⨯ਢ癰渮獥瑴楮杳⹤湳⹳散瑩潮⵨敡摥爢‽•䑎匢㬊ਯ⨠呩瑬攠景爠瑨攠䅰灬礠扵瑴潮渠瑨攠䑎匠卥牶敲⁳整瑩湧⁳捲敥渠⨯ਢ癰渮獥瑴楮杳⹤湳⹳敲癥爮慰灬礮扵瑴潮⹴楴汥∠㴠≁灰汹∻ਊ⼪⁄敦慵汴⁶慬略⁦潲⁴桥⁄乓⁓敲癥爠牯眠潮⁴桥⁖偎⁓整瑩湧猠獣牥敮‪⼊≶灮⹳整瑩湧献摮献獥牶敲⹤敦慵汴⹶慬略∠㴠≄畣歄畣歇漢㬊ਯ⨠呩瑬攠景爠瑨攠䥐瘴⁁摤牥獳⁳整瑩湧‪⼊≶灮⹳整瑩湧献摮献獥牶敲⹩灶㐮瑩瑬攢‽•䥐瘴⁁摤牥獳∻ਊ⼪⁃畳瑯洠潰瑩潮⁦潲⁴桥⁄乓⁓敲癥爠獥瑴楮朠⨯ਢ癰渮獥瑴楮杳⹤湳⹳敲癥爮潰瑩潮⹣畳瑯洢‽•䍵獴潭∻ਊ⼪⁒散潭浥湤敤灴楯渠景爠瑨攠䑎匠卥牶敲⁳整瑩湧‪⼊≶灮⹳整瑩湧献摮献獥牶敲⹯灴楯渮摥晡畬琢‽•䑵捫䑵捫䝯
剥捯浭敮摥搩∻ਊ⼪⁔楴汥⁦潲⁴桥⁄乓⁓敲癥爠獥瑴楮朠獣牥敮‪⼊≶灮⹳整瑩湧献摮献獥牶敲⹳捲敥渮瑩瑬攢‽•䑎匠卥牶敲∻ਊ⼪⁔楴汥⁦潲⁴桥⁄乓⁓敲癥爠牯眠潮⁴桥⁖偎⁓整瑩湧猠獣牥敮‪⼊≶灮⹳整瑩湧献摮献獥牶敲⹴楴汥∠㴠≄乓⁓敲癥爢㬊ਯ⨠呩瑬攠景爠瑨攠扵瑴潮⁴漠敮慢汥⁰畳栠湯瑩晩捡瑩潮猠楮⁳祳瑥洠獥瑴楮杳‪⼊≷慩瑬楳琮慬汯眭湯瑩晩捡瑩潮猢‽•䅬汯眠乯瑩晩捡瑩潮猢㬊ਯ⨠䉯摹⁴數琠景爠瑨攠睡楴汩獴潴楦楣慴楯渠⨯ਢ睡楴汩獴⹡癡楬慢汥⹮潴楦楣慴楯渮扯摹∠㴠≏灥渠祯畲⁩湶楴攢㬊ਯ⨠呩瑬攠景爠瑨攠捯灹⁡捴楯渠⨯ਢ睡楴汩獴⹣潰礢‽•䍯灹∻ਊ⼪⁌慢敬⁴數琠景爠瑨攠楮癩瑥⁣潤攠⨯ਢ睡楴汩獴⹩湶楴攭捯摥∠㴠≉湶楴攠䍯摥∻ਊ⼪⁓瑥瀠瑩瑬攠潮⁴桥⁩湶楴攠獣牥敮‪⼊≷慩瑬楳琮楮癩瑥⵳捲敥渮獴数⹴楴汥∠㴠≓瑥瀠╤∻ਊ⼪⁔楴汥⁦潲⁴桥⁩湶楴攠捯摥⁳捲敥渠⨯ਢ睡楴汩獴⹩湶楴攭獣牥敮⹹潵牥⵩湶楴敤∠㴠≙潵饲攠䥮癩瑥搡∻ਊ⼪⁔楴汥⁦潲⁴桥⁊潩渠坡楴汩獴⁳捲敥渠⨯ਢ睡楴汩獴⹪潩渭睡楴汩獴⵳捲敥渮橯楮∠㴠≊潩渠瑨攠偲楶慴攠坡楴汩獴∻ਊ⼪⁔敭灯牡特⁳瑡瑵猠瑥硴⁦潲⁴桥⁊潩渠坡楴汩獴⁳捲敥渠⨯ਢ睡楴汩獴⹪潩渭睡楴汩獴⵳捲敥渮橯楮楮朢‽•䩯楮楮朠坡楴汩獴⸮⸢㬊ਯ⨠呩瑬攠景爠瑨攠卨慲攠䱩湫⁢畴瑯渠⨯ਢ睡楴汩獴⹪潩渭睡楴汩獴⵳捲敥渮獨慲攭汩湫∠㴠≓桡牥⁌楮欢㬊ਯ⨠乯瑩晩捡瑩潮⁴數琠景爠瑨攠睡楴汩獴‪⼊≷慩瑬楳琮橯楮敤⹮漭湯瑩晩捡瑩潮⹧整⵮潴楦楣慴楯渢‽•乯瑩晹⁍攢㬊ਯ⨠呩瑬攠景爠瑨攠慬敲琠瑯⁣潮晩牭⁥湡扬楮朠湯瑩晩捡瑩潮猠⨯ਢ睡楴汩獴⹪潩湥搮湯⵮潴楦楣慴楯渮来琭湯瑩晩捡瑩潮ⵣ潮晩牭慴楯渭瑩瑬攢‽•䝥琠愠湯瑩晩捡瑩潮⁷桥渠楴饳⁹潵爠瑵牮㼢㬊ਯ⨠䍡湣敬⁢畴瑯渠楮⁴桥⁡汥牴⁴漠捯湦楲洠敮慢汩湧潴楦楣慴楯湳‪⼊≷慩瑬楳琮橯楮敤⹮漭湯瑩晩捡瑩潮⹮漭瑨慮歳∠㴠≎漠周慮歳∻ਊ⼪⁔數琠畳敤⁦潲⁴桥⁎潴楦楣慴楯湳⁄楳慢汥搠獴慴攠⨯ਢ睡楴汩獴⹮潴楦楣慴楯渮摩獡扬敤∠㴠≗攠捡渠湯瑩晹⁹潵⁷桥渠楴饳⁹潵爠瑵牮Ⱐ扵琠湯瑩晩捡瑩潮猠慲攠捵牲敮瑬礠摩獡扬敤⁦潲⁄畣歄畣歇漮∻ਊ⼪⁐物癡捹⁤楳捬慩浥爠景爠瑨攠坡楴汩獴⁦敡瑵牥‪⼊≷慩瑬楳琮灲楶慣礭摩獣污業敲∠㴠≙潵⁷潮饴敥搠瑯⁳桡牥⁡湹⁰敲獯湡氠楮景牭慴楯渠瑯潩渠瑨攠睡楴汩獴⸠奯痢肙汬⁳散畲攠祯畲⁰污捥⁩渠汩湥⁷楴栠愠瑩浥獴慭瀠瑨慴⁥硩獴猠獯汥汹渠祯畲⁤敶楣攠獯⁷攠捡渠湯瑩晹⁹潵⁷桥渠楴饳⁹潵爠瑵牮⸢㬊ਯ⨠呩瑬攠景爠瑨攠煵敵攠獣牥敮‪⼊≷慩瑬楳琮煵敵攭獣牥敮⹯渭瑨攭汩獴∠㴠≙潵饲攠潮⁴桥楳琡∻ਊ⼪⁔楴汥⁦潲⁴桥⁳整瑩湧猠獵扴楴汥‪⼊≷慩瑬楳琮獥瑴楮杳⹤潷湬潡搭慶慩污扬攢‽•䑯睮汯慤⁡癡楬慢汥∻ਊ⼪⁔楴汥⁦潲⁴桥⁳桡牥⁳桥整⁥湴特‪⼊≷慩瑬楳琮獨慲攭獨敥琮瑩瑬攢‽•奯痢肙牥⁉湶楴敤™㬊ਯ⨠䍯湦楲浡瑩潮敳獡来‪⼊≷敢⹵牬⹲敭潶攮晡癯物瑥⹤潮攢‽•䙡癯物瑥⁲敭潶敤∻ਊ⼪⁃潮晩牭慴楯渠浥獳慧攠⨯ਢ睥戮畲氮獡癥⹢潯歭慲欮摯湥∠㴠≂潯歭慲欠慤摥搢㬊ਯ⨠䙬潡瑩湧⁉湦漠浥獳慧攠⨯ਢ睥戮畲氮獡癥⹢潯歭慲欮數楳瑳∠㴠≂潯歭慲欠慬牥慤礠獡癥搢㬊ਯ⨠䙬潡瑩湧敳獡来⁩湤楣慴楮朠晡楬畲攠⨯ਢ睥戮畲氮獡癥⹢潯歭慲欮湯湥∠㴠≎漠睥扰慧攠瑯⁢潯歭慲欢㬊ਯ⨠䍯湦楲浡瑩潮敳獡来‪⼊≷敢⹵牬⹳慶攮晡癯物瑥⹤潮攢‽•䙡癯物瑥⁡摤敤∻ਊ⼪⁃慮捥氠扵瑴潮⁦潲⁊慶慓捲楰琠慬敲瑳‪⼊≷敢䩓䅬敲琮捡湣敬⹢畴瑯渢‽•䍡湣敬∻ਊ⼪⁏䬠扵瑴潮⁦潲⁊慶慓捲楰琠慬敲瑳‪⼊≷敢䩓䅬敲琮佋⹢畴瑯渢‽•佋∻ਊ⼪⁁汥牴⁴楴汥⁥硰污楮楮朠瑨攠浥獳慧攠楳⁳桯睮⁢礠愠睥扳楴攠⨯ਢ睥扊十汥牴⹷敢獩瑥⵭敳獡来⹦潲浡琢‽•䄠浥獳慧攠晲潭‥䀺∻ਊ⼪⁔楴汥⁦潲⁴桥⁗楮摯睳⁷慩瑬楳琠扵瑴潮⁲敤楲散瑩湧⁴漠䵡挠睡楴汩獴‪⼊≷楮摯睳⵷慩瑬楳琮橯楮⵷慩瑬楳琭獣牥敮⹭慣⵷慩瑬楳琢‽•䱯潫楮朠景爠瑨攠䵡挠癥牳楯渿∻ਊ⼪⁔楴汥⁦潲⁴桥⁳整瑩湧猠獵扴楴汥‪⼊≷楮摯睳⵷慩瑬楳琮獥瑴楮杳⹢牯睳攭灲楶慴敬礢‽•䉲潷獥⁰物癡瑥汹⁷楴栠潵爠慰瀠景爠坩湤潷猢㬊ਯ⨠䵥獳慧攠畳敤⁷桥渠獨慲楮朠瑯⁩䵥獳慧攠⨯ਢ睩湤潷猭睡楴汩獴⹳桡牥⵳桥整⹭敳獡来∠㴠≒敡摹⁴漠獴慲琠扲潷獩湧⁰物癡瑥汹渠坩湤潷猿ਊ噩獩琠瑨楳⁕剌渠祯畲⁃潭灵瑥爠瑯⁤潷湬潡携੨瑴灳㨯⽤畣此畣歧漮捯洯睩湤潷猢㬊ਯ⨠卵浭慲礠瑥硴⁦潲⁴桥⁗楮摯睳⁢牯睳敲⁷慩瑬楳琠⨯ਢ睩湤潷猭睡楴汩獴⹳畭浡特∠㴠≄畣歄畣歇漠景爠坩湤潷猠桡猠睨慴⁹潵敥搠瑯⁢牯睳攠睩瑨潲攠灲楶慣礠鐠灲楶慴攠獥慲捨Ⱐ瑲慣步爠扬潣歩湧Ⱐ景牣敤⁥湣特灴楯測⁡湤⁣潯歩攠灯瀭異⁢汯捫楮本⁰汵猠浯牥⁢敳琭楮ⵣ污獳⁰牯瑥捴楯湳渠瑨攠睡礮∻ਊ⼪⁔楴汥⁦潲⁴桥⁗楮摯睳⁗慩瑬楳琠晥慴畲攠⨯ਢ睩湤潷猭睡楴汩獴⹴楴汥∠㴠≄畣歄畣歇漠䅰瀠景爠坩湤潷猢㬊ਯ⨠呩瑬攠景爠瑨攠坩湤潷猠扲潷獥爠摯睮汯慤楮欠灡来‪⼊≷楮摯睳⵷慩瑬楳琮睡楴汩獴ⵤ潷湬潡搭獣牥敮⹴特ⵤ畣此畣歧漭景爭睩湤潷猢‽•䝥琠䑵捫䑵捫䝯⁦潲⁗楮摯睳™㬊 \ No newline at end of file +/* Buton label for Edit action */ +"action.generic.edit" = "Edit"; + +/* Button label for a generic show action */ +"action.generic.show" = "Show"; + +/* Button label for Undo action */ +"action.generic.undo" = "Undo"; + +/* Button label for managing favorites */ +"action.manage.favorites" = "Manage"; + +/* Button label for OK action */ +"action.ok" = "OK"; + +/* Add action - button shown in alert */ +"action.title.add" = "Add"; + +/* Autofill Logins menu item opening the login list */ +"action.title.autofill.logins" = "Passwords"; + +/* Confirmation of Add to Bookmarks action in Add All Open Tabs to Bookmarks alert */ +"action.title.bookmark" = "Bookmark"; + +/* Button: Open bookmarks list */ +"action.title.bookmarks" = "Bookmarks"; + +/* Cancel action - button shown in alert */ +"action.title.cancel" = "Cancel"; + +/* Copy action */ +"action.title.copy" = "Copy"; + +/* Floating message indicating URL has been copied */ +"action.title.copy.message" = "URL copied"; + +/* Delete action - button shown in alert */ +"action.title.delete" = "Delete"; + +/* Disable protection action */ +"action.title.disable.protection" = "Disable Privacy Protection"; + +/* Downloads menu item opening the downlods list */ +"action.title.downloads" = "Downloads"; + +/* Edit Bookmark action */ +"action.title.edit.bookmark" = "Edit Bookmark"; + +/* Enable protection action */ +"action.title.enable.protection" = "Enable Privacy Protection"; + +/* No comment provided by engineer. */ +"action.title.forgetAll" = "Close Tabs and Clear Data"; + +/* Confirmation message */ +"action.title.forgetAllDone" = "Tabs and data cleared"; + +/* Open in New Background Tab action */ +"action.title.newBackgroundTabForUrl" = "Open in Background"; + +/* Create New Tab action */ +"action.title.newTabAction" = "New"; + +/* Open in New Tab action */ +"action.title.newTabForUrl" = "Open in New Tab"; + +/* Open action */ +"action.title.open" = "Open"; + +/* Paste and Go action */ +"action.title.pasteAndGo" = "Paste & Go"; + +/* Print action */ +"action.title.print" = "Print"; + +/* Refresh action - button shown in alert */ +"action.title.refresh" = "Refresh"; + +/* Remove Favorite action */ +"action.title.remove.favorite" = "Remove Favorite"; + +/* Report broken site action */ +"action.title.reportBrokenSite" = "Report Broken Site"; + +/* Action to reload current page in desktop mode */ +"action.title.request.desktop.site" = "Desktop Site"; + +/* Action to reload current page in mobile mode */ +"action.title.request.mobile.site" = "Mobile Site"; + +/* Save action - button shown in alert */ +"action.title.save" = "Save"; + +/* Add to Bookmarks action */ +"action.title.save.bookmark" = "Add Bookmark"; + +/* Add to Favorites action */ +"action.title.save.favorite" = "Add Favorite"; + +/* Settings action */ +"action.title.settings" = "Settings"; + +/* Share action */ +"action.title.share" = "Share"; + +/* Settings label for bottom position for the address bar */ +"address.bar.bottom" = "Bottom"; + +/* Settings label for top position for the address bar */ +"address.bar.top" = "Top"; + +/* No comment provided by engineer. */ +"addWidget.button" = "Add Widget"; + +/* No comment provided by engineer. */ +"addWidget.description" = "Get quick access to private search and the sites you love."; + +/* No comment provided by engineer. */ +"addWidget.settings.firstParagraph" = "Long-press on the Home Screen to enter jiggle mode."; + +/* Replacement string is a plus button icon. */ +"addWidget.settings.secondParagraph.%@" = "Tap the plus %@ button."; + +/* No comment provided by engineer. */ +"addWidget.settings.title" = "Find and select DuckDuckGo. Then choose a widget."; + +/* No comment provided by engineer. */ +"addWidget.title" = "One tap to your favorite sites."; + +/* No comment provided by engineer. */ +"alert.message.bookmarkAll" = "Existing bookmarks will not be duplicated."; + +/* Description for alert shown when sync error occurs because of bad bookmarks data */ +"alert.sync-bookmarks-bad-data-error-description" = "Some bookmarks are formatted incorrectly or too long and were not synced."; + +/* Description for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-description" = "You've reached the maximum number of bookmarks. Please delete some bookmarks to resume sync."; + +/* Title for alert shown when sync bookmarks paused for too many items */ +"alert.sync-bookmarks-paused-title" = "Bookmark Sync is Paused"; + +/* Description for alert shown when sync error occurs because of bad credentials data */ +"alert.sync-credentials-bad-data-error-description" = "Some passwords are formatted incorrectly or too long and were not synced."; + +/* Description for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-description" = "You've reached the maximum number of passwords. Please delete some passwords to resume sync."; + +/* Title for alert shown when sync credentials paused for too many items */ +"alert.sync-credentials-paused-title" = "Password Sync is Paused"; + +/* Title for sync error alert */ +"alert.sync-error" = "Sync & Backup Error"; + +/* Sync error alert action button title, takes the user to the sync settings page. */ +"alert.sync-error-action" = "Sync Settings"; + +/* Description for alert shown when user logged off from sync */ +"alert.sync-invalid-login-error-description" = "Sync has been paused. If you want to continue syncing this device, reconnect using another device or your recovery code."; + +/* Learn more button in alert */ +"alert.sync-paused-alert-learn-more-button" = "Learn More"; + +/* Confirmation button in alert */ +"alert.sync-paused-alert-ok-button" = "OK"; + +/* Title for alert shown when sync paused for an error */ +"alert.sync-paused-title" = "Sync is Paused"; + +/* Description for alert shown when sync error occurs because of too many requests */ +"alert.sync-too-many-requests-error-description" = "Sync & Backup is temporarily unavailable."; + +/* Title of the warning message that tells the user that there was an error with the sync feature. */ +"alert.sync.warning.sync-error" = "Sync Error"; + +/* Title of the warning message */ +"alert.sync.warning.sync-paused" = "Sync & Backup is Paused"; + +/* Question from confirmation dialog */ +"alert.title.bookmarkAll" = "Bookmark All Tabs?"; + +/* Disable protection alert */ +"alert.title.disable.protection" = "Add to Unprotected Sites"; + +/* Disable potection alert placeholder - leave as it is */ +"alert.title.disable.protection.placeholder" = "www.example.com"; + +/* Save Bookmark action */ +"alert.title.save.bookmark" = "Save Bookmark"; + +/* Save Favorite action */ +"alert.title.save.favorite" = "Save Favorite"; + +/* Description for unable to create recovery pdf error */ +"alert.unable-to-create-recovery-pdf-description" = "Unable to create the recovery PDF."; + +/* Description for unable to delete data error */ +"alert.unable-to-delete-data-description" = "Unable to delete data on the server."; + +/* Description for unable to merge two accounts error */ +"alert.unable-to-merge-two-accounts-description" = "To pair these devices, turn off Sync & Backup on one device then tap \"Sync With Another Device\" on the other device."; + +/* Description for unable to remove device error */ +"alert.unable-to-remove-device-description" = "Unable to remove this device from Sync & Backup."; + +/* Description for unable to sync to server error */ +"alert.unable-to-sync-to-server-description" = "Unable to connect to the server."; + +/* Description for unable to sync with another device error */ +"alert.unable-to-sync-with-other-device-description" = "Unable to Sync with another device."; + +/* Description for unable to turn sync off error */ +"alert.unable-to-turn-sync-off-description" = "Unable to turn Sync & Backup off."; + +/* Description for unable to update device name error */ +"alert.unable-to-update-device-name-description" = "Unable to update the device name."; + +/* Shown on authentication screen */ +"app.authentication.unlock" = "Unlock DuckDuckGo."; + +/* Authentication Alert Sign In Button */ +"auth.alert.login.button" = "Sign In"; + +/* Authentication Alert - populated with a domain name */ +"auth.alert.message.encrypted" = "Sign in to %@. Your login information will be sent securely."; + +/* Authentication Alert - populated with a domain name */ +"auth.alert.message.plain" = "Log in to %@. Your password will be sent insecurely because the connection is unencrypted."; + +/* Authentication Password field placeholder */ +"auth.alert.password.placeholder" = "Password"; + +/* Authentication Alert Title */ +"auth.alert.title" = "Authentication Required"; + +/* Authentication User name field placeholder */ +"auth.alert.username.placeholder" = "Username"; + +/* No comment provided by engineer. */ +"autoclear.off" = "Off"; + +/* No comment provided by engineer. */ +"autoclear.on" = "On"; + +/* Subtitle for search history items */ +"autocomplete.history.search.duckduckgo" = "Search DuckDuckGo"; + +/* The message text shown in suggestions */ +"autocomplete.history.warning.message" = "Search suggestions now include your recently visited sites. Turn off in Settings, or clear anytime with the 🔥 Fire Button."; + +/* Title for message show in suggestions */ +"autocomplete.history.warning.title" = "Same privacy.\nBetter search suggestions!"; + +/* Autoconsent for Cookie Management Setting state */ +"autoconsent.disabled" = "Disabled"; + +/* Autoconsent for Cookie Management Setting state */ +"autoconsent.enabled" = "Enabled"; + +/* No comment provided by engineer. */ +"autoconsent.info.header" = "When DuckDuckGo detects cookie consent pop-ups on sites you visit, we can try to automatically set your cookie preferences to minimize cookies and maximize privacy, then close the pop-ups. Some sites don't provide an option to manage cookie preferences, so we can only hide pop-ups like these."; + +/* Do not translate - stringsdict entry */ +"autofill.delete.all.passwords.completion" = "autofill.delete.all.passwords.completion"; + +/* Do not translate - stringsdict entry */ +"autofill.delete.all.passwords.confirmation.body" = "autofill.delete.all.passwords.confirmation.body"; + +/* Do not translate - stringsdict entry */ +"autofill.delete.all.passwords.confirmation.title" = "autofill.delete.all.passwords.confirmation.title"; + +/* Do not translate - stringsdict entry */ +"autofill.delete.all.passwords.sync.confirmation.body" = "autofill.delete.all.passwords.sync.confirmation.body"; + +/* Open Settings action for disabling autofill in Settings */ +"autofill.disable.prompt.action.open-settings" = "Open Settings"; + +/* Message for informing user that they can disable autofill in Settings */ +"autofill.disable.prompt.message" = "You can turn off password saving anytime."; + +/* Text link to email protection website */ +"autofill.enable.email.protection" = "Enable Email Protection"; + +/* Accessibility title for a Hide Password button replacing displayed password with ***** */ +"autofill.hide-password" = "Hide Password"; + +/* Button label to get link to download the desktop browser */ +"autofill.import.passwords.get-browser-button" = "Get Desktop Browser"; + +/* Step 1 for instructions to import passwords */ +"autofill.import.passwords.instructions.step1" = "Open DuckDuckGo on Mac or Windows"; + +/* Step 2 for instructions to import passwords. This reads as 'Go to Settings > Passwords' */ +"autofill.import.passwords.instructions.step2" = "Go to %1$@ > %2$@"; + +/* second parameter for autofill.import.passwords.instructions.step2 */ +"autofill.import.passwords.instructions.step2.passwords" = "Passwords"; + +/* first parameter for autofill.import.passwords.instructions.step2 */ +"autofill.import.passwords.instructions.step2.settings" = "Settings"; + +/* Step 3 for instructions to import passwords. This reads as 'Select Import Passwords and follow the steps' */ +"autofill.import.passwords.instructions.step3" = "Select %@ and follow the steps to import"; + +/* Parameter for autofill.import.passwords.instructions.step3 */ +"autofill.import.passwords.instructions.step3.import" = "Import Passwords..."; + +/* Step 4 for instructions to import passwords: Once imported on your computer you can set up sync on this iPhone|iPad|device */ +"autofill.import.passwords.instructions.step4" = "Once imported on your computer you can set up sync on this %@"; + +/* Title for section with instructions to import passwords */ +"autofill.import.passwords.instructions.title" = "Import from the desktop browser:"; + +/* Subtitle for screen to import passwords */ +"autofill.import.passwords.subtitle" = "Import passwords in the desktop version of the DuckDuckGo browser, then sync across devices."; + +/* Button label to sync passwords with desktop browser */ +"autofill.import.passwords.sync-button" = "Sync With Desktop"; + +/* Title for screen to import passwords */ +"autofill.import.passwords.title" = "How To Import Passwords"; + +/* Disable action for alert when asking the user if they want to keep using autofill */ +"autofill.keep-enabled.alert.disable" = "Disable"; + +/* Button displayed after saving/updating an autofill login that takes the user to the saved login */ +"autofill.login-save-action-button.toast" = "View"; + +/* Message displayed after saving an autofill login */ +"autofill.login-saved.toast" = "Password saved"; + +/* Message displayed after updating an autofill login */ +"autofill.login-updated.toast" = "Password updated"; + +/* Menu item text for copying autofill login details */ +"autofill.logins.copy-prompt" = "Copy %@"; + +/* Title for toast when copying address */ +"autofill.logins.copy-toast.address-copied" = "Address copied"; + +/* Title for toast when copying notes */ +"autofill.logins.copy-toast.notes-copied" = "Notes copied"; + +/* Title for toast when copying password */ +"autofill.logins.copy-toast.password-copied" = "Password copied"; + +/* Title for toast when copying username */ +"autofill.logins.copy-toast.username-copied" = "Username copied"; + +/* Title of button in prompt requiring authentication before all passwords are deleted */ +"autofill.logins.delete.all.authentication.prompt.button" = "Authenticate Now"; + +/* Title of prompt requiring authentication before all passwords are deleted */ +"autofill.logins.delete.all.authentication.prompt.title" = "Authenticate To Delete All Passwords"; + +/* Reason for authentication when deleting all logins */ +"autofill.logins.delete.all.authentication.reason" = "Authenticate to confirm you want to delete all passwords"; + +/* Address label for login details on autofill */ +"autofill.logins.details.address" = "Website URL"; + +/* Title for autofill login details */ +"autofill.logins.details.default-title" = "Password"; + +/* Delete button when deleting an autofill login */ +"autofill.logins.details.delete" = "Delete Password"; + +/* Autofill alert button confirming delete autofill login */ +"autofill.logins.details.delete-confirmation.button" = "Delete Password"; + +/* Title when editing autofill login details */ +"autofill.logins.details.edit-title" = "Edit Password"; + +/* Placeholder for password field on autofill login details */ +"autofill.logins.details.edit.password-placeholder" = "Password"; + +/* Placeholder for title field on autofill login details */ +"autofill.logins.details.edit.title-placeholder" = "Title"; + +/* Placeholder for url field on autofill login details */ +"autofill.logins.details.edit.url-placeholder" = "example.com"; + +/* Placeholder for userbane field on autofill login details */ +"autofill.logins.details.edit.username-placeholder" = "username@example.com"; + +/* Message displaying when the login was last updated */ +"autofill.logins.details.last-updated" = "Last updated %@"; + +/* Login name label for login details on autofill */ +"autofill.logins.details.login-name" = "Title"; + +/* Title when adding new autofill login */ +"autofill.logins.details.new-title" = "Add password"; + +/* Notes label for login details on autofill */ +"autofill.logins.details.notes" = "Notes"; + +/* Menu item title for option to open website from selected url */ +"autofill.logins.details.open-website-prompt.title" = "Open Website"; + +/* Password label for login details on autofill */ +"autofill.logins.details.password" = "Password"; + +/* Action text for alert when attempting to save a duplicate login */ +"autofill.logins.details.save-duplicate-alert.action" = "OK"; + +/* Message for alert when attempting to save a duplicate login */ +"autofill.logins.details.save-duplicate-alert.message" = "You already have a password saved for this username and website."; + +/* Title for alert when attempting to save a duplicate login */ +"autofill.logins.details.save-duplicate-alert.title" = "Duplicate Password"; + +/* Username label for login details on autofill */ +"autofill.logins.details.username" = "Username"; + +/* Title for button to Import Passwords when autofill has no items */ +"autofill.logins.empty-view.button.title" = "Import Passwords"; + +/* Subtitle for view displayed when no autofill passwords have been saved */ +"autofill.logins.empty-view.subtitle" = "Passwords from other browsers or apps can be imported using the desktop version of the DuckDuckGo browser."; + +/* Title for view displayed when autofill has no items */ +"autofill.logins.empty-view.title" = "No passwords saved yet"; + +/* Cancel button for auth when opening login list */ +"autofill.logins.list.auth.cancel" = "Cancel"; + +/* Reason for auth when opening login list */ +"autofill.logins.list.auth.reason" = "Unlock device to access passwords"; + +/* Title for close navigation button */ +"autofill.logins.list.close-title" = "Close"; + +/* Title for button to delete all saved autofill passwords */ +"autofill.logins.list.delete.all" = "Delete All"; + +/* Title for a toggle that enables autofill */ +"autofill.logins.list.enable" = "Save and autofill passwords"; + +/* Footer label displayed below table section with option to enable autofill */ +"autofill.logins.list.enable.footer" = "Passwords are stored securely on your device."; + +/* Toast message when a login item is deleted */ +"autofill.logins.list.login-deleted-message" = "Password for %@ deleted"; + +/* Toast message when a login item without a title is deleted */ +"autofill.logins.list.login-deleted-message-no-title" = "Password deleted"; + +/* Title for a button that allows a user to reset their list of never saved sites */ +"autofill.logins.list.never.saved" = "Reset Excluded Sites"; + +/* Cancel button for resetting list of never saved sites */ +"autofill.logins.list.never.saved.reset.action.cancel" = "Cancel"; + +/* Confirm button to reset list of never saved sites */ +"autofill.logins.list.never.saved.reset.action.confirm" = "Reset Excluded Sites"; + +/* Alert title */ +"autofill.logins.list.never.saved.reset.action.title" = "If you reset excluded sites, you will be prompted to save your password next time you sign in to any of these sites."; + +/* Placeholder for search field on autofill login listing */ +"autofill.logins.list.search-placeholder" = "Search passwords"; + +/* Section title for group of suggested saved logins */ +"autofill.logins.list.suggested" = "Suggested"; + +/* Title for screen listing autofill logins */ +"autofill.logins.list.title" = "Passwords"; + +/* Title for view displayed when autofill is locked on devices where a passcode has not been set */ +"autofill.logins.no-auth.subtitle" = "A passcode is required to protect your passwords."; + +/* Title for view displayed when autofill is locked on devices where a passcode has not been set */ +"autofill.logins.no-auth.title" = "Secure your device to save passwords"; + +/* Cancel button for auth during login prompt */ +"autofill.logins.prompt.auth.cancel" = "Cancel"; + +/* Reason for auth during login prompt */ +"autofill.logins.prompt.auth.reason" = "Unlock device to use saved password"; + +/* Title for section of autofill logins that are an exact match to the current website */ +"autofill.logins.prompt.exact.match.title" = "From this website"; + +/* Button title for autofill login prompt if more options are available */ +"autofill.logins.prompt.more-options" = "More Options"; + +/* Title for section of autofill logins that are an approximate match to the current website */ +"autofill.logins.prompt.partial.match.title" = "From %@"; + +/* Title of button for autofill login prompt to use a saved password for a website */ +"autofill.logins.prompt.password.button.title" = "Password for %@"; + +/* Title for autofill login prompt */ +"autofill.logins.prompt.title" = "Use a saved password?"; + +/* Subtitle displayed when there are no results on Autofill search, example : No Result (Title) for Duck (Subtitle) */ +"autofill.logins.search.no-results.subtitle" = "for '%@'"; + +/* Title displayed when there are no results on Autofill search */ +"autofill.logins.search.no-results.title" = "No Results"; + +/* Do not translate - stringsdict entry */ +"autofill.number.of.passwords" = "autofill.number.of.passwords"; + +/* Description of autofill onboarding prompt's secure storage feature + Description of autofill onboarding prompt's secure storage feature with a string describing the available biometry + passcode as a parameter */ +"autofill.onboarding.key-features.secure-storage.description" = "Passwords are encrypted, stored on device, and locked with %@."; + +/* Parameter for the description of autofill onboarding prompt's secure storage feature describing Face ID biometry + passcode */ +"autofill.onboarding.key-features.secure-storage.description.parameter.face-id" = "Face ID or passcode"; + +/* Parameter for the description of autofill onboarding prompt's secure storage feature describing passcode only if no biometry are available */ +"autofill.onboarding.key-features.secure-storage.description.parameter.passcode" = "passcode"; + +/* Parameter for the description of autofill onboarding prompt's secure storage feature describing Touch ID biometry + passcode */ +"autofill.onboarding.key-features.secure-storage.description.parameter.touch-id" = "Touch ID or passcode"; + +/* Title of autofill onboarding prompt's secure storage feature */ +"autofill.onboarding.key-features.secure-storage.title" = "Secure storage"; + +/* Description of autofill onboarding prompt's sign-in feature */ +"autofill.onboarding.key-features.sign-ins.description" = "No need to remember login info."; + +/* Title of autofill onboarding prompt's sign-in feature */ +"autofill.onboarding.key-features.sign-ins.title" = "Seamless sign-ins"; + +/* Description of autofill onboarding prompt's sync feature */ +"autofill.onboarding.key-features.sync.description" = "End-to-end encrypted and easy to set up when you’re ready."; + +/* Title of autofill onboarding prompt's sync feature */ +"autofill.onboarding.key-features.sync.title" = "Sync between devices"; + +/* Title of autofill onboarding prompt's features list */ +"autofill.onboarding.key-features.title" = "Key Features"; + +/* Subtitle for prompt to use suggested strong password for creating a login */ +"autofill.password-generation-prompt.subtitle" = "Passwords are stored securely on your device."; + +/* Title for prompt to use suggested strong password for creating a login */ +"autofill.password-generation-prompt.title" = "Use a strong password from DuckDuckGo?"; + +/* Button title choosing to use the suggested generated password for creating a login */ +"autofill.password-generation-prompt.use-generated-password.cta" = "Use Strong Password"; + +/* Button title choosing to use own password for creating a login */ +"autofill.password-generation-prompt.use-own-password.cta" = "Create My Own"; + +/* Text for the confirmation message displayed when a user tries activate a Private Email Address */ +"autofill.private.email.mesage.activate.confirm.content" = "Emails sent to %@ will again be forwarded to your inbox."; + +/* Title for the confirmation message displayed when a user tries activate a Private Email Address */ +"autofill.private.email.mesage.activate.confirm.title" = "Reactivate Private Duck Address?"; + +/* Mesasage displayed when a private email address is active */ +"autofill.private.email.mesage.active" = "Active"; + +/* Text for the confirmation message displayed when a user tries deactivate a Private Email Address */ +"autofill.private.email.mesage.deactivate.confirm.content" = "Emails sent to %@ will no longer be forwarded to your inbox."; + +/* Title for the confirmation message displayed when a user tries deactivate a Private Email Address */ +"autofill.private.email.mesage.deactivate.confirm.title" = "Deactivate Private Duck Address?"; + +/* Mesasage displayed when a user tries to manage a private email address but the service is not available, returns an error or network is down */ +"autofill.private.email.mesage.error" = "Management of this address is temporarily unavailable"; + +/* Mesasage displayed when a private email address is inactive */ +"autofill.private.email.mesage.inactive" = "Deactivated"; + +/* Button text for the alert dialog telling the user an updated username is no longer a private email address */ +"autofill.removed.duck.address.button" = "Got it"; + +/* Content for the alert dialog telling the user an updated username is no longer a private email address */ +"autofill.removed.duck.address.content" = "You can still manage this Duck Address from emails received from it in your personal inbox."; + +/* Title for the alert dialog telling the user an updated username is no longer a private email address */ +"autofill.removed.duck.address.title" = "Private Duck Address username was removed"; + +/* CTA displayed on modal asking if the user never wants to be prompted to save a login for this website agin */ +"autofill.save-login.never-prompt.CTA" = "Never Ask for This Site"; + +/* Message displayed on modal asking for the user to save the login for the first time */ +"autofill.save-login.new-user.message" = "DuckDuckGo Passwords & Autofill stores passwords securely on your device."; + +/* Title displayed on modal asking for the user to save the login for the first time */ +"autofill.save-login.new-user.title" = "Save this password?"; + +/* Title displayed on modal asking for the user to save the login */ +"autofill.save-login.title" = "Save password?"; + +/* Confirm CTA displayed on modal asking for the user to save the password */ +"autofill.save-password.save.CTA" = "Save Password"; + +/* Title for the button to report that autofill is not working on a site in autofill settings */ +"autofill.settings.report.not.working.button.title" = "Report a problem with autofill"; + +/* Button title for the confirmation prompt when reporting autofill is not working for a website */ +"autofill.settings.report.not.working.confirmation.button" = "Send Report"; + +/* Message for the confirmation prompt when reporting autofill is not working for a website */ +"autofill.settings.report.not.working.confirmation.message" = "Reports sent to DuckDuckGo are anonymous and do not include your username, password, or any other personally identifiable information.\n\nThe report only includes the website url and and the status of some autofill settings."; + +/* Title for the confirmation prompt when reporting autofill is not working for a website */ +"autofill.settings.report.not.working.confirmation.title" = "Report autofill not working on %@?"; + +/* Message shown to user when they submit a report that autofill is not working for a website */ +"autofill.settings.report.not.working.sent.confirmation" = "Thank you! Your report will help us make DuckDuckGo better for everyone."; + +/* Subtitle for the row to report that autofill is not working on a site in autofill settings */ +"autofill.settings.report.not.working.subtitle" = "Anonymously report autofill not working on this site. Passwords are never shared."; + +/* Title for the row to report that autofill is not working on a site in autofill settings */ +"autofill.settings.report.not.working.title" = "Autofill not working?"; + +/* Accessibility title for a Show Password button displaying actial password instead of ***** */ +"autofill.show-password" = "Show Password"; + +/* Message displayed to the user when they are logged out of Email protection. */ +"autofill.signin.to.manage" = "%@ to manage your Duck Addresses on this device."; + +/* Message displayed on modal asking for the user to update the password */ +"autofill.update-password.message" = "DuckDuckGo will update this stored password on your device."; + +/* Confirm CTA displayed on modal asking for the user to update the password */ +"autofill.update-password.save.CTA" = "Update Password"; + +/* Title displayed on modal asking for the user to update the password */ +"autofill.update-password.title" = "Update password for\n%@?"; + +/* Confirm CTA displayed on modal asking for the user to update the login */ +"autofill.update-username.save.CTA" = "Update Username"; + +/* Title displayed on modal asking for the user to update the username */ +"autofill.update-usernamr.title" = "Update username?"; + +/* Add bookmark screen title */ +"bookmark.addBookmark.title" = "Add Bookmark"; + +/* Add favorite screen title */ +"bookmark.addFavorite.title" = "Add Favorite"; + +/* Add folder screen title */ +"bookmark.addFolder.title" = "Add Folder"; + +/* Add bookmark folder button text */ +"bookmark.addFolderButton" = "Add Folder"; + +/* Placeholder in the add bookmark form */ +"bookmark.address.placeholder" = "www.example.com"; + +/* Delete bookmark alert message */ +"bookmark.delete.alert.message" = "This will delete your bookmark for \"%@\""; + +/* Delete bookmark alert title */ +"bookmark.delete.alert.title" = "Delete?"; + +/* The message shown after a bookmark has been deleted */ +"bookmark.deleted.toast" = "Bookmark deleted"; + +/* Delete bookmark folder alert delete button */ +"bookmark.deleteFolderAlert.deleteButton" = "Delete"; + +/* Do not translate - stringsdict entry */ +"bookmark.deleteFolderAlert.message" = "bookmark.deleteFolderAlert.message"; + +/* Delete bookmark folder alert title */ +"bookmark.deleteFolderAlert.title" = "Delete %@?"; + +/* Edit bookmark screen title */ +"bookmark.editBookmark.title" = "Edit Bookmark"; + +/* Edit favorite screen title */ +"bookmark.editFavorite.title" = "Edit Favorite"; + +/* Edit folder screen title */ +"bookmark.editFolder.title" = "Edit Folder"; + +/* Header for folder selection for bookmarks */ +"bookmark.folderSelect.title" = "Location"; + +/* More options button text */ +"bookmark.moreButton" = "More"; + +/* Placeholder in the add bookmark form */ +"bookmark.title.placeholder" = "Website title"; + +/* Top level bookmarks folder title */ +"bookmark.topLevelFolder.title" = "Bookmarks"; + +/* Info message after selecting Bookmark All button */ +"bookmarkAll.tabs.failed" = "Added new bookmarks for all tabs"; + +/* Confirmation message after selecting Bookmark All button */ +"bookmarkAll.tabs.saved" = "All tabs bookmarked"; + +/* No comment provided by engineer. */ +"bookmarks.button.hint" = "Bookmarks"; + +/* Failure message when bookmarks failed to export */ +"bookmarks.export.failed.message" = "We couldn’t export your bookmarks, please try again."; + +/* Confirmation message that bookmarks have been exported to the file system */ +"bookmarks.export.files.success.message" = "Your bookmarks have been exported."; + +/* Confirmation message that bookmarks have been shared successfully to another app */ +"bookmarks.export.share.success.message" = "Your bookmarks have been shared."; + +/* Title of option to export HTML */ +"bookmarks.exportAction.title" = "Export HTML File"; + +/* Failure message when bookmarks failed to import */ +"bookmarks.import.failed.message" = "Sorry, we aren’t able to import this file."; + +/* Confirmation message that bookmarks have been imported */ +"bookmarks.import.success.message" = "Your bookmarks have been imported."; + +/* Title of option to import HTML */ +"bookmarks.importAction.title" = "Import HTML File"; + +/* Import bookmark file button text */ +"bookmarks.importExport.footer.button.title" = "Import bookmark file from another browser"; + +/* Title of prompt for users where they can choose to import or export an HTML file containing webpage bookmarks */ +"bookmarks.importExport.title" = "Import an HTML file of bookmarks from another browser, or export your existing bookmarks."; + +/* Button to open report form */ +"broken.site.report.menu.title" = "Report Problem With This Site"; + +/* Acknowledge button */ +"broken.site.report.missing.description.alert.button" = "Got It"; + +/* It appears as an alert after user tries to send a report without submitting any details */ +"broken.site.report.missing.description.alert.description" = "Please describe the issue you experienced on this site so we can better understand how to fix it."; + +/* It appears as an alert after user tries to send a report without submitting any details */ +"broken.site.report.missing.description.alert.title" = "Description Required"; + +/* Message that appears after submitting report */ +"broken.site.report.success.toast" = "Your report helps make DuckDuckGo better for everyone!"; + +/* Button to answer question 'Did turning off protections resolve the issue on this site?' */ +"broken.site.report.toggle.alert.no.button" = "No"; + +/* An alert that appears after user turns off the privacy protection */ +"broken.site.report.toggle.alert.title" = "Did turning Privacy Protections off resolve the issue on this site?"; + +/* Button to answer question 'Did turning off protections resolve the issue on this site?' */ +"broken.site.report.toggle.alert.yes.button" = "Yes"; + +/* First parameter is a count of additional trackers, second and third are names of the tracker networks (strings) */ +"contextual.onboarding.browsing.multiple.trackers" = "contextual.onboarding.browsing.multiple.trackers"; + +/* Parameter is domain name (string) */ +"contextual.onboarding.browsing.one.tracker" = "*%1$@* was trying to track you here. I blocked them!\n\n☝️ Tap the shield for more info."; + +/* Button on the last screen of the onboarding, it will dismiss the onboarding screen. */ +"contextual.onboarding.final-screen.button" = "High five!"; + +/* Message of the last screen of the onboarding to the browser app. */ +"contextual.onboarding.final-screen.message" = "Remember: every time you browse with me a creepy ad loses its wings. 👌"; + +/* Title of the last screen of the onboarding to the browser app */ +"contextual.onboarding.final-screen.title" = "You’ve got this!"; + +/* After the user performs their first search using the browser, this dialog explains the advantages of using DuckDuckGo */ +"contextual.onboarding.first-search-done.message" = "That’s DuckDuckGo Search. Private. Fast. Fewer ads."; + +/* During onboarding steps this button is shown and takes either to the next steps or closes the onboarding. */ +"contextual.onboarding.got-it.button" = "Got it!"; + +/* Title of a popover on the new tab page browser that invites the user to try a visiting a website */ +"contextual.onboarding.ntp.try-a-site.title" = "Try visiting a site!"; + +/* Message of a popover on the browser that invites the user to try a search explaining that their searches are anonymous */ +"contextual.onboarding.try-a-search.message" = "Your DuckDuckGo searches are always anonymous."; + +/* Title of a popover on the browser that invites the user to try a search */ +"contextual.onboarding.try-a-search.title" = "Ready to get started?\nTry a search!"; + +/* Message of a popover on the browser that invites the user to try visiting a website to explain that we block trackers */ +"contextual.onboarding.try-a-site.message" = "I’ll block trackers so they can’t spy on you."; + +/* Title of a popover on the browser that invites the user to try a visiting a website */ +"contextual.onboarding.try-a-site.title" = "Next, try visiting a site!"; + +/* Message of a popover on the browser that invites the user to try visiting the browser Fire Button. Please leave the line break */ +"contextual.onboarding.try-fire-button.message" = "Instantly clear your browsing activity with the Fire Button.\n\nGive it a try! 🔥"; + +/* Browser Search query for how to say duck in english */ +"contextual.onboarding.try-search.option1-English" = "how to say “duck” in spanish"; + +/* Browser Search query for how to say duck in english */ +"contextual.onboarding.try-search.option1international" = "how to say “duck” in english"; + +/* Search query for the cast of Mighty Ducks */ +"contextual.onboarding.try-search.option2-english" = "mighty ducks cast"; + +/* Search query for the cast of Avatar */ +"contextual.onboarding.try-search.option2-international" = "cast of avatar"; + +/* Browser Search query for local weather */ +"contextual.onboarding.try-search.option3" = "local weather"; + +/* Browser Search query for chocolate chip cookie recipes */ +"contextual.onboarding.try-search.surprise-me-english" = "chocolate chip cookie recipes"; + +/* Browser Search query for dinner recipes */ +"contextual.onboarding.try-search.surprise-me-international" = "dinner recipes"; + +/* Title for a button that triggers an unknown search query for the user. */ +"contextual.onboarding.try-search.surprise-me-title" = "Surprise me!"; + +/* Crash Report always send button title */ +"crash.report.dialog.always.send" = "Always Send Crash Reports"; + +/* Crash Report hide details button title */ +"crash.report.dialog.hide.details" = "Hide"; + +/* Crash Report dialog message */ +"crash.report.dialog.message" = "Crash reports help DuckDuckGo diagnose issues and improve our products. They contain no personally identifiable information."; + +/* Crash Report never send button title */ +"crash.report.dialog.never.send" = "Never Send"; + +/* Crash Report show details button title */ +"crash.report.dialog.show.details" = "See what's sent"; + +/* Crash Report dialog title */ +"crash.report.dialog.title" = "Automatically send crash reports?"; + +/* Title for a section containing only items from past month */ +"date.range.past-month" = "Past month"; + +/* Title for a section containing only items from past week */ +"date.range.past-week" = "Past week"; + +/* Title for a section containing only items from today */ +"date.range.today" = "Today"; + +/* Title for a section containing only items from yesterday */ +"date.range.yesterday" = "Yesterday"; + +/* No comment provided by engineer. */ +"dax.hide.button" = "Hide Tips Forever"; + +/* No comment provided by engineer. */ +"dax.hide.cancel" = "Cancel"; + +/* Subtitle in Hide Dax dialog */ +"dax.hide.message" = "There are only a few, and we tried to make them informative."; + +/* Title in Hide Dax dialog */ +"dax.hide.title" = "Hide remaining tips?"; + +/* No comment provided by engineer. */ +"dax.onboarding.browsing.after.search" = "Your DuckDuckGo searches are anonymous. Always. 🙌"; + +/* No comment provided by engineer. */ +"dax.onboarding.browsing.after.search.cta" = "Phew!"; + +/* First parameter is a count of additional trackers, second and third are names of the tracker networks (strings) */ +"dax.onboarding.browsing.multiple.trackers" = "dax.onboarding.browsing.multiple.trackers"; + +/* No comment provided by engineer. */ +"dax.onboarding.browsing.multiple.trackers.cta" = "High Five!"; + +/* Parameter is domain name (string) */ +"dax.onboarding.browsing.one.tracker" = "*%1$@* was trying to track you here.\n\nI blocked them!\n\n☝️ You can check the address bar to see who is trying to track you when you visit a new site."; + +/* No comment provided by engineer. */ +"dax.onboarding.browsing.one.tracker.cta" = "High Five!"; + +/* First paramter is a string - network name, 2nd parameter is a string - domain name */ +"dax.onboarding.browsing.site.is.major.tracker" = "Heads up! I can’t stop %1$@ from seeing your activity on %2$@.\n\nBut browse with me, and I can reduce what %1$@ knows about you overall by blocking their trackers on lots of other sites."; + +/* No comment provided by engineer. */ +"dax.onboarding.browsing.site.is.major.tracker.cta" = "Got It"; + +/* Parameters are domain names (strings) */ +"dax.onboarding.browsing.site.owned.by.major.tracker" = "Heads up! Since %2$@ owns %1$@, I can’t stop them from seeing your activity here.\n\nBut browse with me, and I can reduce what %2$@ knows about you overall by blocking their trackers on lots of other sites."; + +/* Got It */ +"dax.onboarding.browsing.site.owned.by.major.tracker.cta" = "Got It"; + +/* No comment provided by engineer. */ +"dax.onboarding.browsing.without.trackers" = "As you tap and scroll, I’ll block pesky trackers.\n\nGo ahead - keep browsing!"; + +/* No comment provided by engineer. */ +"dax.onboarding.browsing.without.trackers.cta" = "Got It"; + +/* Encourage user to try clearing data with the fire button */ +"dax.onboarding.fire.button" = "Personal data can build up in your browser. Yuck. Use the Fire Button to burn it all away. Give it a try now! 👇"; + +/* Cancel action */ +"dax.onboarding.fire.button.cancelAction" = "Cancel"; + +/* Encourage user to try clearing data with the fire button */ +"dax.onboarding.fire.button.confirmAction" = "Close Tabs and Clear Data"; + +/* Encourage user to add favorite site using the browsing menu. */ +"dax.onboarding.home.add.favorite" = "Visit your favorite sites in a flash!\n\nGo to a site you love. Then tap the \"⋯\" icon and select *Add to Favorites*."; + +/* Accessible version of dax.onboarding.home.add.favorite */ +"dax.onboarding.home.add.favorite.accessible" = "Visit your favorite sites in a flash! Visit one of your favorite sites. Then tap the open menu button and select Add to Favorites."; + +/* No comment provided by engineer. */ +"dax.onboarding.home.initial" = "Next, try visiting one of your favorite sites!\n\nI’ll block trackers so they can’t spy on you. I’ll also upgrade the security of your connection if possible. 🔒"; + +/* ad = advertisment */ +"dax.onboarding.home.subsequent" = "You’ve got this!\n\nRemember: Every time you browse with me, a creepy ad loses its wings. 👍"; + +/* No comment provided by engineer. */ +"dax.onboarding.message" = "The Internet can be kinda creepy.\n\nNot to worry! Searching and browsing privately is easier than you think."; + +/* Default string used if users device is not iPhone or iPad */ +"device.type.default" = "device"; + +/* Device type is iPhone */ +"device.type.iphone" = "iPhone"; + +/* Device type is iPad */ +"device.type.pad" = "iPad"; + +/* GPC Setting state */ +"donotsell.disabled" = "Disabled"; + +/* No comment provided by engineer. */ +"donotsell.disclaimer.learnmore" = "Learn More"; + +/* GPC Setting state */ +"donotsell.enabled" = "Enabled"; + +/* No comment provided by engineer. */ +"donotsell.info.headertext" = "DuckDuckGo automatically blocks many trackers. With Global Privacy Control (GPC), you can also ask participating websites to restrict selling or sharing your personal data with other companies."; + +/* Alert action for starting a file dowload */ +"downloads.alert.action.save-to-downloads" = "Save to Downloads"; + +/* Cancel download action for downloads */ +"downloads.cancel-download.alert.cancel" = "Cancel"; + +/* Message for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.message" = "Are you sure you want to cancel this download?"; + +/* Confirm action for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.no" = "No"; + +/* Title for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.title" = "Cancel download?"; + +/* Confirm action for for alert when trying to cancel the file download */ +"downloads.cancel-download.alert.yes" = "Yes"; + +/* Button for deleting all items on downloads list */ +"downloads.downloads-list.delete-all" = "Delete All"; + +/* Empty downloads list placholder */ +"downloads.downloads-list.empty" = "No files downloaded yet"; + +/* Label displaying file download progress. Both parameters are formatted data size measurements e.g. 5MB. First parameter is data size currently downloaded. Second parameter is total expected data size of the file. */ +"downloads.downloads-list.row.downloading" = "Downloading - %1$@ of %2$@"; + +/* Label displaying file download progress. The parameter is formatted data size measurements currently downloaded e.g. 5MB. */ +"downloads.downloads-list.row.downloadingUnknownTotalSize" = "Downloading - %@"; + +/* Downloads list screen title */ +"downloads.downloads-list.title" = "Downloads"; + +/* Additional alert message shown when there are active downloads when using the fire button */ +"downloads.fire-button.alert.message" = "This will also cancel downloads in progress"; + +/* Message confirming that all files on the downloads list have been deleted */ +"downloads.message.all-files-deleted" = "All files deleted"; + +/* Message confirming that the download process has completed. Parameter is downloaded file's filename */ +"downloads.message.download-complete" = "Download complete for %@"; + +/* Message confirming the file was deleted. Parameter is file's filename */ +"downloads.message.download-deleted" = "Deleted %@"; + +/* Message informing that the download has failed due to connection issues */ +"downloads.message.download-failed" = "Failed to download. Check internet connection."; + +/* Message confirming that the download process has started. Parameter is downloaded file's filename */ +"downloads.message.download-started" = "Download started for %@"; + +/* Title for message explaining to the user that Duck Player is not available */ +"duck-player.contingency-title" = "Duck Player Unavailable"; + +/* Button for the message explaining to the user that Duck Player is not available so the user can learn more */ +"duck-player.video-contingency-cta" = "Learn More"; + +/* Message explaining to the user that Duck Player is not available */ +"duck-player.video-contingency-message" = "Duck Player's functionality has been affected by recent changes to YouTube. We’re working to fix these issues and appreciate your understanding."; + +/* Text displayed when DuckPlayer is always enabled */ +"duckPlayer.alwaysEnabled.label" = "Always"; + +/* Text displayed when DuckPlayer is in 'Ask' mode. */ +"duckPlayer.ask.label" = "Ask every time"; + +/* Text displayed when DuckPlayer is in off. */ +"duckPlayer.never.label" = "Never"; + +/* Body text for the modal feature explanation */ +"duckplayer.presentation.modal.body" = "Duck Player lets you watch YouTube without targeted ads in a theater-like experience in DuckDuckGo and what you watch won’t influence your recommendations."; + +/* Button that will dismiss the modal */ +"duckplayer.presentation.modal.dismiss-button" = "Got it!"; + +/* Two line title (separated by \n) for the feature explanation */ +"duckplayer.presentation.modal.title" = "Drowning in ads on YouTube? Try Duck Player!"; + +/* Footer label in the settings screen for Duck Player */ +"duckplayer.settings.footer" = "DuckDuckGo provides all the privacy essentials you need to protect yourself as you browse the web."; + +/* Text explaining what Duck Player is in the settings screen. */ +"duckplayer.settings.info-text" = "Duck Player provides a clean viewing experience without personalized ads and prevents viewing activity from influencing your YouTube recommendations."; + +/* Button that takes the user to learn more about Duck Player. */ +"duckplayer.settings.learn-more" = "Learn More"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.open-videos-in" = "Open Videos in Duck Player"; + +/* Settings screen cell text for DuckPlayer settings */ +"duckplayer.settings.title" = "Duck Player"; + +/* Email protection service offered by DuckDuckGo */ +"email-protection" = "Email Protection"; + +/* Cancel option for the email alias alert */ +"email.aliasAlert.decline" = "Cancel"; + +/* Option for generating a private email address */ +"email.aliasAlert.generatePrivateAddress" = "Generate Private Duck Address"; + +/* Option for generating a private email address */ +"email.aliasAlert.prompt.generatePrivateAddress" = "Generate Private Duck Address"; + +/* Subtitle for generating a private email address */ +"email.aliasAlert.prompt.generatePrivateAddress.subtitle" = "Block email trackers & hide address"; + +/* Title for the email alias selection prompt */ +"email.aliasAlert.prompt.title" = "Select email address"; + +/* Subtitle for choosing primary user email address */ +"email.aliasAlert.prompt.useUserAddress.subtitle" = "Block email trackers"; + +/* Title for the email alias selection alert */ +"email.aliasAlert.title" = "Block email trackers with a Duck Address"; + +/* Parameter is an email address (string) */ +"email.aliasAlert.useUserAddress" = "Use %@"; + +/* Title for the email copy browsing menu alert */ +"email.browsingMenu.alert" = "New address copied to your clipboard"; + +/* Email option title in the browsing menu */ +"email.browsingMenu.useNewDuckAddress" = "Generate Private Duck Address"; + +/* Signed in state for the email feature */ +"email.settings.enabled" = "Enabled"; + +/* Footer text for the email feature */ +"email.settings.footer" = "Removing Email Protection from this device removes the option to fill in your Personal Duck Address or a newly generated Private Duck Address into email fields as you browse the web.\n\nTo delete your Duck Addresses entirely, or for any other questions or feedback, reach out to us at support@duck.com."; + +/* Signed out state for the email feature */ +"email.settings.off" = "Off"; + +/* Subtitle for the email settings cell */ +"email.settings.subtitle" = "Block email trackers and hide your address"; + +/* Option to continue the Email Protection signup */ +"email.signup-prompt.alert.continue" = "Continue Setup"; + +/* Option to exit the Email Protection signup */ +"email.signup-prompt.alert.exit" = "Exit Setup"; + +/* Title for exiting the Email Protection signup early alert */ +"email.signup-prompt.alert.title" = "If you exit now, your Duck Address will not be saved!"; + +/* Button title choosing not to sign up for email protection and not to be prompted again */ +"email.signup-prompt.do-not-signup-button.cta" = "Don’t Show Again"; + +/* Button title choosing to sign up for email protection */ +"email.signup-prompt.signup-button.cta" = "Protect My Email"; + +/* Subtitle for prompt to sign up for email protection */ +"email.signup-prompt.subtitle" = "Create a unique, random address that also removes hidden trackers and forwards email to your inbox."; + +/* Title for prompt to sign up for email protection */ +"email.signup-prompt.title" = "Hide Your Email and\nBlock Trackers"; + +/* Empty list state placholder */ +"empty.bookmarks" = "No bookmarks added yet"; + +/* Empty search placeholder on bookmarks search */ +"empty.search" = "No matches found"; + +/* Button title to Sign In */ +"error.email-protection-sign-in.action" = "Sign In"; + +/* Alert message */ +"error.email-protection-sign-in.body" = "Sorry, please sign in again to re-enable Email Protection features on this browser."; + +/* Alert title */ +"error.email-protection-sign-in.title" = "Email Protection Error"; + +/* Button title to open device settings */ +"error.insufficient-disk-space.action" = "Open Settings"; + +/* Alert message */ +"error.insufficient-disk-space.body" = "Looks like your device has run out of storage space. Please free up space to continue."; + +/* Alert title */ +"error.insufficient-disk-space.title" = "Not enough storage"; + +/* Button title that is shutting down the app */ +"error.preemptive-crash.action" = "Close App"; + +/* Alert message */ +"error.preemptive-crash.body" = "Looks like there's an issue with the app and it needs to close. Please reopen to continue."; + +/* Alert title */ +"error.preemptive-crash.title" = "App issue detected"; + +/* Generic error message on a dialog for when the cause is not known. */ +"error.unknown.try.again" = "An unknown error has occurred"; + +/* No comment provided by engineer. */ +"favorite" = "Favorite"; + +/* No comment provided by engineer. */ +"favorite.menu.edit" = "Edit"; + +/* No comment provided by engineer. */ +"favorite.menu.remove" = "Remove"; + +/* Display Mode for favorites */ +"favorites.settings.all-devices" = "All Device Favorites"; + +/* Footer of the favorites settings table */ +"favorites.settings.footer" = "Choose which favorites to display on a new tab based on their origin."; + +/* Header of the favorites settings table */ +"favorites.settings.header" = "Display Preferences"; + +/* Display Mode for favorites */ +"favorites.settings.mobile-only" = "Mobile Favorites Only"; + +/* No comment provided by engineer. */ +"feedback.browserFeatures.ads" = "Ad and pop-up blocking"; + +/* No comment provided by engineer. */ +"feedback.browserFeatures.bookmarks" = "Creating and managing bookmarks"; + +/* No comment provided by engineer. */ +"feedback.browserFeatures.caption" = "Which browsing feature can we add or improve?"; + +/* No comment provided by engineer. */ +"feedback.browserFeatures.description" = "Browser Feature Issues"; + +/* No comment provided by engineer. */ +"feedback.browserFeatures.entry" = "Browsing features are missing or frustrating"; + +/* No comment provided by engineer. */ +"feedback.browserFeatures.images" = "Interacting with images"; + +/* No comment provided by engineer. */ +"feedback.browserFeatures.navigation" = "Navigating forward, backward, and/or refreshing"; + +/* No comment provided by engineer. */ +"feedback.browserFeatures.other" = "None of these"; + +/* No comment provided by engineer. */ +"feedback.browserFeatures.tabs" = "Creating and managing tabs"; + +/* No comment provided by engineer. */ +"feedback.browserFeatures.videos" = "Watching videos"; + +/* No comment provided by engineer. */ +"feedback.customization.bookmarks" = "How bookmarks are displayed"; + +/* No comment provided by engineer. */ +"feedback.customization.caption" = "Which customization option can we add or improve?"; + +/* No comment provided by engineer. */ +"feedback.customization.description" = "Customization Issues"; + +/* No comment provided by engineer. */ +"feedback.customization.entry" = "There aren’t enough ways to customize the app"; + +/* No comment provided by engineer. */ +"feedback.customization.homeScreen" = "The home screen configuration"; + +/* No comment provided by engineer. */ +"feedback.customization.other" = "None of these"; + +/* No comment provided by engineer. */ +"feedback.customization.tabs" = "How tabs are displayed"; + +/* No comment provided by engineer. */ +"feedback.customization.ui" = "How the app looks"; + +/* No comment provided by engineer. */ +"feedback.customization.whatIsCleared" = "Which data is cleared"; + +/* No comment provided by engineer. */ +"feedback.customization.whenIsCleared" = "When data is cleared"; + +/* No comment provided by engineer. */ +"feedback.ddgSearch.autocomplete" = "Better autocomplete"; + +/* No comment provided by engineer. */ +"feedback.ddgSearch.caption" = "Which search feature can we add or improve?"; + +/* No comment provided by engineer. */ +"feedback.ddgSearch.description" = "DuckDuckGo Search Issues"; + +/* No comment provided by engineer. */ +"feedback.ddgSearch.entry" = "DuckDuckGo search isn’t good enough"; + +/* No comment provided by engineer. */ +"feedback.ddgSearch.languageOrRegion" = "Searching in a specific language or region"; + +/* No comment provided by engineer. */ +"feedback.ddgSearch.layout" = "The layout should be more like Google"; + +/* No comment provided by engineer. */ +"feedback.ddgSearch.loadTime" = "Faster load time"; + +/* No comment provided by engineer. */ +"feedback.ddgSearch.other" = "None of these"; + +/* No comment provided by engineer. */ +"feedback.ddgSearch.technical" = "Programming/technical search"; + +/* No comment provided by engineer. */ +"feedback.form.caption" = "Please tell us what we can improve"; + +/* Confirmation button */ +"feedback.form.submit" = "Submit"; + +/* No comment provided by engineer. */ +"feedback.negative.form.genericPlaceholder" = "Please be as specific as possible"; + +/* No comment provided by engineer. */ +"feedback.negative.form.placeholder" = "Are there any specifics you’d like to include?"; + +/* No comment provided by engineer. */ +"feedback.negative.header" = "We’re Sorry to Hear That"; + +/* No comment provided by engineer. */ +"feedback.negative.supplementary" = "What is your frustration most related to?"; + +/* No comment provided by engineer. */ +"feedback.other.description" = "Other Issues"; + +/* No comment provided by engineer. */ +"feedback.other.entry" = "None of these"; + +/* No comment provided by engineer. */ +"feedback.performance.caption" = "Which issue are you experiencing?"; + +/* No comment provided by engineer. */ +"feedback.performance.crashes" = "The app crashes or freezes"; + +/* No comment provided by engineer. */ +"feedback.performance.description" = "Performance Issues"; + +/* No comment provided by engineer. */ +"feedback.performance.entry" = "The app is slow, buggy, or crashes"; + +/* No comment provided by engineer. */ +"feedback.performance.other" = "None of these"; + +/* No comment provided by engineer. */ +"feedback.performance.playback" = "Video or media playback bugs"; + +/* No comment provided by engineer. */ +"feedback.performance.slowLoading" = "Web pages or search results load slowly"; + +/* Header above input field */ +"feedback.positive.form.header" = "Share Details"; + +/* No comment provided by engineer. */ +"feedback.positive.form.placeholder" = "What have you been enjoying?"; + +/* No comment provided by engineer. */ +"feedback.positive.form.supplementary" = "Are there any details you’d like to share with the team?"; + +/* No comment provided by engineer. */ +"feedback.positive.header" = "Awesome to Hear!"; + +/* No comment provided by engineer. */ +"feedback.positive.noThanks" = "No Thanks! I’m Done"; + +/* Button encouraging uses to share details aboout their feedback */ +"feedback.positive.submit" = "Share Details"; + +/* No comment provided by engineer. */ +"feedback.start.footer" = "Your anonymous feedback is important to us."; + +/* No comment provided by engineer. */ +"feedback.start.header" = "Let’s Get Started!"; + +/* No comment provided by engineer. */ +"feedback.start.supplementary" = "How would you categorize your feedback?"; + +/* No comment provided by engineer. */ +"feedback.submitted.confirmation" = "Thank You! Feedback submitted."; + +/* No comment provided by engineer. */ +"feedback.websiteLoading.description" = "Website Loading Issues"; + +/* No comment provided by engineer. */ +"feedback.websiteLoading.entry" = "Certain websites don’t load correctly"; + +/* No comment provided by engineer. */ +"feedback.websiteLoading.form.placeholder" = "What content seems to be affected?"; + +/* No comment provided by engineer. */ +"feedback.websiteLoading.form.supplementary" = "Where are you seeing these issues?"; + +/* No comment provided by engineer. */ +"feedback.websiteLoading.form.urlPlaceholder" = "Which website has issues?"; + +/* Used to indicate number of entries found and position of the currently viewed one: e.g. 1 of 10 */ +"findinpage.count" = "%1$d of %2$d"; + +/* No comment provided by engineer. */ +"findinpage.title" = "Find in Page"; + +/* No comment provided by engineer. */ +"fireButtonAnimation.airstream.name" = "Airstream"; + +/* No comment provided by engineer. */ +"fireButtonAnimation.fireRising.name" = "Inferno"; + +/* No comment provided by engineer. */ +"fireButtonAnimation.none.name" = "None"; + +/* No comment provided by engineer. */ +"fireButtonAnimation.waterSwirl.name" = "Whirlpool"; + +/* Description text above the Share Link button */ +"get.browser.on-your-desktop-go-to" = "On your computer, go to:"; + +/* Title for the Share Download Link button */ +"get.browser.share-link" = "Share Download Link"; + +/* Message displayed in the share action when sharing via email */ +"get.browser.share-link.message" = "Search privately and block trackers with the DuckDuckGo desktop browser. Visit this link on your computer to download today."; + +/* Title displayed in the share action */ +"get.browser.share-link.title" = "Get DuckDuckGo Browser for Mac or Windows"; + +/* Title for the get desktop browser feature */ +"get.browser.title" = "Get DuckDuckGo for Mac or Windows"; + +/* No comment provided by engineer. */ +"home.row.onboarding.header" = "Add DuckDuckGo to your home screen!"; + +/* No comment provided by engineer. */ +"home.row.reminder.message" = "Add DuckDuckGo to your dock for easy access!"; + +/* Home is this context is the bottom home row (dock) */ +"home.row.reminder.title" = "Take DuckDuckGo home"; + +/* This describes empty tab */ +"homeTab.searchAndFavorites" = "Search or enter address"; + +/* Home tab title */ +"homeTab.title" = "Home"; + +/* OK title for invite screen alert dismissal button */ +"invite.alert.ok.button" = "OK"; + +/* Continue button on an invite dialog */ +"invite.dialog.continue.button" = "Continue"; + +/* Get Started button on an invite dialog */ +"invite.dialog.get.started.button" = "Get Started"; + +/* Message to show after user enters an unrecognized invite code */ +"invite.dialog.unrecognized.code.message" = "We didn’t recognize this Invite Code."; + +/* No comment provided by engineer. */ +"keyCommandAddBookmark" = "Add Bookmark"; + +/* No comment provided by engineer. */ +"keyCommandAddFavorite" = "Add Favorite"; + +/* No comment provided by engineer. */ +"keyCommandBrowserBack" = "Browse Back"; + +/* No comment provided by engineer. */ +"keyCommandBrowserForward" = "Browse Forward"; + +/* No comment provided by engineer. */ +"keyCommandClose" = "Close"; + +/* No comment provided by engineer. */ +"keyCommandCloseTab" = "Close Tab"; + +/* No comment provided by engineer. */ +"keyCommandFind" = "Find in Page"; + +/* No comment provided by engineer. */ +"keyCommandFindNext" = "Find Next"; + +/* No comment provided by engineer. */ +"keyCommandFindPrevious" = "Find Previous"; + +/* No comment provided by engineer. */ +"keyCommandFire" = "Clear All Tabs and Data"; + +/* No comment provided by engineer. */ +"keyCommandLocation" = "Search or Enter Address"; + +/* No comment provided by engineer. */ +"keyCommandNewTab" = "New Tab"; + +/* No comment provided by engineer. */ +"keyCommandNextTab" = "Next Tab"; + +/* No comment provided by engineer. */ +"keyCommandOpenInNewBackgroundTab" = "Open Link in Background"; + +/* No comment provided by engineer. */ +"keyCommandOpenInNewTab" = "Open Link in New Tab"; + +/* No comment provided by engineer. */ +"keyCommandPreviousTab" = "Previous Tab"; + +/* No comment provided by engineer. */ +"keyCommandPrint" = "Print"; + +/* No comment provided by engineer. */ +"keyCommandReload" = "Reload"; + +/* No comment provided by engineer. */ +"keyCommandSelect" = "Select"; + +/* No comment provided by engineer. */ +"keyCommandShowAllTabs" = "Show All Tabs"; + +/* Please preserve newline character */ +"launchscreenWelcomeMessage" = "Welcome to\nDuckDuckGo!"; + +/* Summary text for the macOS browser waitlist */ +"mac-browser.waitlist.summary" = "DuckDuckGo for Mac has the speed you need, the browsing features you expect, and comes packed with our best-in-class privacy essentials."; + +/* Title for the macOS waitlist notification */ +"mac-waitlist.available.notification.title" = "DuckDuckGo for Mac is ready!"; + +/* Title for the copy action */ +"mac-waitlist.copy" = "Copy"; + +/* Description text above the Share Link button */ +"mac-waitlist.join-waitlist-screen.on-your-computer-go-to" = "On your Windows computer, go to:"; + +/* Description text above the Share Link button */ +"mac-waitlist.join-waitlist-screen.on-your-mac-go-to" = "On your Mac, go to:"; + +/* Title for the Share Link button */ +"mac-waitlist.join-waitlist-screen.share-link" = "Share Link"; + +/* Title for the Join Waitlist screen */ +"mac-waitlist.join-waitlist-screen.try-duckduckgo-for-mac" = "Get DuckDuckGo for Mac!"; + +/* Title for the macOS waitlist button redirecting to Windows waitlist */ +"mac-waitlist.join-waitlist-screen.windows-waitlist" = "Looking for the Windows version?"; + +/* Title for the settings subtitle */ +"mac-waitlist.settings.browse-privately" = "Browse privately with our app for Mac"; + +/* Message used when sharing to iMessage */ +"mac-waitlist.share-sheet.message" = "Ready to start browsing privately on Mac? + +Visit this URL on your Mac to download: +https://duckduckgo.com/mac"; + +/* Title for the share sheet entry */ +"mac-waitlist.share-sheet.title" = "DuckDuckGo for Mac"; + +/* Title for the Mac Waitlist feature */ +"mac-waitlist.title" = "DuckDuckGo App for Mac"; + +/* No comment provided by engineer. */ +"menu.button.hint" = "Browsing Menu"; + +/* Title for back button in navigation bar */ +"navbar.back-button.title" = "Back"; + +/* Title for next button in navigation bar to progress forward */ +"navbar.next-button.title" = "Next"; + +/* Finish editing bookmarks button */ +"navigation.title.done" = "Done"; + +/* Edit button */ +"navigation.title.edit" = "Edit"; + +/* String indicating NetP is snoozing when viewed from the settings screen */ +"netP.cell.snoozing" = "Snoozing"; + +/* Title for the DuckDuckGo VPN feature */ +"netP.title" = "DuckDuckGo VPN"; + +/* The body of the notification when Privacy Pro subscription expired */ +"network.protection.entitlement.expired.notification.body" = "VPN disconnected due to expired subscription. Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; + +/* The body of the notification shown when Network Protection fails to reconnect */ +"network.protection.failure.notification.body" = "Network Protection failed to connect. Please try again later."; + +/* Title for the VPN FAQ screen. */ +"network.protection.faq.title" = "DuckDuckGo VPN FAQ"; + +/* The body of the notification shown when Network Protection's connection is interrupted */ +"network.protection.interrupted.notification.body" = "Network Protection was interrupted. Attempting to reconnect now..."; + +/* Message for the network protection invite dialog */ +"network.protection.invite.dialog.message" = "Enter your invite code to get started."; + +/* Title for the network protection invite screen */ +"network.protection.invite.dialog.title" = "You’re invited to try DuckDuckGo VPN"; + +/* Prompt for the network protection invite code text field */ +"network.protection.invite.field.prompt" = "Invite Code"; + +/* Message for the network protection invite success view */ +"network.protection.invite.success.message" = "Hide your location from websites and conceal your online activity from Internet providers and others on your network."; + +/* Title for the network protection invite success view */ +"network.protection.invite.success.title" = "Success! You’re in."; + +/* The title of the notifications shown from Network Protection */ +"network.protection.notification.title" = "DuckDuckGo"; + +/* Title text for an iOS quick action that opens VPN settings */ +"network.protection.quick-action.open-vpn" = "Open VPN"; + +/* The body of the notification when the VPN is snoozed, with a duration string as parameter (e.g, 30 minutes) */ +"network.protection.snoozed.notification.body" = "VPN snoozed for %@"; + +/* The label for when NetP VPN is connected plus the length of time connected as a formatter HH:MM:SS string */ +"network.protection.status.connected.format" = "Connected · %@"; + +/* The label for the NetP VPN when connecting */ +"network.protection.status.connecting" = "Connecting..."; + +/* The label for the NetP VPN when disconnected */ +"network.protection.status.disconnected" = "Not connected"; + +/* The label for the NetP VPN when disconnecting */ +"network.protection.status.disconnecting" = "Disconnecting..."; + +/* Message label text for the status view when VPN is disconnected */ +"network.protection.status.header.message.off" = "Connect to secure all of your device’s\nInternet traffic."; + +/* Message label text for the status view when VPN is disconnected */ +"network.protection.status.header.message.on" = "All device Internet traffic is being secured\nthrough the VPN."; + +/* Header title label text for the status view when VPN is disconnected */ +"network.protection.status.header.title.off" = "DuckDuckGo VPN is Off"; + +/* Header title label text for the status view when VPN is connected */ +"network.protection.status.header.title.on" = "DuckDuckGo VPN is On"; + +/* Header title label text for the status view when VPN is snoozing */ +"network.protection.status.header.title.snoozed" = "DuckDuckGo VPN is Snoozed"; + +/* The status view 'Share Feedback' button which is shown inline on the status view after the temporary free use footer text */ +"network.protection.status.menu.share.feedback" = "Share Feedback"; + +/* The label for the NetP VPN when paused */ +"network.protection.status.paused" = "Paused"; + +/* The label for when NetP VPN is snoozing plus the length of time remaining formatted as '0:00' */ +"network.protection.status.snoozing.format" = "Snoozing, %@ remaining"; + +/* Snooze button title shown in NetworkProtection's status view. */ +"network.protection.status.view.action.snooze" = "Snooze For 20 Minutes"; + +/* Wake Up button title shown in NetworkProtection's status view. */ +"network.protection.status.view.action.wake-up" = "Wake Up"; + +/* Connection details label shown in NetworkProtection's status view. */ +"network.protection.status.view.connection.details" = "Connection Details"; + +/* Custom DNS label shown in NetworkProtection's status view. */ +"network.protection.status.view.custom.dns" = "DNS Server"; + +/* Generic connection failed error message shown in NetworkProtection's status view. */ +"network.protection.status.view.error.connection.failed.message" = "Please try again later."; + +/* Generic connection failed error title shown in NetworkProtection's status view. */ +"network.protection.status.view.error.connection.failed.title" = "Failed to Connect."; + +/* IP Address label shown in NetworkProtection's status view. */ +"network.protection.status.view.ip.address" = "IP Address"; + +/* Location label shown in NetworkProtection's status view. */ +"network.protection.status.view.location" = "Location"; + +/* Label shown on the title of the settings section in NetworkProtection's status view. */ +"network.protection.status.view.settings.section.title" = "Manage"; + +/* Title label text for the status view when netP is disconnected */ +"network.protection.status.view.title" = "VPN"; + +/* The body of the notification shown when Network Protection reconnects successfully */ +"network.protection.success.notification.body" = "Network Protection is On. Your location and online activity are protected."; + +/* The body of the notification shown when Network Protection connects successfully with the city + state/country as formatted parameter */ +"network.protection.success.notification.subtitle.including.serverLocation" = "Routing device traffic through %@."; + +/* The body of the notification shown when Network Protection connects successfully with the city + state/country as formatted parameter */ +"network.protection.success.notification.subtitle.snooze.ended.including.serverLocation" = "VPN snooze has ended. Routing device traffic through %@."; + +/* Title for the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.button.title" = "Turn On Notifications"; + +/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */ +"network.protection.turn.on.notifications.section.footer" = "Allow DuckDuckGo to notify you if your connection drops or VPN status changes."; + +/* Title of the About section in the VPN status screen */ +"network.protection.vpn.about" = "About"; + +/* Section header for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.section.header" = "Notifications"; + +/* List section footer for the toggle for VPN alerts. */ +"network.protection.vpn.alerts.toggle.section.footer" = "Get notified if your connection drops or VPN status changes."; + +/* Title for the toggle for VPN notifications. */ +"network.protection.vpn.alerts.toggle.title" = "VPN Notifications"; + +/* Title for the data volume section in the VPN status screen */ +"network.protection.vpn.data-volume" = "Data Volume"; + +/* Footer text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.footer" = "Let local traffic bypass the VPN and connect to devices on your local network, like a printer."; + +/* Header text for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.header" = "General"; + +/* Title for the Exclude Local Networks setting item. */ +"network.protection.vpn.exclude.local.networks.setting.title" = "Exclude Local Networks"; + +/* Title for the VPN Location screen's All Countries section. */ +"network.protection.vpn.location.all.countries.section.title" = "All Countries"; + +/* Description of the location type in the VPN status screen */ +"network.protection.vpn.location.connected" = "Connected Location"; + +/* Subtitle of countries item when there are multiple cities, example : */ +"network.protection.vpn.location.country.item.formatted.cities.count" = "%d cities"; + +/* Description of the location type in the VPN status screen */ +"network.protection.vpn.location.nearest" = "(Nearest)"; + +/* Footer describing the VPN Location screen's Recommended section which just has Nearest Available. */ +"network.protection.vpn.location.recommended.section.footer" = "Automatically connect to the nearest server we can find."; + +/* Title for the VPN Location screen's Recommended section. */ +"network.protection.vpn.location.recommended.section.title" = "Recommended"; + +/* Description of the location type in the VPN status screen */ +"network.protection.vpn.location.selected" = "Selected Location"; + +/* Subtitle for the preferred location item that formats a city and country. E.g Chicago, United States */ +"network.protection.vpn.location.subtitle.formatted.city.and.country" = "%1$@, %2$@"; + +/* Title for the VPN Location screen. */ +"network.protection.vpn.location.title" = "VPN Location"; + +/* Title for the VPN Notifications management screen. */ +"network.protection.vpn.notifications.title" = "VPN Notifications"; + +/* Label for the Preferred Location VPN Settings item when the nearest available location is selected. */ +"network.protection.vpn.preferred.location.nearest" = "Nearest Location"; + +/* Title for the Preferred Location VPN Settings item. */ +"network.protection.vpn.preferred.location.title" = "Preferred Location"; + +/* Footer text for the DNS server setting item. */ +"network.protection.vpn.secure.dns.setting.footer" = "DuckDuckGo routes DNS queries through our DNS servers so your internet provider can't see what websites you visit."; + +/* Title for the FAQ row in the VPN status screen. */ +"network.protection.vpn.settings.faq" = "FAQs and Support"; + +/* Title for the feedback row in the VPN status screen. */ +"network.protection.vpn.settings.share-feedback" = "Share VPN Feedback"; + +/* Title for the VPN Settings screen. */ +"network.protection.vpn.settings.title" = "VPN Settings"; + +/* Information message about New Tab Page redesign */ +"new.tab.page.intro.message.body" = "Customize your Favorites and go-to features. Reorder things or hide them to keep it clean."; + +/* Title of information message about New Tab Page redesign */ +"new.tab.page.intro.message.title" = "Your New Tab Page is... New!"; + +/* Footer of the group allowing for setting up new tab page sections */ +"new.tab.page.settings.sections.description" = "Show, hide, and reorder sections on the new tab page"; + +/* Header title of the group allowing for setting up new tab page sections */ +"new.tab.page.settings.sections.header.title" = "SECTIONS"; + +/* Header title of the shortcuts in New Tab Page preferences. */ +"new.tab.page.settings.shortcuts.header.title" = "SHORTCUTS"; + +/* Title of New Tab Page preferences page. */ +"new.tab.page.settings.title" = "Customize New Tab"; + +/* Shortcut title leading to AI Chat */ +"new.tab.page.shortcut.ai.chat" = "AI Chat"; + +/* Shortcut title leading to Bookmarks */ +"new.tab.page.shortcut.bookmarks" = "Bookmarks"; + +/* Shortcut title leading to Downloads */ +"new.tab.page.shortcut.downloads" = "Downloads"; + +/* Shortcut title leading to Passwords */ +"new.tab.page.shortcut.passwords" = "Passwords"; + +/* Shortcut title leading to app settings */ +"new.tab.page.shortcut.settings" = "Settings"; + +/* Text shown on the favorites info tooltip */ +"new.tab.page.tooltip.body" = "On any site, open the ••• menu and select **Add Favorite** to add it to your new tab page."; + +/* Do not translate - stringsdict entry */ +"number.of.tabs" = "number.of.tabs"; + +/* Text displayed on notification appearing in the address bar when the browser dismissed the cookie popup automatically rejecting it */ +"omnibar.notification.cookies-managed" = "Cookies Managed"; + +/* Text displayed on notification appearing in the address bar when the browser hides a cookie popup */ +"omnibar.notification.popup-hidden" = "Pop-up Hidden"; + +/* Button to change the default browser */ +"onboarding.browsers.cta" = "Choose Your Browser"; + +/* Message to highlight browser capability of blocking cookie pop-ups */ +"onboarding.browsers.features.cookiePopups.title" = "Block cookie pop-ups"; + +/* Message to highlight browser capability of blocking creepy ads */ +"onboarding.browsers.features.creepyAds.title" = "Block creepy ads"; + +/* Message to highlight browser capability ofswiftly erase browsing data */ +"onboarding.browsers.features.eraseBrowsingData.title" = "Swiftly erase browsing data"; + +/* Message to highlight browser capability of private searches */ +"onboarding.browsers.features.privateSearch.title" = "Search privately by default"; + +/* Message to highlight browser capability ofblocking 3rd party trackers */ +"onboarding.browsers.features.trackerBlocker.title" = "Block 3rd-party trackers"; + +/* The title of the dialog to show the privacy features that DuckDuckGo offers */ +"onboarding.browsers.title" = "Privacy protections activated!"; + +/* Button to continue the onboarding process */ +"onboarding.intro.cta" = "Let’s do it!"; + +/* The title of the onboarding dialog popup */ +"onboarding.intro.title" = "Hi there.\n\nReady for a better, more private internet?"; + +/* No comment provided by engineer. */ +"onboarding.widgets.continueButton" = "Add Widget"; + +/* No comment provided by engineer. */ +"onboarding.widgets.header" = "Using DuckDuckGo just got easier."; + +/* No comment provided by engineer. */ +"onboarding.widgets.skipButton" = "Maybe Later"; + +/* No comment provided by engineer. */ +"onboardingContinue" = "Continue"; + +/* No comment provided by engineer. */ +"onboardingDefaultBrowserMaybeLater" = "Maybe Later"; + +/* No comment provided by engineer. */ +"onboardingDefaultBrowserTitle" = "Make DuckDuckGo your default browser."; + +/* No comment provided by engineer. */ +"onboardingSetAsDefaultBrowser" = "Set as Default Browser"; + +/* No comment provided by engineer. */ +"onboardingSkip" = "Skip"; + +/* This is on a button presented on the last of the onboarding screens. */ +"onboardingStartBrowsing" = "Start Browsing"; + +/* No comment provided by engineer. */ +"onboardingWelcomeHeader" = "Welcome to DuckDuckGo!"; + +/* ’Link’ is link on a website */ +"open.externally.failed" = "The app required to open that link can’t be found"; + +/* Activate button */ +"pm.activate" = "Reactivate"; + +/* Cancel button */ +"pm.cancel" = "Cancel"; + +/* Deactivate button */ +"pm.deactivate" = "Deactivate"; + +/* Button title for sync bookmarks limits exceeded warning to go to manage bookmarks */ +"prefrences.sync.bookmarks-limit-exceeded-action" = "Manage Bookmarks"; + +/* Description for sync bookmarks limits exceeded warning */ +"prefrences.sync.bookmarks-limit-exceeded-description" = "You've reached the maximum number of bookmarks. Please delete some to resume sync."; + +/* Button title for sync credentials limits exceeded warning to go to manage passwords */ +"prefrences.sync.credentials-limit-exceeded-action" = "Manage passwords…"; + +/* Description for sync credentials limits exceeded warning */ +"prefrences.sync.credentials-limit-exceeded-description" = "You've reached the maximum number of passwords. Please delete some to resume sync."; + +/* Description invalid credentials error when syncing. + Description of incorrectly formatted data error when syncing. + Description of too many requests error when syncing. */ +"prefrences.sync.invalid-login-description" = "Sync encountered an error. Try disabling sync on this device and then reconnect using another device or your recovery code."; + +/* Title for sync limits exceeded warning */ +"prefrences.sync.limit-exceeded-title" = "Sync Paused"; + +/* No comment provided by engineer. */ +"preserveLogins.domain.list.footer" = "Websites rely on cookies to keep you signed in. When you Fireproof a site, cookies won’t be erased and you’ll stay signed in, even after using the Fire Button. We still block third-party trackers found on Fireproof websites."; + +/* Section header above Fireproofed websites list */ +"preserveLogins.domain.list.title" = "Fireproof Sites"; + +/* Alert message explaining to users that the benefit of fireproofing a site is that they will be kept signed in */ +"preserveLogins.fireproof.message" = "Fireproofing this site will keep you signed in after using the Fire Button."; + +/* Parameter is a string - domain name. Alert title prompting user to fireproof a site so they can stay signed in */ +"preserveLogins.fireproof.title" = "Fireproof %@ to stay signed in?"; + +/* Confirm fireproofing action */ +"preserveLogins.menu.confirm" = "Fireproof"; + +/* Parameter is a website URL. Messege confirms that given website has been fireproofed. */ +"preserveLogins.menu.confirm.message" = "%@ is now Fireproof"; + +/* Deny fireproofing action */ +"preserveLogins.menu.defer" = "Not Now"; + +/* Disable fireproofing for site */ +"preserveLogins.menu.disable" = "Remove Fireproofing"; + +/* Enable fireproofing for site */ +"preserveLogins.menu.enable" = "Fireproof This Site"; + +/* Messege confirms that website is no longer fireproofed. */ +"preserveLogins.menu.removal.message" = "Fireproofing removed"; + +/* Alert title */ +"preserveLogins.remove.all" = "Remove All"; + +/* Confirmation button in alert */ +"preserveLogins.remove.all.ok" = "OK"; + +/* Privacy Icon accessibility title */ +"privacy.icon.dax" = "DuckDuckGo logo"; + +/* Privacy Icon accessibility hint */ +"privacy.icon.hint" = "Tap to open Privacy Dashboard screen"; + +/* Privacy Icon accessibility title */ +"privacy.icon.shield" = "Privacy Icon"; + +/* Deny action */ +"prompt.custom.url.scheme.dontopen" = "Cancel"; + +/* Confirm action */ +"prompt.custom.url.scheme.open" = "Open"; + +/* No comment provided by engineer. */ +"prompt.custom.url.scheme.prompt" = "Would you like to leave DuckDuckGo to view this content?"; + +/* Alert title */ +"prompt.custom.url.scheme.title" = "Open in Another App?"; + +/* No comment provided by engineer. */ +"search.hint.duckduckgo" = "Search or enter address"; + +/* No comment provided by engineer. */ +"section.title.bookmarks" = "Bookmarks"; + +/* No comment provided by engineer. */ +"section.title.favorites" = "Favorites"; + +/* Settings cell for About DDG */ +"settings.about.ddg" = "About DuckDuckGo"; + +/* Settings section title for About DuckDuckGo */ +"settings.about.section" = "About"; + +/* about page */ +"settings.about.text" = "DuckDuckGo is the independent Internet privacy company founded in 2008 for anyone who’s tired of being tracked online and wants an easy solution. We’re proof you can get real privacy protection online without tradeoffs. + +The DuckDuckGo browser comes with the features you expect from a go-to browser, like bookmarks, tabs, passwords, and more, plus over [a dozen powerful privacy protections](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/) not offered in most popular browsers by default. This uniquely comprehensive set of privacy protections helps protect your online activities, from searching to browsing, emailing, and more. + +Our privacy protections work without having to know anything about the technical details or deal with complicated settings. All you have to do is switch your browser to DuckDuckGo across all your devices and you get privacy by default. + +But if you *do* want a peek under the hood, you can find more information about how DuckDuckGo privacy protections work on our [help pages](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/)."; + +/* Settings screen accessibility section title */ +"settings.accessibility" = "Accessibility"; + +/* Settings screen cell text for adding the app to the dock */ +"settings.add.to.dock" = "Add App to Your Dock"; + +/* Settings screen cell text for add widget to the home screen */ +"settings.add.widget" = "Add Widget to Home Screen"; + +/* Name of the settings subsection related to the address bar + Settings screen cell text for addess bar position */ +"settings.address.bar" = "Address Bar"; + +/* Settings screen cell title for toggling full URL visibility in address bar */ +"settings.address.full.url" = "Show Full Site Address"; + +/* Label describing a feature which is turned on always */ +"settings.always.on" = "Always On"; + +/* Settings screen appearance section title */ +"settings.appearance" = "Appearance"; + +/* Settings screen cell for opening links in associated apps */ +"settings.associated.apps" = "Open Links in Associated Apps"; + +/* Description for associated apps description */ +"settings.associated.apps.description" = "Disable to prevent links from automatically opening in other installed apps."; + +/* Settings screen cell for autocomplete */ +"settings.autocomplete" = "Search Suggestions"; + +/* Settings label for enabling or disabling recently visited sites */ +"settings.autocomplete.recentlyvisited" = "Recently Visited Sites"; + +/* Settings label for enabling or disabling recently visited sites */ +"settings.autocomplete.recentlyvisited.subtitle" = "Show recently visited sites in search suggestions. Recently visited sites are private, only stored on your device, and can be cleared with the Fire Button."; + +/* Subtitle for Search Suggestions setting */ +"settings.autocomplete.subtitle" = "Show search suggestions as you type, including your bookmarks. All searches are private."; + +/* Settings screen cell text for Application Lock */ +"settings.autolock" = "Application Lock"; + +/* Section footer Autolock description */ +"settings.autolock.description" = "If Touch ID, Face ID, or a system passcode is enabled, you'll be asked to unlock the app when opening it."; + +/* Settings screen cell text for Automatically Clearing Data */ +"settings.clear.data" = "Automatically Clear Data"; + +/* The name of Settings category in Privacy Features related to configuration of the privacy feature related to cookie pop-ups */ +"settings.cookie.pop-up-protection.protection" = "Cookie Pop-Up Protection"; + +/* Explanation in Settings how the cookie pop up protection feature works */ +"settings.cookie.pop.up.protection.explanation" = "DuckDuckGo will try to select the most private settings available and hide these pop-ups for you.\n[Learn More](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/#cookie-pop-up-management)"; + +/* Settings screen cell text for Cookie popups */ +"settings.cookie.popups" = "Manage Cookie Pop-ups"; + +/* Settings title for the customize section */ +"settings.customize" = "Customize"; + +/* The name of a settings subsection related to the data clearing */ +"settings.data.clearing" = "Data Clearing"; + +/* Settings screen cell text for setting the app as default browser + The name of Settings category in Privacy Features related to configuration of the default browser */ +"settings.default.browser" = "Default Browser"; + +/* Label of a button disabling email protection */ +"settings.disable.email.protection.autofill" = "Disable Email Protection Autofill"; + +/* Settings cell to link users to other products by DuckDuckGo */ +"settings.duckduckgo.on.other.platforms" = "DuckDuckGo on Other Platforms"; + +/* Explanation in Settings how the email protection feature works */ +"settings.email.protection.explanation" = "Block email trackers and hide your address without switching your email provider.\n[Learn More](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/email-protection/what-is-duckduckgo-email-protection/)"; + +/* Alert presented to user after clicking on 'Sign out' in Email Protection Settings */ +"settings.email.protection.signing.out.alert" = "Signing out of your Email Protection account will disable Duck Address autofill in this browser. You can still use these addresses and receive forwarded email as usual."; + +/* Settings cell for Email Protection */ +"settings.emailProtection.description" = "Block email trackers and hide your address"; + +/* Label of a button enabling the email protection feature */ +"settings.enable.email.protection" = "Enable Email Protection"; + +/* Settings screen cell text for enabling voice search */ +"settings.enable.voice.search" = "Enable Voice Search"; + +/* Settings cell for Feedback */ +"settings.feedback" = "Share Feedback"; + +/* Settings screen cell text for fire button animation */ +"settings.firebutton" = "Fire Button Animation"; + +/* Settings screen cell text for Fireproof Sites */ +"settings.fireproof.sites" = "Fireproof Sites"; + +/* The name of the settings subsection containing general settings */ +"settings.general" = "General"; + +/* Settings screen cell text for GPC */ +"settings.gpc" = "Global Privacy Control (GPC)"; + +/* Settings screen cell text for app icon selection */ +"settings.icon" = "App Icon"; + +/* Settings screen cell for Keyboard */ +"settings.keyboard" = "Keyboard"; + +/* Switch button label. */ +"settings.let.duckduckgo.manage.cookie.consent.popups" = "Let DuckDuckGo manage cookie consent pop-ups"; + +/* Settings screen cell text for passwords */ +"settings.logins" = "Passwords"; + +/* The name of the settings section containing main settings */ +"settings.main.settings" = "Main Settings"; + +/* Label of a button managing email protection account */ +"settings.manage.account" = "Manage Account"; + +/* Settings title for the 'More' section */ +"settings.more" = "More from DuckDuckGo"; + +/* Button navigating to other settings related to search */ +"settings.more.search.settings" = "More Search Settings"; + +/* Subtitle of the 'More Search Settings' button */ +"settings.more.search.settings.explanation" = "Customize your language, region, and more"; + +/* The name of a settings category listing next steps */ +"settings.next.steps" = "Next Steps"; + +/* Label describing a feature which is turned off */ +"settings.off" = "Off"; + +/* Label describing a feature which is turned on */ +"settings.on" = "On"; + +/* Product name for the subscription bundle */ +"settings.ppro" = "Privacy Pro"; + +/* Title for Link in the Footer of Privacy Pro section */ +"settings.ppro.footer" = "Privacy Policy and Terms of Service"; + +/* Settings screen cell for long press previews */ +"settings.previews" = "Long-Press Previews"; + +/* Settings title for the privacy section */ +"settings.privacy" = "Privacy"; + +/* The name of Settings category in Privacy Features related to configuration of the search */ +"settings.private.search" = "Private Search"; + +/* Explanation in Settings how the private search feature works */ +"settings.private.search.explanation" = "DuckDuckGo Private Search is your default search engine, so you can search the web without being tracked."; + +/* Header of settings related to search */ +"settings.search.settings" = "Search Settings"; + +/* Settings cell for Send Crash Reports */ +"settings.send.crash.reports" = "Send Crash Reports"; + +/* Explanation of Send Crash Reports settings option */ +"settings.send.crash.reports.description" = "Automatically send crash reports to DuckDuckGo."; + +/* Settings screen cell text for setting address bar position */ +"settings.set.your.address.bar.position" = "Set Your Address Bar Position"; + +/* Privacy pro description subtitle in settings when the is activating */ +"settings.subscription.activating" = "Activating"; + +/* Subscription activation pending description */ +"settings.subscription.activation.pending.description" = "This is taking longer than usual, please check back later."; + +/* Data Broker protection cell subtitle for privacy pro */ +"settings.subscription.DBP.subtitle" = "Remove your info from sites that sell it"; + +/* Data Broker protection cell title for privacy pro */ +"settings.subscription.DBP.title" = "Personal Information Removal"; + +/* Privacy pro description subtitle in settings */ +"settings.subscription.description" = "Includes our VPN, Personal Information Removal, and Identity Theft Restoration."; + +/* I have a Subscription button text for privacy pro */ +"settings.subscription.existing.subscription" = "I Have a Subscription"; + +/* Subscription expired description */ +"settings.subscription.expired.comment" = "Subscribe again to continue using Privacy Pro"; + +/* Subscription expired tittle message */ +"settings.subscription.expired.title" = "Your Privacy Pro subscription expired"; + +/* Identity theft restoration cell subtitle for privacy pro */ +"settings.subscription.ITR.subtitle" = "If your identity is stolen, we'll help restore it"; + +/* Identity theft restoration cell title for privacy pro */ +"settings.subscription.ITR.title" = "Identity Theft Restoration"; + +/* Get Privacy Pro button text for privacy pro */ +"settings.subscription.learn.more" = "Get Privacy Pro"; + +/* Subscription Settings button text for privacy pro */ +"settings.subscription.manage" = "Subscription Settings"; + +/* Call to action title for Privacy Pro settings */ +"settings.subscription.subscribe" = "Protect your connection and identity with Privacy Pro"; + +/* VPN cell title for privacy pro */ +"settings.subscription.VPN.title" = "VPN"; + +/* Label of a button navigating to the Support page */ +"settings.support" = "Support"; + +/* Settings screen cell text for sync and backup */ +"settings.sync" = "Sync & Backup"; + +/* Settings screen cell text for text size */ +"settings.text.size" = "Text Size"; + +/* Settings screen cell text for theme */ +"settings.theme" = "Theme"; + +/* Title for the Settings View */ +"settings.title" = "Settings"; + +/* Settings screen cell text for Unprotected Sites */ +"settings.unprotected.sites" = "Unprotected Sites"; + +/* Settings cell for Version */ +"settings.version" = "Version"; + +/* Settings screen cell for voice search */ +"settings.voice.search" = "Private Voice Search"; + +/* The name of Settings category in Privacy Features related to configuration of the web tracking protection feature */ +"settings.web.tracking.protection" = "Web Tracking Protection"; + +/* Explanation in Settings how the web tracking protection feature works */ +"settings.web.tracking.protection.explanation" = "DuckDuckGo automatically blocks hidden trackers as you browse the web.\n[Learn More](ddgQuickLink://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/)"; + +/* Report a Broken Site screen confirmation button */ +"siteFeedback.buttonText" = "Submit Report"; + +/* Domain is an URL address */ +"siteFeedback.domainInfo" = "Domain of Broken Site:"; + +/* No comment provided by engineer. */ +"siteFeedback.messagePlaceholder" = "Which content or functionality is breaking?"; + +/* No comment provided by engineer. */ +"siteFeedback.subtitle" = "Broken site reporting is completely anonymous and helps us to improve the app!"; + +/* This is a form title */ +"siteFeedback.title" = "Report a Broken Site"; + +/* No comment provided by engineer. */ +"siteFeedback.urlPlaceholder" = "Which website is broken?"; + +/* Subscription Activation Info */ +"subscription.activate..header.description" = "Access your Privacy Pro subscription on this device via Apple ID or an email address."; + +/* Button for adding email address to subscription */ +"subscription.activate.add.email.button" = "Add Email"; + +/* Apple ID option for activation */ +"subscription.activate.appleid" = "Apple ID"; + +/* Button text for restoring purchase via Apple ID */ +"subscription.activate.appleid.button" = "Restore Purchase"; + +/* Description for Apple ID activation */ +"subscription.activate.appleid.description" = "Restore your purchase to activate your subscription on this device."; + +/* Subscription Activation Info */ +"subscription.activate.description" = "Your subscription is automatically available in DuckDuckGo on any device signed in to your Apple ID."; + +/* Button for editing email address added to subscription */ +"subscription.activate.edit.email.button" = "Edit Email"; + +/* View Title for editing your email account */ +"subscription.activate.edit.email.title" = "Edit Email"; + +/* Email option for activation */ +"subscription.activate.email" = "Email"; + +/* Restore button title for Email */ +"subscription.activate.email.button" = "Enter Email"; + +/* Description for Email activation */ +"subscription.activate.email.description" = "Use your email to activate your subscription on this device."; + +/* Activate subscription title */ +"subscription.activate.email.title" = "Activate Subscription"; + +/* Button title for cancelling email deletion */ +"subscription.activate.manage.email.cancel" = "Cancel"; + +/* Button title for confirming email deletion */ +"subscription.activate.manage.email.OK" = "OK"; + +/* Restore button title for AppleID */ +"subscription.activate.restore.apple" = "Restore Purchase"; + +/* Subscription Activation Title */ +"subscription.activate.title" = "Activate your subscription on this device"; + +/* Resend activation instructions button */ +"subscription.add.device.resend.instructions" = "Resend Instructions"; + +/* Add email to an existing subscription */ +"subscription.add.email" = "Add an email address to activate your subscription on your other devices. We’ll only use this address to verify your subscription."; + +/* View title for adding email to subscription */ +"subscription.add.email.title" = "Add Email"; + +/* Title for Alert messages */ +"subscription.alert.title" = "subscription.alert.title"; + +/* Subscription availability message on Apple devices */ +"subscription.available.apple" = "Privacy Pro is available on any device signed in to the same Apple ID."; + +/* Text for the manage billing page */ +"subscription.billing.google.text" = "Your subscription was purchased through the Google Play Store. To renew your subscription, please open Google Play Store subscription settings on a device signed in to the same Google Account used to originally purchase your subscription."; + +/* Title for the manage billing page */ +"subscription.billing.google.title" = "Subscription Plans"; + +/* Subscription annual billing period type */ +"subscription.billing.period.annual" = "annual"; + +/* Subscription monthly billing period type */ +"subscription.billing.period.monthly" = "monthly"; + +/* Subscription Removal confirmation message */ +"subscription.cancel.message" = "Your subscription has been removed from this device."; + +/* Change plan or cancel title */ +"subscription.change.plan" = "Update Plan or Cancel"; + +/* Navigation Button for closing subscription view */ +"subscription.close" = "Close"; + +/* Title for Confirm messages */ +"subscription.confirm.title" = "Are you sure?"; + +/* Header for section for activating subscription on other devices */ +"subscription.devices.header" = "Activate on Other Devices"; + +/* Footer for section for activating subscription on other devices when email was not yet added */ +"subscription.devices.no.email.footer" = "Add an optional email to your subscription to access Privacy Pro on other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Footer for section for activating subscription on other devices when email is added */ +"subscription.devices.with.email.footer" = "Use this email to activate your subscription in Settings > Privacy Pro in the DuckDuckGo app on your other devices. **[Learn more](https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/adding-email/)**"; + +/* Alert content for not found subscription */ +"subscription.email.inactive.alert.message" = "The subscription associated with this email is no longer active."; + +/* Alert title for not found subscription */ +"subscription.email.inactive.alert.title" = "Subscription Not Found"; + +/* Alert content for not found subscription */ +"subscription.expired.alert.message" = "The subscription associated with this Apple ID is no longer active."; + +/* FAQ Button */ +"subscription.faq" = "FAQs and Support"; + +/* FAQ Description */ +"subscription.faq.description" = "Get answers to frequently asked questions or contact Privacy Pro support from our help pages."; + +/* Cancel action for the existing subscription dialog */ +"subscription.found.cancel" = "Cancel"; + +/* Restore action for the existing subscription dialog */ +"subscription.found.restore" = "Restore"; + +/* Message for the existing subscription dialog */ +"subscription.found.text" = "We found a subscription associated with this Apple ID."; + +/* Title for the existing subscription dialog */ +"subscription.found.title" = "Subscription Found"; + +/* Help and support Section header */ +"subscription.help" = "Help and support"; + +/* Manage Plan header */ +"subscription.manage.plan" = "Manage Plan"; + +/* Header for the subscription section */ +"subscription.manage.title" = "Subscription"; + +/* Alert content for not found subscription */ +"subscription.notFound.alert.message" = "There is no subscription associated with this Apple ID."; + +/* Alert title for not found subscription */ +"subscription.notFound.alert.title" = "Subscription Not Found"; + +/* View plans button text */ +"subscription.notFound.view.plans" = "View Plans"; + +/* Hero Text for Personal information removal */ +"subscription.pir.hero" = "Activate Privacy Pro on desktop to set up Personal Information Removal"; + +/* Description on how to use Personal information removal in desktop. The first placeholder references a location in the Desktop application. Privacy Pro>, and the second, the menu entry. i.e. */ +"subscription.pir.heroText" = "In the DuckDuckGo browser for desktop, go to %1$@ and click %2$@ to get started."; + +/* Settings references a menu in the Desktop app, Privacy Pro, references our product name */ +"subscription.pir.heroTextLocation" = "Settings > Privacy Pro"; + +/* Menu item for enabling Personal Information Removal on Desktop */ +"subscription.pir.heroTextMenyEntry" = "I have a subscription"; + +/* Text for the 'macOS' button */ +"subscription.pir.macos" = "Mac"; + +/* Text for the 'Windows' button */ +"subscription.pir.windows" = "Windows"; + +/* Progress view title when completing the purchase */ +"subscription.progress.view.completing.purchase" = "Completing purchase..."; + +/* Progress view title when starting the purchase */ +"subscription.progress.view.purchasing.subscription" = "Purchase in progress..."; + +/* Progress view title when restoring past subscription purchase */ +"subscription.progress.view.restoring.subscription" = "Restoring subscription..."; + +/* Remove from this device button */ +"subscription.remove.from.device.button" = "Remove From This Device"; + +/* Remove from device confirmation dialog text */ +"subscription.remove.from.device.text" = "You will no longer be able to access your Privacy Pro subscription on this device. This will not cancel your subscription, and it will remain active on your other devices."; + +/* Remove from device confirmation dialog title */ +"subscription.remove.from.device.title" = "Remove from this device?"; + +/* Remove subscription button text */ +"subscription.remove.subscription" = "Remove Subscription"; + +/* Remove subscription cancel button text */ +"subscription.remove.subscription.cancel" = "Cancel"; + +/* Button text for general error message */ +"subscription.restore.backend.error.button" = "Back to Settings"; + +/* Alert for general error message */ +"subscription.restore.backend.error.message" = "We’re having trouble connecting. Please try again later."; + +/* Alert for general error title */ +"subscription.restore.backend.error.title" = "Something Went Wrong"; + +/* Alert for general error message */ +"subscription.restore.general.error.message" = "The App Store was unable to process your purchase. Please try again later."; + +/* Alert for general error title */ +"subscription.restore.general.error.title" = "Something Went Wrong"; + +/* Alert button text for restored purchase alert */ +"subscription.restore.success.alert.button" = "OK"; + +/* Alert message for restored purchase */ +"subscription.restore.success.alert.message" = "Your purchases have been restored."; + +/* Alert title for restored purchase */ +"subscription.restore.success.alert.title" = "You’re all set."; + +/* Subtitle in header when subscribed */ +"subscription.subscribed" = "Subscribed"; + +/* Subscription Expired Data. This reads as 'Your subscription expired on (date)' */ +"subscription.subscription.expired.caption" = "Your subscription expired on %@"; + +/* Subscription expiration info. This reads as 'Your (monthly or annual) subscription expires on (date)' */ +"subscription.subscription.expiring.caption" = "Your %1$@ subscription expires on %2$@."; + +/* Subscription renewal info. This reads as 'Your (monthly or annual) subscription renews on (date)' */ +"subscription.subscription.renewing.caption" = "Your %1$@ subscription renews on %2$@."; + +/* Navigation bar Title for subscriptions */ +"subscription.title" = "Privacy Pro"; + +/* Message confirming that recovery code was copied to clipboard */ +"sync.code.copied" = "Recovery code copied to clipboard"; + +/* Caption for a button to delete Sync server data */ +"sync.delete.all.confirm.action" = "Delete Server Data"; + +/* Message for the dialog to confirm deleting Sync server data */ +"sync.delete.all.confirm.message" = "All devices will be disconnected and your synced data will be deleted from the server."; + +/* Title of the dialog to confirm deleting Sync server data */ +"sync.delete.all.confirm.title" = "Delete Server Data?"; + +/* Caption for a button to remove device from Sync */ +"sync.remove-device.action" = "Remove"; + +/* No comment provided by engineer. */ +"sync.remove-device.message" = "\"%@\" will no longer be able to access your synced data."; + +/* Title of the dialog to remove device from Sync */ +"sync.remove-device.title" = "Remove Device?"; + +/* Caption for a button to remove current device from Sync */ +"sync.turn.off.confirm.action" = "Remove"; + +/* Message for the dialog to confirm turning off Sync */ +"sync.turn.off.confirm.message" = "This Device will no longer be able to access your synced data."; + +/* Title of the dialog to confirm turning off Sync */ +"sync.turn.off.confirm.title" = "Turn Off Sync?"; + +/* Reason for auth when setting up Sync */ +"sync.user.auth.reason" = "Unlock device to set up Sync & Backup"; + +/* Data syncing unavailable warning message */ +"sync.warning.data.syncing.disabled" = "Sorry, but Sync & Backup is currently unavailable. Please try again later."; + +/* Data syncing unavailable warning message */ +"sync.warning.data.syncing.disabled.upgrade.required" = "Sorry, but Sync & Backup is no longer available in this app version. Please update DuckDuckGo to the latest version to continue."; + +/* Accessibility label on remove button */ +"tab.close.home" = "Close home tab"; + +/* Accesibility label: first string is website title, second is address */ +"tab.close.with.title.and.address" = "Close \"%1$@\" at %2$@"; + +/* Accessibility label on tab cell */ +"tab.open.home" = "Open home tab"; + +/* Accesibility label: first string is website title, second is address */ +"tab.open.with.title.and.address" = "Open \"%1$@\" at %2$@"; + +/* Tab Switcher Accessibility Label */ +"tab.switcher.accessibility.label" = "Tab Switcher"; + +/* Description text for the text size adjustment setting */ +"textSize.description" = "Choose your preferred text size. Websites you view in DuckDuckGo will adjust to it."; + +/* Replacement string is a current percent value e.g. '120%' */ +"textSize.footer" = "Text Size - %@"; + +/* Dark Theme entry */ +"theme.acc.dark" = "Dark"; + +/* Short entry for Default System theme */ +"theme.acc.default" = "System"; + +/* Light Theme entry */ +"theme.acc.light" = "Light"; + +/* Dark Theme entry */ +"theme.name.dark" = "Dark"; + +/* Entry for Default System theme */ +"theme.name.default" = "System Default"; + +/* Light Theme entry */ +"theme.name.light" = "Light"; + +/* Confirmation of an action - populated with a domain name */ +"toast.protection.disabled" = "Privacy Protection disabled for %@"; + +/* Confirmation of an action - populated with a domain name */ +"toast.protection.disabled.and.toggle.report.sent" = "Privacy Protections disabled for %@ and report sent."; + +/* Confirmation of an action - populated with a domain name */ +"toast.protection.enabled" = "Privacy Protection enabled for %@"; + +/* Autocomplete selected suggestion into the Address Bar button accessibility label */ +"voiceover.action.suggestion.autocomplete" = "Autocomplete suggestion"; + +/* Voice-over title for a Bookmark suggestion. Noun */ +"voiceover.suggestion.type.bookmark" = "Bookmark"; + +/* Search for suggestion action accessibility title */ +"voiceover.suggestion.type.search" = "Search at DuckDuckGo"; + +/* Open suggested website action accessibility title */ +"voiceover.suggestion.type.website" = "Open website"; + +/* No microphone permission alert action button to open the settings app */ +"voiceSearch.alert.no-permission.action.settings" = "Settings"; + +/* Message for alert warning the user about missing microphone permission */ +"voiceSearch.alert.no-permission.message" = "Please allow Microphone access in iOS System Settings for DuckDuckGo to use voice features."; + +/* OK button alert warning the user about missing microphone permission */ +"voiceSearch.alert.no-permission.ok" = "OK"; + +/* Title for alert warning the user about missing microphone permission */ +"voiceSearch.alert.no-permission.title" = "Microphone Access Required"; + +/* Cancel button for voice search */ +"voiceSearch.cancel" = "Cancel"; + +/* Voice-search footer note with on-device privacy warning */ +"voiceSearch.footer.note" = "Add Private Voice Search option to the address bar. Audio is not stored or shared with anyone, including DuckDuckGo."; + +/* Voice-search footer note with on-device privacy warning */ +"voiceSearch.footer.note.old" = "Audio is processed on-device. It's not stored or shared with anyone, including DuckDuckGo."; + +/* Cancel action for the alert when the subscription expires */ +"vpn.access-revoked.alert.action.cancel" = "Dismiss"; + +/* Primary action for the alert when the subscription expires */ +"vpn.access-revoked.alert.action.subscribe" = "Subscribe"; + +/* Alert message for the alert when the Privacy Pro subscription expiress */ +"vpn.access-revoked.alert.message" = "Subscribe to Privacy Pro to reconnect DuckDuckGo VPN."; + +/* Alert title for the alert when the Privacy Pro subscription expires */ +"vpn.access-revoked.alert.title" = "VPN disconnected due to expired subscription"; + +/* Title for the VPN widget onboarding screen */ +"vpn.addWidget.settings.title" = "Find and select DuckDuckGo. Then swipe to VPN and select Add Widget."; + +/* Title for the Cancel button of the VPN feedback form */ +"vpn.feedback-form.button.cancel" = "Cancel"; + +/* Title for the Done button of the VPN feedback form */ +"vpn.feedback-form.button.done" = "Done"; + +/* Title for the Submit button of the VPN feedback form */ +"vpn.feedback-form.button.submit" = "Submit"; + +/* Title for the Submitting state of the VPN feedback form */ +"vpn.feedback-form.button.submitting" = "Submitting…"; + +/* Title for the browser crash/freeze category of the VPN feedback form */ +"vpn.feedback-form.category.browser-crash-or-freeze" = "VPN causes browser to crash or freeze"; + +/* Title for the 'VPN fails to connect' category of the VPN feedback form */ +"vpn.feedback-form.category.fails-to-connect" = "VPN fails to connect"; + +/* Title for the 'VPN feature request' category of the VPN feedback form */ +"vpn.feedback-form.category.feature-request" = "VPN feature request"; + +/* Title for the category 'VPN causes issues with other apps or websites' category of the VPN feedback form */ +"vpn.feedback-form.category.issues-with-apps" = "VPN causes issues with other apps or websites"; + +/* Title for the local device connectivity category of the VPN feedback form */ +"vpn.feedback-form.category.local-device-connectivity" = "VPN won't let me connect to local device"; + +/* Title for the 'other VPN feedback' category of the VPN feedback form */ +"vpn.feedback-form.category.other" = "Other VPN feedback"; + +/* Title for the category selection state of the VPN feedback form */ +"vpn.feedback-form.category.select-category" = "Select a category"; + +/* Title for the 'VPN is too slow' category of the VPN feedback form */ +"vpn.feedback-form.category.too-slow" = "VPN connection is too slow"; + +/* Title for the 'unable to install' category of the VPN feedback form */ +"vpn.feedback-form.category.unable-to-install" = "Unable to install VPN"; + +/* Title for the feedback sent view description of the VPN feedback form */ +"vpn.feedback-form.sending-confirmation.description" = "Your feedback will help us improve the\nDuckDuckGo VPN."; + +/* Title for the feedback sending error text of the VPN feedback form */ +"vpn.feedback-form.sending-confirmation.error" = "We couldn't send your feedback right now, please try again."; + +/* Title for the feedback sent view title of the VPN feedback form */ +"vpn.feedback-form.sending-confirmation.title" = "Thank you!"; + +/* Toast message when the VPN feedback form is submitted successfully */ +"vpn.feedback-form.submitted.message" = "Thank You! Feedback submitted."; + +/* Text for the body of the VPN feedback form */ +"vpn.feedback-form.text-1" = "Please describe what's happening, what you expected to happen, and the steps that led to the issue:"; + +/* Text for the body of the VPN feedback form */ +"vpn.feedback-form.text-2" = "In addition to the details entered into this form, your app issue report will contain:"; + +/* Bullet text for the body of the VPN feedback form */ +"vpn.feedback-form.text-3" = "• Whether specific DuckDuckGo features are enabled"; + +/* Bullet text for the body of the VPN feedback form */ +"vpn.feedback-form.text-4" = "• Aggregate DuckDuckGo app diagnostics"; + +/* Text for the body of the VPN feedback form */ +"vpn.feedback-form.text-5" = "By tapping \"Submit\" I agree that DuckDuckGo may use the information in this report for purposes of improving the app's features."; + +/* Title for each screen of the VPN feedback form */ +"vpn.feedback-form.title" = "Help Improve the DuckDuckGo VPN"; + +/* VPN settings screen cell text for adding the VPN widget to the home screen */ +"vpn.settings.add.widget" = "Add VPN Widget to Home Screen"; + +/* Disclaimer for the DNS Server section on the DNS Server screen */ +"vpn.settings.dns.section-disclaimer" = "Using a custom DNS server can impact browsing speeds and expose your activity to third parties if the server isn't secure or reliable."; + +/* Header text for the DNS section on the VPN Settings screen */ +"vpn.settings.dns.section-header" = "DNS"; + +/* Title for the Apply button on the DNS Server setting screen */ +"vpn.settings.dns.server.apply.button.title" = "Apply"; + +/* Default value for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.default.value" = "DuckDuckGo"; + +/* Title for the IPv4 Address setting */ +"vpn.settings.dns.server.ipv4.title" = "IPv4 Address"; + +/* Custom option for the DNS Server setting */ +"vpn.settings.dns.server.option.custom" = "Custom"; + +/* Recommended option for the DNS Server setting */ +"vpn.settings.dns.server.option.default" = "DuckDuckGo (Recommended)"; + +/* Title for the DNS Server setting screen */ +"vpn.settings.dns.server.screen.title" = "DNS Server"; + +/* Title for the DNS Server row on the VPN Settings screen */ +"vpn.settings.dns.server.title" = "DNS Server"; + +/* Title for the button to enable push notifications in system settings */ +"waitlist.allow-notifications" = "Allow Notifications"; + +/* Body text for the waitlist notification */ +"waitlist.available.notification.body" = "Open your invite"; + +/* Title for the copy action */ +"waitlist.copy" = "Copy"; + +/* Label text for the invite code */ +"waitlist.invite-code" = "Invite Code"; + +/* Step title on the invite screen */ +"waitlist.invite-screen.step.title" = "Step %d"; + +/* Title for the invite code screen */ +"waitlist.invite-screen.youre-invited" = "You’re Invited!"; + +/* Title for the Join Waitlist screen */ +"waitlist.join-waitlist-screen.join" = "Join the Private Waitlist"; + +/* Temporary status text for the Join Waitlist screen */ +"waitlist.join-waitlist-screen.joining" = "Joining Waitlist..."; + +/* Title for the Share Link button */ +"waitlist.join-waitlist-screen.share-link" = "Share Link"; + +/* Notification text for the waitlist */ +"waitlist.joined.no-notification.get-notification" = "Notify Me"; + +/* Title for the alert to confirm enabling notifications */ +"waitlist.joined.no-notification.get-notification-confirmation-title" = "Get a notification when it’s your turn?"; + +/* Cancel button in the alert to confirm enabling notifications */ +"waitlist.joined.no-notification.no-thanks" = "No Thanks"; + +/* Text used for the Notifications Disabled state */ +"waitlist.notification.disabled" = "We can notify you when it’s your turn, but notifications are currently disabled for DuckDuckGo."; + +/* Privacy disclaimer for the Waitlist feature */ +"waitlist.privacy-disclaimer" = "You won’t need to share any personal information to join the waitlist. You’ll secure your place in line with a timestamp that exists solely on your device so we can notify you when it’s your turn."; + +/* Title for the queue screen */ +"waitlist.queue-screen.on-the-list" = "You’re on the list!"; + +/* Title for the settings subtitle */ +"waitlist.settings.download-available" = "Download available"; + +/* Title for the share sheet entry */ +"waitlist.share-sheet.title" = "You’re Invited!"; + +/* Confirmation message */ +"web.url.remove.favorite.done" = "Favorite removed"; + +/* Confirmation message */ +"web.url.save.bookmark.done" = "Bookmark added"; + +/* Floating Info message */ +"web.url.save.bookmark.exists" = "Bookmark already saved"; + +/* Floating message indicating failure */ +"web.url.save.bookmark.none" = "No webpage to bookmark"; + +/* Confirmation message */ +"web.url.save.favorite.done" = "Favorite added"; + +/* Cancel button for JavaScript alerts */ +"webJSAlert.cancel.button" = "Cancel"; + +/* OK button for JavaScript alerts */ +"webJSAlert.OK.button" = "OK"; + +/* Alert title explaining the message is shown by a website */ +"webJSAlert.website-message.format" = "A message from %@:"; + +/* Title for the Windows waitlist button redirecting to Mac waitlist */ +"windows-waitlist.join-waitlist-screen.mac-waitlist" = "Looking for the Mac version?"; + +/* Title for the settings subtitle */ +"windows-waitlist.settings.browse-privately" = "Browse privately with our app for Windows"; + +/* Message used when sharing to iMessage */ +"windows-waitlist.share-sheet.message" = "Ready to start browsing privately on Windows? + +Visit this URL on your Computer to download: +https://duckduckgo.com/windows"; + +/* Summary text for the Windows browser waitlist */ +"windows-waitlist.summary" = "DuckDuckGo for Windows has what you need to browse with more privacy — private search, tracker blocking, forced encryption, and cookie pop-up blocking, plus more best-in-class protections on the way."; + +/* Title for the Windows Waitlist feature */ +"windows-waitlist.title" = "DuckDuckGo App for Windows"; + +/* Title for the Windows browser download link page */ +"windows-waitlist.waitlist-download-screen.try-duckduckgo-for-windows" = "Get DuckDuckGo for Windows!"; + diff --git a/DuckDuckGoTests/BrokenSiteReportingTests.swift b/DuckDuckGoTests/BrokenSiteReportingTests.swift index 3c515cf373..a99c8b8f1f 100644 --- a/DuckDuckGoTests/BrokenSiteReportingTests.swift +++ b/DuckDuckGoTests/BrokenSiteReportingTests.swift @@ -88,7 +88,7 @@ final class BrokenSiteReportingTests: XCTestCase { return } - os_log("Testing [%s]", type: .info, test.name) + print("Testing [%s]", test.name) var errors: [Error]? if let errs = test.errorDescriptions { diff --git a/DuckDuckGoTests/DomainMatchingReportTests.swift b/DuckDuckGoTests/DomainMatchingReportTests.swift index bc2fa040af..3e1a04ec09 100644 --- a/DuckDuckGoTests/DomainMatchingReportTests.swift +++ b/DuckDuckGoTests/DomainMatchingReportTests.swift @@ -23,6 +23,7 @@ import XCTest import Foundation import BrowserServicesKit import Common +import os.log class DomainMatchingReportTests: XCTestCase { private var data = JsonTestDataLoader() @@ -41,10 +42,10 @@ class DomainMatchingReportTests: XCTestCase { for test in tests { let skip = test.exceptPlatforms?.contains("ios-browser") if skip == true { - os_log("!!SKIPPING TEST: %s", test.name) + print("!!SKIPPING TEST: %s", test.name) continue } - os_log("TEST: %s", test.name) + print("TEST: %s", test.name) let tracker = resolver.trackerFromUrl(test.requestURL, pageUrlString: test.siteURL, diff --git a/DuckDuckGoTests/DomainMatchingTests.swift b/DuckDuckGoTests/DomainMatchingTests.swift index 7a797fb43e..7587895b26 100644 --- a/DuckDuckGoTests/DomainMatchingTests.swift +++ b/DuckDuckGoTests/DomainMatchingTests.swift @@ -65,10 +65,10 @@ class DomainMatchingTests: XCTestCase { for test in tests { let skip = test.exceptPlatforms?.contains("ios-browser") if skip == true { - os_log("!!SKIPPING TEST: %s", test.name) + print("!!SKIPPING TEST: %s", test.name) continue } - os_log("TEST: %s", test.name) + print("TEST: %s", test.name) let requestURL = URL(string: test.requestURL) let siteURL = URL(string: test.siteURL) let requestType = ContentBlockerRulesBuilder.resourceMapping[test.requestType] diff --git a/DuckDuckGoTests/FireButtonReferenceTests.swift b/DuckDuckGoTests/FireButtonReferenceTests.swift index e37c970d27..95fe1ea718 100644 --- a/DuckDuckGoTests/FireButtonReferenceTests.swift +++ b/DuckDuckGoTests/FireButtonReferenceTests.swift @@ -52,7 +52,7 @@ final class FireButtonReferenceTests: XCTestCase { for site in testData.fireButtonFireproofing.fireproofedSites { let sanitizedSite = sanitizedSite(site) - os_log("Adding %s to fireproofed sites", sanitizedSite) + print("Adding %s to fireproofed sites", sanitizedSite) preservedLogins.addToAllowed(domain: sanitizedSite) } @@ -96,7 +96,7 @@ final class FireButtonReferenceTests: XCTestCase { for site in testData.fireButtonFireproofing.fireproofedSites { let sanitizedSite = sanitizedSite(site) - os_log("Adding %s to fireproofed sites", sanitizedSite) + print("Adding %s to fireproofed sites", sanitizedSite) preservedLogins.addToAllowed(domain: sanitizedSite) } diff --git a/PacketTunnelProvider/NetworkProtection/VPNLogger.swift b/PacketTunnelProvider/NetworkProtection/VPNLogger.swift index 86bed3b686..eb8281007f 100644 --- a/PacketTunnelProvider/NetworkProtection/VPNLogger.swift +++ b/PacketTunnelProvider/NetworkProtection/VPNLogger.swift @@ -31,14 +31,16 @@ public final class VPNLogger { public typealias AttemptStep = PacketTunnelProvider.AttemptStep public typealias ConnectionAttempt = PacketTunnelProvider.ConnectionAttempt public typealias ConnectionTesterStatus = PacketTunnelProvider.ConnectionTesterStatus - public typealias LogCallback = (OSLogType, OSLogMessage) -> Void +// public typealias LogCallback = (OSLogType, OSLogMessage) -> Void public init() {} + @available(*, deprecated, message: "This goes against Apple logging guidelines and will be removed, please don't use it anymore") public func logStartingWithoutAuthToken() { Logger.networkProtection.error("🔴 Starting tunnel without an auth token") } + @available(*, deprecated, message: "This goes against Apple logging guidelines and will be removed, please don't use it anymore") public func log(_ step: AttemptStep, named name: String) { switch step { case .begin: @@ -50,7 +52,7 @@ public final class VPNLogger { } } - + @available(*, deprecated, message: "This goes against Apple logging guidelines and will be removed, please don't use it anymore") public func log(_ step: ConnectionAttempt) { switch step { case .connecting: @@ -62,6 +64,7 @@ public final class VPNLogger { } } + @available(*, deprecated, message: "This goes against Apple logging guidelines and will be removed, please don't use it anymore") public func log(_ status: ConnectionTesterStatus, server: String) { switch status { case .failed(let duration): @@ -71,6 +74,7 @@ public final class VPNLogger { } } + @available(*, deprecated, message: "This goes against Apple logging guidelines and will be removed, please don't use it anymore") public func log(_ step: FailureRecoveryStep) { switch step { case .started: @@ -87,6 +91,7 @@ public final class VPNLogger { } } + @available(*, deprecated, message: "This goes against Apple logging guidelines and will be removed, please don't use it anymore") public func log(_ step: NetworkProtectionTunnelFailureMonitor.Result) { switch step { case .failureDetected: @@ -98,6 +103,7 @@ public final class VPNLogger { } } + @available(*, deprecated, message: "This goes against Apple logging guidelines and will be removed, please don't use it anymore") public func log(_ result: NetworkProtectionLatencyMonitor.Result) { switch result { case .error: From fc45a14601479a165d0871c046bfb3c955746920 Mon Sep 17 00:00:00 2001 From: Federico Cappelli Date: Fri, 23 Aug 2024 09:11:29 +0100 Subject: [PATCH 03/10] noisy log silenced --- DuckDuckGo/Autoconsent/AutoconsentUserScript.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/DuckDuckGo/Autoconsent/AutoconsentUserScript.swift b/DuckDuckGo/Autoconsent/AutoconsentUserScript.swift index eaabda28e9..2a359b2748 100644 --- a/DuckDuckGo/Autoconsent/AutoconsentUserScript.swift +++ b/DuckDuckGo/Autoconsent/AutoconsentUserScript.swift @@ -89,12 +89,10 @@ final class AutoconsentUserScript: NSObject, WKScriptMessageHandlerWithReply, Us func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage, replyHandler: @escaping (Any?, String?) -> Void) { - Logger.autoconsent.debug("Message received: \(String(describing: message.body))") return handleMessage(replyHandler: replyHandler, message: message) } } -// @available(macOS 11, *) extension AutoconsentUserScript { enum MessageName: String, CaseIterable { case `init` From a4f41069fbcbbef5cd43d15f1555e9671d22961e Mon Sep 17 00:00:00 2001 From: Federico Cappelli Date: Fri, 23 Aug 2024 12:32:06 +0100 Subject: [PATCH 04/10] autoconsent logger in bsk --- Core/Logger+Multiple.swift | 1 - .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Core/Logger+Multiple.swift b/Core/Logger+Multiple.swift index d21fad0d64..937ee2c8f8 100644 --- a/Core/Logger+Multiple.swift +++ b/Core/Logger+Multiple.swift @@ -23,7 +23,6 @@ import os.log public extension Logger { static var adAttribution = { Logger(subsystem: "AD Attribution", category: "") }() static var lifecycle = { Logger(subsystem: "Lifecycle", category: "") }() - static var autoconsent = { Logger(subsystem: "Autoconsent", category: "") }() static var configuration = { Logger(subsystem: "Configuration", category: "") }() static var duckPlayer = { Logger(subsystem: "DuckPlayer", category: "") }() } diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 28a050745a..385b3e6418 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -33,7 +33,7 @@ "location" : "https://github.com/DuckDuckGo/BrowserServicesKit", "state" : { "branch" : "fcappelli/os_log_to_logger_2", - "revision" : "0d2493e8cf1593213f655befdd07818719238ebf" + "revision" : "befd442fbd4c5041074fef43689757453d18f2bb" } }, { From cf78364fe41e73a6e2752f8873a69f54dc690c1d Mon Sep 17 00:00:00 2001 From: Federico Cappelli Date: Fri, 23 Aug 2024 13:43:58 +0100 Subject: [PATCH 05/10] vpnlogger moved to bsk --- DuckDuckGo.xcodeproj/project.pbxproj | 4 - .../xcshareddata/swiftpm/Package.resolved | 2 +- .../NetworkProtection/VPNLogger.swift | 115 ------------------ 3 files changed, 1 insertion(+), 120 deletions(-) delete mode 100644 PacketTunnelProvider/NetworkProtection/VPNLogger.swift diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 2b6047db3e..0b503036ab 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -343,7 +343,6 @@ 6FE127462C2054A900EB5724 /* NewTabPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FE127452C2054A900EB5724 /* NewTabPageViewController.swift */; }; 6FE1274B2C20943500EB5724 /* ShortcutItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FE1274A2C20943500EB5724 /* ShortcutItemView.swift */; }; 6FF915822B88E07A0042AC87 /* AdAttributionFetcherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FF915802B88E0750042AC87 /* AdAttributionFetcherTests.swift */; }; - 7B0D52352C35FEAD0035A60E /* VPNLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0D52342C35FEAD0035A60E /* VPNLogger.swift */; }; 7BC571202BDBB877003B0CCE /* VPNActivationDateStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BC5711F2BDBB877003B0CCE /* VPNActivationDateStore.swift */; }; 7BC571212BDBB977003B0CCE /* VPNActivationDateStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BC5711F2BDBB877003B0CCE /* VPNActivationDateStore.swift */; }; 83004E802193BB8200DA013C /* WKNavigationExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83004E7F2193BB8200DA013C /* WKNavigationExtension.swift */; }; @@ -1561,7 +1560,6 @@ 6FE127452C2054A900EB5724 /* NewTabPageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewTabPageViewController.swift; sourceTree = ""; }; 6FE1274A2C20943500EB5724 /* ShortcutItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShortcutItemView.swift; sourceTree = ""; }; 6FF915802B88E0750042AC87 /* AdAttributionFetcherTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdAttributionFetcherTests.swift; sourceTree = ""; }; - 7B0D52342C35FEAD0035A60E /* VPNLogger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VPNLogger.swift; sourceTree = ""; }; 7BC5711F2BDBB877003B0CCE /* VPNActivationDateStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VPNActivationDateStore.swift; sourceTree = ""; }; 83004E7F2193BB8200DA013C /* WKNavigationExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WKNavigationExtension.swift; sourceTree = ""; }; 83004E832193E14C00DA013C /* UIAlertControllerExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = UIAlertControllerExtension.swift; path = ../Core/UIAlertControllerExtension.swift; sourceTree = ""; }; @@ -5173,7 +5171,6 @@ EE3766DC2AC5940A00AAB575 /* NetworkProtection */ = { isa = PBXGroup; children = ( - 7B0D52342C35FEAD0035A60E /* VPNLogger.swift */, EEEB80A22A421CE600386378 /* NetworkProtectionPacketTunnelProvider.swift */, EE3766DD2AC5945500AAB575 /* NetworkProtectionUNNotificationPresenter.swift */, ); @@ -6936,7 +6933,6 @@ EEEB80A32A421CE600386378 /* NetworkProtectionPacketTunnelProvider.swift in Sources */, EE3766DE2AC5945500AAB575 /* NetworkProtectionUNNotificationPresenter.swift in Sources */, F1FDC9362BF51E41006B1435 /* VPNSettings+Environment.swift in Sources */, - 7B0D52352C35FEAD0035A60E /* VPNLogger.swift in Sources */, BDFF03212BA3D3CF00F324C9 /* NetworkProtectionVisibilityForTunnelProvider.swift in Sources */, EEFC6A602AC0F2F80065027D /* UserText.swift in Sources */, 7BC571212BDBB977003B0CCE /* VPNActivationDateStore.swift in Sources */, diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 385b3e6418..888c3de490 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -33,7 +33,7 @@ "location" : "https://github.com/DuckDuckGo/BrowserServicesKit", "state" : { "branch" : "fcappelli/os_log_to_logger_2", - "revision" : "befd442fbd4c5041074fef43689757453d18f2bb" + "revision" : "6c201e5fe131c2ec10aaeeca6b0ca51a1c2a194c" } }, { diff --git a/PacketTunnelProvider/NetworkProtection/VPNLogger.swift b/PacketTunnelProvider/NetworkProtection/VPNLogger.swift deleted file mode 100644 index eb8281007f..0000000000 --- a/PacketTunnelProvider/NetworkProtection/VPNLogger.swift +++ /dev/null @@ -1,115 +0,0 @@ -// -// VPNLogger.swift -// DuckDuckGo -// -// Copyright © 2023 DuckDuckGo. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation -import NetworkProtection -import os.log - -/// Logger for the VPN -/// -/// Since we'll want to ensure this adheres to our privacy standards, grouping the logging logic to be mostly -/// handled by a single class sounds like a good approach to be able to review what's being logged.. -/// -@available(*, deprecated, message: "This goes against Apple logging guidelines and will be removed, please don't use it anymore") -public final class VPNLogger { - public typealias AttemptStep = PacketTunnelProvider.AttemptStep - public typealias ConnectionAttempt = PacketTunnelProvider.ConnectionAttempt - public typealias ConnectionTesterStatus = PacketTunnelProvider.ConnectionTesterStatus -// public typealias LogCallback = (OSLogType, OSLogMessage) -> Void - - public init() {} - - @available(*, deprecated, message: "This goes against Apple logging guidelines and will be removed, please don't use it anymore") - public func logStartingWithoutAuthToken() { - Logger.networkProtection.error("🔴 Starting tunnel without an auth token") - } - - @available(*, deprecated, message: "This goes against Apple logging guidelines and will be removed, please don't use it anymore") - public func log(_ step: AttemptStep, named name: String) { - switch step { - case .begin: - Logger.networkProtection.debug("🔵 \(name, privacy: .public) attempt begins") - case .failure(let error): - Logger.networkProtection.error("🔴 \(name, privacy: .public) attempt failed with error: \(error.localizedDescription, privacy: .public)") - case .success: - Logger.networkProtection.debug("🟢 \(name, privacy: .public) attempt succeeded") - } - } - - @available(*, deprecated, message: "This goes against Apple logging guidelines and will be removed, please don't use it anymore") - public func log(_ step: ConnectionAttempt) { - switch step { - case .connecting: - Logger.networkProtection.debug("🔵 Connection attempt detected") - case .failure: - Logger.networkProtection.error("🔴 Connection attempt failed") - case .success: - Logger.networkProtection.debug("🟢 Connection attempt successful") - } - } - - @available(*, deprecated, message: "This goes against Apple logging guidelines and will be removed, please don't use it anymore") - public func log(_ status: ConnectionTesterStatus, server: String) { - switch status { - case .failed(let duration): - Logger.networkProtectionConnectionTester.error("🔴 Connection tester (\(duration.rawValue, privacy: .public) - \(server, privacy: .public)) failure") - case .recovered(let duration, let failureCount): - Logger.networkProtectionConnectionTester.debug("🟢 Connection tester (\(duration.rawValue, privacy: .public) - \(server, privacy: .public)) recovery (after \(String(failureCount), privacy: .public) failures)") - } - } - - @available(*, deprecated, message: "This goes against Apple logging guidelines and will be removed, please don't use it anymore") - public func log(_ step: FailureRecoveryStep) { - switch step { - case .started: - Logger.networkProtectionTunnelFailureMonitor.debug("🔵 Failure Recovery attempt started") - case .failed(let error): - Logger.networkProtectionTunnelFailureMonitor.error("🔴 Failure Recovery attempt failed with error: \(error.localizedDescription, privacy: .public)") - case .completed(let health): - switch health { - case .healthy: - Logger.networkProtectionTunnelFailureMonitor.debug("🟢 Failure Recovery attempt completed") - case .unhealthy: - Logger.networkProtectionTunnelFailureMonitor.error("🔴 Failure Recovery attempt ended as unhealthy") - } - } - } - - @available(*, deprecated, message: "This goes against Apple logging guidelines and will be removed, please don't use it anymore") - public func log(_ step: NetworkProtectionTunnelFailureMonitor.Result) { - switch step { - case .failureDetected: - Logger.networkProtectionTunnelFailureMonitor.error("🔴 Tunnel failure detected") - case .failureRecovered: - Logger.networkProtectionTunnelFailureMonitor.debug("🟢 Tunnel failure recovered") - case .networkPathChanged: - Logger.networkProtectionTunnelFailureMonitor.debug("🔵 Tunnel recovery detected path change") - } - } - - @available(*, deprecated, message: "This goes against Apple logging guidelines and will be removed, please don't use it anymore") - public func log(_ result: NetworkProtectionLatencyMonitor.Result) { - switch result { - case .error: - Logger.networkProtectionLatencyMonitor.error("🔴 There was an error logging the latency") - case .quality(let quality): - Logger.networkProtectionLatencyMonitor.debug("Connection quality is: \(quality.rawValue, privacy: .public)") - } - } -} From 386b1e081388e16fec9e9e002324ec0260f33e01 Mon Sep 17 00:00:00 2001 From: Federico Cappelli Date: Tue, 27 Aug 2024 14:02:15 +0100 Subject: [PATCH 06/10] BSK updated --- .../xcshareddata/swiftpm/Package.resolved | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 888c3de490..e6c627d265 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -33,7 +33,7 @@ "location" : "https://github.com/DuckDuckGo/BrowserServicesKit", "state" : { "branch" : "fcappelli/os_log_to_logger_2", - "revision" : "6c201e5fe131c2ec10aaeeca6b0ca51a1c2a194c" + "revision" : "0cc02b70461ec81062dc57b5dfc94daeaae15eeb" } }, { @@ -122,8 +122,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/privacy-dashboard", "state" : { - "revision" : "36dc07cba4bc1e7e0c1d1fb679c3cd077694a072", - "version" : "5.0.0" + "revision" : "665b23dc656c9f787494620494f8e56098a900b2", + "version" : "5.1.1" } }, { From 25b8db637aac4563dbb29abd1b0833f8479263ae Mon Sep 17 00:00:00 2001 From: Federico Cappelli Date: Tue, 27 Aug 2024 14:10:25 +0100 Subject: [PATCH 07/10] log fixed --- DuckDuckGo/MainViewController+Segues.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuckDuckGo/MainViewController+Segues.swift b/DuckDuckGo/MainViewController+Segues.swift index ed7a5801e5..d8855e560a 100644 --- a/DuckDuckGo/MainViewController+Segues.swift +++ b/DuckDuckGo/MainViewController+Segues.swift @@ -256,7 +256,7 @@ extension MainViewController { } func segueToVPN() { - os_log(#function, log: .generalLog, type: .debug) + Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() launchSettings { $0.triggerDeepLinkNavigation(to: .netP) From b1d4b0d19f23880167a5e90d46ea7c5cfe0730fd Mon Sep 17 00:00:00 2001 From: Federico Cappelli Date: Tue, 27 Aug 2024 16:19:12 +0100 Subject: [PATCH 08/10] bsk update --- .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index e6c627d265..e7e09d60a3 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -33,7 +33,7 @@ "location" : "https://github.com/DuckDuckGo/BrowserServicesKit", "state" : { "branch" : "fcappelli/os_log_to_logger_2", - "revision" : "0cc02b70461ec81062dc57b5dfc94daeaae15eeb" + "revision" : "187078f2e150c51e578fe8e9fa047b338f194214" } }, { From e085bb3687010123f6f9a3ece28d1c188fd26ca7 Mon Sep 17 00:00:00 2001 From: Federico Cappelli Date: Wed, 28 Aug 2024 11:13:01 +0100 Subject: [PATCH 09/10] BSK update --- .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index e175de855b..aa57c968f8 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -33,7 +33,7 @@ "location" : "https://github.com/DuckDuckGo/BrowserServicesKit", "state" : { "branch" : "fcappelli/os_log_to_logger_2", - "revision" : "71c74297e2f20e3d267533549a4314e7fded3be2" + "revision" : "5139df4ae2c75e8810d5563e2fb52292639f154a" } }, { From ebc98fb61c612c6704d419b034a2c4e15506fd16 Mon Sep 17 00:00:00 2001 From: Federico Cappelli Date: Wed, 28 Aug 2024 12:10:28 +0100 Subject: [PATCH 10/10] BSK 188.0.0 --- DuckDuckGo.xcodeproj/project.pbxproj | 4 ++-- .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 2d9b40b35d..17e3b6058f 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -10626,8 +10626,8 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/DuckDuckGo/BrowserServicesKit"; requirement = { - branch = fcappelli/os_log_to_logger_2; - kind = branch; + kind = exactVersion; + version = 188.0.0; }; }; 9F8FE9472BAE50E50071E372 /* XCRemoteSwiftPackageReference "lottie-spm" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index aa57c968f8..036f584a2e 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -32,8 +32,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/DuckDuckGo/BrowserServicesKit", "state" : { - "branch" : "fcappelli/os_log_to_logger_2", - "revision" : "5139df4ae2c75e8810d5563e2fb52292639f154a" + "revision" : "faf25f57d1d61ff855216178c454616031585c07", + "version" : "188.0.0" } }, {