diff --git a/Images.xcassets/Open In/Maps.imageset/Maps@2x.png b/Images.xcassets/Open In/Maps.imageset/Maps@2x.png index 10ff707a5c..bfccc77337 100644 Binary files a/Images.xcassets/Open In/Maps.imageset/Maps@2x.png and b/Images.xcassets/Open In/Maps.imageset/Maps@2x.png differ diff --git a/Images.xcassets/Open In/Maps.imageset/Maps@3x.png b/Images.xcassets/Open In/Maps.imageset/Maps@3x.png index ceb3c880ee..29e2387b08 100644 Binary files a/Images.xcassets/Open In/Maps.imageset/Maps@3x.png and b/Images.xcassets/Open In/Maps.imageset/Maps@3x.png differ diff --git a/Images.xcassets/Open In/Safari.imageset/Safari@2x.png b/Images.xcassets/Open In/Safari.imageset/Safari@2x.png index 0d153020a9..a833be5d05 100644 Binary files a/Images.xcassets/Open In/Safari.imageset/Safari@2x.png and b/Images.xcassets/Open In/Safari.imageset/Safari@2x.png differ diff --git a/Images.xcassets/Open In/Safari.imageset/Safari@3x.png b/Images.xcassets/Open In/Safari.imageset/Safari@3x.png index 85e12f5b4b..9de9152228 100644 Binary files a/Images.xcassets/Open In/Safari.imageset/Safari@3x.png and b/Images.xcassets/Open In/Safari.imageset/Safari@3x.png differ diff --git a/Images.xcassets/Settings/Permissions/CellularData.imageset/Data@2x.png b/Images.xcassets/Settings/Permissions/CellularData.imageset/Data@2x.png index 78eef8de85..0ae923b1bf 100644 Binary files a/Images.xcassets/Settings/Permissions/CellularData.imageset/Data@2x.png and b/Images.xcassets/Settings/Permissions/CellularData.imageset/Data@2x.png differ diff --git a/Images.xcassets/Settings/Permissions/CellularData.imageset/Data@3x.png b/Images.xcassets/Settings/Permissions/CellularData.imageset/Data@3x.png index 4e1a72b5bf..e43226bebc 100644 Binary files a/Images.xcassets/Settings/Permissions/CellularData.imageset/Data@3x.png and b/Images.xcassets/Settings/Permissions/CellularData.imageset/Data@3x.png differ diff --git a/Images.xcassets/Settings/Permissions/Contacts.imageset/Contacts@2x.png b/Images.xcassets/Settings/Permissions/Contacts.imageset/Contacts@2x.png index 08d2c27321..040d350efe 100644 Binary files a/Images.xcassets/Settings/Permissions/Contacts.imageset/Contacts@2x.png and b/Images.xcassets/Settings/Permissions/Contacts.imageset/Contacts@2x.png differ diff --git a/Images.xcassets/Settings/Permissions/Contacts.imageset/Contacts@3x.png b/Images.xcassets/Settings/Permissions/Contacts.imageset/Contacts@3x.png index ff5730e8c8..5866f691eb 100644 Binary files a/Images.xcassets/Settings/Permissions/Contacts.imageset/Contacts@3x.png and b/Images.xcassets/Settings/Permissions/Contacts.imageset/Contacts@3x.png differ diff --git a/Images.xcassets/Settings/Permissions/Notifications.imageset/Notifications@2x.png b/Images.xcassets/Settings/Permissions/Notifications.imageset/Notifications@2x.png index 73e31ebf60..634bbca801 100644 Binary files a/Images.xcassets/Settings/Permissions/Notifications.imageset/Notifications@2x.png and b/Images.xcassets/Settings/Permissions/Notifications.imageset/Notifications@2x.png differ diff --git a/Images.xcassets/Settings/Permissions/Notifications.imageset/Notifications@3x.png b/Images.xcassets/Settings/Permissions/Notifications.imageset/Notifications@3x.png index 3d23a06a62..0176c7757c 100644 Binary files a/Images.xcassets/Settings/Permissions/Notifications.imageset/Notifications@3x.png and b/Images.xcassets/Settings/Permissions/Notifications.imageset/Notifications@3x.png differ diff --git a/Images.xcassets/Settings/Permissions/Siri.imageset/Siri@2x.png b/Images.xcassets/Settings/Permissions/Siri.imageset/Siri@2x.png index c67f2c1c30..457b2d53c7 100644 Binary files a/Images.xcassets/Settings/Permissions/Siri.imageset/Siri@2x.png and b/Images.xcassets/Settings/Permissions/Siri.imageset/Siri@2x.png differ diff --git a/Images.xcassets/Settings/Permissions/Siri.imageset/Siri@3x.png b/Images.xcassets/Settings/Permissions/Siri.imageset/Siri@3x.png index e9bf9db62e..3fc45952bc 100644 Binary files a/Images.xcassets/Settings/Permissions/Siri.imageset/Siri@3x.png and b/Images.xcassets/Settings/Permissions/Siri.imageset/Siri@3x.png differ diff --git a/Images.xcassets/Settings/RecentSessionsPlaceholder.imageset/AuthSessionsEmptyIcon@2x.png b/Images.xcassets/Settings/RecentSessionsPlaceholder.imageset/AuthSessionsEmptyIcon@2x.png index 7d34d11e78..8d38948db0 100644 Binary files a/Images.xcassets/Settings/RecentSessionsPlaceholder.imageset/AuthSessionsEmptyIcon@2x.png and b/Images.xcassets/Settings/RecentSessionsPlaceholder.imageset/AuthSessionsEmptyIcon@2x.png differ diff --git a/Images.xcassets/Settings/RecentSessionsPlaceholder.imageset/AuthSessionsEmptyIcon@3x.png b/Images.xcassets/Settings/RecentSessionsPlaceholder.imageset/AuthSessionsEmptyIcon@3x.png index 05764e885e..a469d3d969 100644 Binary files a/Images.xcassets/Settings/RecentSessionsPlaceholder.imageset/AuthSessionsEmptyIcon@3x.png and b/Images.xcassets/Settings/RecentSessionsPlaceholder.imageset/AuthSessionsEmptyIcon@3x.png differ diff --git a/TelegramUI.xcodeproj/project.pbxproj b/TelegramUI.xcodeproj/project.pbxproj index 1c110a481a..233b545e57 100644 --- a/TelegramUI.xcodeproj/project.pbxproj +++ b/TelegramUI.xcodeproj/project.pbxproj @@ -67,6 +67,11 @@ 09874E5721078FA100E190B8 /* YoutubeUserScript.js in Resources */ = {isa = PBXBuildFile; fileRef = 0979788121065F8B0077D77F /* YoutubeUserScript.js */; }; 09874E582107A4C300E190B8 /* VimeoEmbedImplementation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09874E3A21075BF400E190B8 /* VimeoEmbedImplementation.swift */; }; 09874E592107BD4100E190B8 /* GenericEmbedImplementation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09874E4021075C1700E190B8 /* GenericEmbedImplementation.swift */; }; + 099529AA21CDB27900805E13 /* ShareProxyServerActionSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099529A921CDB27900805E13 /* ShareProxyServerActionSheetController.swift */; }; + 099529AC21CDBBB200805E13 /* QRCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099529AB21CDBBB200805E13 /* QRCode.swift */; }; + 099529AE21D045C400805E13 /* ThemeGridActionNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099529AD21D045C400805E13 /* ThemeGridActionNode.swift */; }; + 099529B021D2123E00805E13 /* ChatMessageUnsupportedBubbleContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099529AF21D2123E00805E13 /* ChatMessageUnsupportedBubbleContentNode.swift */; }; + 099529B221D24F5800805E13 /* RadialDownloadContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099529B121D24F5800805E13 /* RadialDownloadContentNode.swift */; }; 09AE3823214C110900850BFD /* LegacySecureIdScanController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09AE3822214C110800850BFD /* LegacySecureIdScanController.swift */; }; 09B4EE4721A6D33F00847FA6 /* RecentSessionsEmptyStateItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09B4EE4621A6D33F00847FA6 /* RecentSessionsEmptyStateItem.swift */; }; 09B4EE4D21A7B73800847FA6 /* PermissionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09B4EE4C21A7B73800847FA6 /* PermissionController.swift */; }; @@ -1166,6 +1171,11 @@ 09874E4021075C1700E190B8 /* GenericEmbedImplementation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GenericEmbedImplementation.swift; sourceTree = ""; }; 09874E4221075C3000E190B8 /* VKEmbedImplementation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VKEmbedImplementation.swift; sourceTree = ""; }; 09874E4421075C3F00E190B8 /* StreamableEmbedImplementation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StreamableEmbedImplementation.swift; sourceTree = ""; }; + 099529A921CDB27900805E13 /* ShareProxyServerActionSheetController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareProxyServerActionSheetController.swift; sourceTree = ""; }; + 099529AB21CDBBB200805E13 /* QRCode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCode.swift; sourceTree = ""; }; + 099529AD21D045C400805E13 /* ThemeGridActionNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeGridActionNode.swift; sourceTree = ""; }; + 099529AF21D2123E00805E13 /* ChatMessageUnsupportedBubbleContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageUnsupportedBubbleContentNode.swift; sourceTree = ""; }; + 099529B121D24F5800805E13 /* RadialDownloadContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadialDownloadContentNode.swift; sourceTree = ""; }; 09AE3822214C110800850BFD /* LegacySecureIdScanController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacySecureIdScanController.swift; sourceTree = ""; }; 09B4EE4621A6D33F00847FA6 /* RecentSessionsEmptyStateItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentSessionsEmptyStateItem.swift; sourceTree = ""; }; 09B4EE4C21A7B73800847FA6 /* PermissionController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionController.swift; sourceTree = ""; }; @@ -2530,6 +2540,7 @@ D0A723531FC3B40E0094D167 /* RadialCheckContentNode.swift */, D01776B91F1D704F0044446D /* RadialStatusIconContentNode.swift */, D0380DAA204EA72F000414AB /* RadialStatusSecretTimeoutContentNode.swift */, + 099529B121D24F5800805E13 /* RadialDownloadContentNode.swift */, ); name = "Radial Status"; sourceTree = ""; @@ -3058,8 +3069,8 @@ D05174A81EAA46E000A1BF36 /* ThemeGalleryItem.swift */, D05174AA1EAA5B4700A1BF36 /* ThemeGalleryToolbarNode.swift */, D0EC6B351EB88D0A00EBF1C3 /* ThemeGridController.swift */, - D091C7A51F8ECEA300D7DE13 /* SettingsThemeWallpaperNode.swift */, D0EC6B371EB88D1600EBF1C3 /* ThemeGridControllerNode.swift */, + D091C7A51F8ECEA300D7DE13 /* SettingsThemeWallpaperNode.swift */, D0C0B5B61EE1DEF1000F4D2C /* ThemeGridControllerItem.swift */, D0B37C5B1F8D22AE004252DF /* ThemeSettingsController.swift */, D0B37C5D1F8D26A8004252DF /* ThemeSettingsChatPreviewItem.swift */, @@ -3068,6 +3079,7 @@ D06E4C342134AE3C00088087 /* ThemeAutoNightSettingsController.swift */, D06F31E3213597FF001A0F12 /* ThemeAutoNightTimeSelectionActionSheet.swift */, D06F31E52135A41C001A0F12 /* ThemeSettingsBrightnessItem.swift */, + 099529AD21D045C400805E13 /* ThemeGridActionNode.swift */, ); name = Themes; sourceTree = ""; @@ -3656,6 +3668,7 @@ D0185E8B208A025A005E1A6C /* ProxySettingsServerItem.swift */, D07E413C208A494D00FCA8F0 /* ProxyServerActionSheetController.swift */, D0A8998C217A294100759EE6 /* SaveIncomingMediaController.swift */, + 099529A921CDB27900805E13 /* ShareProxyServerActionSheetController.swift */, ); name = "Data and Storage"; sourceTree = ""; @@ -4434,6 +4447,7 @@ D0380DB7204EE0A5000414AB /* ChatInstantVideoMessageDurationNode.swift */, D018BE57218C7BD800C02DDC /* ChatMessageDeliveryFailedNode.swift */, D0AB262821C307D7008F6685 /* ChatMessagePollBubbleContentNode.swift */, + 099529AF21D2123E00805E13 /* ChatMessageUnsupportedBubbleContentNode.swift */, ); name = Items; sourceTree = ""; @@ -4675,6 +4689,7 @@ D09F9DCE20768DAF00DB4DE1 /* SecureIdLocalResource.swift */, 0941A9A3210B0E2E00EBE194 /* OpenInAppIconResources.swift */, D01FB436217CEC62009C6134 /* FetchVideoThumbnail.swift */, + 099529AB21CDBBB200805E13 /* QRCode.swift */, ); name = Resources; sourceTree = ""; @@ -5430,6 +5445,7 @@ D0AD02E81FFFDE5F00C1DCFF /* ChatMessageLiveLocationTimerNode.swift in Sources */, D0EC6D7D1EB9F58800EBF1C3 /* ChatListSearchRecentPeersNode.swift in Sources */, D0EC6D7E1EB9F58800EBF1C3 /* ChatListSearchItemHeader.swift in Sources */, + 099529AE21D045C400805E13 /* ThemeGridActionNode.swift in Sources */, D0EC6D7F1EB9F58800EBF1C3 /* HashtagSearchController.swift in Sources */, D0EC6D801EB9F58800EBF1C3 /* HashtagSearchControllerNode.swift in Sources */, D0EC6D811EB9F58800EBF1C3 /* ChatController.swift in Sources */, @@ -5453,6 +5469,7 @@ D0EC6D8B1EB9F58800EBF1C3 /* ChatHistoryNavigationStack.swift in Sources */, D0EC6D8C1EB9F58800EBF1C3 /* NavigateToChatController.swift in Sources */, 0962E67321B622BE00245FD9 /* PermissionSplitTest.swift in Sources */, + 099529B021D2123E00805E13 /* ChatMessageUnsupportedBubbleContentNode.swift in Sources */, D0EC6D8D1EB9F58800EBF1C3 /* ChatMessageActionItemNode.swift in Sources */, D0192D44210A5AA50005FA10 /* DeviceContactDataManager.swift in Sources */, D0EC6D8E1EB9F58800EBF1C3 /* ChatMessageAvatarAccessoryItem.swift in Sources */, @@ -5559,6 +5576,7 @@ D06E4C312134910400088087 /* ChatListEmptyNode.swift in Sources */, D0EC6DB81EB9F58900EBF1C3 /* WebpagePreviewAccessoryPanelNode.swift in Sources */, D0EC6DB91EB9F58900EBF1C3 /* ChatInputNode.swift in Sources */, + 099529AC21CDBBB200805E13 /* QRCode.swift in Sources */, D0EC6DBA1EB9F58900EBF1C3 /* ChatMediaInputNode.swift in Sources */, D0E9BA2F1F0557D400F079A4 /* STPAddress.m in Sources */, D0EC6DBB1EB9F58900EBF1C3 /* ChatMediaInputStickerPane.swift in Sources */, @@ -5580,6 +5598,7 @@ D0EC6DC31EB9F58900EBF1C3 /* ChatMediaInputStickerGridItem.swift in Sources */, D0EC6DC41EB9F58900EBF1C3 /* MultiplexedSoftwareVideoNode.swift in Sources */, D0BE30432061B80B00FBE6D8 /* SecureIdAuthControllerNode.swift in Sources */, + 099529B221D24F5800805E13 /* RadialDownloadContentNode.swift in Sources */, D0E9BAE81F0574FF00F079A4 /* STPCustomer.m in Sources */, D0C0B59F1EE082F5000F4D2C /* ChatSearchInputPanelNode.swift in Sources */, D079FCD91F05A5550038FADE /* BotCheckoutPasswordEntryController.swift in Sources */, @@ -5597,6 +5616,7 @@ D0EC6DCC1EB9F58900EBF1C3 /* ChatButtonKeyboardInputNode.swift in Sources */, D0CFBB861FD715E700B65C0D /* LegacyHTTPOperationImpl.swift in Sources */, D06CF82920D0119500AC4CFF /* SecureIdAuthListFieldNode.swift in Sources */, + 099529AA21CDB27900805E13 /* ShareProxyServerActionSheetController.swift in Sources */, D0EC6DCD1EB9F58900EBF1C3 /* ChatInputContextPanelNode.swift in Sources */, D0F8C399201774AF00236FC5 /* FeedGroupingControllerNode.swift in Sources */, D0EEE9A12165585F001292A6 /* DocumentPreviewController.swift in Sources */, diff --git a/TelegramUI/ArchivedStickerPacksController.swift b/TelegramUI/ArchivedStickerPacksController.swift index d6349886ac..1c792e9aaa 100644 --- a/TelegramUI/ArchivedStickerPacksController.swift +++ b/TelegramUI/ArchivedStickerPacksController.swift @@ -411,7 +411,7 @@ public func archivedStickerPacksController(account: Account, mode: ArchivedStick } presentStickerPackController = { [weak controller] info in - presentControllerImpl?(StickerPackPreviewController(account: account, stickerPack: .id(id: info.id.id, accessHash: info.accessHash), parentNavigationController: controller?.navigationController as? NavigationController), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) + presentControllerImpl?(StickerPackPreviewController(account: account, stickerPack: .id(id: info.id.id, accessHash: info.accessHash), mode: .settings, parentNavigationController: controller?.navigationController as? NavigationController), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) } return controller diff --git a/TelegramUI/CallListNodeEntries.swift b/TelegramUI/CallListNodeEntries.swift index 64bcb82fc2..b751965dee 100644 --- a/TelegramUI/CallListNodeEntries.swift +++ b/TelegramUI/CallListNodeEntries.swift @@ -186,7 +186,7 @@ func callListNodeEntriesForView(_ view: CallListView, state: CallListNodeState, } if showSettings { result.append(.displayTabInfo(state.theme, state.strings.CallSettings_TabIconDescription)) - result.append(.displayTab(state.theme, state.strings.Calls_CallTabTitle, showCallsTab)) + result.append(.displayTab(state.theme, state.strings.CallSettings_TabIcon, showCallsTab)) } return result } diff --git a/TelegramUI/ChannelVisibilityController.swift b/TelegramUI/ChannelVisibilityController.swift index 132cc70d0e..94e2659b95 100644 --- a/TelegramUI/ChannelVisibilityController.swift +++ b/TelegramUI/ChannelVisibilityController.swift @@ -803,8 +803,9 @@ public func channelVisibilityController(account: Account, peerId: PeerId, mode: return nil } |> deliverOnMainQueue).start(next: { link in if let link = link { - let shareController = ShareController(account: account, subject: .url(link)) - presentControllerImpl?(shareController, nil) + let presentationData = account.telegramApplicationContext.currentPresentationData.with { $0 } + let controller = ShareProxyServerActionSheetController(theme: presentationData.theme, strings: presentationData.strings, updatedPresentationData: .complete(), link: link) + presentControllerImpl?(controller, nil) } }) }) diff --git a/TelegramUI/ChatController.swift b/TelegramUI/ChatController.swift index ad2364e7c8..10d15190b8 100644 --- a/TelegramUI/ChatController.swift +++ b/TelegramUI/ChatController.swift @@ -1131,6 +1131,10 @@ public final class ChatController: TelegramController, KeyShortcutResponder, Gal strongSelf.selectPollOptionFeedback?.success() }), forKey: id) } + }, openAppStorePage: { [weak self] in + if let strongSelf = self { + strongSelf.account.telegramApplicationContext.applicationBindings.openAppStorePage() + } }, requestMessageUpdate: { [weak self] id in if let strongSelf = self { strongSelf.chatDisplayNode.historyNode.requestMessageUpdate(id) @@ -3757,6 +3761,8 @@ public final class ChatController: TelegramController, KeyShortcutResponder, Gal } else { self?.enqueueMediaMessages(signals: signals) } + }, recognizedQRCode: { code in + self?.processQRCode(code) }) } }, openFileGallery: { @@ -5856,6 +5862,16 @@ public final class ChatController: TelegramController, KeyShortcutResponder, Gal return inputShortcuts + otherShortcuts } + private func processQRCode(_ code: String) { + if let (host, port, username, password, secret) = parseProxyUrl(code) { + self.openResolved(ResolvedUrl.proxy(host: host, port: port, username: username, password: password, secret: secret)) + } else { + let _ = resolveUrl(account: self.account, url: code).start(next: { [weak self] resolved in + self?.openResolved(resolved) + }) + } + } + func getTransitionInfo(messageId: MessageId, media: Media) -> ((UIView) -> Void, ASDisplayNode, () -> UIView?)? { var selectedNode: (ASDisplayNode, () -> UIView?)? self.chatDisplayNode.historyNode.forEachItemNode { itemNode in diff --git a/TelegramUI/ChatControllerInteraction.swift b/TelegramUI/ChatControllerInteraction.swift index 85519245a6..c0acfd8d19 100644 --- a/TelegramUI/ChatControllerInteraction.swift +++ b/TelegramUI/ChatControllerInteraction.swift @@ -83,6 +83,7 @@ public final class ChatControllerInteraction { let addContact: (String) -> Void let rateCall: (Message, CallId) -> Void let requestSelectMessagePollOption: (MessageId, Data) -> Void + let openAppStorePage: () -> Void let requestMessageUpdate: (MessageId) -> Void let cancelInteractiveKeyboardGestures: () -> Void @@ -94,7 +95,7 @@ public final class ChatControllerInteraction { var automaticMediaDownloadSettings: AutomaticMediaDownloadSettings var pollActionState: ChatInterfacePollActionState - init(openMessage: @escaping (Message, ChatControllerInteractionOpenMessageMode) -> Bool, openPeer: @escaping (PeerId?, ChatControllerInteractionNavigateToPeer, Message?) -> Void, openPeerMention: @escaping (String) -> Void, openMessageContextMenu: @escaping (Message, Bool, ASDisplayNode, CGRect) -> Void, navigateToMessage: @escaping (MessageId, MessageId) -> Void, clickThroughMessage: @escaping () -> Void, toggleMessagesSelection: @escaping ([MessageId], Bool) -> Void, sendMessage: @escaping (String) -> Void, sendSticker: @escaping (FileMediaReference, Bool) -> Void, sendGif: @escaping (FileMediaReference) -> Void, requestMessageActionCallback: @escaping (MessageId, MemoryBuffer?, Bool) -> Void, activateSwitchInline: @escaping (PeerId?, String) -> Void, openUrl: @escaping (String, Bool, Bool?) -> Void, shareCurrentLocation: @escaping () -> Void, shareAccountContact: @escaping () -> Void, sendBotCommand: @escaping (MessageId?, String) -> Void, openInstantPage: @escaping (Message) -> Void, openHashtag: @escaping (String?, String) -> Void, updateInputState: @escaping ((ChatTextInputState) -> ChatTextInputState) -> Void, updateInputMode: @escaping ((ChatInputMode) -> ChatInputMode) -> Void, openMessageShareMenu: @escaping (MessageId) -> Void, presentController: @escaping (ViewController, Any?) -> Void, navigationController: @escaping () -> NavigationController?, presentGlobalOverlayController: @escaping (ViewController, Any?) -> Void, callPeer: @escaping (PeerId) -> Void, longTap: @escaping (ChatControllerInteractionLongTapAction) -> Void, openCheckoutOrReceipt: @escaping (MessageId) -> Void, openSearch: @escaping () -> Void, setupReply: @escaping (MessageId) -> Void, canSetupReply: @escaping (Message) -> Bool, navigateToFirstDateMessage: @escaping(Int32) ->Void, requestRedeliveryOfFailedMessages: @escaping (MessageId) -> Void, addContact: @escaping (String) -> Void, rateCall: @escaping (Message, CallId) -> Void, requestSelectMessagePollOption: @escaping (MessageId, Data) -> Void, requestMessageUpdate: @escaping (MessageId) -> Void, cancelInteractiveKeyboardGestures: @escaping () -> Void, automaticMediaDownloadSettings: AutomaticMediaDownloadSettings, pollActionState: ChatInterfacePollActionState) { + init(openMessage: @escaping (Message, ChatControllerInteractionOpenMessageMode) -> Bool, openPeer: @escaping (PeerId?, ChatControllerInteractionNavigateToPeer, Message?) -> Void, openPeerMention: @escaping (String) -> Void, openMessageContextMenu: @escaping (Message, Bool, ASDisplayNode, CGRect) -> Void, navigateToMessage: @escaping (MessageId, MessageId) -> Void, clickThroughMessage: @escaping () -> Void, toggleMessagesSelection: @escaping ([MessageId], Bool) -> Void, sendMessage: @escaping (String) -> Void, sendSticker: @escaping (FileMediaReference, Bool) -> Void, sendGif: @escaping (FileMediaReference) -> Void, requestMessageActionCallback: @escaping (MessageId, MemoryBuffer?, Bool) -> Void, activateSwitchInline: @escaping (PeerId?, String) -> Void, openUrl: @escaping (String, Bool, Bool?) -> Void, shareCurrentLocation: @escaping () -> Void, shareAccountContact: @escaping () -> Void, sendBotCommand: @escaping (MessageId?, String) -> Void, openInstantPage: @escaping (Message) -> Void, openHashtag: @escaping (String?, String) -> Void, updateInputState: @escaping ((ChatTextInputState) -> ChatTextInputState) -> Void, updateInputMode: @escaping ((ChatInputMode) -> ChatInputMode) -> Void, openMessageShareMenu: @escaping (MessageId) -> Void, presentController: @escaping (ViewController, Any?) -> Void, navigationController: @escaping () -> NavigationController?, presentGlobalOverlayController: @escaping (ViewController, Any?) -> Void, callPeer: @escaping (PeerId) -> Void, longTap: @escaping (ChatControllerInteractionLongTapAction) -> Void, openCheckoutOrReceipt: @escaping (MessageId) -> Void, openSearch: @escaping () -> Void, setupReply: @escaping (MessageId) -> Void, canSetupReply: @escaping (Message) -> Bool, navigateToFirstDateMessage: @escaping(Int32) ->Void, requestRedeliveryOfFailedMessages: @escaping (MessageId) -> Void, addContact: @escaping (String) -> Void, rateCall: @escaping (Message, CallId) -> Void, requestSelectMessagePollOption: @escaping (MessageId, Data) -> Void, openAppStorePage: @escaping () -> Void, requestMessageUpdate: @escaping (MessageId) -> Void, cancelInteractiveKeyboardGestures: @escaping () -> Void, automaticMediaDownloadSettings: AutomaticMediaDownloadSettings, pollActionState: ChatInterfacePollActionState) { self.openMessage = openMessage self.openPeer = openPeer self.openPeerMention = openPeerMention @@ -130,6 +131,7 @@ public final class ChatControllerInteraction { self.addContact = addContact self.rateCall = rateCall self.requestSelectMessagePollOption = requestSelectMessagePollOption + self.openAppStorePage = openAppStorePage self.requestMessageUpdate = requestMessageUpdate self.cancelInteractiveKeyboardGestures = cancelInteractiveKeyboardGestures diff --git a/TelegramUI/ChatListSearchContainerNode.swift b/TelegramUI/ChatListSearchContainerNode.swift index 4816408f0d..e9af505fc2 100644 --- a/TelegramUI/ChatListSearchContainerNode.swift +++ b/TelegramUI/ChatListSearchContainerNode.swift @@ -778,7 +778,8 @@ final class ChatListSearchContainerNode: SearchDisplayControllerContentNode { var existingPeerIds = Set() - if presentationData.strings.DialogList_SavedMessages.lowercased().hasPrefix(query.lowercased()) { + let lowercasedQuery = query.lowercased() + if presentationData.strings.DialogList_SavedMessages.lowercased().hasPrefix(lowercasedQuery) || "saved messages".hasPrefix(lowercasedQuery) { if !existingPeerIds.contains(accountPeer.id), filteredPeer(accountPeer, accountPeer) { existingPeerIds.insert(accountPeer.id) entries.append(.localPeer(accountPeer, nil, nil, index, presentationData.theme, presentationData.strings, presentationData.nameSortOrder, presentationData.nameDisplayOrder)) diff --git a/TelegramUI/ChatMessageAttachedContentNode.swift b/TelegramUI/ChatMessageAttachedContentNode.swift index c7bf3ba604..3af88aaf8e 100644 --- a/TelegramUI/ChatMessageAttachedContentNode.swift +++ b/TelegramUI/ChatMessageAttachedContentNode.swift @@ -657,13 +657,13 @@ final class ChatMessageAttachedContentNode: ASDisplayNode { let (size, apply) = finalizeContentFileLayout(boundingWidth - insets.left - insets.right) contentFileSizeAndApply = (size, apply) - var imageHeigthAddition = size.height + 6.0 + var imageHeightAddition = size.height + 6.0 if textFrame.size.height > CGFloat.ulpOfOne { - imageHeigthAddition += 2.0 + imageHeightAddition += 6.0 } - adjustedBoundingSize.height += imageHeigthAddition + 5.0 - adjustedLineHeight += imageHeigthAddition + 4.0 + adjustedBoundingSize.height += imageHeightAddition + 5.0 + adjustedLineHeight += imageHeightAddition + 4.0 } if let (videoLayout, _) = contentInstantVideoSizeAndApply { @@ -794,7 +794,7 @@ final class ChatMessageAttachedContentNode: ASDisplayNode { if let (_, flags) = mediaAndFlags, flags.contains(.preferMediaBeforeText) { contentFileNode.frame = CGRect(origin: CGPoint(x: insets.left, y: insets.top), size: contentFileSize) } else { - contentFileNode.frame = CGRect(origin: CGPoint(x: insets.left, y: textFrame.maxY + (textFrame.size.height > CGFloat.ulpOfOne ? 4.0 : 0.0)), size: contentFileSize) + contentFileNode.frame = CGRect(origin: CGPoint(x: insets.left, y: textFrame.maxY + (textFrame.size.height > CGFloat.ulpOfOne ? 8.0 : 0.0)), size: contentFileSize) } } else if let contentFileNode = strongSelf.contentFileNode { contentFileNode.removeFromSupernode() diff --git a/TelegramUI/ChatMessageBubbleItemNode.swift b/TelegramUI/ChatMessageBubbleItemNode.swift index 68dcbb778d..9d40706be4 100644 --- a/TelegramUI/ChatMessageBubbleItemNode.swift +++ b/TelegramUI/ChatMessageBubbleItemNode.swift @@ -72,6 +72,10 @@ private func contentNodeMessagesAndClassesForItem(_ item: ChatMessageItem) -> [( break inner } } + + if isUnsupportedMedia { + result.append((message, ChatMessageUnsupportedBubbleContentNode.self)) + } } if addFinalText && !item.content.firstMessage.text.isEmpty { diff --git a/TelegramUI/ChatMessageInteractiveFileNode.swift b/TelegramUI/ChatMessageInteractiveFileNode.swift index 1b5e00a854..017eba71b3 100644 --- a/TelegramUI/ChatMessageInteractiveFileNode.swift +++ b/TelegramUI/ChatMessageInteractiveFileNode.swift @@ -348,7 +348,7 @@ final class ChatMessageInteractiveFileNode: ASDisplayNode { } } - let (titleLayout, titleApply) = titleAsyncLayout(TextNodeLayoutArguments(attributedString: titleString, backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .middle, constrainedSize: textConstrainedSize, alignment: .natural, cutout: nil, insets: UIEdgeInsets())) + let (titleLayout, titleApply) = titleAsyncLayout(TextNodeLayoutArguments(attributedString: titleString, backgroundColor: nil, maximumNumberOfLines: hasThumbnail ? 2 : 1, truncationType: .middle, constrainedSize: textConstrainedSize, alignment: .natural, cutout: nil, insets: UIEdgeInsets())) let (descriptionLayout, descriptionApply) = descriptionAsyncLayout(TextNodeLayoutArguments(attributedString: descriptionString, backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .middle, constrainedSize: textConstrainedSize, alignment: .natural, cutout: nil, insets: UIEdgeInsets())) let fileSizeString: String diff --git a/TelegramUI/ChatMessageTextBubbleContentNode.swift b/TelegramUI/ChatMessageTextBubbleContentNode.swift index a1ce1c1f96..0c7b455b1d 100644 --- a/TelegramUI/ChatMessageTextBubbleContentNode.swift +++ b/TelegramUI/ChatMessageTextBubbleContentNode.swift @@ -126,9 +126,10 @@ class ChatMessageTextBubbleContentNode: ChatMessageBubbleContentNode { isUnsupportedMedia = true } } - + if isUnsupportedMedia { - rawText = item.presentationData.strings.Conversation_UnsupportedMedia + rawText = item.presentationData.strings.Conversation_UnsupportedMediaPlaceholder + messageEntities = [MessageTextEntity(range: 0.. (_ item: ChatMessageBubbleContentItem, _ layoutConstants: ChatMessageItemLayoutConstants, _ preparePosition: ChatMessageBubblePreparePosition, _ messageSelection: Bool?, _ constrainedSize: CGSize) -> (ChatMessageBubbleContentProperties, CGSize?, CGFloat, (CGSize, ChatMessageBubbleContentPosition) -> (CGFloat, (CGFloat) -> (CGSize, (ListViewItemUpdateAnimation, Bool) -> Void))) { + let makeButtonLayout = ChatMessageAttachedContentButtonNode.asyncLayout(self.buttonNode) + + return { item, layoutConstants, _, _, constrainedSize in + let contentProperties = ChatMessageBubbleContentProperties(hidesSimpleAuthorHeader: false, headerSpacing: 8.0, hidesBackground: .never, forceFullCorners: false, forceAlignment: .none) + + return (contentProperties, nil, CGFloat.greatestFiniteMagnitude, { constrainedSize, position in + let message = item.message + let incoming = message.effectivelyIncoming(item.account.peerId) + let presentationData = item.presentationData + let insets = UIEdgeInsets(top: 0.0, left: 12.0, bottom: 9.0, right: 12.0) + + let buttonImage: UIImage + let buttonHighlightedImage: UIImage + let titleColor: UIColor + let titleHighlightedColor: UIColor + if incoming { + buttonImage = PresentationResourcesChat.chatMessageAttachedContentButtonIncoming(presentationData.theme.theme)! + buttonHighlightedImage = PresentationResourcesChat.chatMessageAttachedContentHighlightedButtonIncoming(presentationData.theme.theme)! + titleColor = presentationData.theme.theme.chat.bubble.incomingAccentTextColor + let bubbleColor = bubbleColorComponents(theme: presentationData.theme.theme, incoming: true, wallpaper: !presentationData.theme.wallpaper.isEmpty) + titleHighlightedColor = bubbleColor.fill + } else { + buttonImage = PresentationResourcesChat.chatMessageAttachedContentButtonOutgoing(presentationData.theme.theme)! + buttonHighlightedImage = PresentationResourcesChat.chatMessageAttachedContentHighlightedButtonOutgoing(presentationData.theme.theme)! + titleColor = presentationData.theme.theme.chat.bubble.outgoingAccentTextColor + let bubbleColor = bubbleColorComponents(theme: presentationData.theme.theme, incoming: false, wallpaper: !presentationData.theme.wallpaper.isEmpty) + titleHighlightedColor = bubbleColor.fill + } + let (buttonWidth, continueActionButtonLayout) = makeButtonLayout(constrainedSize.width, buttonImage, buttonHighlightedImage, nil, nil, presentationData.strings.Conversation_UpdateTelegram, titleColor, titleHighlightedColor) + + let initialWidth = buttonWidth + insets.left + insets.right + + return (initialWidth, { boundingWidth in + var actionButtonSizeAndApply: ((CGSize, () -> ChatMessageAttachedContentButtonNode))? + let refinedButtonWidth = max(boundingWidth - insets.left - insets.right, buttonWidth) + + let (size, apply) = continueActionButtonLayout(refinedButtonWidth) + actionButtonSizeAndApply = (size, apply) + let adjustedBoundingSize = CGSize(width: refinedButtonWidth + insets.left + insets.right, height: insets.bottom + size.height) + + return (adjustedBoundingSize, { [weak self] animation, synchronousLoads in + if let strongSelf = self { + strongSelf.item = item + + if let (size, apply) = actionButtonSizeAndApply { + _ = apply() + strongSelf.buttonNode.frame = CGRect(origin: CGPoint(x: insets.left, y: 0.0), size: size) + } + } + }) + }) + }) + } + } + + override func animateInsertion(_ currentTimestamp: Double, duration: Double) { + self.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.25) + } + + override func animateAdded(_ currentTimestamp: Double, duration: Double) { + self.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.25) + } + + override func animateRemoved(_ currentTimestamp: Double, duration: Double) { + self.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.25, removeOnCompletion: false) + } + + override func animateInsertionIntoBubble(_ duration: Double) { + self.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.25) + } + + override func tapActionAtPoint(_ point: CGPoint, gesture: TapLongTapOrDoubleTapGesture) -> ChatMessageBubbleContentTapAction { + if self.bounds.contains(point) { + if self.buttonNode.frame.contains(point) { + return .ignore + } else { + return .none + } + } + return .none + } +} diff --git a/TelegramUI/ChatRecentActionsControllerNode.swift b/TelegramUI/ChatRecentActionsControllerNode.swift index 0b5e6118b6..3d9581ae9b 100644 --- a/TelegramUI/ChatRecentActionsControllerNode.swift +++ b/TelegramUI/ChatRecentActionsControllerNode.swift @@ -352,6 +352,10 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode { }, addContact: { _ in }, rateCall: { _, _ in }, requestSelectMessagePollOption: { _, _ in + }, openAppStorePage: { [weak self] in + if let strongSelf = self { + strongSelf.account.telegramApplicationContext.applicationBindings.openAppStorePage() + } }, requestMessageUpdate: { _ in }, cancelInteractiveKeyboardGestures: { }, automaticMediaDownloadSettings: self.automaticMediaDownloadSettings, diff --git a/TelegramUI/DebugController.swift b/TelegramUI/DebugController.swift index 9e495ab1b8..a5bc8e8dc4 100644 --- a/TelegramUI/DebugController.swift +++ b/TelegramUI/DebugController.swift @@ -223,7 +223,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { GlobalExperimentalSettings.forceTinyThumbnailsPreview = value }) case let .animatedStickers(theme): - return ItemListSwitchItem(theme: theme, title: "Animated Stickers", value: GlobalExperimentalSettings.animatedStickers, sectionId: self.section, style: .blocks, updated: { value in + return ItemListSwitchItem(theme: theme, title: "AJSON", value: GlobalExperimentalSettings.animatedStickers, sectionId: self.section, style: .blocks, updated: { value in GlobalExperimentalSettings.animatedStickers = value }) case let .versionInfo(theme): @@ -258,7 +258,7 @@ private func debugControllerEntries(presentationData: PresentationData, loggingS } entries.append(.sendTthumb(presentationData.theme)) entries.append(.previewTthumb(presentationData.theme)) - //entries.append(.animatedStickers(presentationData.theme)) + entries.append(.animatedStickers(presentationData.theme)) entries.append(.versionInfo(presentationData.theme)) return entries diff --git a/TelegramUI/EditSettingsController.swift b/TelegramUI/EditSettingsController.swift index 58f11f1a05..a620c406af 100644 --- a/TelegramUI/EditSettingsController.swift +++ b/TelegramUI/EditSettingsController.swift @@ -246,7 +246,7 @@ private func editSettingsEntries(presentationData: PresentationData, state: Edit if let peer = peerViewMainPeer(view) as? TelegramUser { let userInfoState = ItemListAvatarAndNameInfoItemState(editingName: state.editingName, updatingName: state.updatingName) entries.append(.userInfo(presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, peer, view.cachedData, userInfoState, state.updatingAvatar)) - entries.append(.userInfoNotice(presentationData.theme, presentationData.strings.Login_InfoHelp)) + entries.append(.userInfoNotice(presentationData.theme, presentationData.strings.EditProfile_NameAndPhotoHelp)) entries.append(.bioText(presentationData.theme, state.editingBioText, presentationData.strings.UserInfo_About_Placeholder)) entries.append(.bioInfo(presentationData.theme, presentationData.strings.Settings_About_Help)) @@ -377,7 +377,7 @@ func editSettingsController(account: Account, currentName: ItemListAvatarAndName }) } - let controllerState = ItemListControllerState(theme: presentationData.theme, title: .text(presentationData.strings.Common_Edit), leftNavigationButton: nil, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back)) + let controllerState = ItemListControllerState(theme: presentationData.theme, title: .text(presentationData.strings.EditProfile_Title), leftNavigationButton: nil, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back)) let listState = ItemListNodeState(entries: editSettingsEntries(presentationData: presentationData, state: state, view: view, wallpapers: wallpapers), style: .blocks) return (controllerState, (listState, arguments)) diff --git a/TelegramUI/FeaturedStickerPacksController.swift b/TelegramUI/FeaturedStickerPacksController.swift index 4192bbc149..d080aaa9b2 100644 --- a/TelegramUI/FeaturedStickerPacksController.swift +++ b/TelegramUI/FeaturedStickerPacksController.swift @@ -249,7 +249,7 @@ public func featuredStickerPacksController(account: Account) -> ViewController { } presentStickerPackController = { [weak controller] info in - presentControllerImpl?(StickerPackPreviewController(account: account, stickerPack: .id(id: info.id.id, accessHash: info.accessHash), parentNavigationController: controller?.navigationController as? NavigationController), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) + presentControllerImpl?(StickerPackPreviewController(account: account, stickerPack: .id(id: info.id.id, accessHash: info.accessHash), mode: .settings, parentNavigationController: controller?.navigationController as? NavigationController), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) } return controller diff --git a/TelegramUI/GalleryController.swift b/TelegramUI/GalleryController.swift index d77f4894de..5c714945f1 100644 --- a/TelegramUI/GalleryController.swift +++ b/TelegramUI/GalleryController.swift @@ -161,7 +161,11 @@ func galleryItemForEntry(account: Account, presentationData: PresentationData, e return UniversalVideoGalleryItem(account: account, presentationData: presentationData, content: content, originData: GalleryItemOriginData(title: message.author?.displayTitle, timestamp: message.timestamp), indexData: location.flatMap { GalleryItemIndexData(position: Int32($0.index), totalCount: Int32($0.count)) }, contentInfo: .message(message), caption: caption, hideControls: hideControls, playbackCompleted: playbackCompleted, performAction: performAction, openActionOptions: openActionOptions) } else { if file.mimeType.hasPrefix("image/") && file.mimeType != "image/gif" { - if file.size == nil || file.size! < 2 * 1024 * 1024 { + var pixelsCount: Int = 0 + if let dimensions = file.dimensions { + pixelsCount = Int(dimensions.width) * Int(dimensions.height) + } + if (file.size == nil || file.size! < 2 * 1024 * 1024) && pixelsCount < 4096 * 4096 { return ChatImageGalleryItem(account: account, presentationData: presentationData, message: message, location: location, performAction: performAction, openActionOptions: openActionOptions) } else { return ChatDocumentGalleryItem(account: account, presentationData: presentationData, message: message, location: location) diff --git a/TelegramUI/GalleryControllerNode.swift b/TelegramUI/GalleryControllerNode.swift index 1efa905816..9cbd0e576b 100644 --- a/TelegramUI/GalleryControllerNode.swift +++ b/TelegramUI/GalleryControllerNode.swift @@ -328,7 +328,7 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog self.updateDismissTransition(transition) if let toolbarNode = toolbarNode { - toolbarNode.layer.position = CGPoint(x: toolbarNode.layer.position.x, y: self.bounds.size.height - toolbarNode.bounds.size.height / 2.0 + (1.0 - transition) * toolbarNode.bounds.size.height) + toolbarNode.alpha = transition } } diff --git a/TelegramUI/InstalledStickerPacksController.swift b/TelegramUI/InstalledStickerPacksController.swift index 76f2ca8016..f9b3afb9f3 100644 --- a/TelegramUI/InstalledStickerPacksController.swift +++ b/TelegramUI/InstalledStickerPacksController.swift @@ -659,7 +659,7 @@ public func installedStickerPacksController(account: Account, mode: InstalledSti } } presentStickerPackController = { [weak controller] info in - presentControllerImpl?(StickerPackPreviewController(account: account, stickerPack: .id(id: info.id.id, accessHash: info.accessHash), parentNavigationController: controller?.navigationController as? NavigationController), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) + presentControllerImpl?(StickerPackPreviewController(account: account, stickerPack: .id(id: info.id.id, accessHash: info.accessHash), mode: .settings, parentNavigationController: controller?.navigationController as? NavigationController), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) } pushControllerImpl = { [weak controller] c in (controller?.navigationController as? NavigationController)?.pushViewController(c) diff --git a/TelegramUI/LegacyCamera.swift b/TelegramUI/LegacyCamera.swift index f63da3863b..a87796f575 100644 --- a/TelegramUI/LegacyCamera.swift +++ b/TelegramUI/LegacyCamera.swift @@ -6,7 +6,7 @@ import TelegramCore import Postbox import SwiftSignalKit -func presentedLegacyCamera(account: Account, peer: Peer, cameraView: TGAttachmentCameraView?, menuController: TGMenuSheetController?, parentController: ViewController, editingMedia: Bool, saveCapturedPhotos: Bool, mediaGrouping: Bool, sendMessagesWithSignals: @escaping ([Any]?) -> Void) { +func presentedLegacyCamera(account: Account, peer: Peer, cameraView: TGAttachmentCameraView?, menuController: TGMenuSheetController?, parentController: ViewController, editingMedia: Bool, saveCapturedPhotos: Bool, mediaGrouping: Bool, sendMessagesWithSignals: @escaping ([Any]?) -> Void, recognizedQRCode: @escaping (String) -> Void = { _ in }) { let presentationData = account.telegramApplicationContext.currentPresentationData.with { $0 } let legacyController = LegacyController(presentation: .custom, theme: presentationData.theme) legacyController.supportedOrientations = ViewControllerSupportedOrientations(regularSize: .portrait, compactSize: .portrait) @@ -141,6 +141,12 @@ func presentedLegacyCamera(account: Account, peer: Peer, cameraView: TGAttachmen legacyController?.dismissWithAnimation() } + controller.recognizedQRCode = { code in + if let code = code { + recognizedQRCode(code) + } + } + parentController.present(legacyController, in: .window(.root)) } diff --git a/TelegramUI/LegacyComponentsStickers.swift b/TelegramUI/LegacyComponentsStickers.swift index dc6949fad8..07f5f491db 100644 --- a/TelegramUI/LegacyComponentsStickers.swift +++ b/TelegramUI/LegacyComponentsStickers.swift @@ -4,6 +4,29 @@ import Postbox import TelegramCore import SwiftSignalKit +func stickerFromLegacyDocument(_ documentAttachment: TGDocumentMediaAttachment) -> TelegramMediaFile? { + if documentAttachment.isSticker() { + for case let sticker as TGDocumentAttributeSticker in documentAttachment.attributes { + var attributes: [TelegramMediaFileAttribute] = [] + var packReference: StickerPackReference? + if let legacyPackReference = sticker.packReference as? TGStickerPackIdReference { + packReference = .id(id: legacyPackReference.packId, accessHash: legacyPackReference.packAccessHash) + } else if let legacyPackReference = sticker.packReference as? TGStickerPackShortnameReference { + packReference = .name(legacyPackReference.shortName) + } + attributes.append(.Sticker(displayText: sticker.alt, packReference: packReference, maskData: nil)) + + var fileReference: Data? + if let originInfo = documentAttachment.originInfo, let data = originInfo.fileReference { + fileReference = data + } + + return TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.CloudFile, id: documentAttachment.documentId), partialReference: nil, resource: CloudDocumentMediaResource(datacenterId: Int(documentAttachment.datacenterId), fileId: documentAttachment.documentId, accessHash: documentAttachment.accessHash, size: Int(documentAttachment.size), fileReference: fileReference, fileName: documentAttachment.fileName()), previewRepresentations: [], mimeType: documentAttachment.mimeType, size: Int(documentAttachment.size), attributes: attributes) + } + } + return nil +} + func legacyComponentsStickers(postbox: Postbox, namespace: Int32) -> SSignal { return SSignal { subscriber in let disposable = (postbox.itemCollectionsView(orderedItemListCollectionIds: [], namespaces: [namespace], aroundIndex: nil, count: 1000)).start(next: { view in diff --git a/TelegramUI/LegacyMediaPickers.swift b/TelegramUI/LegacyMediaPickers.swift index 279eedadfb..2565e3a036 100644 --- a/TelegramUI/LegacyMediaPickers.swift +++ b/TelegramUI/LegacyMediaPickers.swift @@ -81,9 +81,9 @@ private enum LegacyAssetVideoData { } private enum LegacyAssetItem { - case image(data: LegacyAssetImageData, thumbnail: UIImage?, caption: String?) + case image(data: LegacyAssetImageData, thumbnail: UIImage?, caption: String?, stickers: [FileMediaReference]) case file(data: LegacyAssetImageData, thumbnail: UIImage?, mimeType: String, name: String, caption: String?) - case video(data: LegacyAssetVideoData, thumbnail: UIImage?, adjustments: TGVideoEditAdjustments?, caption: String?, asFile: Bool, asAnimation: Bool) + case video(data: LegacyAssetVideoData, thumbnail: UIImage?, adjustments: TGVideoEditAdjustments?, caption: String?, asFile: Bool, asAnimation: Bool, stickers: [FileMediaReference]) } private final class LegacyAssetItemWrapper: NSObject { @@ -106,8 +106,17 @@ func legacyAssetPickerItemGenerator() -> ((Any?, String?, [Any]?, String?) -> [A if (dict["type"] as! NSString) == "editedPhoto" || (dict["type"] as! NSString) == "capturedPhoto" { let image = dict["image"] as! UIImage let thumbnail = dict["previewImage"] as? UIImage + (dict["stickers"] as? Array).map { element in + + } + +// let stickers = (dict["stickers"] as? [TGDocumentMediaAttachment]).map { document -> FileMediaReference in +// if let sticker = stickerFromLegacyDocument(document) { +// return FileMediaReference.standalone(media: sticker) +// } +// } var result: [AnyHashable : Any] = [:] - result["item" as NSString] = LegacyAssetItemWrapper(item: .image(data: .image(image), thumbnail: thumbnail, caption: caption), timer: (dict["timer"] as? NSNumber)?.intValue, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value) + result["item" as NSString] = LegacyAssetItemWrapper(item: .image(data: .image(image), thumbnail: thumbnail, caption: caption, stickers: []), timer: (dict["timer"] as? NSNumber)?.intValue, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value) return result } else if (dict["type"] as! NSString) == "cloudPhoto" { let asset = dict["asset"] as! TGMediaAsset @@ -129,7 +138,7 @@ func legacyAssetPickerItemGenerator() -> ((Any?, String?, [Any]?, String?) -> [A result["item" as NSString] = LegacyAssetItemWrapper(item: .file(data: .asset(asset.backingAsset), thumbnail: thumbnail, mimeType: mimeType, name: name, caption: caption), timer: nil, groupedId: nil) } else { - result["item" as NSString] = LegacyAssetItemWrapper(item: .image(data: .asset(asset.backingAsset), thumbnail: thumbnail, caption: caption), timer: (dict["timer"] as? NSNumber)?.intValue, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value) + result["item" as NSString] = LegacyAssetItemWrapper(item: .image(data: .asset(asset.backingAsset), thumbnail: thumbnail, caption: caption, stickers: []), timer: (dict["timer"] as? NSNumber)?.intValue, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value) } return result } else if (dict["type"] as! NSString) == "file" { @@ -150,7 +159,7 @@ func legacyAssetPickerItemGenerator() -> ((Any?, String?, [Any]?, String?) -> [A let dimensions = (dict["dimensions"]! as AnyObject).cgSizeValue! let duration = (dict["duration"]! as AnyObject).doubleValue! - result["item" as NSString] = LegacyAssetItemWrapper(item: .video(data: .tempFile(path: tempFileUrl.path, dimensions: dimensions, duration: duration), thumbnail: thumbnail, adjustments: nil, caption: caption, asFile: false, asAnimation: true), timer: (dict["timer"] as? NSNumber)?.intValue, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value) + result["item" as NSString] = LegacyAssetItemWrapper(item: .video(data: .tempFile(path: tempFileUrl.path, dimensions: dimensions, duration: duration), thumbnail: thumbnail, adjustments: nil, caption: caption, asFile: false, asAnimation: true, stickers: []), timer: (dict["timer"] as? NSNumber)?.intValue, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value) return result } @@ -167,13 +176,13 @@ func legacyAssetPickerItemGenerator() -> ((Any?, String?, [Any]?, String?) -> [A if let asset = dict["asset"] as? TGMediaAsset { var result: [AnyHashable: Any] = [:] - result["item" as NSString] = LegacyAssetItemWrapper(item: .video(data: .asset(asset), thumbnail: thumbnail, adjustments: dict["adjustments"] as? TGVideoEditAdjustments, caption: caption, asFile: asFile, asAnimation: false), timer: (dict["timer"] as? NSNumber)?.intValue, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value) + result["item" as NSString] = LegacyAssetItemWrapper(item: .video(data: .asset(asset), thumbnail: thumbnail, adjustments: dict["adjustments"] as? TGVideoEditAdjustments, caption: caption, asFile: asFile, asAnimation: false, stickers: []), timer: (dict["timer"] as? NSNumber)?.intValue, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value) return result } else if let url = (dict["url"] as? String) ?? (dict["url"] as? URL)?.absoluteString { let dimensions = (dict["dimensions"]! as AnyObject).cgSizeValue! let duration = (dict["duration"]! as AnyObject).doubleValue! var result: [AnyHashable: Any] = [:] - result["item" as NSString] = LegacyAssetItemWrapper(item: .video(data: .tempFile(path: url, dimensions: dimensions, duration: duration), thumbnail: thumbnail, adjustments: dict["adjustments"] as? TGVideoEditAdjustments, caption: caption, asFile: asFile, asAnimation: false), timer: (dict["timer"] as? NSNumber)?.intValue, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value) + result["item" as NSString] = LegacyAssetItemWrapper(item: .video(data: .tempFile(path: url, dimensions: dimensions, duration: duration), thumbnail: thumbnail, adjustments: dict["adjustments"] as? TGVideoEditAdjustments, caption: caption, asFile: asFile, asAnimation: false, stickers: []), timer: (dict["timer"] as? NSNumber)?.intValue, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value) return result } } else if (dict["type"] as! NSString) == "cameraVideo" { @@ -189,7 +198,7 @@ func legacyAssetPickerItemGenerator() -> ((Any?, String?, [Any]?, String?) -> [A let dimensions = previewImage.pixelSize() let duration = (dict["duration"]! as AnyObject).doubleValue! var result: [AnyHashable: Any] = [:] - result["item" as NSString] = LegacyAssetItemWrapper(item: .video(data: .tempFile(path: url, dimensions: dimensions, duration: duration), thumbnail: thumbnail, adjustments: dict["adjustments"] as? TGVideoEditAdjustments, caption: caption, asFile: asFile, asAnimation: false), timer: (dict["timer"] as? NSNumber)?.intValue, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value) + result["item" as NSString] = LegacyAssetItemWrapper(item: .video(data: .tempFile(path: url, dimensions: dimensions, duration: duration), thumbnail: thumbnail, adjustments: dict["adjustments"] as? TGVideoEditAdjustments, caption: caption, asFile: asFile, asAnimation: false, stickers: []), timer: (dict["timer"] as? NSNumber)?.intValue, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value) return result } } @@ -247,7 +256,7 @@ func legacyAssetPickerEnqueueMessages(account: Account, signals: [Any]) -> Signa outer: for item in (anyValues as! NSArray) { if let item = (item as? NSDictionary)?.object(forKey: "item") as? LegacyAssetItemWrapper { switch item.item { - case let .image(data, thumbnail, caption): + case let .image(data, thumbnail, caption, stickers): var representations: [TelegramMediaImageRepresentation] = [] if let thumbnail = thumbnail { let resource = LocalFileMediaResource(fileId: arc4random64()) @@ -338,7 +347,7 @@ func legacyAssetPickerEnqueueMessages(account: Account, signals: [Any]) -> Signa default: break } - case let .video(data, thumbnail, adjustments, caption, asFile, asAnimation): + case let .video(data, thumbnail, adjustments, caption, asFile, asAnimation, stickers): var finalDimensions: CGSize var finalDuration: Double switch data { diff --git a/TelegramUI/LegqacyICloudFileController.swift b/TelegramUI/LegqacyICloudFileController.swift index 45ccfb711f..9961f6a355 100644 --- a/TelegramUI/LegqacyICloudFileController.swift +++ b/TelegramUI/LegqacyICloudFileController.swift @@ -51,6 +51,9 @@ func legacyICloudFileController(theme: PresentationTheme, completion: @escaping let controller = UIDocumentPickerViewController(documentTypes: documentTypes, in: .open) controller.delegate = legacyController + if #available(iOSApplicationExtension 11.0, *) { + controller.allowsMultipleSelection = true + } legacyController.presentationCompleted = { [weak legacyController] in if let legacyController = legacyController { diff --git a/TelegramUI/OverlayPlayerControllerNode.swift b/TelegramUI/OverlayPlayerControllerNode.swift index e75a8af3e0..345041507e 100644 --- a/TelegramUI/OverlayPlayerControllerNode.swift +++ b/TelegramUI/OverlayPlayerControllerNode.swift @@ -70,6 +70,7 @@ final class OverlayPlayerControllerNode: ViewControllerTracingNode, UIGestureRec }, addContact: { _ in }, rateCall: { _, _ in }, requestSelectMessagePollOption: { _, _ in + }, openAppStorePage: { }, requestMessageUpdate: { _ in }, cancelInteractiveKeyboardGestures: { }, automaticMediaDownloadSettings: AutomaticMediaDownloadSettings.defaultSettings, diff --git a/TelegramUI/OverlayPlayerControlsNode.swift b/TelegramUI/OverlayPlayerControlsNode.swift index 52625f5d01..5597f6d542 100644 --- a/TelegramUI/OverlayPlayerControlsNode.swift +++ b/TelegramUI/OverlayPlayerControlsNode.swift @@ -474,8 +474,8 @@ final class OverlayPlayerControlsNode: ASDisplayNode { let scrubberVerticalOrigin: CGFloat = infoVerticalOrigin + 64.0 transition.updateFrame(node: self.scrubberNode, frame: CGRect(origin: CGPoint(x: leftInset + sideInset, y: scrubberVerticalOrigin - 8.0), size: CGSize(width: width - sideInset * 2.0 - leftInset - rightInset, height: 10.0 + 8.0 * 2.0))) - transition.updateFrame(node: self.leftDurationLabel, frame: CGRect(origin: CGPoint(x: leftInset + sideInset, y: scrubberVerticalOrigin + 12.0), size: CGSize(width: 64.0, height: 20.0))) - transition.updateFrame(node: self.rightDurationLabel, frame: CGRect(origin: CGPoint(x: width - sideInset - rightInset - 64.0, y: scrubberVerticalOrigin + 12.0), size: CGSize(width: 64.0, height: 20.0))) + transition.updateFrame(node: self.leftDurationLabel, frame: CGRect(origin: CGPoint(x: leftInset + sideInset, y: scrubberVerticalOrigin + 12.0), size: CGSize(width: 100.0, height: 20.0))) + transition.updateFrame(node: self.rightDurationLabel, frame: CGRect(origin: CGPoint(x: width - sideInset - rightInset - 100.0, y: scrubberVerticalOrigin + 12.0), size: CGSize(width: 100.0, height: 20.0))) transition.updateFrame(node: self.backgroundNode, frame: CGRect(origin: CGPoint(x: 0.0, y: -8.0), size: CGSize(width: width, height: panelHeight + 8.0))) diff --git a/TelegramUI/PeerMediaCollectionController.swift b/TelegramUI/PeerMediaCollectionController.swift index 8409353c41..9586bda8b5 100644 --- a/TelegramUI/PeerMediaCollectionController.swift +++ b/TelegramUI/PeerMediaCollectionController.swift @@ -250,6 +250,7 @@ public class PeerMediaCollectionController: TelegramController { }, addContact: { _ in }, rateCall: { _, _ in }, requestSelectMessagePollOption: { _, _ in + }, openAppStorePage: { }, requestMessageUpdate: { _ in }, cancelInteractiveKeyboardGestures: { }, automaticMediaDownloadSettings: AutomaticMediaDownloadSettings.defaultSettings, diff --git a/TelegramUI/PermissionSplitTest.swift b/TelegramUI/PermissionSplitTest.swift index 0a7ecb1644..56166b127d 100644 --- a/TelegramUI/PermissionSplitTest.swift +++ b/TelegramUI/PermissionSplitTest.swift @@ -47,14 +47,14 @@ public struct PermissionUISplitTest: SplitTest { if let data = appConfiguration.data, let permissions = data["ui_permissions_modals"] as? [String: Any] { let contacts: PermissionUIRequestVariation if let modal = permissions["phonebook_modal"] as? [String: Any] { - contacts = .modal(title: modal["popup_title_lang"] as? String ?? "", text: modal["popup_title_lang"] as? String ?? "", allowTitle: modal["popup_title_lang"] as? String ?? "", allowInSettingsTitle: modal["popup_title_lang"] as? String ?? "") + contacts = .modal(title: modal["popup_title_lang"] as? String ?? "", text: modal["popup_text_lang"] as? String ?? "", allowTitle: modal["popup_allowbtn_lang"] as? String ?? "", allowInSettingsTitle: modal["popup_allowbtn_settings_lang"] as? String ?? "") } else { contacts = .default } let notifications: PermissionUIRequestVariation if let modal = permissions["notifications_modal"] as? [String: Any] { - notifications = .modal(title: modal["popup_title_lang"] as? String ?? "", text: modal["popup_title_lang"] as? String ?? "", allowTitle: modal["popup_title_lang"] as? String ?? "", allowInSettingsTitle: modal["popup_title_lang"] as? String ?? "") + notifications = .modal(title: modal["popup_title_lang"] as? String ?? "", text: modal["popup_text_lang"] as? String ?? "", allowTitle: modal["popup_allowbtn_lang"] as? String ?? "", allowInSettingsTitle: modal["popup_allowbtn_settings_lang"] as? String ?? "") } else { notifications = .default } diff --git a/TelegramUI/PresentationStrings.swift b/TelegramUI/PresentationStrings.swift index 3fff3cad92..526f3df175 100644 --- a/TelegramUI/PresentationStrings.swift +++ b/TelegramUI/PresentationStrings.swift @@ -974,2615 +974,2617 @@ public final class PresentationStrings { public var ReportPeer_ReasonOther_Title: String { return self._s[737]! } public var Checkout_ErrorProviderAccountTimeout: String { return self._s[738]! } public var TwoStepAuth_ResetAccountConfirmation: String { return self._s[739]! } - public var Channel_Stickers_CreateYourOwn: String { return self._s[741]! } + public var Conversation_UpdateTelegram: String { return self._s[741]! } + public var Channel_Stickers_CreateYourOwn: String { return self._s[742]! } public func Notification_PinnedPhotoMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[742]!, self._r[742]!, [_0]) + return formatWithArgumentRanges(self._s[743]!, self._r[743]!, [_0]) } public func MESSAGE_GAME(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[743]!, self._r[743]!, [_1, _2]) + return formatWithArgumentRanges(self._s[744]!, self._r[744]!, [_1, _2]) } public func PrivacySettings_LastSeenNobodyPlus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[744]!, self._r[744]!, [_0]) + return formatWithArgumentRanges(self._s[745]!, self._r[745]!, [_0]) } - public var Tour_Title3: String { return self._s[745]! } - public var Clipboard_SendPhoto: String { return self._s[749]! } - public var MediaPicker_Videos: String { return self._s[750]! } - public var Passport_Email_Title: String { return self._s[751]! } + public var Tour_Title3: String { return self._s[746]! } + public var Clipboard_SendPhoto: String { return self._s[750]! } + public var MediaPicker_Videos: String { return self._s[751]! } + public var Passport_Email_Title: String { return self._s[752]! } public func PrivacySettings_LastSeenEverybodyMinus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[752]!, self._r[752]!, [_0]) + return formatWithArgumentRanges(self._s[753]!, self._r[753]!, [_0]) } - public var StickerPacksSettings_Title: String { return self._s[753]! } - public var Conversation_MessageDialogDelete: String { return self._s[754]! } - public var Privacy_Calls_CustomHelp: String { return self._s[756]! } - public var Core_ServiceUserStatus: String { return self._s[757]! } - public var LiveLocationUpdated_JustNow: String { return self._s[758]! } + public var StickerPacksSettings_Title: String { return self._s[754]! } + public var Conversation_MessageDialogDelete: String { return self._s[755]! } + public var Privacy_Calls_CustomHelp: String { return self._s[757]! } + public var Core_ServiceUserStatus: String { return self._s[758]! } + public var LiveLocationUpdated_JustNow: String { return self._s[759]! } public func CHAT_DELETE_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[759]!, self._r[759]!, [_1, _2]) + return formatWithArgumentRanges(self._s[760]!, self._r[760]!, [_1, _2]) } - public var Call_StatusFailed: String { return self._s[760]! } - public var TwoStepAuth_SetupPasswordDescription: String { return self._s[761]! } - public var TwoStepAuth_SetPassword: String { return self._s[762]! } + public var Call_StatusFailed: String { return self._s[761]! } + public var TwoStepAuth_SetupPasswordDescription: String { return self._s[762]! } + public var TwoStepAuth_SetPassword: String { return self._s[763]! } public func SocksProxySetup_ProxyStatusPing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[764]!, self._r[764]!, [_0]) + return formatWithArgumentRanges(self._s[765]!, self._r[765]!, [_0]) } - public var Calls_SubmitRating: String { return self._s[765]! } - public var Profile_Username: String { return self._s[766]! } - public var Bot_DescriptionTitle: String { return self._s[767]! } - public var MaskStickerSettings_Title: String { return self._s[768]! } - public var SharedMedia_CategoryOther: String { return self._s[769]! } - public var GroupInfo_SetGroupPhoto: String { return self._s[770]! } - public var Common_NotNow: String { return self._s[771]! } - public var Map_Location: String { return self._s[772]! } - public var Invitation_JoinGroup: String { return self._s[773]! } - public var AutoDownloadSettings_Title: String { return self._s[774]! } - public var Conversation_DiscardVoiceMessageDescription: String { return self._s[775]! } - public var Channel_ErrorAddBlocked: String { return self._s[776]! } - public var Conversation_UnblockUser: String { return self._s[777]! } - public var Watch_Bot_Restart: String { return self._s[778]! } - public var TwoStepAuth_Title: String { return self._s[779]! } - public var Channel_AdminLog_BanSendMessages: String { return self._s[780]! } - public var Checkout_ShippingMethod: String { return self._s[781]! } - public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[782]! } + public var Calls_SubmitRating: String { return self._s[766]! } + public var Profile_Username: String { return self._s[767]! } + public var Bot_DescriptionTitle: String { return self._s[768]! } + public var MaskStickerSettings_Title: String { return self._s[769]! } + public var SharedMedia_CategoryOther: String { return self._s[770]! } + public var GroupInfo_SetGroupPhoto: String { return self._s[771]! } + public var Common_NotNow: String { return self._s[772]! } + public var Map_Location: String { return self._s[773]! } + public var Invitation_JoinGroup: String { return self._s[774]! } + public var AutoDownloadSettings_Title: String { return self._s[775]! } + public var Conversation_DiscardVoiceMessageDescription: String { return self._s[776]! } + public var Channel_ErrorAddBlocked: String { return self._s[777]! } + public var Conversation_UnblockUser: String { return self._s[778]! } + public var Watch_Bot_Restart: String { return self._s[779]! } + public var TwoStepAuth_Title: String { return self._s[780]! } + public var Channel_AdminLog_BanSendMessages: String { return self._s[781]! } + public var Checkout_ShippingMethod: String { return self._s[782]! } + public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[783]! } public func Channel_Username_LinkHint(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[784]!, self._r[784]!, [_0]) + return formatWithArgumentRanges(self._s[785]!, self._r[785]!, [_0]) } - public var AuthSessions_TerminateOtherSessions: String { return self._s[785]! } - public var Contacts_FailedToSendInvitesMessage: String { return self._s[786]! } - public var PrivacySettings_TwoStepAuth: String { return self._s[787]! } - public var Conversation_EditingMessagePanelMedia: String { return self._s[788]! } - public var Checkout_PaymentMethod_Title: String { return self._s[789]! } - public var SocksProxySetup_Connection: String { return self._s[790]! } - public var Group_MessagePhotoRemoved: String { return self._s[791]! } - public var Channel_Stickers_NotFound: String { return self._s[793]! } - public var Group_About_Help: String { return self._s[794]! } - public var Notification_PassportValueProofOfIdentity: String { return self._s[795]! } + public var AuthSessions_TerminateOtherSessions: String { return self._s[786]! } + public var Contacts_FailedToSendInvitesMessage: String { return self._s[787]! } + public var PrivacySettings_TwoStepAuth: String { return self._s[788]! } + public var Conversation_EditingMessagePanelMedia: String { return self._s[789]! } + public var Checkout_PaymentMethod_Title: String { return self._s[790]! } + public var SocksProxySetup_Connection: String { return self._s[791]! } + public var Group_MessagePhotoRemoved: String { return self._s[792]! } + public var Channel_Stickers_NotFound: String { return self._s[794]! } + public var Group_About_Help: String { return self._s[795]! } + public var Notification_PassportValueProofOfIdentity: String { return self._s[796]! } public func ApplyLanguage_ChangeLanguageOfficialText(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[797]!, self._r[797]!, [_1]) + return formatWithArgumentRanges(self._s[798]!, self._r[798]!, [_1]) } - public var CheckoutInfo_ShippingInfoStatePlaceholder: String { return self._s[799]! } - public var Notifications_GroupNotificationsExceptionsHelp: String { return self._s[800]! } - public var SocksProxySetup_Password: String { return self._s[801]! } - public var Notifications_PermissionsEnable: String { return self._s[802]! } - public var TwoStepAuth_ChangeEmail: String { return self._s[804]! } + public var CheckoutInfo_ShippingInfoStatePlaceholder: String { return self._s[800]! } + public var Notifications_GroupNotificationsExceptionsHelp: String { return self._s[801]! } + public var SocksProxySetup_Password: String { return self._s[802]! } + public var Notifications_PermissionsEnable: String { return self._s[803]! } + public var TwoStepAuth_ChangeEmail: String { return self._s[805]! } public func MESSAGE_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[805]!, self._r[805]!, [_1, _2]) + return formatWithArgumentRanges(self._s[806]!, self._r[806]!, [_1, _2]) } public func Channel_AdminLog_MessageInvitedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[806]!, self._r[806]!, [_1]) + return formatWithArgumentRanges(self._s[807]!, self._r[807]!, [_1]) } public func Time_MonthOfYear_m10(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[808]!, self._r[808]!, [_0]) + return formatWithArgumentRanges(self._s[809]!, self._r[809]!, [_0]) } - public var Passport_Identity_TypeDriversLicense: String { return self._s[809]! } - public var ArchivedPacksAlert_Title: String { return self._s[810]! } + public var Passport_Identity_TypeDriversLicense: String { return self._s[810]! } + public var ArchivedPacksAlert_Title: String { return self._s[811]! } public func Time_PreciseDate_m7(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[811]!, self._r[811]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[812]!, self._r[812]!, [_1, _2, _3]) } - public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[812]! } - public var Privacy_Calls_NeverAllow_Placeholder: String { return self._s[813]! } - public var Conversation_StatusTyping: String { return self._s[814]! } - public var Broadcast_AdminLog_EmptyText: String { return self._s[815]! } - public var Notification_PassportValueProofOfAddress: String { return self._s[816]! } - public var UserInfo_CreateNewContact: String { return self._s[817]! } - public var Passport_Identity_FrontSide: String { return self._s[818]! } - public var Calls_CallTabTitle: String { return self._s[819]! } - public var Channel_AdminLog_ChannelEmptyText: String { return self._s[820]! } + public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[813]! } + public var Privacy_Calls_NeverAllow_Placeholder: String { return self._s[814]! } + public var Conversation_StatusTyping: String { return self._s[815]! } + public var Broadcast_AdminLog_EmptyText: String { return self._s[816]! } + public var Notification_PassportValueProofOfAddress: String { return self._s[817]! } + public var UserInfo_CreateNewContact: String { return self._s[818]! } + public var Passport_Identity_FrontSide: String { return self._s[819]! } + public var Calls_CallTabTitle: String { return self._s[820]! } + public var Channel_AdminLog_ChannelEmptyText: String { return self._s[821]! } public func Login_BannedPhoneBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[821]!, self._r[821]!, [_0]) + return formatWithArgumentRanges(self._s[822]!, self._r[822]!, [_0]) } - public var Watch_UserInfo_MuteTitle: String { return self._s[822]! } - public var SharedMedia_EmptyMusicText: String { return self._s[823]! } - public var PasscodeSettings_AutoLock_IfAwayFor_1minute: String { return self._s[824]! } - public var Paint_Stickers: String { return self._s[825]! } - public var Privacy_GroupsAndChannels: String { return self._s[826]! } - public var UserInfo_AddContact: String { return self._s[828]! } + public var Watch_UserInfo_MuteTitle: String { return self._s[823]! } + public var SharedMedia_EmptyMusicText: String { return self._s[824]! } + public var PasscodeSettings_AutoLock_IfAwayFor_1minute: String { return self._s[825]! } + public var Paint_Stickers: String { return self._s[826]! } + public var Privacy_GroupsAndChannels: String { return self._s[827]! } + public var UserInfo_AddContact: String { return self._s[829]! } public func Conversation_MessageViaUser(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[829]!, self._r[829]!, [_0]) + return formatWithArgumentRanges(self._s[830]!, self._r[830]!, [_0]) } - public var PhoneNumberHelp_ChangeNumber: String { return self._s[831]! } - public var DialogList_NoMessagesTitle: String { return self._s[833]! } - public var EditProfile_NameAndPhotoHelp: String { return self._s[834]! } - public var BlockedUsers_BlockUser: String { return self._s[835]! } - public var Notifications_PermissionsOpenSettings: String { return self._s[836]! } - public var MediaPicker_UngroupDescription: String { return self._s[837]! } - public var Watch_NoConnection: String { return self._s[838]! } - public var Month_GenSeptember: String { return self._s[839]! } - public var Conversation_ViewGroup: String { return self._s[840]! } - public var Channel_AdminLogFilter_EventsLeavingSubscribers: String { return self._s[843]! } - public var Passport_FieldOneOf_FinalDelimeter: String { return self._s[844]! } - public var MediaPicker_CameraRoll: String { return self._s[846]! } - public var Month_GenAugust: String { return self._s[847]! } - public var AccessDenied_VideoMessageMicrophone: String { return self._s[848]! } - public var SharedMedia_EmptyText: String { return self._s[849]! } - public var Map_ShareLiveLocation: String { return self._s[850]! } - public var Calls_All: String { return self._s[851]! } - public var Appearance_ThemeNight: String { return self._s[854]! } - public var Conversation_HoldForAudio: String { return self._s[855]! } - public var GroupInfo_GroupHistoryHidden: String { return self._s[858]! } - public var SocksProxySetup_Secret: String { return self._s[859]! } - public var Channel_BanList_RestrictedTitle: String { return self._s[861]! } - public var Conversation_Location: String { return self._s[862]! } - public var ChatSettings_AutoDownloadPhotos: String { return self._s[864]! } - public var Notifications_PermissionsText: String { return self._s[865]! } - public var SocksProxySetup_ProxyStatusConnecting: String { return self._s[866]! } - public var Channel_EditAdmin_PermissionPinMessages: String { return self._s[868]! } - public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[869]! } - public var Passport_DeletePassportConfirmation: String { return self._s[872]! } - public var Login_InvalidCodeError: String { return self._s[873]! } - public var StickerPacksSettings_FeaturedPacks: String { return self._s[874]! } + public var PhoneNumberHelp_ChangeNumber: String { return self._s[832]! } + public var DialogList_NoMessagesTitle: String { return self._s[834]! } + public var EditProfile_NameAndPhotoHelp: String { return self._s[835]! } + public var BlockedUsers_BlockUser: String { return self._s[836]! } + public var Notifications_PermissionsOpenSettings: String { return self._s[837]! } + public var MediaPicker_UngroupDescription: String { return self._s[838]! } + public var Watch_NoConnection: String { return self._s[839]! } + public var Month_GenSeptember: String { return self._s[840]! } + public var Conversation_ViewGroup: String { return self._s[841]! } + public var Channel_AdminLogFilter_EventsLeavingSubscribers: String { return self._s[844]! } + public var Passport_FieldOneOf_FinalDelimeter: String { return self._s[845]! } + public var MediaPicker_CameraRoll: String { return self._s[847]! } + public var Month_GenAugust: String { return self._s[848]! } + public var AccessDenied_VideoMessageMicrophone: String { return self._s[849]! } + public var SharedMedia_EmptyText: String { return self._s[850]! } + public var Map_ShareLiveLocation: String { return self._s[851]! } + public var Calls_All: String { return self._s[852]! } + public var Appearance_ThemeNight: String { return self._s[855]! } + public var Conversation_HoldForAudio: String { return self._s[856]! } + public var GroupInfo_GroupHistoryHidden: String { return self._s[859]! } + public var SocksProxySetup_Secret: String { return self._s[860]! } + public var Channel_BanList_RestrictedTitle: String { return self._s[862]! } + public var Conversation_Location: String { return self._s[863]! } + public var ChatSettings_AutoDownloadPhotos: String { return self._s[865]! } + public var Notifications_PermissionsText: String { return self._s[866]! } + public var SocksProxySetup_ProxyStatusConnecting: String { return self._s[867]! } + public var Channel_EditAdmin_PermissionPinMessages: String { return self._s[869]! } + public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[870]! } + public var Passport_DeletePassportConfirmation: String { return self._s[873]! } + public var Login_InvalidCodeError: String { return self._s[874]! } + public var StickerPacksSettings_FeaturedPacks: String { return self._s[875]! } public func GroupInfo_InvitationLinkAcceptChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[875]!, self._r[875]!, [_0]) + return formatWithArgumentRanges(self._s[876]!, self._r[876]!, [_0]) } - public var Call_CallInProgressTitle: String { return self._s[876]! } - public var Month_ShortSeptember: String { return self._s[877]! } - public var Watch_ChannelInfo_Title: String { return self._s[878]! } - public var DialogList_PasscodeLockHelp: String { return self._s[881]! } - public var Notifications_Badge_IncludePublicGroups: String { return self._s[882]! } - public var Channel_AdminLogFilter_EventsTitle: String { return self._s[883]! } - public var PhotoEditor_CropReset: String { return self._s[884]! } - public var Group_Username_CreatePrivateLinkHelp: String { return self._s[886]! } - public var Channel_Management_LabelEditor: String { return self._s[887]! } - public var Passport_Identity_LatinNameHelp: String { return self._s[889]! } - public var PhotoEditor_HighlightsTool: String { return self._s[890]! } - public var UserInfo_Title: String { return self._s[891]! } - public var AccessDenied_Title: String { return self._s[892]! } - public var DialogList_SearchLabel: String { return self._s[893]! } - public var Group_Setup_HistoryHidden: String { return self._s[894]! } - public var TwoStepAuth_PasswordChangeSuccess: String { return self._s[895]! } - public var State_Updating: String { return self._s[897]! } - public var Contacts_TabTitle: String { return self._s[898]! } - public var Notifications_Badge_CountUnreadMessages: String { return self._s[900]! } - public var GroupInfo_GroupHistory: String { return self._s[901]! } - public var CheckoutInfo_ShippingInfoCountry: String { return self._s[902]! } - public var Passport_Identity_OneOfTypeDriversLicense: String { return self._s[903]! } - public var Contacts_NotRegisteredSection: String { return self._s[904]! } + public var Call_CallInProgressTitle: String { return self._s[877]! } + public var Month_ShortSeptember: String { return self._s[878]! } + public var Watch_ChannelInfo_Title: String { return self._s[879]! } + public var DialogList_PasscodeLockHelp: String { return self._s[882]! } + public var Notifications_Badge_IncludePublicGroups: String { return self._s[883]! } + public var Channel_AdminLogFilter_EventsTitle: String { return self._s[884]! } + public var PhotoEditor_CropReset: String { return self._s[885]! } + public var Group_Username_CreatePrivateLinkHelp: String { return self._s[887]! } + public var Channel_Management_LabelEditor: String { return self._s[888]! } + public var Passport_Identity_LatinNameHelp: String { return self._s[890]! } + public var PhotoEditor_HighlightsTool: String { return self._s[891]! } + public var UserInfo_Title: String { return self._s[892]! } + public var AccessDenied_Title: String { return self._s[893]! } + public var DialogList_SearchLabel: String { return self._s[894]! } + public var Group_Setup_HistoryHidden: String { return self._s[895]! } + public var TwoStepAuth_PasswordChangeSuccess: String { return self._s[896]! } + public var State_Updating: String { return self._s[898]! } + public var Contacts_TabTitle: String { return self._s[899]! } + public var Notifications_Badge_CountUnreadMessages: String { return self._s[901]! } + public var GroupInfo_GroupHistory: String { return self._s[902]! } + public var Conversation_UnsupportedMediaPlaceholder: String { return self._s[903]! } + public var CheckoutInfo_ShippingInfoCountry: String { return self._s[904]! } + public var Passport_Identity_OneOfTypeDriversLicense: String { return self._s[905]! } + public var Contacts_NotRegisteredSection: String { return self._s[906]! } public func Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[905]!, self._r[905]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[907]!, self._r[907]!, [_1, _2, _3]) } - public var Paint_Clear: String { return self._s[906]! } - public var StickerPacksSettings_ArchivedMasks: String { return self._s[907]! } - public var SocksProxySetup_Connecting: String { return self._s[908]! } - public var ExplicitContent_AlertChannel: String { return self._s[909]! } - public var CreatePoll_AllOptionsAdded: String { return self._s[910]! } - public var Conversation_Contact: String { return self._s[911]! } - public var Login_CodeExpired: String { return self._s[912]! } - public var Passport_DiscardMessageAction: String { return self._s[913]! } - public var Channel_AdminLog_MessagePreviousDescription: String { return self._s[914]! } - public var Channel_AdminLog_EmptyMessageText: String { return self._s[915]! } - public var Month_ShortApril: String { return self._s[916]! } - public var AuthSessions_CurrentSession: String { return self._s[917]! } - public var PrivacySettings_DeleteAccountIfAwayFor: String { return self._s[921]! } - public var CheckoutInfo_ShippingInfoTitle: String { return self._s[922]! } - public var Channel_Setup_TypePrivate: String { return self._s[924]! } - public var Forward_ChannelReadOnly: String { return self._s[927]! } - public var PhotoEditor_CurvesBlue: String { return self._s[928]! } - public var UserInfo_BotPrivacy: String { return self._s[929]! } - public var Notification_PassportValueEmail: String { return self._s[930]! } - public var Channel_SignMessages_Help: String { return self._s[932]! } + public var Paint_Clear: String { return self._s[908]! } + public var StickerPacksSettings_ArchivedMasks: String { return self._s[909]! } + public var SocksProxySetup_Connecting: String { return self._s[910]! } + public var ExplicitContent_AlertChannel: String { return self._s[911]! } + public var CreatePoll_AllOptionsAdded: String { return self._s[912]! } + public var Conversation_Contact: String { return self._s[913]! } + public var Login_CodeExpired: String { return self._s[914]! } + public var Passport_DiscardMessageAction: String { return self._s[915]! } + public var Channel_AdminLog_MessagePreviousDescription: String { return self._s[916]! } + public var Channel_AdminLog_EmptyMessageText: String { return self._s[917]! } + public var Month_ShortApril: String { return self._s[918]! } + public var AuthSessions_CurrentSession: String { return self._s[919]! } + public var PrivacySettings_DeleteAccountIfAwayFor: String { return self._s[923]! } + public var CheckoutInfo_ShippingInfoTitle: String { return self._s[924]! } + public var Channel_Setup_TypePrivate: String { return self._s[926]! } + public var Forward_ChannelReadOnly: String { return self._s[929]! } + public var PhotoEditor_CurvesBlue: String { return self._s[930]! } + public var UserInfo_BotPrivacy: String { return self._s[931]! } + public var Notification_PassportValueEmail: String { return self._s[932]! } + public var Channel_SignMessages_Help: String { return self._s[934]! } public func CHAT_LEFT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[934]!, self._r[934]!, [_1, _2]) + return formatWithArgumentRanges(self._s[936]!, self._r[936]!, [_1, _2]) } - public var ChannelMembers_WhoCanAddMembers_Admins: String { return self._s[935]! } - public var FastTwoStepSetup_EmailPlaceholder: String { return self._s[936]! } - public var Passport_Language_pt: String { return self._s[937]! } - public var NotificationsSound_Popcorn: String { return self._s[940]! } - public var AutoNightTheme_Disabled: String { return self._s[941]! } - public var BlockedUsers_LeavePrefix: String { return self._s[942]! } - public var Contacts_PermissionsSuppressWarningText: String { return self._s[943]! } + public var ChannelMembers_WhoCanAddMembers_Admins: String { return self._s[937]! } + public var FastTwoStepSetup_EmailPlaceholder: String { return self._s[938]! } + public var Passport_Language_pt: String { return self._s[939]! } + public var NotificationsSound_Popcorn: String { return self._s[942]! } + public var AutoNightTheme_Disabled: String { return self._s[943]! } + public var BlockedUsers_LeavePrefix: String { return self._s[944]! } + public var Contacts_PermissionsSuppressWarningText: String { return self._s[945]! } public func CancelResetAccount_TextSMS(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[944]!, self._r[944]!, [_0]) + return formatWithArgumentRanges(self._s[946]!, self._r[946]!, [_0]) } - public var CheckoutInfo_ErrorNameInvalid: String { return self._s[945]! } - public var SocksProxySetup_UseForCalls: String { return self._s[946]! } - public var Passport_DeleteDocumentConfirmation: String { return self._s[947]! } + public var CheckoutInfo_ErrorNameInvalid: String { return self._s[947]! } + public var SocksProxySetup_UseForCalls: String { return self._s[948]! } + public var Passport_DeleteDocumentConfirmation: String { return self._s[949]! } public func Conversation_Megabytes(_ _0: Float) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[948]!, self._r[948]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[950]!, self._r[950]!, ["\(_0)"]) } - public var SocksProxySetup_Hostname: String { return self._s[950]! } - public var Compose_NewEncryptedChat: String { return self._s[951]! } - public var Login_CodeFloodError: String { return self._s[952]! } - public var Calls_TabTitle: String { return self._s[953]! } - public var Passport_Language_he: String { return self._s[954]! } + public var SocksProxySetup_Hostname: String { return self._s[952]! } + public var Compose_NewEncryptedChat: String { return self._s[953]! } + public var Login_CodeFloodError: String { return self._s[954]! } + public var Calls_TabTitle: String { return self._s[955]! } + public var Passport_Language_he: String { return self._s[956]! } public func Channel_AdminLog_MessageGroupPreHistoryHidden(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[955]!, self._r[955]!, [_0]) + return formatWithArgumentRanges(self._s[957]!, self._r[957]!, [_0]) } - public var Tour_Text1: String { return self._s[956]! } - public var Month_ShortFebruary: String { return self._s[957]! } - public var TwoStepAuth_EmailSkip: String { return self._s[958]! } - public var NotificationsSound_Glass: String { return self._s[959]! } - public var Appearance_ThemeNightBlue: String { return self._s[960]! } - public var CheckoutInfo_Pay: String { return self._s[961]! } - public var Invite_LargeRecipientsCountWarning: String { return self._s[963]! } - public var Call_CallAgain: String { return self._s[965]! } - public var AttachmentMenu_SendAsFile: String { return self._s[966]! } - public var Watch_Message_Game: String { return self._s[967]! } - public var AccessDenied_MicrophoneRestricted: String { return self._s[968]! } - public var Passport_InvalidPasswordError: String { return self._s[969]! } + public var Tour_Text1: String { return self._s[958]! } + public var Month_ShortFebruary: String { return self._s[959]! } + public var TwoStepAuth_EmailSkip: String { return self._s[960]! } + public var NotificationsSound_Glass: String { return self._s[961]! } + public var Appearance_ThemeNightBlue: String { return self._s[962]! } + public var CheckoutInfo_Pay: String { return self._s[963]! } + public var Invite_LargeRecipientsCountWarning: String { return self._s[965]! } + public var Call_CallAgain: String { return self._s[967]! } + public var AttachmentMenu_SendAsFile: String { return self._s[968]! } + public var Watch_Message_Game: String { return self._s[969]! } + public var AccessDenied_MicrophoneRestricted: String { return self._s[970]! } + public var Passport_InvalidPasswordError: String { return self._s[971]! } public func PINNED_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[970]!, self._r[970]!, [_1]) + return formatWithArgumentRanges(self._s[972]!, self._r[972]!, [_1]) } - public var Stickers_Install: String { return self._s[971]! } - public var PrivacyLastSeenSettings_NeverShareWith: String { return self._s[972]! } - public var Passport_Identity_ResidenceCountry: String { return self._s[974]! } - public var Notifications_GroupNotificationsHelp: String { return self._s[975]! } - public var AuthSessions_OtherSessions: String { return self._s[976]! } - public var Channel_Username_Help: String { return self._s[977]! } - public var Camera_Title: String { return self._s[978]! } - public var GroupInfo_SetGroupPhotoDelete: String { return self._s[980]! } - public var Channel_AdminLog_TitleAllEvents: String { return self._s[981]! } - public var Contacts_MemberSearchSectionTitleGroup: String { return self._s[982]! } - public var Conversation_RestrictedStickers: String { return self._s[983]! } - public var Notifications_ExceptionsResetToDefaults: String { return self._s[985]! } - public var UserInfo_TelegramCall: String { return self._s[987]! } - public var TwoStepAuth_SetupResendEmailCode: String { return self._s[988]! } - public var CreatePoll_OptionsHeader: String { return self._s[989]! } - public var Privacy_GroupsAndChannels_AlwaysAllow_Title: String { return self._s[990]! } - public var Passport_Identity_EditPersonalDetails: String { return self._s[991]! } + public var Stickers_Install: String { return self._s[973]! } + public var PrivacyLastSeenSettings_NeverShareWith: String { return self._s[974]! } + public var Passport_Identity_ResidenceCountry: String { return self._s[976]! } + public var Notifications_GroupNotificationsHelp: String { return self._s[977]! } + public var AuthSessions_OtherSessions: String { return self._s[978]! } + public var Channel_Username_Help: String { return self._s[979]! } + public var Camera_Title: String { return self._s[980]! } + public var GroupInfo_SetGroupPhotoDelete: String { return self._s[982]! } + public var Channel_AdminLog_TitleAllEvents: String { return self._s[983]! } + public var Contacts_MemberSearchSectionTitleGroup: String { return self._s[984]! } + public var Conversation_RestrictedStickers: String { return self._s[985]! } + public var Notifications_ExceptionsResetToDefaults: String { return self._s[987]! } + public var UserInfo_TelegramCall: String { return self._s[989]! } + public var TwoStepAuth_SetupResendEmailCode: String { return self._s[990]! } + public var CreatePoll_OptionsHeader: String { return self._s[991]! } + public var Privacy_GroupsAndChannels_AlwaysAllow_Title: String { return self._s[992]! } + public var Passport_Identity_EditPersonalDetails: String { return self._s[993]! } public func Time_PreciseDate_m1(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[992]!, self._r[992]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[994]!, self._r[994]!, [_1, _2, _3]) } - public var Settings_SaveEditedPhotos: String { return self._s[993]! } - public var TwoStepAuth_ConfirmationTitle: String { return self._s[994]! } - public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[995]! } - public var Conversation_MessageDialogRetry: String { return self._s[996]! } - public var Conversation_DiscardVoiceMessageAction: String { return self._s[997]! } - public var Group_Setup_TypeHeader: String { return self._s[998]! } - public var Paint_RecentStickers: String { return self._s[999]! } - public var PhotoEditor_GrainTool: String { return self._s[1000]! } - public var CheckoutInfo_ShippingInfoState: String { return self._s[1001]! } - public var Watch_AuthRequired: String { return self._s[1003]! } + public var Settings_SaveEditedPhotos: String { return self._s[995]! } + public var TwoStepAuth_ConfirmationTitle: String { return self._s[996]! } + public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[997]! } + public var Conversation_MessageDialogRetry: String { return self._s[998]! } + public var Conversation_DiscardVoiceMessageAction: String { return self._s[999]! } + public var Group_Setup_TypeHeader: String { return self._s[1000]! } + public var Paint_RecentStickers: String { return self._s[1001]! } + public var PhotoEditor_GrainTool: String { return self._s[1002]! } + public var CheckoutInfo_ShippingInfoState: String { return self._s[1003]! } + public var Watch_AuthRequired: String { return self._s[1005]! } public func Passport_Email_UseTelegramEmail(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1004]!, self._r[1004]!, [_0]) + return formatWithArgumentRanges(self._s[1006]!, self._r[1006]!, [_0]) } public func CHANNEL_MESSAGE_PHOTOS(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1005]!, self._r[1005]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1007]!, self._r[1007]!, [_1, _2]) } - public var Conversation_EncryptedDescriptionTitle: String { return self._s[1006]! } - public var ChannelIntro_Text: String { return self._s[1007]! } - public var DialogList_DeleteBotConfirmation: String { return self._s[1008]! } - public var Calls_AddTab: String { return self._s[1009]! } - public var Message_ReplyActionButtonShowReceipt: String { return self._s[1010]! } - public var Channel_AdminLog_EmptyFilterText: String { return self._s[1011]! } - public var Notification_MessageLifetime1d: String { return self._s[1012]! } - public var Notifications_ChannelNotificationsExceptionsHelp: String { return self._s[1013]! } - public var Channel_BanUser_PermissionsHeader: String { return self._s[1014]! } - public var Passport_Identity_GenderFemale: String { return self._s[1015]! } - public var BlockedUsers_BlockTitle: String { return self._s[1016]! } + public var Conversation_EncryptedDescriptionTitle: String { return self._s[1008]! } + public var ChannelIntro_Text: String { return self._s[1009]! } + public var DialogList_DeleteBotConfirmation: String { return self._s[1010]! } + public var Calls_AddTab: String { return self._s[1011]! } + public var Message_ReplyActionButtonShowReceipt: String { return self._s[1012]! } + public var Channel_AdminLog_EmptyFilterText: String { return self._s[1013]! } + public var Notification_MessageLifetime1d: String { return self._s[1014]! } + public var Notifications_ChannelNotificationsExceptionsHelp: String { return self._s[1015]! } + public var Channel_BanUser_PermissionsHeader: String { return self._s[1016]! } + public var Passport_Identity_GenderFemale: String { return self._s[1017]! } + public var BlockedUsers_BlockTitle: String { return self._s[1018]! } public func MESSAGE_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1017]!, self._r[1017]!, [_1]) + return formatWithArgumentRanges(self._s[1019]!, self._r[1019]!, [_1]) } - public var Weekday_Yesterday: String { return self._s[1018]! } - public var AutoNightTheme_Scheduled: String { return self._s[1019]! } - public var PrivacyPolicy_DeclineDeleteNow: String { return self._s[1020]! } - public var CreatePoll_Create: String { return self._s[1021]! } - public var Channel_Members_AddBannedErrorAdmin: String { return self._s[1022]! } + public var Weekday_Yesterday: String { return self._s[1020]! } + public var AutoNightTheme_Scheduled: String { return self._s[1021]! } + public var PrivacyPolicy_DeclineDeleteNow: String { return self._s[1022]! } + public var CreatePoll_Create: String { return self._s[1023]! } + public var Channel_Members_AddBannedErrorAdmin: String { return self._s[1024]! } public func Notification_CallFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1023]!, self._r[1023]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1025]!, self._r[1025]!, [_1, _2]) } - public var Checkout_ErrorProviderAccountInvalid: String { return self._s[1024]! } - public var Notifications_InAppNotificationsSounds: String { return self._s[1025]! } - public var Preview_OpenInInstagram: String { return self._s[1026]! } - public var Notification_MessageLifetimeRemovedOutgoing: String { return self._s[1027]! } + public var Checkout_ErrorProviderAccountInvalid: String { return self._s[1026]! } + public var Notifications_InAppNotificationsSounds: String { return self._s[1027]! } + public var Preview_OpenInInstagram: String { return self._s[1028]! } + public var Notification_MessageLifetimeRemovedOutgoing: String { return self._s[1029]! } public func Passport_PrivacyPolicy(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1028]!, self._r[1028]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1030]!, self._r[1030]!, [_1, _2]) } - public var Channel_AdminLog_InfoPanelAlertTitle: String { return self._s[1029]! } - public var NetworkUsageSettings_TotalSection: String { return self._s[1030]! } - public var Channel_Setup_TypePrivateHelp: String { return self._s[1031]! } - public var Wallpaper_PhotoLibrary: String { return self._s[1033]! } - public var Privacy_GroupsAndChannels_NeverAllow_Placeholder: String { return self._s[1034]! } - public var FastTwoStepSetup_HintSection: String { return self._s[1035]! } - public var TwoStepAuth_SetupResendEmailCodeAlert: String { return self._s[1036]! } - public var Watch_LastSeen_WithinAMonth: String { return self._s[1037]! } - public var GroupInfo_ActionPromote: String { return self._s[1038]! } - public var PasscodeSettings_SimplePasscode: String { return self._s[1039]! } - public var Permissions_ContactsText_v0: String { return self._s[1040]! } - public var PrivacySettings_DataSettingsHelp: String { return self._s[1043]! } - public var Passport_FieldEmailHelp: String { return self._s[1044]! } - public var Passport_Identity_GenderPlaceholder: String { return self._s[1045]! } - public var Weekday_ShortSaturday: String { return self._s[1046]! } - public var ContactInfo_PhoneLabelMain: String { return self._s[1047]! } - public var Watch_Conversation_UserInfo: String { return self._s[1048]! } - public var CheckoutInfo_ShippingInfoCityPlaceholder: String { return self._s[1049]! } - public var PrivacyLastSeenSettings_Title: String { return self._s[1050]! } - public var Conversation_ShareBotLocationConfirmation: String { return self._s[1051]! } - public var PhotoEditor_VignetteTool: String { return self._s[1052]! } - public var Passport_Address_Street1Placeholder: String { return self._s[1053]! } - public var Passport_Language_et: String { return self._s[1054]! } - public var Passport_Language_bg: String { return self._s[1056]! } - public var Stickers_NoStickersFound: String { return self._s[1058]! } - public var Settings_About: String { return self._s[1059]! } + public var Channel_AdminLog_InfoPanelAlertTitle: String { return self._s[1031]! } + public var NetworkUsageSettings_TotalSection: String { return self._s[1032]! } + public var Channel_Setup_TypePrivateHelp: String { return self._s[1033]! } + public var Wallpaper_PhotoLibrary: String { return self._s[1035]! } + public var Privacy_GroupsAndChannels_NeverAllow_Placeholder: String { return self._s[1036]! } + public var FastTwoStepSetup_HintSection: String { return self._s[1037]! } + public var TwoStepAuth_SetupResendEmailCodeAlert: String { return self._s[1038]! } + public var Watch_LastSeen_WithinAMonth: String { return self._s[1039]! } + public var GroupInfo_ActionPromote: String { return self._s[1040]! } + public var PasscodeSettings_SimplePasscode: String { return self._s[1041]! } + public var Permissions_ContactsText_v0: String { return self._s[1042]! } + public var PrivacySettings_DataSettingsHelp: String { return self._s[1045]! } + public var Passport_FieldEmailHelp: String { return self._s[1046]! } + public var Passport_Identity_GenderPlaceholder: String { return self._s[1047]! } + public var Weekday_ShortSaturday: String { return self._s[1048]! } + public var ContactInfo_PhoneLabelMain: String { return self._s[1049]! } + public var Watch_Conversation_UserInfo: String { return self._s[1050]! } + public var CheckoutInfo_ShippingInfoCityPlaceholder: String { return self._s[1051]! } + public var PrivacyLastSeenSettings_Title: String { return self._s[1052]! } + public var Conversation_ShareBotLocationConfirmation: String { return self._s[1053]! } + public var PhotoEditor_VignetteTool: String { return self._s[1054]! } + public var Passport_Address_Street1Placeholder: String { return self._s[1055]! } + public var Passport_Language_et: String { return self._s[1056]! } + public var Passport_Language_bg: String { return self._s[1058]! } + public var Stickers_NoStickersFound: String { return self._s[1060]! } + public var Settings_About: String { return self._s[1061]! } public func Channel_AdminLog_MessageRestricted(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1060]!, self._r[1060]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[1062]!, self._r[1062]!, [_0, _1, _2]) } - public var KeyCommand_NewMessage: String { return self._s[1062]! } - public var Group_ErrorAddBlocked: String { return self._s[1063]! } + public var KeyCommand_NewMessage: String { return self._s[1064]! } + public var Group_ErrorAddBlocked: String { return self._s[1065]! } public func Message_PaymentSent(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1064]!, self._r[1064]!, [_0]) + return formatWithArgumentRanges(self._s[1066]!, self._r[1066]!, [_0]) } - public var Map_LocationTitle: String { return self._s[1065]! } - public var CallSettings_UseLessDataLongDescription: String { return self._s[1066]! } - public var Cache_ClearProgress: String { return self._s[1067]! } + public var Map_LocationTitle: String { return self._s[1067]! } + public var CallSettings_UseLessDataLongDescription: String { return self._s[1068]! } + public var Cache_ClearProgress: String { return self._s[1069]! } public func Channel_Management_ErrorNotMember(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1068]!, self._r[1068]!, [_0]) + return formatWithArgumentRanges(self._s[1070]!, self._r[1070]!, [_0]) } - public var Passport_UpdateRequiredError: String { return self._s[1069]! } - public var Notifications_PermissionsSuppressWarningText: String { return self._s[1071]! } - public var Passport_Identity_MainPageHelp: String { return self._s[1072]! } - public var Conversation_StatusKickedFromGroup: String { return self._s[1073]! } - public var Passport_Language_ka: String { return self._s[1074]! } - public var Call_Decline: String { return self._s[1075]! } - public var SocksProxySetup_ProxyEnabled: String { return self._s[1076]! } + public var Passport_UpdateRequiredError: String { return self._s[1071]! } + public var Notifications_PermissionsSuppressWarningText: String { return self._s[1073]! } + public var Passport_Identity_MainPageHelp: String { return self._s[1074]! } + public var Conversation_StatusKickedFromGroup: String { return self._s[1075]! } + public var Passport_Language_ka: String { return self._s[1076]! } + public var Call_Decline: String { return self._s[1077]! } + public var SocksProxySetup_ProxyEnabled: String { return self._s[1078]! } public func AuthCode_Alert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1079]!, self._r[1079]!, [_0]) + return formatWithArgumentRanges(self._s[1081]!, self._r[1081]!, [_0]) } public func Channel_AdminLog_MessagePromotedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1080]!, self._r[1080]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1082]!, self._r[1082]!, [_1, _2]) } - public var Passport_Phone_UseTelegramNumberHelp: String { return self._s[1081]! } - public var Passport_DeletePassport: String { return self._s[1083]! } - public var Privacy_Calls_P2PAlways: String { return self._s[1084]! } - public var Month_ShortDecember: String { return self._s[1085]! } - public var Channel_AdminLog_CanEditMessages: String { return self._s[1087]! } + public var Passport_Phone_UseTelegramNumberHelp: String { return self._s[1083]! } + public var Passport_DeletePassport: String { return self._s[1085]! } + public var Privacy_Calls_P2PAlways: String { return self._s[1086]! } + public var Month_ShortDecember: String { return self._s[1087]! } + public var Channel_AdminLog_CanEditMessages: String { return self._s[1089]! } public func Contacts_AccessDeniedHelpLandscape(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1088]!, self._r[1088]!, [_0]) + return formatWithArgumentRanges(self._s[1090]!, self._r[1090]!, [_0]) } - public var Channel_Stickers_Searching: String { return self._s[1089]! } - public var Conversation_EncryptedDescription1: String { return self._s[1090]! } - public var Conversation_EncryptedDescription2: String { return self._s[1091]! } - public var Conversation_EncryptedDescription3: String { return self._s[1092]! } - public var PhotoEditor_SharpenTool: String { return self._s[1093]! } + public var Channel_Stickers_Searching: String { return self._s[1091]! } + public var Conversation_EncryptedDescription1: String { return self._s[1092]! } + public var Conversation_EncryptedDescription2: String { return self._s[1093]! } + public var Conversation_EncryptedDescription3: String { return self._s[1094]! } + public var PhotoEditor_SharpenTool: String { return self._s[1095]! } public func ENCRYPTED_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1094]!, self._r[1094]!, [_1]) + return formatWithArgumentRanges(self._s[1096]!, self._r[1096]!, [_1]) } - public var Conversation_EncryptedDescription4: String { return self._s[1096]! } - public var Channel_Members_AddMembers: String { return self._s[1097]! } - public var Weekday_Friday: String { return self._s[1098]! } - public var Privacy_ContactsSync: String { return self._s[1099]! } - public var ApplyLanguage_ChangeLanguageAction: String { return self._s[1100]! } + public var Conversation_EncryptedDescription4: String { return self._s[1098]! } + public var Channel_Members_AddMembers: String { return self._s[1099]! } + public var Weekday_Friday: String { return self._s[1100]! } + public var Privacy_ContactsSync: String { return self._s[1101]! } + public var ApplyLanguage_ChangeLanguageAction: String { return self._s[1102]! } public func Channel_Management_RestrictedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1101]!, self._r[1101]!, [_0]) - } - public var Passport_Identity_GenderMale: String { return self._s[1102]! } - public func Call_StatusBar(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1103]!, self._r[1103]!, [_0]) } - public var Notifications_PermissionsKeepDisabled: String { return self._s[1104]! } - public var Conversation_JumpToDate: String { return self._s[1105]! } - public var Contacts_GlobalSearch: String { return self._s[1106]! } - public var AutoDownloadSettings_ResetHelp: String { return self._s[1107]! } - public var Profile_MessageLifetime1d: String { return self._s[1108]! } + public var Passport_Identity_GenderMale: String { return self._s[1104]! } + public func Call_StatusBar(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1105]!, self._r[1105]!, [_0]) + } + public var Notifications_PermissionsKeepDisabled: String { return self._s[1106]! } + public var Conversation_JumpToDate: String { return self._s[1107]! } + public var Contacts_GlobalSearch: String { return self._s[1108]! } + public var AutoDownloadSettings_ResetHelp: String { return self._s[1109]! } + public var Profile_MessageLifetime1d: String { return self._s[1110]! } public func MESSAGE_INVOICE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1109]!, self._r[1109]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1111]!, self._r[1111]!, [_1, _2]) } - public var StickerPack_BuiltinPackName: String { return self._s[1112]! } - public var Passport_InfoTitle: String { return self._s[1114]! } - public var Notifications_PermissionsUnreachableText: String { return self._s[1115]! } + public var StickerPack_BuiltinPackName: String { return self._s[1114]! } + public var Passport_InfoTitle: String { return self._s[1116]! } + public var Notifications_PermissionsUnreachableText: String { return self._s[1117]! } public func NetworkUsageSettings_CellularUsageSince(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1119]!, self._r[1119]!, [_0]) + return formatWithArgumentRanges(self._s[1121]!, self._r[1121]!, [_0]) } - public var Passport_Address_TypePassportRegistrationUploadScan: String { return self._s[1120]! } - public var Profile_BotInfo: String { return self._s[1121]! } - public var Watch_Compose_CreateMessage: String { return self._s[1122]! } - public var Month_ShortNovember: String { return self._s[1123]! } + public var Passport_Address_TypePassportRegistrationUploadScan: String { return self._s[1122]! } + public var Profile_BotInfo: String { return self._s[1123]! } + public var Watch_Compose_CreateMessage: String { return self._s[1124]! } + public var Month_ShortNovember: String { return self._s[1125]! } public func PHONE_CALL_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1124]!, self._r[1124]!, [_1]) + return formatWithArgumentRanges(self._s[1126]!, self._r[1126]!, [_1]) } public func ENCRYPTION_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1125]!, self._r[1125]!, [_1]) + return formatWithArgumentRanges(self._s[1127]!, self._r[1127]!, [_1]) } - public var Passport_Identity_TranslationsHelp: String { return self._s[1126]! } - public var NotificationsSound_Chime: String { return self._s[1127]! } - public var Passport_Language_ko: String { return self._s[1129]! } - public var InviteText_URL: String { return self._s[1130]! } - public var TextFormat_Monospace: String { return self._s[1131]! } + public var Passport_Identity_TranslationsHelp: String { return self._s[1128]! } + public var NotificationsSound_Chime: String { return self._s[1129]! } + public var Passport_Language_ko: String { return self._s[1131]! } + public var InviteText_URL: String { return self._s[1132]! } + public var TextFormat_Monospace: String { return self._s[1133]! } public func Time_PreciseDate_m11(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1132]!, self._r[1132]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1134]!, self._r[1134]!, [_1, _2, _3]) } public func Login_WillSendSms(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1133]!, self._r[1133]!, [_0]) + return formatWithArgumentRanges(self._s[1135]!, self._r[1135]!, [_0]) } public func Watch_Time_ShortWeekdayAt(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1134]!, self._r[1134]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1136]!, self._r[1136]!, [_1, _2]) } - public var Passport_InfoLearnMore: String { return self._s[1136]! } - public var TwoStepAuth_EmailPlaceholder: String { return self._s[1137]! } - public var Passport_Identity_AddIdentityCard: String { return self._s[1138]! } - public var Your_card_has_expired: String { return self._s[1139]! } - public var StickerPacksSettings_StickerPacksSection: String { return self._s[1140]! } - public var GroupInfo_InviteLink_Help: String { return self._s[1141]! } - public var Conversation_Report: String { return self._s[1144]! } - public var Notifications_MessageNotificationsSound: String { return self._s[1145]! } - public var Notification_MessageLifetime1m: String { return self._s[1146]! } - public var Privacy_ContactsTitle: String { return self._s[1147]! } - public var Conversation_ShareMyContactInfo: String { return self._s[1148]! } - public var ChannelMembers_WhoCanAddMembersAdminsHelp: String { return self._s[1149]! } - public var Channel_Members_Title: String { return self._s[1150]! } - public var Map_OpenInWaze: String { return self._s[1151]! } - public var Login_PhoneBannedError: String { return self._s[1152]! } + public var Passport_InfoLearnMore: String { return self._s[1138]! } + public var TwoStepAuth_EmailPlaceholder: String { return self._s[1139]! } + public var Passport_Identity_AddIdentityCard: String { return self._s[1140]! } + public var Your_card_has_expired: String { return self._s[1141]! } + public var StickerPacksSettings_StickerPacksSection: String { return self._s[1142]! } + public var GroupInfo_InviteLink_Help: String { return self._s[1143]! } + public var Conversation_Report: String { return self._s[1146]! } + public var Notifications_MessageNotificationsSound: String { return self._s[1147]! } + public var Notification_MessageLifetime1m: String { return self._s[1148]! } + public var Privacy_ContactsTitle: String { return self._s[1149]! } + public var Conversation_ShareMyContactInfo: String { return self._s[1150]! } + public var ChannelMembers_WhoCanAddMembersAdminsHelp: String { return self._s[1151]! } + public var Channel_Members_Title: String { return self._s[1152]! } + public var Map_OpenInWaze: String { return self._s[1153]! } + public var Login_PhoneBannedError: String { return self._s[1154]! } public func LiveLocationUpdated_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1153]!, self._r[1153]!, [_0]) + return formatWithArgumentRanges(self._s[1155]!, self._r[1155]!, [_0]) } public func MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1154]!, self._r[1154]!, [_1]) + return formatWithArgumentRanges(self._s[1156]!, self._r[1156]!, [_1]) } - public var Group_Management_AddModeratorHelp: String { return self._s[1155]! } - public var Common_OK: String { return self._s[1156]! } - public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[1157]! } - public var Cache_Music: String { return self._s[1158]! } - public var PasscodeSettings_UnlockWithTouchId: String { return self._s[1159]! } - public var TwoStepAuth_HintPlaceholder: String { return self._s[1160]! } + public var Group_Management_AddModeratorHelp: String { return self._s[1157]! } + public var Common_OK: String { return self._s[1158]! } + public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[1159]! } + public var Cache_Music: String { return self._s[1160]! } + public var PasscodeSettings_UnlockWithTouchId: String { return self._s[1161]! } + public var TwoStepAuth_HintPlaceholder: String { return self._s[1162]! } public func Passport_RequestHeader(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1161]!, self._r[1161]!, [_0]) + return formatWithArgumentRanges(self._s[1163]!, self._r[1163]!, [_0]) } - public var Watch_MessageView_ViewOnPhone: String { return self._s[1163]! } - public var Privacy_Calls_CustomShareHelp: String { return self._s[1164]! } - public var ChangePhoneNumberNumber_Title: String { return self._s[1166]! } - public var State_ConnectingToProxyInfo: String { return self._s[1167]! } - public var Message_VideoMessage: String { return self._s[1169]! } - public var ChannelInfo_DeleteChannel: String { return self._s[1170]! } + public var Watch_MessageView_ViewOnPhone: String { return self._s[1165]! } + public var Privacy_Calls_CustomShareHelp: String { return self._s[1166]! } + public var ChangePhoneNumberNumber_Title: String { return self._s[1168]! } + public var State_ConnectingToProxyInfo: String { return self._s[1169]! } + public var Message_VideoMessage: String { return self._s[1171]! } + public var ChannelInfo_DeleteChannel: String { return self._s[1172]! } public func CHAT_MESSAGE_POLL(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1171]!, self._r[1171]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1173]!, self._r[1173]!, [_1, _2]) } - public var ContactInfo_PhoneLabelOther: String { return self._s[1172]! } - public var Channel_EditAdmin_CannotEdit: String { return self._s[1173]! } - public var Passport_DeleteAddressConfirmation: String { return self._s[1174]! } - public var Activity_RecordingAudio: String { return self._s[1175]! } - public var PasscodeSettings_TryAgainIn1Minute: String { return self._s[1176]! } + public var ContactInfo_PhoneLabelOther: String { return self._s[1174]! } + public var Channel_EditAdmin_CannotEdit: String { return self._s[1175]! } + public var Passport_DeleteAddressConfirmation: String { return self._s[1176]! } + public var Activity_RecordingAudio: String { return self._s[1177]! } + public var PasscodeSettings_TryAgainIn1Minute: String { return self._s[1178]! } public func Notification_ChangedGroupName(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1178]!, self._r[1178]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1180]!, self._r[1180]!, [_0, _1]) } - public var Conversation_ApplyLocalization: String { return self._s[1181]! } - public var UserInfo_AddPhone: String { return self._s[1182]! } - public var Map_ShareLiveLocationHelp: String { return self._s[1183]! } + public var Conversation_ApplyLocalization: String { return self._s[1183]! } + public var UserInfo_AddPhone: String { return self._s[1184]! } + public var Map_ShareLiveLocationHelp: String { return self._s[1185]! } public func Passport_Identity_NativeNameGenericHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1184]!, self._r[1184]!, [_0]) + return formatWithArgumentRanges(self._s[1186]!, self._r[1186]!, [_0]) } - public var Passport_Scans: String { return self._s[1186]! } - public var BlockedUsers_Unblock: String { return self._s[1187]! } - public var Channel_Management_LabelCreator: String { return self._s[1188]! } - public var Passport_Identity_NativeNameGenericTitle: String { return self._s[1189]! } + public var Passport_Scans: String { return self._s[1188]! } + public var BlockedUsers_Unblock: String { return self._s[1189]! } + public var Channel_Management_LabelCreator: String { return self._s[1190]! } + public var Passport_Identity_NativeNameGenericTitle: String { return self._s[1191]! } public func Login_EmailPhoneBody(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1190]!, self._r[1190]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[1192]!, self._r[1192]!, [_0, _1, _2]) } - public var Login_PhoneNumberHelp: String { return self._s[1191]! } - public var LastSeen_ALongTimeAgo: String { return self._s[1192]! } - public var Channel_AdminLog_CanPinMessages: String { return self._s[1193]! } - public var ChannelIntro_CreateChannel: String { return self._s[1194]! } - public var Conversation_UnreadMessages: String { return self._s[1195]! } - public var Channel_AdminLog_EmptyText: String { return self._s[1196]! } - public var Notification_GroupActivated: String { return self._s[1197]! } + public var Login_PhoneNumberHelp: String { return self._s[1193]! } + public var LastSeen_ALongTimeAgo: String { return self._s[1194]! } + public var Channel_AdminLog_CanPinMessages: String { return self._s[1195]! } + public var ChannelIntro_CreateChannel: String { return self._s[1196]! } + public var Conversation_UnreadMessages: String { return self._s[1197]! } + public var Channel_AdminLog_EmptyText: String { return self._s[1198]! } + public var Notification_GroupActivated: String { return self._s[1199]! } public func Notification_PinnedContactMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1198]!, self._r[1198]!, [_0]) + return formatWithArgumentRanges(self._s[1200]!, self._r[1200]!, [_0]) } public func DownloadingStatus(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1199]!, self._r[1199]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1201]!, self._r[1201]!, [_0, _1]) } - public var GroupInfo_ConvertToSupergroup: String { return self._s[1201]! } + public var GroupInfo_ConvertToSupergroup: String { return self._s[1203]! } public func PrivacyPolicy_AgeVerificationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1202]!, self._r[1202]!, [_0]) - } - public var Document_TargetConfirmationFormat: String { return self._s[1203]! } - public func Call_StatusOngoing(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1204]!, self._r[1204]!, [_0]) } + public var Document_TargetConfirmationFormat: String { return self._s[1205]! } + public func Call_StatusOngoing(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1206]!, self._r[1206]!, [_0]) + } public func CHAT_MESSAGE_INVOICE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1206]!, self._r[1206]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1208]!, self._r[1208]!, [_1, _2, _3]) } - public var Conversation_ClearSelfHistory: String { return self._s[1207]! } - public var Checkout_NewCard_PostcodePlaceholder: String { return self._s[1208]! } - public var Stickers_SuggestNone: String { return self._s[1209]! } - public var ChatSettings_Cache: String { return self._s[1210]! } - public var Settings_SaveIncomingPhotos: String { return self._s[1211]! } - public var Media_ShareThisPhoto: String { return self._s[1212]! } - public var InfoPlist_NSContactsUsageDescription: String { return self._s[1213]! } - public var Conversation_ContextMenuCopyLink: String { return self._s[1214]! } - public var PrivacyPolicy_AgeVerificationTitle: String { return self._s[1215]! } - public var TwoStepAuth_SetupPasswordEnterPasswordNew: String { return self._s[1216]! } - public var Permissions_CellularDataTitle_v0: String { return self._s[1217]! } - public var Map_OpenIn: String { return self._s[1218]! } + public var Conversation_ClearSelfHistory: String { return self._s[1209]! } + public var Checkout_NewCard_PostcodePlaceholder: String { return self._s[1210]! } + public var Stickers_SuggestNone: String { return self._s[1211]! } + public var ChatSettings_Cache: String { return self._s[1212]! } + public var Settings_SaveIncomingPhotos: String { return self._s[1213]! } + public var Media_ShareThisPhoto: String { return self._s[1214]! } + public var InfoPlist_NSContactsUsageDescription: String { return self._s[1215]! } + public var Conversation_ContextMenuCopyLink: String { return self._s[1216]! } + public var PrivacyPolicy_AgeVerificationTitle: String { return self._s[1217]! } + public var TwoStepAuth_SetupPasswordEnterPasswordNew: String { return self._s[1218]! } + public var Permissions_CellularDataTitle_v0: String { return self._s[1219]! } + public var Map_OpenIn: String { return self._s[1220]! } public func ChannelInfo_AddParticipantConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1221]!, self._r[1221]!, [_0]) + return formatWithArgumentRanges(self._s[1223]!, self._r[1223]!, [_0]) } - public var MessagePoll_LabelClosed: String { return self._s[1222]! } - public var Passport_Identity_MiddleNamePlaceholder: String { return self._s[1224]! } - public var UserInfo_FirstNamePlaceholder: String { return self._s[1225]! } - public var PrivacyLastSeenSettings_WhoCanSeeMyTimestamp: String { return self._s[1226]! } - public var Login_SelectCountry_Title: String { return self._s[1227]! } - public var Channel_EditAdmin_PermissionBanUsers: String { return self._s[1228]! } - public var Watch_Suggestion_BRB: String { return self._s[1229]! } - public var Contacts_PermissionsTitle: String { return self._s[1230]! } - public var Passport_Identity_EditIdentityCard: String { return self._s[1231]! } - public var Conversation_RestrictedInline: String { return self._s[1232]! } - public var StickerPack_ViewPack: String { return self._s[1234]! } + public var MessagePoll_LabelClosed: String { return self._s[1224]! } + public var Passport_Identity_MiddleNamePlaceholder: String { return self._s[1226]! } + public var UserInfo_FirstNamePlaceholder: String { return self._s[1227]! } + public var PrivacyLastSeenSettings_WhoCanSeeMyTimestamp: String { return self._s[1228]! } + public var Login_SelectCountry_Title: String { return self._s[1229]! } + public var Channel_EditAdmin_PermissionBanUsers: String { return self._s[1230]! } + public var Watch_Suggestion_BRB: String { return self._s[1231]! } + public var Contacts_PermissionsTitle: String { return self._s[1232]! } + public var Passport_Identity_EditIdentityCard: String { return self._s[1233]! } + public var Conversation_RestrictedInline: String { return self._s[1234]! } + public var StickerPack_ViewPack: String { return self._s[1236]! } public func Update_AppVersion(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1235]!, self._r[1235]!, [_0]) + return formatWithArgumentRanges(self._s[1237]!, self._r[1237]!, [_0]) } - public var Compose_NewChannel: String { return self._s[1237]! } - public var Channel_Info_Stickers: String { return self._s[1241]! } - public var AutoNightTheme_PreferredTheme: String { return self._s[1242]! } - public var PrivacyPolicy_AgeVerificationAgree: String { return self._s[1243]! } - public var Passport_DeletePersonalDetails: String { return self._s[1244]! } - public var Conversation_SearchNoResults: String { return self._s[1246]! } - public var MessagePoll_LabelAnonymous: String { return self._s[1247]! } - public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[1248]! } - public var Login_Code: String { return self._s[1249]! } - public var Watch_Suggestion_WhatsUp: String { return self._s[1250]! } - public var Weekday_ShortThursday: String { return self._s[1251]! } - public var Resolve_ErrorNotFound: String { return self._s[1253]! } - public var LastSeen_Offline: String { return self._s[1254]! } - public var Privacy_Calls_AlwaysAllow_Title: String { return self._s[1255]! } - public var Channel_AdminLog_CanChangeInviteLink: String { return self._s[1256]! } - public var GroupInfo_Title: String { return self._s[1257]! } - public var NotificationsSound_Note: String { return self._s[1258]! } - public var Conversation_EditingMessagePanelTitle: String { return self._s[1259]! } - public var Privacy_Calls: String { return self._s[1260]! } - public var Month_ShortAugust: String { return self._s[1261]! } - public var TwoStepAuth_SetPasswordHelp: String { return self._s[1262]! } - public var Notifications_Reset: String { return self._s[1263]! } - public var Conversation_Pin: String { return self._s[1264]! } - public var Passport_Language_lv: String { return self._s[1265]! } - public var BlockedUsers_Info: String { return self._s[1266]! } - public var Watch_Conversation_Unblock: String { return self._s[1269]! } + public var Compose_NewChannel: String { return self._s[1239]! } + public var Channel_Info_Stickers: String { return self._s[1243]! } + public var AutoNightTheme_PreferredTheme: String { return self._s[1244]! } + public var PrivacyPolicy_AgeVerificationAgree: String { return self._s[1245]! } + public var Passport_DeletePersonalDetails: String { return self._s[1246]! } + public var Conversation_SearchNoResults: String { return self._s[1248]! } + public var MessagePoll_LabelAnonymous: String { return self._s[1249]! } + public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[1250]! } + public var Login_Code: String { return self._s[1251]! } + public var Watch_Suggestion_WhatsUp: String { return self._s[1252]! } + public var Weekday_ShortThursday: String { return self._s[1253]! } + public var Resolve_ErrorNotFound: String { return self._s[1255]! } + public var LastSeen_Offline: String { return self._s[1256]! } + public var Privacy_Calls_AlwaysAllow_Title: String { return self._s[1257]! } + public var Channel_AdminLog_CanChangeInviteLink: String { return self._s[1258]! } + public var GroupInfo_Title: String { return self._s[1259]! } + public var NotificationsSound_Note: String { return self._s[1260]! } + public var Conversation_EditingMessagePanelTitle: String { return self._s[1261]! } + public var Privacy_Calls: String { return self._s[1262]! } + public var Month_ShortAugust: String { return self._s[1263]! } + public var TwoStepAuth_SetPasswordHelp: String { return self._s[1264]! } + public var Notifications_Reset: String { return self._s[1265]! } + public var Conversation_Pin: String { return self._s[1266]! } + public var Passport_Language_lv: String { return self._s[1267]! } + public var BlockedUsers_Info: String { return self._s[1268]! } + public var Watch_Conversation_Unblock: String { return self._s[1271]! } public func Time_MonthOfYear_m9(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1270]!, self._r[1270]!, [_0]) + return formatWithArgumentRanges(self._s[1272]!, self._r[1272]!, [_0]) } - public var CloudStorage_Title: String { return self._s[1271]! } - public var GroupInfo_DeleteAndExitConfirmation: String { return self._s[1272]! } - public var TwoStepAuth_RecoveryEmailTitle: String { return self._s[1273]! } + public var CloudStorage_Title: String { return self._s[1273]! } + public var GroupInfo_DeleteAndExitConfirmation: String { return self._s[1274]! } + public var TwoStepAuth_RecoveryEmailTitle: String { return self._s[1275]! } public func NetworkUsageSettings_WifiUsageSince(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1274]!, self._r[1274]!, [_0]) + return formatWithArgumentRanges(self._s[1276]!, self._r[1276]!, [_0]) } - public var Watch_Suggestion_OnMyWay: String { return self._s[1275]! } - public var Channel_AdminLogFilter_AdminsTitle: String { return self._s[1276]! } - public var Passport_Address_EditBankStatement: String { return self._s[1277]! } - public var ChatSettings_DownloadInBackgroundInfo: String { return self._s[1278]! } - public var ShareMenu_Comment: String { return self._s[1279]! } - public var Permissions_ContactsTitle_v0: String { return self._s[1280]! } - public var Notifications_PermissionsTitle: String { return self._s[1281]! } - public var Settings_Support: String { return self._s[1282]! } - public var Notifications_ChannelNotificationsSound: String { return self._s[1283]! } - public var Channel_AdminLog_BanSendGifs: String { return self._s[1284]! } - public var Watch_Stickers_StickerPacks: String { return self._s[1285]! } - public var Common_Select: String { return self._s[1287]! } - public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[1288]! } - public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[1290]! } - public var PasscodeSettings_AutoLock_IfAwayFor_5hours: String { return self._s[1291]! } - public var Appearance_PreviewReplyAuthor: String { return self._s[1292]! } - public var TwoStepAuth_RecoveryTitle: String { return self._s[1293]! } - public var Widget_AuthRequired: String { return self._s[1294]! } - public var Camera_FlashOn: String { return self._s[1295]! } - public var Channel_Stickers_NotFoundHelp: String { return self._s[1296]! } - public var Watch_Suggestion_OK: String { return self._s[1297]! } + public var Watch_Suggestion_OnMyWay: String { return self._s[1277]! } + public var Channel_AdminLogFilter_AdminsTitle: String { return self._s[1278]! } + public var Passport_Address_EditBankStatement: String { return self._s[1279]! } + public var ChatSettings_DownloadInBackgroundInfo: String { return self._s[1280]! } + public var ShareMenu_Comment: String { return self._s[1281]! } + public var Permissions_ContactsTitle_v0: String { return self._s[1282]! } + public var Notifications_PermissionsTitle: String { return self._s[1283]! } + public var Settings_Support: String { return self._s[1284]! } + public var Notifications_ChannelNotificationsSound: String { return self._s[1285]! } + public var Channel_AdminLog_BanSendGifs: String { return self._s[1286]! } + public var Watch_Stickers_StickerPacks: String { return self._s[1287]! } + public var Common_Select: String { return self._s[1289]! } + public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[1290]! } + public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[1292]! } + public var PasscodeSettings_AutoLock_IfAwayFor_5hours: String { return self._s[1293]! } + public var Appearance_PreviewReplyAuthor: String { return self._s[1294]! } + public var TwoStepAuth_RecoveryTitle: String { return self._s[1295]! } + public var Widget_AuthRequired: String { return self._s[1296]! } + public var Camera_FlashOn: String { return self._s[1297]! } + public var Channel_Stickers_NotFoundHelp: String { return self._s[1298]! } + public var Watch_Suggestion_OK: String { return self._s[1299]! } public func Username_LinkHint(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1299]!, self._r[1299]!, [_0]) + return formatWithArgumentRanges(self._s[1301]!, self._r[1301]!, [_0]) } public func Notification_PinnedLiveLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1300]!, self._r[1300]!, [_0]) + return formatWithArgumentRanges(self._s[1302]!, self._r[1302]!, [_0]) } - public var DialogList_AdLabel: String { return self._s[1301]! } - public var WatchRemote_NotificationText: String { return self._s[1302]! } - public var Conversation_ReportSpam: String { return self._s[1303]! } - public var Settings_LogoutConfirmationTitle: String { return self._s[1305]! } - public var PhoneLabel_Title: String { return self._s[1306]! } - public var Passport_Address_EditRentalAgreement: String { return self._s[1307]! } - public var Notifications_ExceptionsTitle: String { return self._s[1308]! } + public var DialogList_AdLabel: String { return self._s[1303]! } + public var WatchRemote_NotificationText: String { return self._s[1304]! } + public var Conversation_ReportSpam: String { return self._s[1305]! } + public var Settings_LogoutConfirmationTitle: String { return self._s[1307]! } + public var PhoneLabel_Title: String { return self._s[1308]! } + public var Passport_Address_EditRentalAgreement: String { return self._s[1309]! } + public var Notifications_ExceptionsTitle: String { return self._s[1310]! } public func CHANNEL_MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1309]!, self._r[1309]!, [_1]) + return formatWithArgumentRanges(self._s[1311]!, self._r[1311]!, [_1]) } - public var Notifications_AlertTones: String { return self._s[1310]! } - public var Call_ReportIncludeLogDescription: String { return self._s[1311]! } + public var Notifications_AlertTones: String { return self._s[1312]! } + public var Call_ReportIncludeLogDescription: String { return self._s[1313]! } public func CHAT_ADD_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1312]!, self._r[1312]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1314]!, self._r[1314]!, [_1, _2, _3]) } - public var AutoDownloadSettings_PrivateChats: String { return self._s[1313]! } - public var TwoStepAuth_AddHintTitle: String { return self._s[1315]! } - public var ReportPeer_ReasonOther: String { return self._s[1316]! } - public var KeyCommand_ScrollDown: String { return self._s[1318]! } + public var AutoDownloadSettings_PrivateChats: String { return self._s[1315]! } + public var TwoStepAuth_AddHintTitle: String { return self._s[1317]! } + public var ReportPeer_ReasonOther: String { return self._s[1318]! } + public var KeyCommand_ScrollDown: String { return self._s[1320]! } public func Login_BannedPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1319]!, self._r[1319]!, [_0]) + return formatWithArgumentRanges(self._s[1321]!, self._r[1321]!, [_0]) } - public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[1320]! } - public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[1321]! } - public var AuthSessions_LogOut: String { return self._s[1322]! } - public var Passport_Identity_TypeInternalPassport: String { return self._s[1323]! } - public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[1324]! } + public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[1322]! } + public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[1323]! } + public var AuthSessions_LogOut: String { return self._s[1324]! } + public var Passport_Identity_TypeInternalPassport: String { return self._s[1325]! } + public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[1326]! } public func CHAT_MESSAGE_DOC(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1325]!, self._r[1325]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1327]!, self._r[1327]!, [_1, _2]) } - public var Passport_Phone_Title: String { return self._s[1326]! } - public var Settings_PhoneNumber: String { return self._s[1327]! } - public var NotificationsSound_Alert: String { return self._s[1328]! } - public var PhotoEditor_CurvesTool: String { return self._s[1330]! } - public var Checkout_PaymentMethod: String { return self._s[1332]! } - public var Contacts_AccessDeniedError: String { return self._s[1333]! } - public var Camera_PhotoMode: String { return self._s[1336]! } - public var Passport_Address_AddUtilityBill: String { return self._s[1337]! } - public var CallSettings_OnMobile: String { return self._s[1338]! } - public var Tour_Text2: String { return self._s[1339]! } - public var DialogList_EncryptionProcessing: String { return self._s[1341]! } - public var Permissions_Skip: String { return self._s[1342]! } - public var SecretImage_Title: String { return self._s[1343]! } - public var Watch_MessageView_Title: String { return self._s[1344]! } - public var AttachmentMenu_Poll: String { return self._s[1345]! } + public var Passport_Phone_Title: String { return self._s[1328]! } + public var Settings_PhoneNumber: String { return self._s[1329]! } + public var NotificationsSound_Alert: String { return self._s[1330]! } + public var PhotoEditor_CurvesTool: String { return self._s[1332]! } + public var Checkout_PaymentMethod: String { return self._s[1334]! } + public var Contacts_AccessDeniedError: String { return self._s[1335]! } + public var Camera_PhotoMode: String { return self._s[1338]! } + public var Passport_Address_AddUtilityBill: String { return self._s[1339]! } + public var CallSettings_OnMobile: String { return self._s[1340]! } + public var Tour_Text2: String { return self._s[1341]! } + public var DialogList_EncryptionProcessing: String { return self._s[1343]! } + public var Permissions_Skip: String { return self._s[1344]! } + public var SecretImage_Title: String { return self._s[1345]! } + public var Watch_MessageView_Title: String { return self._s[1346]! } + public var AttachmentMenu_Poll: String { return self._s[1347]! } public func Notification_GroupInviter(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1346]!, self._r[1346]!, [_0]) + return formatWithArgumentRanges(self._s[1348]!, self._r[1348]!, [_0]) } - public var Notification_CallCanceled: String { return self._s[1347]! } - public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[1348]! } + public var Notification_CallCanceled: String { return self._s[1349]! } + public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[1350]! } public func MESSAGE_SCREENSHOT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1349]!, self._r[1349]!, [_1]) + return formatWithArgumentRanges(self._s[1351]!, self._r[1351]!, [_1]) } - public var Settings_ProxyConnecting: String { return self._s[1350]! } - public var Profile_MessageLifetime5s: String { return self._s[1352]! } - public var Username_InvalidCharacters: String { return self._s[1353]! } - public var AutoDownloadSettings_LimitBySize: String { return self._s[1354]! } - public var Notification_CreatedChannel: String { return self._s[1356]! } - public var Passcode_AppLockedAlert: String { return self._s[1358]! } - public var Contacts_TopSection: String { return self._s[1359]! } + public var Settings_ProxyConnecting: String { return self._s[1352]! } + public var Profile_MessageLifetime5s: String { return self._s[1354]! } + public var Username_InvalidCharacters: String { return self._s[1355]! } + public var AutoDownloadSettings_LimitBySize: String { return self._s[1356]! } + public var Notification_CreatedChannel: String { return self._s[1358]! } + public var Passcode_AppLockedAlert: String { return self._s[1360]! } + public var Contacts_TopSection: String { return self._s[1361]! } public func Time_MonthOfYear_m6(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1360]!, self._r[1360]!, [_0]) + return formatWithArgumentRanges(self._s[1362]!, self._r[1362]!, [_0]) } - public var ReportPeer_ReasonSpam: String { return self._s[1361]! } - public var UserInfo_TapToCall: String { return self._s[1362]! } - public var Common_Search: String { return self._s[1364]! } - public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[1365]! } - public var Message_InvoiceLabel: String { return self._s[1366]! } - public var Conversation_InputTextPlaceholder: String { return self._s[1367]! } - public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[1368]! } + public var ReportPeer_ReasonSpam: String { return self._s[1363]! } + public var UserInfo_TapToCall: String { return self._s[1364]! } + public var Common_Search: String { return self._s[1366]! } + public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[1367]! } + public var Message_InvoiceLabel: String { return self._s[1368]! } + public var Conversation_InputTextPlaceholder: String { return self._s[1369]! } + public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[1370]! } public func Passport_Address_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1369]!, self._r[1369]!, [_0]) + return formatWithArgumentRanges(self._s[1371]!, self._r[1371]!, [_0]) } public func MESSAGE_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1370]!, self._r[1370]!, [_1]) + return formatWithArgumentRanges(self._s[1372]!, self._r[1372]!, [_1]) } - public var Conversation_Info: String { return self._s[1371]! } - public var Login_InfoDeletePhoto: String { return self._s[1372]! } - public var Passport_Language_vi: String { return self._s[1374]! } - public var Conversation_Search: String { return self._s[1375]! } - public var DialogList_DeleteBotConversationConfirmation: String { return self._s[1376]! } - public var ReportPeer_ReasonPornography: String { return self._s[1377]! } - public var AutoDownloadSettings_PhotosTitle: String { return self._s[1378]! } - public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[1379]! } - public var Map_LiveLocationGroupDescription: String { return self._s[1380]! } - public var Channel_Setup_TypeHeader: String { return self._s[1381]! } - public var AuthSessions_LoggedIn: String { return self._s[1382]! } - public var Login_SmsRequestState3: String { return self._s[1383]! } - public var Passport_Address_EditUtilityBill: String { return self._s[1384]! } - public var Appearance_ReduceMotionInfo: String { return self._s[1385]! } - public var Channel_Edit_LinkItem: String { return self._s[1386]! } - public var Privacy_Calls_P2PNever: String { return self._s[1387]! } - public var Conversation_AddToReadingList: String { return self._s[1389]! } + public var Conversation_Info: String { return self._s[1373]! } + public var Login_InfoDeletePhoto: String { return self._s[1374]! } + public var Passport_Language_vi: String { return self._s[1376]! } + public var Conversation_Search: String { return self._s[1377]! } + public var DialogList_DeleteBotConversationConfirmation: String { return self._s[1378]! } + public var ReportPeer_ReasonPornography: String { return self._s[1379]! } + public var AutoDownloadSettings_PhotosTitle: String { return self._s[1380]! } + public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[1381]! } + public var Map_LiveLocationGroupDescription: String { return self._s[1382]! } + public var Channel_Setup_TypeHeader: String { return self._s[1383]! } + public var AuthSessions_LoggedIn: String { return self._s[1384]! } + public var Login_SmsRequestState3: String { return self._s[1385]! } + public var Passport_Address_EditUtilityBill: String { return self._s[1386]! } + public var Appearance_ReduceMotionInfo: String { return self._s[1387]! } + public var Channel_Edit_LinkItem: String { return self._s[1388]! } + public var Privacy_Calls_P2PNever: String { return self._s[1389]! } + public var Conversation_AddToReadingList: String { return self._s[1391]! } public func MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1390]!, self._r[1390]!, [_1]) + return formatWithArgumentRanges(self._s[1392]!, self._r[1392]!, [_1]) } - public var Message_Animation: String { return self._s[1391]! } - public var Map_Unknown: String { return self._s[1392]! } - public var Call_StatusRequesting: String { return self._s[1393]! } + public var Message_Animation: String { return self._s[1393]! } + public var Map_Unknown: String { return self._s[1394]! } + public var Call_StatusRequesting: String { return self._s[1395]! } public func Passport_FieldOneOf_Or(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1394]!, self._r[1394]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1396]!, self._r[1396]!, [_1, _2]) } - public var Conversation_SecretChatContextBotAlert: String { return self._s[1395]! } - public var SocksProxySetup_ProxyStatusChecking: String { return self._s[1396]! } + public var Conversation_SecretChatContextBotAlert: String { return self._s[1397]! } + public var SocksProxySetup_ProxyStatusChecking: String { return self._s[1398]! } public func MESSAGE_PHOTO_SECRET(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1397]!, self._r[1397]!, [_1]) + return formatWithArgumentRanges(self._s[1399]!, self._r[1399]!, [_1]) } - public var Weekday_Monday: String { return self._s[1398]! } - public var Update_Skip: String { return self._s[1399]! } - public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[1400]! } - public var Message_PinnedPollMessage: String { return self._s[1401]! } - public var BlockedUsers_Title: String { return self._s[1402]! } + public var Weekday_Monday: String { return self._s[1400]! } + public var Update_Skip: String { return self._s[1401]! } + public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[1402]! } + public var Message_PinnedPollMessage: String { return self._s[1403]! } + public var BlockedUsers_Title: String { return self._s[1404]! } public func Notification_PinnedLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1403]!, self._r[1403]!, [_0]) + return formatWithArgumentRanges(self._s[1405]!, self._r[1405]!, [_0]) } - public var Username_CheckingUsername: String { return self._s[1404]! } - public var NotificationsSound_Bell: String { return self._s[1405]! } - public var Conversation_SendMessageErrorFlood: String { return self._s[1406]! } - public var ChannelMembers_ChannelAdminsTitle: String { return self._s[1407]! } - public var ChatSettings_Groups: String { return self._s[1408]! } - public var Your_card_was_declined: String { return self._s[1409]! } - public var TwoStepAuth_EnterPasswordHelp: String { return self._s[1411]! } - public var ChatList_Unmute: String { return self._s[1412]! } + public var Username_CheckingUsername: String { return self._s[1406]! } + public var NotificationsSound_Bell: String { return self._s[1407]! } + public var Conversation_SendMessageErrorFlood: String { return self._s[1408]! } + public var ChannelMembers_ChannelAdminsTitle: String { return self._s[1409]! } + public var ChatSettings_Groups: String { return self._s[1410]! } + public var Your_card_was_declined: String { return self._s[1411]! } + public var TwoStepAuth_EnterPasswordHelp: String { return self._s[1413]! } + public var ChatList_Unmute: String { return self._s[1414]! } public func PINNED_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1413]!, self._r[1413]!, [_1]) + return formatWithArgumentRanges(self._s[1415]!, self._r[1415]!, [_1]) } - public var PhotoEditor_CurvesAll: String { return self._s[1414]! } - public var Weekday_ShortTuesday: String { return self._s[1415]! } - public var DialogList_Read: String { return self._s[1416]! } + public var PhotoEditor_CurvesAll: String { return self._s[1416]! } + public var Weekday_ShortTuesday: String { return self._s[1417]! } + public var DialogList_Read: String { return self._s[1418]! } public func PINNED_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1417]!, self._r[1417]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1419]!, self._r[1419]!, [_1, _2]) } - public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[1418]! } - public var Passport_Identity_Gender: String { return self._s[1419]! } + public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[1420]! } + public var Passport_Identity_Gender: String { return self._s[1421]! } public func Target_ShareGameConfirmationPrivate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1420]!, self._r[1420]!, [_0]) + return formatWithArgumentRanges(self._s[1422]!, self._r[1422]!, [_0]) } - public var Target_SelectGroup: String { return self._s[1421]! } + public var Target_SelectGroup: String { return self._s[1423]! } public func DialogList_EncryptedChatStartedIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1423]!, self._r[1423]!, [_0]) + return formatWithArgumentRanges(self._s[1425]!, self._r[1425]!, [_0]) } - public var Passport_Language_en: String { return self._s[1424]! } - public var Channel_Username_CreatePublicLinkHelp: String { return self._s[1425]! } - public var Login_CancelPhoneVerificationContinue: String { return self._s[1426]! } + public var Passport_Language_en: String { return self._s[1426]! } + public var Channel_Username_CreatePublicLinkHelp: String { return self._s[1427]! } + public var Login_CancelPhoneVerificationContinue: String { return self._s[1428]! } public func AUTH_REGION(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1427]!, self._r[1427]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1429]!, self._r[1429]!, [_1, _2]) } - public var Checkout_NewCard_PaymentCard: String { return self._s[1429]! } - public var Login_InfoHelp: String { return self._s[1430]! } - public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[1431]! } - public var SocksProxySetup_AddProxy: String { return self._s[1434]! } - public var CreatePoll_Title: String { return self._s[1435]! } - public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[1436]! } - public var UserInfo_GroupsInCommon: String { return self._s[1437]! } - public var Call_AudioRouteHide: String { return self._s[1438]! } - public var ContactInfo_PhoneLabelMobile: String { return self._s[1440]! } - public var TextFormat_Bold: String { return self._s[1441]! } - public var FastTwoStepSetup_EmailSection: String { return self._s[1442]! } - public var Notifications_Title: String { return self._s[1443]! } - public var Group_Username_InvalidTooShort: String { return self._s[1444]! } - public var Channel_ErrorAddTooMuch: String { return self._s[1445]! } + public var Checkout_NewCard_PaymentCard: String { return self._s[1431]! } + public var Login_InfoHelp: String { return self._s[1432]! } + public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[1433]! } + public var SocksProxySetup_AddProxy: String { return self._s[1436]! } + public var CreatePoll_Title: String { return self._s[1437]! } + public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[1438]! } + public var UserInfo_GroupsInCommon: String { return self._s[1439]! } + public var Call_AudioRouteHide: String { return self._s[1440]! } + public var ContactInfo_PhoneLabelMobile: String { return self._s[1442]! } + public var TextFormat_Bold: String { return self._s[1443]! } + public var FastTwoStepSetup_EmailSection: String { return self._s[1444]! } + public var Notifications_Title: String { return self._s[1445]! } + public var Group_Username_InvalidTooShort: String { return self._s[1446]! } + public var Channel_ErrorAddTooMuch: String { return self._s[1447]! } public func DialogList_MultipleTypingSuffix(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1446]!, self._r[1446]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[1448]!, self._r[1448]!, ["\(_0)"]) } - public var Stickers_SuggestAdded: String { return self._s[1448]! } - public var Login_CountryCode: String { return self._s[1449]! } - public var Map_GetDirections: String { return self._s[1450]! } - public var Login_PhoneFloodError: String { return self._s[1451]! } + public var Stickers_SuggestAdded: String { return self._s[1450]! } + public var Login_CountryCode: String { return self._s[1451]! } + public var Map_GetDirections: String { return self._s[1452]! } + public var Login_PhoneFloodError: String { return self._s[1453]! } public func Time_MonthOfYear_m3(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1452]!, self._r[1452]!, [_0]) + return formatWithArgumentRanges(self._s[1454]!, self._r[1454]!, [_0]) } - public var Settings_SetUsername: String { return self._s[1454]! } - public var Notification_GroupInviterSelf: String { return self._s[1455]! } - public var InstantPage_TapToOpenLink: String { return self._s[1456]! } + public var Settings_SetUsername: String { return self._s[1456]! } + public var Notification_GroupInviterSelf: String { return self._s[1457]! } + public var InstantPage_TapToOpenLink: String { return self._s[1458]! } public func Notification_ChannelInviter(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1457]!, self._r[1457]!, [_0]) + return formatWithArgumentRanges(self._s[1459]!, self._r[1459]!, [_0]) } - public var Watch_Suggestion_TalkLater: String { return self._s[1458]! } - public var SecretChat_Title: String { return self._s[1459]! } - public var Group_UpgradeNoticeText1: String { return self._s[1460]! } - public var AuthSessions_Title: String { return self._s[1461]! } - public var PhotoEditor_CropAuto: String { return self._s[1462]! } - public var Channel_About_Title: String { return self._s[1463]! } - public var FastTwoStepSetup_EmailHelp: String { return self._s[1464]! } + public var Watch_Suggestion_TalkLater: String { return self._s[1460]! } + public var SecretChat_Title: String { return self._s[1461]! } + public var Group_UpgradeNoticeText1: String { return self._s[1462]! } + public var AuthSessions_Title: String { return self._s[1463]! } + public var PhotoEditor_CropAuto: String { return self._s[1464]! } + public var Channel_About_Title: String { return self._s[1465]! } + public var FastTwoStepSetup_EmailHelp: String { return self._s[1466]! } public func CHAT_ADD_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1465]!, self._r[1465]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1467]!, self._r[1467]!, [_1, _2]) } public func Conversation_Bytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1466]!, self._r[1466]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[1468]!, self._r[1468]!, ["\(_0)"]) } - public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[1469]! } - public var Group_Setup_HistoryVisibleHelp: String { return self._s[1470]! } + public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[1471]! } + public var Group_Setup_HistoryVisibleHelp: String { return self._s[1472]! } public func SharedMedia_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1472]!, self._r[1472]!, [_0]) + return formatWithArgumentRanges(self._s[1474]!, self._r[1474]!, [_0]) } public func TwoStepAuth_RecoveryEmailUnavailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1473]!, self._r[1473]!, [_0]) + return formatWithArgumentRanges(self._s[1475]!, self._r[1475]!, [_0]) } - public var Privacy_PaymentsClearInfoHelp: String { return self._s[1474]! } - public var Presence_online: String { return self._s[1476]! } - public var PasscodeSettings_Title: String { return self._s[1477]! } - public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[1478]! } - public var Web_OpenExternal: String { return self._s[1479]! } + public var Privacy_PaymentsClearInfoHelp: String { return self._s[1476]! } + public var Presence_online: String { return self._s[1478]! } + public var PasscodeSettings_Title: String { return self._s[1479]! } + public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[1480]! } + public var Web_OpenExternal: String { return self._s[1481]! } public func AutoNightTheme_AutomaticHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1481]!, self._r[1481]!, [_0]) + return formatWithArgumentRanges(self._s[1483]!, self._r[1483]!, [_0]) } - public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[1482]! } - public var Map_YouAreHere: String { return self._s[1483]! } + public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[1484]! } + public var Map_YouAreHere: String { return self._s[1485]! } public func MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1484]!, self._r[1484]!, [_1]) + return formatWithArgumentRanges(self._s[1486]!, self._r[1486]!, [_1]) } public func AuthSessions_Message(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1485]!, self._r[1485]!, [_0]) + return formatWithArgumentRanges(self._s[1487]!, self._r[1487]!, [_0]) } - public var PrivacyLastSeenSettings_AlwaysShareWith: String { return self._s[1486]! } - public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[1487]! } + public var PrivacyLastSeenSettings_AlwaysShareWith: String { return self._s[1488]! } + public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[1489]! } public func AuthSessions_AppUnofficial(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1488]!, self._r[1488]!, [_0]) + return formatWithArgumentRanges(self._s[1490]!, self._r[1490]!, [_0]) } public func DialogList_LiveLocationSharingTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1489]!, self._r[1489]!, [_0]) + return formatWithArgumentRanges(self._s[1491]!, self._r[1491]!, [_0]) } - public var SocksProxySetup_Username: String { return self._s[1490]! } - public var Bot_Start: String { return self._s[1491]! } + public var SocksProxySetup_Username: String { return self._s[1492]! } + public var Bot_Start: String { return self._s[1493]! } public func Channel_AdminLog_EmptyFilterQueryText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1492]!, self._r[1492]!, [_0]) + return formatWithArgumentRanges(self._s[1494]!, self._r[1494]!, [_0]) } public func Channel_AdminLog_MessagePinned(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1493]!, self._r[1493]!, [_0]) + return formatWithArgumentRanges(self._s[1495]!, self._r[1495]!, [_0]) } public func PINNED_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1495]!, self._r[1495]!, [_1]) + return formatWithArgumentRanges(self._s[1497]!, self._r[1497]!, [_1]) } - public var Conversation_DiscardVoiceMessageTitle: String { return self._s[1496]! } + public var Conversation_DiscardVoiceMessageTitle: String { return self._s[1498]! } public func PrivacySettings_LastSeenContactsMinus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1497]!, self._r[1497]!, [_0]) + return formatWithArgumentRanges(self._s[1499]!, self._r[1499]!, [_0]) } - public var Passport_Email_EnterOtherEmail: String { return self._s[1498]! } - public var Login_InfoAvatarPhoto: String { return self._s[1499]! } - public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[1500]! } - public var Tour_Title4: String { return self._s[1501]! } - public var Passport_Identity_Translation: String { return self._s[1502]! } - public var Login_TermsOfServiceLabel: String { return self._s[1504]! } - public var Passport_Language_it: String { return self._s[1505]! } - public var KeyCommand_JumpToNextUnreadChat: String { return self._s[1506]! } - public var Passport_Identity_SelfieHelp: String { return self._s[1507]! } - public var Conversation_ClearAll: String { return self._s[1509]! } + public var Passport_Email_EnterOtherEmail: String { return self._s[1500]! } + public var Login_InfoAvatarPhoto: String { return self._s[1501]! } + public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[1502]! } + public var Tour_Title4: String { return self._s[1503]! } + public var Passport_Identity_Translation: String { return self._s[1504]! } + public var Login_TermsOfServiceLabel: String { return self._s[1506]! } + public var Passport_Language_it: String { return self._s[1507]! } + public var KeyCommand_JumpToNextUnreadChat: String { return self._s[1508]! } + public var Passport_Identity_SelfieHelp: String { return self._s[1509]! } + public var Conversation_ClearAll: String { return self._s[1511]! } public func MESSAGE_PHOTOS(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1511]!, self._r[1511]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1513]!, self._r[1513]!, [_1, _2]) } - public var TwoStepAuth_FloodError: String { return self._s[1512]! } - public var Paint_Delete: String { return self._s[1513]! } + public var TwoStepAuth_FloodError: String { return self._s[1514]! } + public var Paint_Delete: String { return self._s[1515]! } public func Passport_AcceptHelp(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1514]!, self._r[1514]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1516]!, self._r[1516]!, [_1, _2]) } - public var Message_PinnedAudioMessage: String { return self._s[1515]! } + public var Message_PinnedAudioMessage: String { return self._s[1517]! } public func Watch_Time_ShortTodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1516]!, self._r[1516]!, [_0]) + return formatWithArgumentRanges(self._s[1518]!, self._r[1518]!, [_0]) } - public var Notification_Mute1hMin: String { return self._s[1517]! } - public var Notifications_GroupNotificationsSound: String { return self._s[1518]! } - public var SocksProxySetup_ShareProxyList: String { return self._s[1519]! } - public var Conversation_MessageEditedLabel: String { return self._s[1520]! } - public var Notification_Exceptions_AlwaysOff: String { return self._s[1521]! } + public var Notification_Mute1hMin: String { return self._s[1519]! } + public var Notifications_GroupNotificationsSound: String { return self._s[1520]! } + public var SocksProxySetup_ShareProxyList: String { return self._s[1521]! } + public var Conversation_MessageEditedLabel: String { return self._s[1522]! } + public var Notification_Exceptions_AlwaysOff: String { return self._s[1523]! } public func Channel_AdminLog_MessageAdmin(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1522]!, self._r[1522]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[1524]!, self._r[1524]!, [_0, _1, _2]) } - public var NetworkUsageSettings_ResetStats: String { return self._s[1523]! } - public var AccessDenied_LocationTracking: String { return self._s[1524]! } - public var Month_GenOctober: String { return self._s[1525]! } - public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[1526]! } - public var EnterPasscode_EnterPasscode: String { return self._s[1527]! } - public var MediaPicker_TimerTooltip: String { return self._s[1529]! } - public var SharedMedia_TitleAll: String { return self._s[1530]! } - public var Conversation_RestrictedMedia: String { return self._s[1532]! } - public var AccessDenied_PhotosRestricted: String { return self._s[1533]! } - public var ChangePhoneNumberCode_Called: String { return self._s[1535]! } + public var NetworkUsageSettings_ResetStats: String { return self._s[1525]! } + public var AccessDenied_LocationTracking: String { return self._s[1526]! } + public var Month_GenOctober: String { return self._s[1527]! } + public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[1528]! } + public var EnterPasscode_EnterPasscode: String { return self._s[1529]! } + public var MediaPicker_TimerTooltip: String { return self._s[1531]! } + public var SharedMedia_TitleAll: String { return self._s[1532]! } + public var Conversation_RestrictedMedia: String { return self._s[1534]! } + public var AccessDenied_PhotosRestricted: String { return self._s[1535]! } + public var ChangePhoneNumberCode_Called: String { return self._s[1537]! } public func Notification_PinnedDocumentMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1536]!, self._r[1536]!, [_0]) + return formatWithArgumentRanges(self._s[1538]!, self._r[1538]!, [_0]) } - public var Conversation_SavedMessages: String { return self._s[1539]! } - public var Your_cards_expiration_month_is_invalid: String { return self._s[1541]! } - public var FastTwoStepSetup_PasswordPlaceholder: String { return self._s[1542]! } + public var Conversation_SavedMessages: String { return self._s[1541]! } + public var Your_cards_expiration_month_is_invalid: String { return self._s[1543]! } + public var FastTwoStepSetup_PasswordPlaceholder: String { return self._s[1544]! } public func Target_ShareGameConfirmationGroup(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1544]!, self._r[1544]!, [_0]) + return formatWithArgumentRanges(self._s[1546]!, self._r[1546]!, [_0]) } - public var ReportPeer_AlertSuccess: String { return self._s[1545]! } + public var ReportPeer_AlertSuccess: String { return self._s[1547]! } public func InstantPage_RelatedArticleAuthorAndDateTitle(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1546]!, self._r[1546]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1548]!, self._r[1548]!, [_1, _2]) } - public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[1547]! } - public var Checkout_PasswordEntry_Title: String { return self._s[1548]! } - public var PhotoEditor_FadeTool: String { return self._s[1549]! } - public var Privacy_ContactsReset: String { return self._s[1550]! } + public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[1549]! } + public var Checkout_PasswordEntry_Title: String { return self._s[1550]! } + public var PhotoEditor_FadeTool: String { return self._s[1551]! } + public var Privacy_ContactsReset: String { return self._s[1552]! } public func Channel_AdminLog_MessageRestrictedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1552]!, self._r[1552]!, [_0]) + return formatWithArgumentRanges(self._s[1554]!, self._r[1554]!, [_0]) } - public var Message_PinnedVideoMessage: String { return self._s[1553]! } - public var ChatList_Mute: String { return self._s[1554]! } - public var Permissions_CellularDataText_v0: String { return self._s[1555]! } - public var ShareMenu_SelectChats: String { return self._s[1557]! } - public var MusicPlayer_VoiceNote: String { return self._s[1558]! } - public var Conversation_RestrictedText: String { return self._s[1559]! } - public var TwoStepAuth_DisableSuccess: String { return self._s[1560]! } - public var Cache_Videos: String { return self._s[1561]! } - public var FeatureDisabled_Oops: String { return self._s[1563]! } - public var Passport_Address_PostcodePlaceholder: String { return self._s[1564]! } + public var Message_PinnedVideoMessage: String { return self._s[1555]! } + public var ChatList_Mute: String { return self._s[1556]! } + public var Permissions_CellularDataText_v0: String { return self._s[1557]! } + public var ShareMenu_SelectChats: String { return self._s[1559]! } + public var MusicPlayer_VoiceNote: String { return self._s[1560]! } + public var Conversation_RestrictedText: String { return self._s[1561]! } + public var TwoStepAuth_DisableSuccess: String { return self._s[1562]! } + public var Cache_Videos: String { return self._s[1563]! } + public var FeatureDisabled_Oops: String { return self._s[1565]! } + public var Passport_Address_PostcodePlaceholder: String { return self._s[1566]! } public func CHAT_MESSAGE_VIDEO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1565]!, self._r[1565]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1567]!, self._r[1567]!, [_1, _2]) } - public var Stickers_GroupStickersHelp: String { return self._s[1566]! } - public var Message_VideoExpired: String { return self._s[1568]! } - public var Notifications_Badge: String { return self._s[1569]! } - public var GroupInfo_GroupHistoryVisible: String { return self._s[1570]! } - public var CreatePoll_OptionPlaceholder: String { return self._s[1571]! } - public var Username_InvalidTooShort: String { return self._s[1572]! } - public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[1573]! } + public var Stickers_GroupStickersHelp: String { return self._s[1568]! } + public var Message_VideoExpired: String { return self._s[1570]! } + public var Notifications_Badge: String { return self._s[1571]! } + public var GroupInfo_GroupHistoryVisible: String { return self._s[1572]! } + public var CreatePoll_OptionPlaceholder: String { return self._s[1573]! } + public var Username_InvalidTooShort: String { return self._s[1574]! } + public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[1575]! } public func Notification_MessageLifetimeRemoved(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1574]!, self._r[1574]!, [_1]) + return formatWithArgumentRanges(self._s[1576]!, self._r[1576]!, [_1]) } - public var Permissions_SiriAllowInSettings_v0: String { return self._s[1575]! } - public var SharedMedia_CategoryDocs: String { return self._s[1578]! } + public var Permissions_SiriAllowInSettings_v0: String { return self._s[1577]! } + public var SharedMedia_CategoryDocs: String { return self._s[1580]! } public func Notification_MessageLifetimeChangedOutgoing(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1580]!, self._r[1580]!, [_1]) + return formatWithArgumentRanges(self._s[1582]!, self._r[1582]!, [_1]) } - public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[1581]! } + public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[1583]! } public func Time_MonthOfYear_m12(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1582]!, self._r[1582]!, [_0]) + return formatWithArgumentRanges(self._s[1584]!, self._r[1584]!, [_0]) } - public var ChatSettings_PrivateChats: String { return self._s[1583]! } - public var Channel_UpdatePhotoItem: String { return self._s[1584]! } - public var GroupInfo_LeftStatus: String { return self._s[1585]! } - public var Watch_MessageView_Forward: String { return self._s[1587]! } - public var ReportPeer_ReasonChildAbuse: String { return self._s[1588]! } - public var Cache_ClearEmpty: String { return self._s[1590]! } - public var Localization_LanguageName: String { return self._s[1591]! } - public var WebSearch_GIFs: String { return self._s[1592]! } - public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[1593]! } - public var Username_InvalidStartsWithNumber: String { return self._s[1594]! } - public var Common_Back: String { return self._s[1595]! } - public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[1596]! } + public var ChatSettings_PrivateChats: String { return self._s[1585]! } + public var Channel_UpdatePhotoItem: String { return self._s[1586]! } + public var GroupInfo_LeftStatus: String { return self._s[1587]! } + public var Watch_MessageView_Forward: String { return self._s[1589]! } + public var ReportPeer_ReasonChildAbuse: String { return self._s[1590]! } + public var Cache_ClearEmpty: String { return self._s[1592]! } + public var Localization_LanguageName: String { return self._s[1593]! } + public var WebSearch_GIFs: String { return self._s[1594]! } + public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[1595]! } + public var Username_InvalidStartsWithNumber: String { return self._s[1596]! } + public var Common_Back: String { return self._s[1597]! } + public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[1598]! } public func CHANNEL_MESSAGE_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1597]!, self._r[1597]!, [_1]) + return formatWithArgumentRanges(self._s[1599]!, self._r[1599]!, [_1]) } public func CHANNEL_MESSAGE_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1598]!, self._r[1598]!, [_1]) + return formatWithArgumentRanges(self._s[1600]!, self._r[1600]!, [_1]) } - public var Passport_Email_Help: String { return self._s[1599]! } - public var Watch_Conversation_Reply: String { return self._s[1600]! } - public var Conversation_EditingMessageMediaChange: String { return self._s[1602]! } - public var Passport_Identity_IssueDatePlaceholder: String { return self._s[1603]! } - public var Channel_BanUser_Unban: String { return self._s[1605]! } - public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[1606]! } - public var Group_Username_CreatePublicLinkHelp: String { return self._s[1607]! } - public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[1608]! } - public var Passport_Identity_Name: String { return self._s[1610]! } - public var Conversation_BlockUser: String { return self._s[1611]! } - public var Month_GenJanuary: String { return self._s[1612]! } - public var ChatSettings_TextSize: String { return self._s[1613]! } - public var Notification_PassportValuePhone: String { return self._s[1614]! } - public var Passport_Language_ne: String { return self._s[1615]! } - public var Notification_CallBack: String { return self._s[1616]! } - public var TwoStepAuth_EmailHelp: String { return self._s[1617]! } + public var Passport_Email_Help: String { return self._s[1601]! } + public var Watch_Conversation_Reply: String { return self._s[1602]! } + public var Conversation_EditingMessageMediaChange: String { return self._s[1604]! } + public var Passport_Identity_IssueDatePlaceholder: String { return self._s[1605]! } + public var Channel_BanUser_Unban: String { return self._s[1607]! } + public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[1608]! } + public var Group_Username_CreatePublicLinkHelp: String { return self._s[1609]! } + public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[1610]! } + public var Passport_Identity_Name: String { return self._s[1612]! } + public var Conversation_BlockUser: String { return self._s[1613]! } + public var Month_GenJanuary: String { return self._s[1614]! } + public var ChatSettings_TextSize: String { return self._s[1615]! } + public var Notification_PassportValuePhone: String { return self._s[1616]! } + public var Passport_Language_ne: String { return self._s[1617]! } + public var Notification_CallBack: String { return self._s[1618]! } + public var TwoStepAuth_EmailHelp: String { return self._s[1619]! } public func Time_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1618]!, self._r[1618]!, [_0]) + return formatWithArgumentRanges(self._s[1620]!, self._r[1620]!, [_0]) } - public var Channel_Info_Management: String { return self._s[1619]! } - public var Passport_FieldIdentityUploadHelp: String { return self._s[1620]! } - public var Stickers_FrequentlyUsed: String { return self._s[1621]! } - public var Channel_BanUser_PermissionSendMessages: String { return self._s[1622]! } - public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[1624]! } - public var Passport_Address_EditResidentialAddress: String { return self._s[1625]! } - public var PrivacyPolicy_DeclineTitle: String { return self._s[1626]! } - public var CreatePoll_TextHeader: String { return self._s[1627]! } + public var Channel_Info_Management: String { return self._s[1621]! } + public var Passport_FieldIdentityUploadHelp: String { return self._s[1622]! } + public var Stickers_FrequentlyUsed: String { return self._s[1623]! } + public var Channel_BanUser_PermissionSendMessages: String { return self._s[1624]! } + public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[1626]! } + public var Passport_Address_EditResidentialAddress: String { return self._s[1627]! } + public var PrivacyPolicy_DeclineTitle: String { return self._s[1628]! } + public var CreatePoll_TextHeader: String { return self._s[1629]! } public func Checkout_SavePasswordTimeoutAndTouchId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1628]!, self._r[1628]!, [_0]) + return formatWithArgumentRanges(self._s[1630]!, self._r[1630]!, [_0]) } - public var PhotoEditor_QualityMedium: String { return self._s[1629]! } - public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[1630]! } + public var PhotoEditor_QualityMedium: String { return self._s[1631]! } + public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[1632]! } public func Conversation_RestrictedInlineTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1631]!, self._r[1631]!, [_0]) + return formatWithArgumentRanges(self._s[1633]!, self._r[1633]!, [_0]) } - public var Conversation_StatusKickedFromChannel: String { return self._s[1632]! } - public var CheckoutInfo_ReceiverInfoName: String { return self._s[1633]! } - public var Group_ErrorSendRestrictedStickers: String { return self._s[1634]! } - public var Conversation_LinkDialogOpen: String { return self._s[1636]! } - public var Settings_Username: String { return self._s[1637]! } - public var Wallpaper_Wallpaper: String { return self._s[1639]! } + public var Conversation_StatusKickedFromChannel: String { return self._s[1634]! } + public var CheckoutInfo_ReceiverInfoName: String { return self._s[1635]! } + public var Group_ErrorSendRestrictedStickers: String { return self._s[1636]! } + public var Conversation_LinkDialogOpen: String { return self._s[1638]! } + public var Settings_Username: String { return self._s[1639]! } + public var Wallpaper_Wallpaper: String { return self._s[1641]! } public func PINNED_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1641]!, self._r[1641]!, [_1]) + return formatWithArgumentRanges(self._s[1643]!, self._r[1643]!, [_1]) } - public var SocksProxySetup_UseProxy: String { return self._s[1642]! } - public var UserInfo_ShareMyContactInfo: String { return self._s[1643]! } - public var MessageTimer_Forever: String { return self._s[1644]! } - public var Privacy_Calls_WhoCanCallMe: String { return self._s[1645]! } - public var PhotoEditor_DiscardChanges: String { return self._s[1646]! } - public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[1647]! } - public var Passport_Language_da: String { return self._s[1648]! } - public var SocksProxySetup_PortPlaceholder: String { return self._s[1649]! } + public var SocksProxySetup_UseProxy: String { return self._s[1644]! } + public var UserInfo_ShareMyContactInfo: String { return self._s[1645]! } + public var MessageTimer_Forever: String { return self._s[1646]! } + public var Privacy_Calls_WhoCanCallMe: String { return self._s[1647]! } + public var PhotoEditor_DiscardChanges: String { return self._s[1648]! } + public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[1649]! } + public var Passport_Language_da: String { return self._s[1650]! } + public var SocksProxySetup_PortPlaceholder: String { return self._s[1651]! } public func SecretGIF_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1650]!, self._r[1650]!, [_0]) + return formatWithArgumentRanges(self._s[1652]!, self._r[1652]!, [_0]) } - public var Passport_Address_EditPassportRegistration: String { return self._s[1651]! } + public var Passport_Address_EditPassportRegistration: String { return self._s[1653]! } public func Channel_AdminLog_MessageChangedGroupAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1653]!, self._r[1653]!, [_0]) + return formatWithArgumentRanges(self._s[1655]!, self._r[1655]!, [_0]) } - public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[1655]! } - public var Conversation_SearchByName_Prefix: String { return self._s[1656]! } + public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[1657]! } + public var Conversation_SearchByName_Prefix: String { return self._s[1658]! } public func PINNED_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1657]!, self._r[1657]!, [_1]) + return formatWithArgumentRanges(self._s[1659]!, self._r[1659]!, [_1]) } - public var Conversation_PinnedPoll: String { return self._s[1658]! } - public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[1659]! } - public var Cache_ByPeerHeader: String { return self._s[1660]! } + public var Conversation_PinnedPoll: String { return self._s[1660]! } + public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[1661]! } + public var Cache_ByPeerHeader: String { return self._s[1662]! } public func Conversation_EncryptedPlaceholderTitleIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1661]!, self._r[1661]!, [_0]) + return formatWithArgumentRanges(self._s[1663]!, self._r[1663]!, [_0]) } - public var ChatSettings_AutoDownloadDocuments: String { return self._s[1662]! } - public var Notification_PinnedMessage: String { return self._s[1665]! } - public var Call_EncryptionKey_Title: String { return self._s[1668]! } - public var Watch_UserInfo_Service: String { return self._s[1669]! } - public var Conversation_Unpin: String { return self._s[1672]! } - public var CancelResetAccount_Title: String { return self._s[1673]! } - public var Map_LiveLocationFor15Minutes: String { return self._s[1674]! } + public var ChatSettings_AutoDownloadDocuments: String { return self._s[1664]! } + public var Notification_PinnedMessage: String { return self._s[1667]! } + public var Call_EncryptionKey_Title: String { return self._s[1670]! } + public var Watch_UserInfo_Service: String { return self._s[1671]! } + public var Conversation_Unpin: String { return self._s[1674]! } + public var CancelResetAccount_Title: String { return self._s[1675]! } + public var Map_LiveLocationFor15Minutes: String { return self._s[1676]! } public func Time_PreciseDate_m8(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1676]!, self._r[1676]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1678]!, self._r[1678]!, [_1, _2, _3]) } - public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[1677]! } - public var CallSettings_Title: String { return self._s[1678]! } - public var PasscodeSettings_EncryptDataHelp: String { return self._s[1680]! } - public var AutoDownloadSettings_Contacts: String { return self._s[1681]! } - public var Passport_Identity_DocumentDetails: String { return self._s[1682]! } - public var LoginPassword_PasswordHelp: String { return self._s[1683]! } - public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[1684]! } - public var Checkout_TotalPaidAmount: String { return self._s[1685]! } + public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[1679]! } + public var CallSettings_Title: String { return self._s[1680]! } + public var PasscodeSettings_EncryptDataHelp: String { return self._s[1682]! } + public var AutoDownloadSettings_Contacts: String { return self._s[1683]! } + public var Passport_Identity_DocumentDetails: String { return self._s[1684]! } + public var LoginPassword_PasswordHelp: String { return self._s[1685]! } + public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[1686]! } + public var Checkout_TotalPaidAmount: String { return self._s[1687]! } public func FileSize_KB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1686]!, self._r[1686]!, [_0]) + return formatWithArgumentRanges(self._s[1688]!, self._r[1688]!, [_0]) } - public var PasscodeSettings_ChangePasscode: String { return self._s[1687]! } - public var Conversation_SecretLinkPreviewAlert: String { return self._s[1689]! } - public var Privacy_SecretChatsLinkPreviews: String { return self._s[1690]! } - public var Contacts_InviteFriends: String { return self._s[1692]! } - public var Map_ChooseLocationTitle: String { return self._s[1693]! } - public var Conversation_StopPoll: String { return self._s[1695]! } - public var Calls_RatingFeedback: String { return self._s[1696]! } - public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[1697]! } - public var NotificationsSound_Pulse: String { return self._s[1698]! } - public var Watch_LastSeen_Lately: String { return self._s[1699]! } - public var Widget_NoUsers: String { return self._s[1702]! } - public var Conversation_UnvotePoll: String { return self._s[1703]! } - public var NotificationsSound_Circles: String { return self._s[1705]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[1707]! } + public var PasscodeSettings_ChangePasscode: String { return self._s[1689]! } + public var Conversation_SecretLinkPreviewAlert: String { return self._s[1691]! } + public var Privacy_SecretChatsLinkPreviews: String { return self._s[1692]! } + public var Contacts_InviteFriends: String { return self._s[1694]! } + public var Map_ChooseLocationTitle: String { return self._s[1695]! } + public var Conversation_StopPoll: String { return self._s[1697]! } + public var Calls_RatingFeedback: String { return self._s[1698]! } + public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[1699]! } + public var NotificationsSound_Pulse: String { return self._s[1700]! } + public var Watch_LastSeen_Lately: String { return self._s[1701]! } + public var Widget_NoUsers: String { return self._s[1704]! } + public var Conversation_UnvotePoll: String { return self._s[1705]! } + public var NotificationsSound_Circles: String { return self._s[1707]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[1709]! } public func CHANNEL_MESSAGE_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1708]!, self._r[1708]!, [_1]) + return formatWithArgumentRanges(self._s[1710]!, self._r[1710]!, [_1]) } - public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[1709]! } + public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[1711]! } public func CHAT_MESSAGE_GIF(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1710]!, self._r[1710]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1712]!, self._r[1712]!, [_1, _2]) } - public var Passport_Identity_CountryPlaceholder: String { return self._s[1712]! } - public var Conversation_FileDropbox: String { return self._s[1714]! } - public var Notifications_ExceptionsUnmuted: String { return self._s[1715]! } - public var Tour_Text3: String { return self._s[1717]! } - public var Login_ResetAccountProtected_Title: String { return self._s[1719]! } - public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[1720]! } + public var Passport_Identity_CountryPlaceholder: String { return self._s[1714]! } + public var Conversation_FileDropbox: String { return self._s[1716]! } + public var Notifications_ExceptionsUnmuted: String { return self._s[1717]! } + public var Tour_Text3: String { return self._s[1719]! } + public var Login_ResetAccountProtected_Title: String { return self._s[1721]! } + public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[1722]! } public func Conversation_LiveLocationYouAnd(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1722]!, self._r[1722]!, [_0]) + return formatWithArgumentRanges(self._s[1724]!, self._r[1724]!, [_0]) } - public var GroupInfo_AddParticipantTitle: String { return self._s[1723]! } - public var Checkout_ShippingOption_Title: String { return self._s[1724]! } - public var ChatSettings_AutoDownloadTitle: String { return self._s[1725]! } + public var GroupInfo_AddParticipantTitle: String { return self._s[1725]! } + public var Checkout_ShippingOption_Title: String { return self._s[1726]! } + public var ChatSettings_AutoDownloadTitle: String { return self._s[1727]! } public func DialogList_SingleTypingSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1726]!, self._r[1726]!, [_0]) + return formatWithArgumentRanges(self._s[1728]!, self._r[1728]!, [_0]) } public func CHAT_MESSAGE_ROUND(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1727]!, self._r[1727]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1729]!, self._r[1729]!, [_1, _2]) } - public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[1728]! } - public var Appearance_PreviewIncomingText: String { return self._s[1730]! } - public var ChannelInfo_ConfirmLeave: String { return self._s[1731]! } - public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[1732]! } - public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[1733]! } - public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[1734]! } - public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[1735]! } - public var GroupInfo_SetGroupPhotoStop: String { return self._s[1736]! } - public var Notification_SecretChatScreenshot: String { return self._s[1737]! } - public var Passport_Address_City: String { return self._s[1739]! } - public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[1740]! } - public var SocksProxySetup_SecretPlaceholder: String { return self._s[1741]! } - public var AccessDenied_LocationDisabled: String { return self._s[1742]! } - public var SocksProxySetup_HostnamePlaceholder: String { return self._s[1744]! } - public var GroupInfo_Sound: String { return self._s[1745]! } - public var Stickers_RemoveFromFavorites: String { return self._s[1746]! } - public var Contacts_Title: String { return self._s[1747]! } - public var Passport_Language_fr: String { return self._s[1748]! } + public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[1730]! } + public var Appearance_PreviewIncomingText: String { return self._s[1732]! } + public var ChannelInfo_ConfirmLeave: String { return self._s[1733]! } + public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[1734]! } + public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[1735]! } + public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[1736]! } + public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[1737]! } + public var GroupInfo_SetGroupPhotoStop: String { return self._s[1738]! } + public var Notification_SecretChatScreenshot: String { return self._s[1739]! } + public var Passport_Address_City: String { return self._s[1741]! } + public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[1742]! } + public var SocksProxySetup_SecretPlaceholder: String { return self._s[1743]! } + public var AccessDenied_LocationDisabled: String { return self._s[1744]! } + public var SocksProxySetup_HostnamePlaceholder: String { return self._s[1746]! } + public var GroupInfo_Sound: String { return self._s[1747]! } + public var Stickers_RemoveFromFavorites: String { return self._s[1748]! } + public var Contacts_Title: String { return self._s[1749]! } + public var Passport_Language_fr: String { return self._s[1750]! } public func CHAT_TITLE_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1749]!, self._r[1749]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1751]!, self._r[1751]!, [_1, _2]) } - public var Notifications_ResetAllNotifications: String { return self._s[1750]! } - public var PrivacySettings_SecurityTitle: String { return self._s[1753]! } - public var Checkout_NewCard_Title: String { return self._s[1754]! } - public var Login_HaveNotReceivedCodeInternal: String { return self._s[1755]! } - public var Conversation_ForwardChats: String { return self._s[1756]! } - public var Settings_FAQ: String { return self._s[1759]! } - public var AutoDownloadSettings_DocumentsTitle: String { return self._s[1760]! } - public var Conversation_ContextMenuForward: String { return self._s[1761]! } - public var PrivacyPolicy_Title: String { return self._s[1766]! } - public var Notifications_TextTone: String { return self._s[1767]! } - public var Profile_CreateNewContact: String { return self._s[1768]! } - public var AutoNightTheme_AutomaticSection: String { return self._s[1770]! } - public var Channel_Username_InvalidCharacters: String { return self._s[1772]! } + public var Notifications_ResetAllNotifications: String { return self._s[1752]! } + public var PrivacySettings_SecurityTitle: String { return self._s[1755]! } + public var Checkout_NewCard_Title: String { return self._s[1756]! } + public var Login_HaveNotReceivedCodeInternal: String { return self._s[1757]! } + public var Conversation_ForwardChats: String { return self._s[1758]! } + public var Settings_FAQ: String { return self._s[1761]! } + public var AutoDownloadSettings_DocumentsTitle: String { return self._s[1762]! } + public var Conversation_ContextMenuForward: String { return self._s[1763]! } + public var PrivacyPolicy_Title: String { return self._s[1768]! } + public var Notifications_TextTone: String { return self._s[1769]! } + public var Profile_CreateNewContact: String { return self._s[1770]! } + public var AutoNightTheme_AutomaticSection: String { return self._s[1772]! } + public var Channel_Username_InvalidCharacters: String { return self._s[1774]! } public func Channel_AdminLog_MessageChangedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1773]!, self._r[1773]!, [_0]) + return formatWithArgumentRanges(self._s[1775]!, self._r[1775]!, [_0]) } - public var PrivacySettings_LastSeenTitle: String { return self._s[1774]! } - public var Channel_AdminLog_CanInviteUsers: String { return self._s[1775]! } - public var Conversation_MessageDeliveryFailed: String { return self._s[1776]! } - public var TextFormat_Italic: String { return self._s[1777]! } - public var Bot_Unblock: String { return self._s[1778]! } - public var Watch_ChatList_NoConversationsText: String { return self._s[1779]! } - public var Weekday_Wednesday: String { return self._s[1780]! } - public var Settings_About_Help: String { return self._s[1781]! } - public var SearchImages_Title: String { return self._s[1782]! } - public var Conversation_ClousStorageInfo_Description1: String { return self._s[1783]! } - public var ExplicitContent_AlertTitle: String { return self._s[1784]! } + public var PrivacySettings_LastSeenTitle: String { return self._s[1776]! } + public var Channel_AdminLog_CanInviteUsers: String { return self._s[1777]! } + public var Conversation_MessageDeliveryFailed: String { return self._s[1778]! } + public var TextFormat_Italic: String { return self._s[1779]! } + public var Bot_Unblock: String { return self._s[1780]! } + public var Watch_ChatList_NoConversationsText: String { return self._s[1781]! } + public var Weekday_Wednesday: String { return self._s[1782]! } + public var Settings_About_Help: String { return self._s[1783]! } + public var SearchImages_Title: String { return self._s[1784]! } + public var Conversation_ClousStorageInfo_Description1: String { return self._s[1785]! } + public var ExplicitContent_AlertTitle: String { return self._s[1786]! } public func Time_PreciseDate_m5(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1785]!, self._r[1785]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1787]!, self._r[1787]!, [_1, _2, _3]) } - public var Weekday_Thursday: String { return self._s[1786]! } - public var Channel_Members_AddMembersHelp: String { return self._s[1787]! } + public var Weekday_Thursday: String { return self._s[1788]! } + public var Channel_Members_AddMembersHelp: String { return self._s[1789]! } public func Checkout_SavePasswordTimeout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1788]!, self._r[1788]!, [_0]) + return formatWithArgumentRanges(self._s[1790]!, self._r[1790]!, [_0]) } - public var Passport_RequestedInformation: String { return self._s[1789]! } - public var Login_PhoneAndCountryHelp: String { return self._s[1790]! } + public var Passport_RequestedInformation: String { return self._s[1791]! } + public var Login_PhoneAndCountryHelp: String { return self._s[1792]! } public func CHAT_MESSAGE_AUDIO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1791]!, self._r[1791]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1793]!, self._r[1793]!, [_1, _2]) } - public var Conversation_EncryptionProcessing: String { return self._s[1792]! } - public var PhotoEditor_EnhanceTool: String { return self._s[1795]! } - public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[1796]! } - public var Channel_Setup_Title: String { return self._s[1797]! } - public var Conversation_SearchPlaceholder: String { return self._s[1798]! } - public var AccessDenied_LocationAlwaysDenied: String { return self._s[1799]! } - public var Checkout_ErrorGeneric: String { return self._s[1800]! } - public var Passport_Language_hu: String { return self._s[1801]! } + public var Conversation_EncryptionProcessing: String { return self._s[1794]! } + public var PhotoEditor_EnhanceTool: String { return self._s[1797]! } + public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[1798]! } + public var Channel_Setup_Title: String { return self._s[1799]! } + public var Conversation_SearchPlaceholder: String { return self._s[1800]! } + public var AccessDenied_LocationAlwaysDenied: String { return self._s[1801]! } + public var Checkout_ErrorGeneric: String { return self._s[1802]! } + public var Passport_Language_hu: String { return self._s[1803]! } public func Passport_Identity_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1803]!, self._r[1803]!, [_0]) + return formatWithArgumentRanges(self._s[1805]!, self._r[1805]!, [_0]) } - public var Conversation_CloudStorageInfo_Title: String { return self._s[1806]! } - public var PhotoEditor_CropAspectRatioSquare: String { return self._s[1807]! } + public var Conversation_CloudStorageInfo_Title: String { return self._s[1808]! } + public var PhotoEditor_CropAspectRatioSquare: String { return self._s[1809]! } public func Notification_Exceptions_MutedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1808]!, self._r[1808]!, [_0]) + return formatWithArgumentRanges(self._s[1810]!, self._r[1810]!, [_0]) } - public var Conversation_ClearPrivateHistory: String { return self._s[1809]! } - public var ContactInfo_PhoneLabelHome: String { return self._s[1810]! } - public var PrivacySettings_LastSeenContacts: String { return self._s[1811]! } + public var Conversation_ClearPrivateHistory: String { return self._s[1811]! } + public var ContactInfo_PhoneLabelHome: String { return self._s[1812]! } + public var PrivacySettings_LastSeenContacts: String { return self._s[1813]! } public func ChangePhone_ErrorOccupied(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1812]!, self._r[1812]!, [_0]) + return formatWithArgumentRanges(self._s[1814]!, self._r[1814]!, [_0]) } - public var Passport_Language_cs: String { return self._s[1813]! } - public var Message_PinnedAnimationMessage: String { return self._s[1814]! } - public var Passport_Identity_ReverseSideHelp: String { return self._s[1816]! } - public var Embed_PlayingInPIP: String { return self._s[1818]! } - public var AutoNightTheme_ScheduleSection: String { return self._s[1819]! } + public var Passport_Language_cs: String { return self._s[1815]! } + public var Message_PinnedAnimationMessage: String { return self._s[1816]! } + public var Passport_Identity_ReverseSideHelp: String { return self._s[1818]! } + public var Embed_PlayingInPIP: String { return self._s[1820]! } + public var AutoNightTheme_ScheduleSection: String { return self._s[1821]! } public func Call_EmojiDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1820]!, self._r[1820]!, [_0]) + return formatWithArgumentRanges(self._s[1822]!, self._r[1822]!, [_0]) } - public var MediaPicker_LivePhotoDescription: String { return self._s[1821]! } + public var MediaPicker_LivePhotoDescription: String { return self._s[1823]! } public func Channel_AdminLog_MessageRestrictedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1822]!, self._r[1822]!, [_1]) + return formatWithArgumentRanges(self._s[1824]!, self._r[1824]!, [_1]) } - public var Notification_PaymentSent: String { return self._s[1823]! } - public var PhotoEditor_CurvesGreen: String { return self._s[1824]! } - public var SaveIncomingPhotosSettings_Title: String { return self._s[1825]! } + public var Notification_PaymentSent: String { return self._s[1825]! } + public var PhotoEditor_CurvesGreen: String { return self._s[1826]! } + public var SaveIncomingPhotosSettings_Title: String { return self._s[1827]! } public func ApplyLanguage_UnsufficientDataText(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1826]!, self._r[1826]!, [_1]) + return formatWithArgumentRanges(self._s[1828]!, self._r[1828]!, [_1]) } public func CHAT_MESSAGE_GEOLIVE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1827]!, self._r[1827]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1829]!, self._r[1829]!, [_1, _2]) } - public var NetworkUsageSettings_CallDataSection: String { return self._s[1828]! } - public var PasscodeSettings_HelpTop: String { return self._s[1829]! } - public var Passport_Address_TypeRentalAgreement: String { return self._s[1831]! } - public var ReportPeer_ReasonOther_Placeholder: String { return self._s[1832]! } - public var CheckoutInfo_ErrorPhoneInvalid: String { return self._s[1833]! } - public var Call_Accept: String { return self._s[1835]! } - public var Month_GenMarch: String { return self._s[1836]! } - public var PhotoEditor_ShadowsTool: String { return self._s[1837]! } - public var LoginPassword_Title: String { return self._s[1838]! } - public var Watch_Conversation_GroupInfo: String { return self._s[1839]! } - public var CallSettings_Always: String { return self._s[1840]! } - public var TwoStepAuth_SetupHint: String { return self._s[1841]! } - public var ConversationProfile_UsersTooMuchError: String { return self._s[1842]! } - public var Login_PhoneTitle: String { return self._s[1843]! } - public var Passport_FieldPhoneHelp: String { return self._s[1844]! } - public var Weekday_ShortSunday: String { return self._s[1845]! } - public var Passport_InfoFAQ_URL: String { return self._s[1846]! } - public var ContactInfo_Job: String { return self._s[1848]! } - public var UserInfo_InviteBotToGroup: String { return self._s[1849]! } - public var TwoStepAuth_PasswordRemovePassportConfirmation: String { return self._s[1850]! } - public var Passport_DeletePersonalDetailsConfirmation: String { return self._s[1851]! } - public var Passport_Identity_AddInternalPassport: String { return self._s[1853]! } - public var MediaPicker_AddCaption: String { return self._s[1854]! } - public var CallSettings_TabIconDescription: String { return self._s[1855]! } - public var Privacy_GroupsAndChannels_AlwaysAllow: String { return self._s[1856]! } - public var Passport_Identity_TypePersonalDetails: String { return self._s[1857]! } - public var DialogList_SearchSectionRecent: String { return self._s[1858]! } - public var PrivacyPolicy_DeclineMessage: String { return self._s[1859]! } - public var LastSeen_WithinAWeek: String { return self._s[1862]! } - public var ChannelMembers_GroupAdminsTitle: String { return self._s[1863]! } - public var Conversation_CloudStorage_ChatStatus: String { return self._s[1865]! } - public var Passport_Address_TypeResidentialAddress: String { return self._s[1866]! } - public var Conversation_StatusLeftGroup: String { return self._s[1867]! } - public var SocksProxySetup_ProxyDetailsTitle: String { return self._s[1868]! } - public var PhotoEditor_BlurToolRadial: String { return self._s[1871]! } - public var Conversation_ContextMenuCopy: String { return self._s[1872]! } - public var AccessDenied_CallMicrophone: String { return self._s[1873]! } + public var NetworkUsageSettings_CallDataSection: String { return self._s[1830]! } + public var PasscodeSettings_HelpTop: String { return self._s[1831]! } + public var Passport_Address_TypeRentalAgreement: String { return self._s[1833]! } + public var ReportPeer_ReasonOther_Placeholder: String { return self._s[1834]! } + public var CheckoutInfo_ErrorPhoneInvalid: String { return self._s[1835]! } + public var Call_Accept: String { return self._s[1837]! } + public var Month_GenMarch: String { return self._s[1838]! } + public var PhotoEditor_ShadowsTool: String { return self._s[1839]! } + public var LoginPassword_Title: String { return self._s[1840]! } + public var Watch_Conversation_GroupInfo: String { return self._s[1841]! } + public var CallSettings_Always: String { return self._s[1842]! } + public var TwoStepAuth_SetupHint: String { return self._s[1843]! } + public var ConversationProfile_UsersTooMuchError: String { return self._s[1844]! } + public var Login_PhoneTitle: String { return self._s[1845]! } + public var Passport_FieldPhoneHelp: String { return self._s[1846]! } + public var Weekday_ShortSunday: String { return self._s[1847]! } + public var Passport_InfoFAQ_URL: String { return self._s[1848]! } + public var ContactInfo_Job: String { return self._s[1850]! } + public var UserInfo_InviteBotToGroup: String { return self._s[1851]! } + public var TwoStepAuth_PasswordRemovePassportConfirmation: String { return self._s[1852]! } + public var Passport_DeletePersonalDetailsConfirmation: String { return self._s[1853]! } + public var Passport_Identity_AddInternalPassport: String { return self._s[1855]! } + public var MediaPicker_AddCaption: String { return self._s[1856]! } + public var CallSettings_TabIconDescription: String { return self._s[1857]! } + public var Privacy_GroupsAndChannels_AlwaysAllow: String { return self._s[1858]! } + public var Passport_Identity_TypePersonalDetails: String { return self._s[1859]! } + public var DialogList_SearchSectionRecent: String { return self._s[1860]! } + public var PrivacyPolicy_DeclineMessage: String { return self._s[1861]! } + public var LastSeen_WithinAWeek: String { return self._s[1864]! } + public var ChannelMembers_GroupAdminsTitle: String { return self._s[1865]! } + public var Conversation_CloudStorage_ChatStatus: String { return self._s[1867]! } + public var Passport_Address_TypeResidentialAddress: String { return self._s[1868]! } + public var Conversation_StatusLeftGroup: String { return self._s[1869]! } + public var SocksProxySetup_ProxyDetailsTitle: String { return self._s[1870]! } + public var PhotoEditor_BlurToolRadial: String { return self._s[1873]! } + public var Conversation_ContextMenuCopy: String { return self._s[1874]! } + public var AccessDenied_CallMicrophone: String { return self._s[1875]! } public func Time_PreciseDate_m2(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1874]!, self._r[1874]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1876]!, self._r[1876]!, [_1, _2, _3]) } - public var Login_InvalidFirstNameError: String { return self._s[1875]! } - public var Notifications_Badge_CountUnreadMessages_InfoOn: String { return self._s[1876]! } - public var Checkout_PaymentMethod_New: String { return self._s[1877]! } - public var ShareMenu_CopyShareLinkGame: String { return self._s[1878]! } - public var PhotoEditor_QualityTool: String { return self._s[1879]! } - public var Login_SendCodeViaSms: String { return self._s[1880]! } + public var Login_InvalidFirstNameError: String { return self._s[1877]! } + public var Notifications_Badge_CountUnreadMessages_InfoOn: String { return self._s[1878]! } + public var Checkout_PaymentMethod_New: String { return self._s[1879]! } + public var ShareMenu_CopyShareLinkGame: String { return self._s[1880]! } + public var PhotoEditor_QualityTool: String { return self._s[1881]! } + public var Login_SendCodeViaSms: String { return self._s[1882]! } public func CHAT_MESSAGE_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1881]!, self._r[1881]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1883]!, self._r[1883]!, [_1, _2]) } - public var Login_EmailNotConfiguredError: String { return self._s[1882]! } - public var PrivacyPolicy_Accept: String { return self._s[1883]! } - public var Notifications_ExceptionsMessagePlaceholder: String { return self._s[1884]! } - public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[1885]! } - public var AutoNightTheme_Automatic: String { return self._s[1886]! } - public var Channel_Username_InvalidStartsWithNumber: String { return self._s[1887]! } - public var Privacy_ContactsSyncHelp: String { return self._s[1888]! } - public var Cache_Help: String { return self._s[1889]! } - public var Passport_Language_fa: String { return self._s[1890]! } - public var Login_ResetAccountProtected_TimerTitle: String { return self._s[1891]! } - public var PrivacySettings_LastSeen: String { return self._s[1892]! } + public var Login_EmailNotConfiguredError: String { return self._s[1884]! } + public var PrivacyPolicy_Accept: String { return self._s[1885]! } + public var Notifications_ExceptionsMessagePlaceholder: String { return self._s[1886]! } + public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[1887]! } + public var AutoNightTheme_Automatic: String { return self._s[1888]! } + public var Channel_Username_InvalidStartsWithNumber: String { return self._s[1889]! } + public var Privacy_ContactsSyncHelp: String { return self._s[1890]! } + public var Cache_Help: String { return self._s[1891]! } + public var Passport_Language_fa: String { return self._s[1892]! } + public var Login_ResetAccountProtected_TimerTitle: String { return self._s[1893]! } + public var PrivacySettings_LastSeen: String { return self._s[1894]! } public func DialogList_MultipleTyping(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1893]!, self._r[1893]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1895]!, self._r[1895]!, [_0, _1]) } - public var Channel_EditAdmin_PermissionInviteUsers: String { return self._s[1895]! } - public var Preview_SaveGif: String { return self._s[1897]! } - public var Profile_About: String { return self._s[1898]! } - public var Channel_About_Placeholder: String { return self._s[1899]! } - public var Login_InfoTitle: String { return self._s[1900]! } + public var Channel_EditAdmin_PermissionInviteUsers: String { return self._s[1897]! } + public var Preview_SaveGif: String { return self._s[1899]! } + public var Profile_About: String { return self._s[1900]! } + public var Channel_About_Placeholder: String { return self._s[1901]! } + public var Login_InfoTitle: String { return self._s[1902]! } public func TwoStepAuth_SetupPendingEmail(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1901]!, self._r[1901]!, [_0]) + return formatWithArgumentRanges(self._s[1903]!, self._r[1903]!, [_0]) } - public var Watch_Suggestion_CantTalk: String { return self._s[1903]! } - public var ContactInfo_Title: String { return self._s[1904]! } - public var Media_ShareThisVideo: String { return self._s[1905]! } - public var Weekday_ShortFriday: String { return self._s[1906]! } - public var AccessDenied_Contacts: String { return self._s[1907]! } - public var Notification_CallIncomingShort: String { return self._s[1908]! } - public var Group_Setup_TypePublic: String { return self._s[1909]! } - public var Notifications_MessageNotificationsExceptions: String { return self._s[1910]! } - public var Notifications_Badge_IncludeChannels: String { return self._s[1911]! } - public var Notifications_MessageNotificationsPreview: String { return self._s[1914]! } - public var ConversationProfile_ErrorCreatingConversation: String { return self._s[1915]! } - public var Group_ErrorAddTooMuchBots: String { return self._s[1916]! } - public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[1917]! } - public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[1918]! } - public var DialogList_Typing: String { return self._s[1919]! } - public var Checkout_Phone: String { return self._s[1922]! } - public var Login_InfoFirstNamePlaceholder: String { return self._s[1925]! } + public var Watch_Suggestion_CantTalk: String { return self._s[1905]! } + public var ContactInfo_Title: String { return self._s[1906]! } + public var Media_ShareThisVideo: String { return self._s[1907]! } + public var Weekday_ShortFriday: String { return self._s[1908]! } + public var AccessDenied_Contacts: String { return self._s[1909]! } + public var Notification_CallIncomingShort: String { return self._s[1910]! } + public var Group_Setup_TypePublic: String { return self._s[1911]! } + public var Notifications_MessageNotificationsExceptions: String { return self._s[1912]! } + public var Notifications_Badge_IncludeChannels: String { return self._s[1913]! } + public var Notifications_MessageNotificationsPreview: String { return self._s[1916]! } + public var ConversationProfile_ErrorCreatingConversation: String { return self._s[1917]! } + public var Group_ErrorAddTooMuchBots: String { return self._s[1918]! } + public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[1919]! } + public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[1920]! } + public var DialogList_Typing: String { return self._s[1921]! } + public var Checkout_Phone: String { return self._s[1924]! } + public var Login_InfoFirstNamePlaceholder: String { return self._s[1927]! } public func PINNED_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1926]!, self._r[1926]!, [_1]) + return formatWithArgumentRanges(self._s[1928]!, self._r[1928]!, [_1]) } - public var Privacy_Calls_Integration: String { return self._s[1927]! } - public var Notifications_PermissionsAllow: String { return self._s[1929]! } - public var TwoStepAuth_AddHintDescription: String { return self._s[1932]! } - public var Settings_ChatSettings: String { return self._s[1933]! } + public var Privacy_Calls_Integration: String { return self._s[1929]! } + public var Notifications_PermissionsAllow: String { return self._s[1931]! } + public var TwoStepAuth_AddHintDescription: String { return self._s[1934]! } + public var Settings_ChatSettings: String { return self._s[1935]! } public func Channel_AdminLog_MessageInvitedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1934]!, self._r[1934]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1936]!, self._r[1936]!, [_1, _2]) } - public var Login_ContinueWithLocalization: String { return self._s[1936]! } - public var Watch_Message_ForwardedFrom: String { return self._s[1937]! } - public var TwoStepAuth_EnterEmailCode: String { return self._s[1939]! } - public var Conversation_Unblock: String { return self._s[1940]! } - public var PrivacySettings_DataSettings: String { return self._s[1941]! } - public var Notifications_InAppNotificationsVibrate: String { return self._s[1942]! } + public var Login_ContinueWithLocalization: String { return self._s[1938]! } + public var Watch_Message_ForwardedFrom: String { return self._s[1939]! } + public var TwoStepAuth_EnterEmailCode: String { return self._s[1941]! } + public var Conversation_Unblock: String { return self._s[1942]! } + public var PrivacySettings_DataSettings: String { return self._s[1943]! } + public var Notifications_InAppNotificationsVibrate: String { return self._s[1944]! } public func Privacy_GroupsAndChannels_InviteToChannelError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1943]!, self._r[1943]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1945]!, self._r[1945]!, [_0, _1]) } - public var PrivacySettings_Passcode: String { return self._s[1946]! } + public var PrivacySettings_Passcode: String { return self._s[1948]! } public func ENCRYPTION_ACCEPT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1947]!, self._r[1947]!, [_1]) + return formatWithArgumentRanges(self._s[1949]!, self._r[1949]!, [_1]) } - public var Passport_Language_dz: String { return self._s[1948]! } - public var Passport_Language_tk: String { return self._s[1949]! } + public var Passport_Language_dz: String { return self._s[1950]! } + public var Passport_Language_tk: String { return self._s[1951]! } public func Login_EmailCodeSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1950]!, self._r[1950]!, [_0]) + return formatWithArgumentRanges(self._s[1952]!, self._r[1952]!, [_0]) } - public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[1951]! } - public var Conversation_ContextMenuReply: String { return self._s[1952]! } - public var Tour_Title1: String { return self._s[1953]! } + public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[1953]! } + public var Conversation_ContextMenuReply: String { return self._s[1954]! } + public var Tour_Title1: String { return self._s[1955]! } public func MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1954]!, self._r[1954]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1956]!, self._r[1956]!, [_1, _2]) } - public var Conversation_ClearGroupHistory: String { return self._s[1956]! } + public var Conversation_ClearGroupHistory: String { return self._s[1958]! } public func Checkout_PasswordEntry_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1957]!, self._r[1957]!, [_0]) + return formatWithArgumentRanges(self._s[1959]!, self._r[1959]!, [_0]) } - public var Call_RateCall: String { return self._s[1958]! } - public var Passport_PasswordCompleteSetup: String { return self._s[1959]! } - public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[1960]! } - public var UserInfo_LastNamePlaceholder: String { return self._s[1962]! } + public var Call_RateCall: String { return self._s[1960]! } + public var Passport_PasswordCompleteSetup: String { return self._s[1961]! } + public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[1962]! } + public var UserInfo_LastNamePlaceholder: String { return self._s[1964]! } public func Login_WillCallYou(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1964]!, self._r[1964]!, [_0]) + return formatWithArgumentRanges(self._s[1966]!, self._r[1966]!, [_0]) } - public var Compose_Create: String { return self._s[1965]! } - public var Contacts_InviteToTelegram: String { return self._s[1966]! } - public var GroupInfo_Notifications: String { return self._s[1967]! } - public var Message_PinnedLiveLocationMessage: String { return self._s[1969]! } - public var Month_GenApril: String { return self._s[1970]! } - public var Appearance_AutoNightTheme: String { return self._s[1971]! } - public var ChatSettings_AutomaticAudioDownload: String { return self._s[1973]! } - public var Login_CodeSentSms: String { return self._s[1975]! } + public var Compose_Create: String { return self._s[1967]! } + public var Contacts_InviteToTelegram: String { return self._s[1968]! } + public var GroupInfo_Notifications: String { return self._s[1969]! } + public var Message_PinnedLiveLocationMessage: String { return self._s[1971]! } + public var Month_GenApril: String { return self._s[1972]! } + public var Appearance_AutoNightTheme: String { return self._s[1973]! } + public var ChatSettings_AutomaticAudioDownload: String { return self._s[1975]! } + public var Login_CodeSentSms: String { return self._s[1977]! } public func UserInfo_UnblockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1976]!, self._r[1976]!, [_0]) - } - public var Passport_Language_hr: String { return self._s[1977]! } - public func Channel_AdminLog_MessageRestrictedNewSetting(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1978]!, self._r[1978]!, [_0]) } - public var GroupInfo_InviteLink_CopyLink: String { return self._s[1979]! } - public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[1980]! } - public var Privacy_SecretChatsTitle: String { return self._s[1981]! } - public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[1983]! } - public var GroupInfo_AddUserLeftError: String { return self._s[1984]! } - public var Preview_DeleteGif: String { return self._s[1985]! } - public var Group_ErrorNotMutualContact: String { return self._s[1986]! } - public var Notification_MessageLifetime5s: String { return self._s[1987]! } + public var Passport_Language_hr: String { return self._s[1979]! } + public func Channel_AdminLog_MessageRestrictedNewSetting(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1980]!, self._r[1980]!, [_0]) + } + public var GroupInfo_InviteLink_CopyLink: String { return self._s[1981]! } + public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[1982]! } + public var Privacy_SecretChatsTitle: String { return self._s[1983]! } + public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[1985]! } + public var GroupInfo_AddUserLeftError: String { return self._s[1986]! } + public var Preview_DeleteGif: String { return self._s[1987]! } + public var Group_ErrorNotMutualContact: String { return self._s[1988]! } + public var Notification_MessageLifetime5s: String { return self._s[1989]! } public func Watch_LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1988]!, self._r[1988]!, [_0]) + return formatWithArgumentRanges(self._s[1990]!, self._r[1990]!, [_0]) } - public var Passport_Address_AddBankStatement: String { return self._s[1990]! } - public var Notification_CallIncoming: String { return self._s[1991]! } - public var Compose_NewGroupTitle: String { return self._s[1992]! } - public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[1994]! } - public var Passport_Address_Postcode: String { return self._s[1996]! } + public var Passport_Address_AddBankStatement: String { return self._s[1992]! } + public var Notification_CallIncoming: String { return self._s[1993]! } + public var Compose_NewGroupTitle: String { return self._s[1994]! } + public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[1996]! } + public var Passport_Address_Postcode: String { return self._s[1998]! } public func LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1997]!, self._r[1997]!, [_0]) - } - public var Checkout_NewCard_SaveInfoHelp: String { return self._s[1998]! } - public func Cache_Clear(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1999]!, self._r[1999]!, [_0]) } - public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[2000]! } - public var Username_Placeholder: String { return self._s[2001]! } - public var Passport_FieldAddressUploadHelp: String { return self._s[2002]! } - public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[2003]! } - public var Passport_PasswordDescription: String { return self._s[2005]! } - public var Channel_MessagePhotoUpdated: String { return self._s[2006]! } - public var MediaPicker_TapToUngroupDescription: String { return self._s[2007]! } - public var AttachmentMenu_PhotoOrVideo: String { return self._s[2008]! } - public var Conversation_ContextMenuMore: String { return self._s[2009]! } - public var Privacy_PaymentsClearInfo: String { return self._s[2010]! } - public var CallSettings_TabIcon: String { return self._s[2011]! } - public var KeyCommand_Find: String { return self._s[2012]! } - public var Message_PinnedGame: String { return self._s[2013]! } - public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2014]! } - public var Login_CallRequestState2: String { return self._s[2016]! } - public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[2018]! } - public func Checkout_PayPrice(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2020]!, self._r[2020]!, [_0]) + public var Checkout_NewCard_SaveInfoHelp: String { return self._s[2000]! } + public func Cache_Clear(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2001]!, self._r[2001]!, [_0]) } - public var Conversation_InstantPagePreview: String { return self._s[2021]! } - public func DialogList_SingleUploadingVideoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { + public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[2002]! } + public var Username_Placeholder: String { return self._s[2003]! } + public var Passport_FieldAddressUploadHelp: String { return self._s[2004]! } + public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[2005]! } + public var Passport_PasswordDescription: String { return self._s[2007]! } + public var Channel_MessagePhotoUpdated: String { return self._s[2008]! } + public var MediaPicker_TapToUngroupDescription: String { return self._s[2009]! } + public var AttachmentMenu_PhotoOrVideo: String { return self._s[2010]! } + public var Conversation_ContextMenuMore: String { return self._s[2011]! } + public var Privacy_PaymentsClearInfo: String { return self._s[2012]! } + public var CallSettings_TabIcon: String { return self._s[2013]! } + public var KeyCommand_Find: String { return self._s[2014]! } + public var Message_PinnedGame: String { return self._s[2015]! } + public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2016]! } + public var Login_CallRequestState2: String { return self._s[2018]! } + public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[2020]! } + public func Checkout_PayPrice(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2022]!, self._r[2022]!, [_0]) } - public var SecretTimer_VideoDescription: String { return self._s[2025]! } - public var Passport_Language_es: String { return self._s[2026]! } - public var Permissions_ContactsAllow_v0: String { return self._s[2028]! } - public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[2029]! } - public var WebPreview_GettingLinkInfo: String { return self._s[2030]! } - public var Watch_UserInfo_Unmute: String { return self._s[2031]! } - public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[2032]! } - public var ChatList_ReadAll: String { return self._s[2034]! } - public var AccessDenied_CameraRestricted: String { return self._s[2035]! } + public var Conversation_InstantPagePreview: String { return self._s[2023]! } + public func DialogList_SingleUploadingVideoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2024]!, self._r[2024]!, [_0]) + } + public var SecretTimer_VideoDescription: String { return self._s[2027]! } + public var Passport_Language_es: String { return self._s[2028]! } + public var Permissions_ContactsAllow_v0: String { return self._s[2030]! } + public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[2031]! } + public var WebPreview_GettingLinkInfo: String { return self._s[2032]! } + public var Watch_UserInfo_Unmute: String { return self._s[2033]! } + public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[2034]! } + public var ChatList_ReadAll: String { return self._s[2036]! } + public var AccessDenied_CameraRestricted: String { return self._s[2037]! } public func Conversation_Kilobytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2037]!, self._r[2037]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[2039]!, self._r[2039]!, ["\(_0)"]) } - public var Contacts_SearchLabel: String { return self._s[2039]! } - public var Settings_CopyUsername: String { return self._s[2040]! } + public var Contacts_SearchLabel: String { return self._s[2041]! } + public var Settings_CopyUsername: String { return self._s[2042]! } public func MESSAGE_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2041]!, self._r[2041]!, [_1]) + return formatWithArgumentRanges(self._s[2043]!, self._r[2043]!, [_1]) } - public var Map_OpenInYandexNavigator: String { return self._s[2042]! } - public var PasscodeSettings_EncryptData: String { return self._s[2043]! } - public var Notifications_GroupNotificationsPreview: String { return self._s[2044]! } - public var DialogList_AdNoticeAlert: String { return self._s[2045]! } + public var Map_OpenInYandexNavigator: String { return self._s[2044]! } + public var PasscodeSettings_EncryptData: String { return self._s[2045]! } + public var Notifications_GroupNotificationsPreview: String { return self._s[2046]! } + public var DialogList_AdNoticeAlert: String { return self._s[2047]! } public func CHAT_DELETE_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2047]!, self._r[2047]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2049]!, self._r[2049]!, [_1, _2, _3]) } - public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2048]! } - public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2049]! } - public var Localization_LanguageCustom: String { return self._s[2050]! } - public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2051]! } + public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2050]! } + public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2051]! } + public var Localization_LanguageCustom: String { return self._s[2052]! } + public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2053]! } public func CHAT_CREATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2053]!, self._r[2053]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2055]!, self._r[2055]!, [_1, _2]) } - public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2055]! } - public var Conversation_InfoGroup: String { return self._s[2056]! } - public var Compose_NewMessage: String { return self._s[2057]! } - public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2058]! } - public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[2059]! } + public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2057]! } + public var Conversation_InfoGroup: String { return self._s[2058]! } + public var Compose_NewMessage: String { return self._s[2059]! } + public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2060]! } + public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[2061]! } public func Passport_Scans_ScanIndex(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2060]!, self._r[2060]!, [_0]) + return formatWithArgumentRanges(self._s[2062]!, self._r[2062]!, [_0]) } - public var Channel_AdminLog_CanDeleteMessages: String { return self._s[2061]! } - public var Login_CancelSignUpConfirmation: String { return self._s[2062]! } - public var ChangePhoneNumberCode_Help: String { return self._s[2063]! } - public var PrivacySettings_DeleteAccountHelp: String { return self._s[2064]! } - public var Channel_BlackList_Title: String { return self._s[2065]! } - public var UserInfo_PhoneCall: String { return self._s[2066]! } - public var Passport_Address_OneOfTypeBankStatement: String { return self._s[2068]! } - public var State_connecting: String { return self._s[2069]! } + public var Channel_AdminLog_CanDeleteMessages: String { return self._s[2063]! } + public var Login_CancelSignUpConfirmation: String { return self._s[2064]! } + public var ChangePhoneNumberCode_Help: String { return self._s[2065]! } + public var PrivacySettings_DeleteAccountHelp: String { return self._s[2066]! } + public var Channel_BlackList_Title: String { return self._s[2067]! } + public var UserInfo_PhoneCall: String { return self._s[2068]! } + public var Passport_Address_OneOfTypeBankStatement: String { return self._s[2070]! } + public var State_connecting: String { return self._s[2071]! } public func DialogList_SingleRecordingAudioSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2070]!, self._r[2070]!, [_0]) + return formatWithArgumentRanges(self._s[2072]!, self._r[2072]!, [_0]) } - public var Notifications_GroupNotifications: String { return self._s[2071]! } - public var Passport_Identity_EditPassport: String { return self._s[2072]! } - public var EnterPasscode_RepeatNewPasscode: String { return self._s[2074]! } - public var Localization_EnglishLanguageName: String { return self._s[2075]! } - public var Share_AuthDescription: String { return self._s[2076]! } - public var Passport_Identity_Surname: String { return self._s[2077]! } - public var Compose_TokenListPlaceholder: String { return self._s[2078]! } - public var Passport_Identity_OneOfTypePassport: String { return self._s[2079]! } - public var Settings_AboutEmpty: String { return self._s[2080]! } - public var Conversation_Unmute: String { return self._s[2081]! } - public var Login_CodeSentCall: String { return self._s[2084]! } - public var ContactInfo_PhoneLabelHomeFax: String { return self._s[2085]! } - public var ChatSettings_Appearance: String { return self._s[2086]! } - public var Appearance_PickAccentColor: String { return self._s[2087]! } - public var Notification_CallMissed: String { return self._s[2088]! } - public var Channel_AdminLogFilter_EventsInfo: String { return self._s[2089]! } - public var ChatAdmins_AdminLabel: String { return self._s[2091]! } - public var KeyCommand_JumpToNextChat: String { return self._s[2092]! } - public var Conversation_StopPollConfirmationTitle: String { return self._s[2094]! } - public var ChangePhoneNumberCode_CodePlaceholder: String { return self._s[2095]! } - public var Month_GenJune: String { return self._s[2096]! } - public var Watch_Location_Current: String { return self._s[2097]! } - public var Conversation_TitleMute: String { return self._s[2098]! } + public var Notifications_GroupNotifications: String { return self._s[2073]! } + public var Passport_Identity_EditPassport: String { return self._s[2074]! } + public var EnterPasscode_RepeatNewPasscode: String { return self._s[2076]! } + public var Localization_EnglishLanguageName: String { return self._s[2077]! } + public var Share_AuthDescription: String { return self._s[2078]! } + public var Passport_Identity_Surname: String { return self._s[2079]! } + public var Compose_TokenListPlaceholder: String { return self._s[2080]! } + public var Passport_Identity_OneOfTypePassport: String { return self._s[2081]! } + public var Settings_AboutEmpty: String { return self._s[2082]! } + public var Conversation_Unmute: String { return self._s[2083]! } + public var Login_CodeSentCall: String { return self._s[2086]! } + public var ContactInfo_PhoneLabelHomeFax: String { return self._s[2087]! } + public var ChatSettings_Appearance: String { return self._s[2088]! } + public var Appearance_PickAccentColor: String { return self._s[2089]! } + public var Notification_CallMissed: String { return self._s[2090]! } + public var Channel_AdminLogFilter_EventsInfo: String { return self._s[2091]! } + public var ChatAdmins_AdminLabel: String { return self._s[2093]! } + public var KeyCommand_JumpToNextChat: String { return self._s[2094]! } + public var Conversation_StopPollConfirmationTitle: String { return self._s[2096]! } + public var ChangePhoneNumberCode_CodePlaceholder: String { return self._s[2097]! } + public var Month_GenJune: String { return self._s[2098]! } + public var Watch_Location_Current: String { return self._s[2099]! } + public var Conversation_TitleMute: String { return self._s[2100]! } public func PINNED_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2099]!, self._r[2099]!, [_1]) + return formatWithArgumentRanges(self._s[2101]!, self._r[2101]!, [_1]) } - public var GroupInfo_DeleteAndExit: String { return self._s[2100]! } + public var GroupInfo_DeleteAndExit: String { return self._s[2102]! } public func Conversation_Moderate_DeleteAllMessages(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2101]!, self._r[2101]!, [_0]) + return formatWithArgumentRanges(self._s[2103]!, self._r[2103]!, [_0]) } - public var Call_ReportPlaceholder: String { return self._s[2102]! } - public var MaskStickerSettings_Info: String { return self._s[2103]! } + public var Call_ReportPlaceholder: String { return self._s[2104]! } + public var MaskStickerSettings_Info: String { return self._s[2105]! } public func GroupInfo_AddParticipantConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2104]!, self._r[2104]!, [_0]) + return formatWithArgumentRanges(self._s[2106]!, self._r[2106]!, [_0]) } - public var Checkout_NewCard_PostcodeTitle: String { return self._s[2105]! } - public var Passport_Address_RegionPlaceholder: String { return self._s[2107]! } - public var Contacts_ShareTelegram: String { return self._s[2108]! } - public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[2109]! } - public var Channel_ErrorAccessDenied: String { return self._s[2110]! } - public var Stickers_GroupChooseStickerPack: String { return self._s[2112]! } - public var Call_ConnectionErrorTitle: String { return self._s[2113]! } - public var UserInfo_NotificationsEnable: String { return self._s[2114]! } - public var Tour_Text4: String { return self._s[2117]! } + public var Checkout_NewCard_PostcodeTitle: String { return self._s[2107]! } + public var Passport_Address_RegionPlaceholder: String { return self._s[2109]! } + public var Contacts_ShareTelegram: String { return self._s[2110]! } + public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[2111]! } + public var Channel_ErrorAccessDenied: String { return self._s[2112]! } + public var Stickers_GroupChooseStickerPack: String { return self._s[2114]! } + public var Call_ConnectionErrorTitle: String { return self._s[2115]! } + public var UserInfo_NotificationsEnable: String { return self._s[2116]! } + public var Tour_Text4: String { return self._s[2119]! } public func CHANNEL_MESSAGE_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2119]!, self._r[2119]!, [_1]) + return formatWithArgumentRanges(self._s[2121]!, self._r[2121]!, [_1]) } - public var Profile_MessageLifetime2s: String { return self._s[2120]! } - public var Notification_MessageLifetime2s: String { return self._s[2121]! } + public var Profile_MessageLifetime2s: String { return self._s[2122]! } + public var Notification_MessageLifetime2s: String { return self._s[2123]! } public func Time_PreciseDate_m10(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2122]!, self._r[2122]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2124]!, self._r[2124]!, [_1, _2, _3]) } - public var Cache_ClearCache: String { return self._s[2123]! } - public var AutoNightTheme_UpdateLocation: String { return self._s[2124]! } - public var Permissions_NotificationsUnreachableText_v0: String { return self._s[2125]! } + public var Cache_ClearCache: String { return self._s[2125]! } + public var AutoNightTheme_UpdateLocation: String { return self._s[2126]! } + public var Permissions_NotificationsUnreachableText_v0: String { return self._s[2127]! } public func Channel_AdminLog_MessageChangedGroupUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2127]!, self._r[2127]!, [_0]) + return formatWithArgumentRanges(self._s[2129]!, self._r[2129]!, [_0]) } - public var Channel_AdminLog_EmptyFilterTitle: String { return self._s[2129]! } - public var SocksProxySetup_TypeSocks: String { return self._s[2130]! } - public var AutoNightTheme_Title: String { return self._s[2131]! } - public var InstantPage_FeedbackButton: String { return self._s[2132]! } - public var Passport_FieldAddress: String { return self._s[2133]! } - public var Month_ShortMarch: String { return self._s[2134]! } - public var SocksProxySetup_UsernamePlaceholder: String { return self._s[2135]! } - public var Conversation_ShareInlineBotLocationConfirmation: String { return self._s[2136]! } - public var Passport_FloodError: String { return self._s[2137]! } - public var SecretGif_Title: String { return self._s[2138]! } - public var Passport_Language_th: String { return self._s[2140]! } - public var Passport_Address_Address: String { return self._s[2141]! } - public var Login_InvalidLastNameError: String { return self._s[2142]! } - public var Notifications_InAppNotificationsPreview: String { return self._s[2143]! } - public var Notifications_PermissionsUnreachableTitle: String { return self._s[2144]! } - public var ShareMenu_Send: String { return self._s[2145]! } - public var Month_GenNovember: String { return self._s[2148]! } - public var Checkout_Email: String { return self._s[2150]! } - public var NotificationsSound_Tritone: String { return self._s[2151]! } - public var StickerPacksSettings_ManagingHelp: String { return self._s[2153]! } - public var ChangePhoneNumberNumber_Help: String { return self._s[2156]! } + public var Channel_AdminLog_EmptyFilterTitle: String { return self._s[2131]! } + public var SocksProxySetup_TypeSocks: String { return self._s[2132]! } + public var AutoNightTheme_Title: String { return self._s[2133]! } + public var InstantPage_FeedbackButton: String { return self._s[2134]! } + public var Passport_FieldAddress: String { return self._s[2135]! } + public var Month_ShortMarch: String { return self._s[2136]! } + public var SocksProxySetup_UsernamePlaceholder: String { return self._s[2137]! } + public var Conversation_ShareInlineBotLocationConfirmation: String { return self._s[2138]! } + public var Passport_FloodError: String { return self._s[2139]! } + public var SecretGif_Title: String { return self._s[2140]! } + public var Passport_Language_th: String { return self._s[2142]! } + public var Passport_Address_Address: String { return self._s[2143]! } + public var Login_InvalidLastNameError: String { return self._s[2144]! } + public var Notifications_InAppNotificationsPreview: String { return self._s[2145]! } + public var Notifications_PermissionsUnreachableTitle: String { return self._s[2146]! } + public var ShareMenu_Send: String { return self._s[2147]! } + public var Month_GenNovember: String { return self._s[2150]! } + public var Checkout_Email: String { return self._s[2152]! } + public var NotificationsSound_Tritone: String { return self._s[2153]! } + public var StickerPacksSettings_ManagingHelp: String { return self._s[2155]! } + public var ChangePhoneNumberNumber_Help: String { return self._s[2158]! } public func Checkout_LiabilityAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2157]!, self._r[2157]!, [_1, _1, _1, _2]) + return formatWithArgumentRanges(self._s[2159]!, self._r[2159]!, [_1, _1, _1, _2]) } - public var DialogList_You: String { return self._s[2158]! } - public var MediaPicker_Send: String { return self._s[2161]! } - public var Call_AudioRouteSpeaker: String { return self._s[2162]! } - public var Watch_UserInfo_Title: String { return self._s[2163]! } - public var Appearance_AccentColor: String { return self._s[2164]! } + public var DialogList_You: String { return self._s[2160]! } + public var MediaPicker_Send: String { return self._s[2163]! } + public var Call_AudioRouteSpeaker: String { return self._s[2164]! } + public var Watch_UserInfo_Title: String { return self._s[2165]! } + public var Appearance_AccentColor: String { return self._s[2166]! } public func Login_EmailPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2165]!, self._r[2165]!, [_0]) + return formatWithArgumentRanges(self._s[2167]!, self._r[2167]!, [_0]) } - public var Permissions_ContactsAllowInSettings_v0: String { return self._s[2166]! } - public var Conversation_ClousStorageInfo_Description2: String { return self._s[2167]! } - public var WebSearch_RecentClearConfirmation: String { return self._s[2168]! } - public var Notification_CallOutgoing: String { return self._s[2169]! } - public var PrivacySettings_PasscodeAndFaceId: String { return self._s[2170]! } - public var Call_RecordingDisabledMessage: String { return self._s[2171]! } - public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[2172]! } - public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[2173]! } - public var Date_DialogDateFormat: String { return self._s[2174]! } - public var Notifications_InAppNotifications: String { return self._s[2175]! } + public var Permissions_ContactsAllowInSettings_v0: String { return self._s[2168]! } + public var Conversation_ClousStorageInfo_Description2: String { return self._s[2169]! } + public var WebSearch_RecentClearConfirmation: String { return self._s[2170]! } + public var Notification_CallOutgoing: String { return self._s[2171]! } + public var PrivacySettings_PasscodeAndFaceId: String { return self._s[2172]! } + public var Call_RecordingDisabledMessage: String { return self._s[2173]! } + public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[2174]! } + public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[2175]! } + public var Date_DialogDateFormat: String { return self._s[2176]! } + public var Notifications_InAppNotifications: String { return self._s[2177]! } public func Settings_ApplyProxyAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2176]!, self._r[2176]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2178]!, self._r[2178]!, [_1, _2]) } - public var NewContact_Title: String { return self._s[2177]! } - public var Conversation_ViewContactDetails: String { return self._s[2178]! } - public var Checkout_NewCard_CardholderNameTitle: String { return self._s[2180]! } - public var Passport_Identity_ExpiryDateNone: String { return self._s[2181]! } - public var PrivacySettings_Title: String { return self._s[2182]! } - public var Conversation_SilentBroadcastTooltipOff: String { return self._s[2185]! } + public var NewContact_Title: String { return self._s[2179]! } + public var Conversation_ViewContactDetails: String { return self._s[2180]! } + public var Checkout_NewCard_CardholderNameTitle: String { return self._s[2182]! } + public var Passport_Identity_ExpiryDateNone: String { return self._s[2183]! } + public var PrivacySettings_Title: String { return self._s[2184]! } + public var Conversation_SilentBroadcastTooltipOff: String { return self._s[2187]! } public func CHANNEL_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2186]!, self._r[2186]!, [_1]) + return formatWithArgumentRanges(self._s[2188]!, self._r[2188]!, [_1]) } - public var Contacts_PhoneNumber: String { return self._s[2187]! } - public var Map_ShowPlaces: String { return self._s[2189]! } - public var ChatAdmins_Title: String { return self._s[2190]! } - public var InstantPage_Reference: String { return self._s[2192]! } - public var Camera_FlashOff: String { return self._s[2193]! } - public var Watch_UserInfo_Block: String { return self._s[2194]! } - public var ChatSettings_Stickers: String { return self._s[2195]! } - public var ChatSettings_DownloadInBackground: String { return self._s[2196]! } + public var Contacts_PhoneNumber: String { return self._s[2189]! } + public var Map_ShowPlaces: String { return self._s[2191]! } + public var ChatAdmins_Title: String { return self._s[2192]! } + public var InstantPage_Reference: String { return self._s[2194]! } + public var Camera_FlashOff: String { return self._s[2195]! } + public var Watch_UserInfo_Block: String { return self._s[2196]! } + public var ChatSettings_Stickers: String { return self._s[2197]! } + public var ChatSettings_DownloadInBackground: String { return self._s[2198]! } public func UserInfo_BlockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2197]!, self._r[2197]!, [_0]) + return formatWithArgumentRanges(self._s[2199]!, self._r[2199]!, [_0]) } - public var Login_CheckOtherSessionMessages: String { return self._s[2198]! } - public var Settings_ViewPhoto: String { return self._s[2199]! } - public var AutoDownloadSettings_Cellular: String { return self._s[2200]! } + public var Login_CheckOtherSessionMessages: String { return self._s[2200]! } + public var Settings_ViewPhoto: String { return self._s[2201]! } + public var AutoDownloadSettings_Cellular: String { return self._s[2202]! } public func Target_InviteToGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2202]!, self._r[2202]!, [_0]) - } - public var Privacy_DeleteDrafts: String { return self._s[2203]! } - public func LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2204]!, self._r[2204]!, [_0]) } - public var DialogList_SavedMessagesHelp: String { return self._s[2205]! } - public var DialogList_SavedMessages: String { return self._s[2206]! } - public var GroupInfo_UpgradeButton: String { return self._s[2207]! } + public var Privacy_DeleteDrafts: String { return self._s[2205]! } + public func LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2206]!, self._r[2206]!, [_0]) + } + public var DialogList_SavedMessagesHelp: String { return self._s[2207]! } + public var DialogList_SavedMessages: String { return self._s[2208]! } + public var GroupInfo_UpgradeButton: String { return self._s[2209]! } public func CHAT_MESSAGE_GAME(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2208]!, self._r[2208]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2210]!, self._r[2210]!, [_1, _2, _3]) } - public var DialogList_Pin: String { return self._s[2209]! } + public var DialogList_Pin: String { return self._s[2211]! } public func ForwardedAuthors2(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2210]!, self._r[2210]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2212]!, self._r[2212]!, [_0, _1]) } - public var Notification_Exceptions_AlwaysOn: String { return self._s[2211]! } - public var UserInfo_NotificationsDisable: String { return self._s[2212]! } - public var Paint_Outlined: String { return self._s[2213]! } - public var Activity_PlayingGame: String { return self._s[2214]! } - public var SearchImages_NoImagesFound: String { return self._s[2215]! } - public var SocksProxySetup_ProxyType: String { return self._s[2216]! } - public var AppleWatch_ReplyPresetsHelp: String { return self._s[2218]! } - public var Settings_AppLanguage: String { return self._s[2219]! } - public var TwoStepAuth_ResetAccountHelp: String { return self._s[2220]! } - public var Common_ChoosePhoto: String { return self._s[2221]! } - public var Privacy_Calls_AlwaysAllow: String { return self._s[2222]! } - public var Activity_UploadingVideo: String { return self._s[2223]! } - public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[2224]! } - public var NetworkUsageSettings_Wifi: String { return self._s[2225]! } - public var Channel_BanUser_PermissionReadMessages: String { return self._s[2226]! } - public var Checkout_PayWithTouchId: String { return self._s[2227]! } - public var Notifications_ExceptionsNone: String { return self._s[2229]! } + public var Notification_Exceptions_AlwaysOn: String { return self._s[2213]! } + public var UserInfo_NotificationsDisable: String { return self._s[2214]! } + public var Paint_Outlined: String { return self._s[2215]! } + public var Activity_PlayingGame: String { return self._s[2216]! } + public var SearchImages_NoImagesFound: String { return self._s[2217]! } + public var SocksProxySetup_ProxyType: String { return self._s[2218]! } + public var AppleWatch_ReplyPresetsHelp: String { return self._s[2220]! } + public var Settings_AppLanguage: String { return self._s[2221]! } + public var TwoStepAuth_ResetAccountHelp: String { return self._s[2222]! } + public var Common_ChoosePhoto: String { return self._s[2223]! } + public var Privacy_Calls_AlwaysAllow: String { return self._s[2224]! } + public var Activity_UploadingVideo: String { return self._s[2225]! } + public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[2226]! } + public var NetworkUsageSettings_Wifi: String { return self._s[2227]! } + public var Channel_BanUser_PermissionReadMessages: String { return self._s[2228]! } + public var Checkout_PayWithTouchId: String { return self._s[2229]! } + public var Notifications_ExceptionsNone: String { return self._s[2231]! } public func Message_ForwardedMessageShort(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2230]!, self._r[2230]!, [_0]) + return formatWithArgumentRanges(self._s[2232]!, self._r[2232]!, [_0]) } - public var AuthSessions_IncompleteAttempts: String { return self._s[2231]! } - public var Passport_Address_Region: String { return self._s[2235]! } - public var PhotoEditor_TiltShift: String { return self._s[2236]! } - public var Settings_FAQ_URL: String { return self._s[2237]! } - public var Passport_Language_sl: String { return self._s[2238]! } - public var Settings_PrivacySettings: String { return self._s[2240]! } - public var SharedMedia_TitleLink: String { return self._s[2241]! } - public var Passport_Identity_TypePassportUploadScan: String { return self._s[2242]! } - public var Settings_SetProfilePhoto: String { return self._s[2243]! } - public var Channel_About_Help: String { return self._s[2244]! } - public var Contacts_PermissionsEnable: String { return self._s[2245]! } - public var AttachmentMenu_SendAsFiles: String { return self._s[2246]! } - public var Passport_Address_AddTemporaryRegistration: String { return self._s[2248]! } - public var PrivacySettings_DeleteAccountTitle: String { return self._s[2249]! } - public var AccessDenied_VideoMessageCamera: String { return self._s[2251]! } - public var Map_OpenInYandexMaps: String { return self._s[2253]! } - public var PhotoEditor_SaturationTool: String { return self._s[2254]! } - public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[2255]! } - public var Appearance_TextSize: String { return self._s[2256]! } - public var Channel_Username_InvalidTooShort: String { return self._s[2258]! } - public var Passport_PassportInformation: String { return self._s[2261]! } - public var WatchRemote_AlertTitle: String { return self._s[2262]! } - public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[2263]! } - public var ConvertToSupergroup_HelpText: String { return self._s[2265]! } + public var AuthSessions_IncompleteAttempts: String { return self._s[2233]! } + public var Passport_Address_Region: String { return self._s[2237]! } + public var PhotoEditor_TiltShift: String { return self._s[2238]! } + public var Settings_FAQ_URL: String { return self._s[2239]! } + public var Passport_Language_sl: String { return self._s[2240]! } + public var Settings_PrivacySettings: String { return self._s[2242]! } + public var SharedMedia_TitleLink: String { return self._s[2243]! } + public var Passport_Identity_TypePassportUploadScan: String { return self._s[2244]! } + public var Settings_SetProfilePhoto: String { return self._s[2245]! } + public var Channel_About_Help: String { return self._s[2246]! } + public var Contacts_PermissionsEnable: String { return self._s[2247]! } + public var AttachmentMenu_SendAsFiles: String { return self._s[2248]! } + public var Passport_Address_AddTemporaryRegistration: String { return self._s[2250]! } + public var PrivacySettings_DeleteAccountTitle: String { return self._s[2251]! } + public var AccessDenied_VideoMessageCamera: String { return self._s[2253]! } + public var Map_OpenInYandexMaps: String { return self._s[2255]! } + public var PhotoEditor_SaturationTool: String { return self._s[2256]! } + public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[2257]! } + public var Appearance_TextSize: String { return self._s[2258]! } + public var Channel_Username_InvalidTooShort: String { return self._s[2260]! } + public var Passport_PassportInformation: String { return self._s[2263]! } + public var WatchRemote_AlertTitle: String { return self._s[2264]! } + public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[2265]! } + public var ConvertToSupergroup_HelpText: String { return self._s[2267]! } public func Time_MonthOfYear_m7(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2266]!, self._r[2266]!, [_0]) + return formatWithArgumentRanges(self._s[2268]!, self._r[2268]!, [_0]) } - public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[2267]! } - public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[2269]! } - public var AccessDenied_CameraDisabled: String { return self._s[2270]! } + public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[2269]! } + public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[2271]! } + public var AccessDenied_CameraDisabled: String { return self._s[2272]! } public func Channel_Username_UsernameIsAvailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2271]!, self._r[2271]!, [_0]) + return formatWithArgumentRanges(self._s[2273]!, self._r[2273]!, [_0]) } - public var PhotoEditor_ContrastTool: String { return self._s[2274]! } - public var DialogList_Draft: String { return self._s[2275]! } - public var Privacy_TopPeersDelete: String { return self._s[2277]! } - public var LoginPassword_PasswordPlaceholder: String { return self._s[2278]! } - public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[2279]! } - public var WebSearch_RecentSectionClear: String { return self._s[2280]! } - public var Watch_ChatList_NoConversationsTitle: String { return self._s[2282]! } - public var Common_Done: String { return self._s[2283]! } - public var AuthSessions_EmptyText: String { return self._s[2284]! } - public var Conversation_ShareBotContactConfirmation: String { return self._s[2285]! } - public var Tour_Title5: String { return self._s[2286]! } + public var PhotoEditor_ContrastTool: String { return self._s[2276]! } + public var DialogList_Draft: String { return self._s[2277]! } + public var Privacy_TopPeersDelete: String { return self._s[2279]! } + public var LoginPassword_PasswordPlaceholder: String { return self._s[2280]! } + public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[2281]! } + public var WebSearch_RecentSectionClear: String { return self._s[2282]! } + public var Watch_ChatList_NoConversationsTitle: String { return self._s[2284]! } + public var Common_Done: String { return self._s[2285]! } + public var AuthSessions_EmptyText: String { return self._s[2286]! } + public var Conversation_ShareBotContactConfirmation: String { return self._s[2287]! } + public var Tour_Title5: String { return self._s[2288]! } public func Map_DirectionsDriveEta(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2287]!, self._r[2287]!, [_0]) + return formatWithArgumentRanges(self._s[2289]!, self._r[2289]!, [_0]) } - public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[2288]! } - public var Conversation_LinkDialogSave: String { return self._s[2289]! } - public var GroupInfo_ActionRestrict: String { return self._s[2290]! } - public var Checkout_Title: String { return self._s[2291]! } - public var Channel_AdminLog_CanChangeInfo: String { return self._s[2294]! } - public var Notification_RenamedGroup: String { return self._s[2295]! } - public var Checkout_PayWithFaceId: String { return self._s[2296]! } - public var Channel_BanList_BlockedTitle: String { return self._s[2297]! } - public var Checkout_WebConfirmation_Title: String { return self._s[2299]! } - public var Notifications_MessageNotificationsAlert: String { return self._s[2300]! } - public var Profile_AddToExisting: String { return self._s[2302]! } + public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[2290]! } + public var Conversation_LinkDialogSave: String { return self._s[2291]! } + public var GroupInfo_ActionRestrict: String { return self._s[2292]! } + public var Checkout_Title: String { return self._s[2293]! } + public var Channel_AdminLog_CanChangeInfo: String { return self._s[2296]! } + public var Notification_RenamedGroup: String { return self._s[2297]! } + public var Checkout_PayWithFaceId: String { return self._s[2298]! } + public var Channel_BanList_BlockedTitle: String { return self._s[2299]! } + public var Checkout_WebConfirmation_Title: String { return self._s[2301]! } + public var Notifications_MessageNotificationsAlert: String { return self._s[2302]! } + public var Profile_AddToExisting: String { return self._s[2304]! } public func Profile_CreateEncryptedChatOutdatedError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2303]!, self._r[2303]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2305]!, self._r[2305]!, [_0, _1]) } - public var Cache_Files: String { return self._s[2305]! } - public var Permissions_PrivacyPolicy: String { return self._s[2306]! } - public var SocksProxySetup_ConnectAndSave: String { return self._s[2307]! } - public var UserInfo_NotificationsDefaultDisabled: String { return self._s[2308]! } + public var Cache_Files: String { return self._s[2307]! } + public var Permissions_PrivacyPolicy: String { return self._s[2308]! } + public var SocksProxySetup_ConnectAndSave: String { return self._s[2309]! } + public var UserInfo_NotificationsDefaultDisabled: String { return self._s[2310]! } public func MESSAGE_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2310]!, self._r[2310]!, [_1]) + return formatWithArgumentRanges(self._s[2312]!, self._r[2312]!, [_1]) } - public var Calls_NoCallsPlaceholder: String { return self._s[2312]! } - public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[2313]! } - public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[2315]! } - public var Passport_FieldAddressHelp: String { return self._s[2316]! } - public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[2317]! } + public var Calls_NoCallsPlaceholder: String { return self._s[2314]! } + public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[2315]! } + public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[2317]! } + public var Passport_FieldAddressHelp: String { return self._s[2318]! } + public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[2319]! } public func Login_TermsOfService_ProceedBot(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2318]!, self._r[2318]!, [_0]) + return formatWithArgumentRanges(self._s[2320]!, self._r[2320]!, [_0]) } - public var Channel_AdminLog_EmptyTitle: String { return self._s[2319]! } - public var Privacy_Calls_NeverAllow_Title: String { return self._s[2321]! } - public var Login_UnknownError: String { return self._s[2322]! } - public var Group_UpgradeNoticeText2: String { return self._s[2324]! } - public var Watch_Compose_AddContact: String { return self._s[2325]! } - public var Web_Error: String { return self._s[2326]! } - public var Profile_MessageLifetime1h: String { return self._s[2327]! } - public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[2328]! } - public var Channel_Username_CheckingUsername: String { return self._s[2329]! } + public var Channel_AdminLog_EmptyTitle: String { return self._s[2321]! } + public var Privacy_Calls_NeverAllow_Title: String { return self._s[2323]! } + public var Login_UnknownError: String { return self._s[2324]! } + public var Group_UpgradeNoticeText2: String { return self._s[2326]! } + public var Watch_Compose_AddContact: String { return self._s[2327]! } + public var Web_Error: String { return self._s[2328]! } + public var Profile_MessageLifetime1h: String { return self._s[2329]! } + public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[2330]! } + public var Channel_Username_CheckingUsername: String { return self._s[2331]! } public func PINNED_GAME(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2330]!, self._r[2330]!, [_1]) + return formatWithArgumentRanges(self._s[2332]!, self._r[2332]!, [_1]) } - public var Channel_AboutItem: String { return self._s[2331]! } - public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[2333]! } - public var GroupInfo_SharedMedia: String { return self._s[2334]! } + public var Channel_AboutItem: String { return self._s[2333]! } + public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[2335]! } + public var GroupInfo_SharedMedia: String { return self._s[2336]! } public func Channel_AdminLog_MessagePromotedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2335]!, self._r[2335]!, [_1]) + return formatWithArgumentRanges(self._s[2337]!, self._r[2337]!, [_1]) } - public var Call_PhoneCallInProgressMessage: String { return self._s[2336]! } - public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[2337]! } - public var Conversation_SearchByName_Placeholder: String { return self._s[2338]! } - public var CreatePoll_AddOption: String { return self._s[2339]! } - public var Group_UpgradeNoticeHeader: String { return self._s[2340]! } - public var Channel_Management_AddModerator: String { return self._s[2341]! } - public var StickerPacksSettings_ShowStickersButton: String { return self._s[2342]! } - public var NotificationsSound_Hello: String { return self._s[2343]! } + public var Call_PhoneCallInProgressMessage: String { return self._s[2338]! } + public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[2339]! } + public var Conversation_SearchByName_Placeholder: String { return self._s[2340]! } + public var CreatePoll_AddOption: String { return self._s[2341]! } + public var Group_UpgradeNoticeHeader: String { return self._s[2342]! } + public var Channel_Management_AddModerator: String { return self._s[2343]! } + public var StickerPacksSettings_ShowStickersButton: String { return self._s[2344]! } + public var NotificationsSound_Hello: String { return self._s[2345]! } public func CHAT_MESSAGE_GEO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2344]!, self._r[2344]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2346]!, self._r[2346]!, [_1, _2]) } - public var SocksProxySetup_SavedProxies: String { return self._s[2345]! } - public var Channel_Stickers_Placeholder: String { return self._s[2347]! } + public var SocksProxySetup_SavedProxies: String { return self._s[2347]! } + public var Channel_Stickers_Placeholder: String { return self._s[2349]! } public func Login_EmailCodeBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2348]!, self._r[2348]!, [_0]) + return formatWithArgumentRanges(self._s[2350]!, self._r[2350]!, [_0]) } - public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[2349]! } - public var Channel_Management_AddModeratorHelp: String { return self._s[2350]! } - public var ContactInfo_BirthdayLabel: String { return self._s[2351]! } - public var ChangePhoneNumberCode_RequestingACall: String { return self._s[2352]! } - public var AutoDownloadSettings_Channels: String { return self._s[2353]! } - public var Passport_Language_mn: String { return self._s[2354]! } - public var Notifications_ResetAllNotificationsHelp: String { return self._s[2357]! } - public var Passport_Language_ja: String { return self._s[2359]! } - public var Settings_About_Title: String { return self._s[2360]! } - public var Settings_NotificationsAndSounds: String { return self._s[2361]! } - public var ChannelInfo_DeleteGroup: String { return self._s[2362]! } - public var Settings_BlockedUsers: String { return self._s[2363]! } + public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[2351]! } + public var Channel_Management_AddModeratorHelp: String { return self._s[2352]! } + public var ContactInfo_BirthdayLabel: String { return self._s[2353]! } + public var ChangePhoneNumberCode_RequestingACall: String { return self._s[2354]! } + public var AutoDownloadSettings_Channels: String { return self._s[2355]! } + public var Passport_Language_mn: String { return self._s[2356]! } + public var Notifications_ResetAllNotificationsHelp: String { return self._s[2359]! } + public var Passport_Language_ja: String { return self._s[2361]! } + public var Settings_About_Title: String { return self._s[2362]! } + public var Settings_NotificationsAndSounds: String { return self._s[2363]! } + public var ChannelInfo_DeleteGroup: String { return self._s[2364]! } + public var Settings_BlockedUsers: String { return self._s[2365]! } public func Time_MonthOfYear_m4(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2364]!, self._r[2364]!, [_0]) + return formatWithArgumentRanges(self._s[2366]!, self._r[2366]!, [_0]) } - public var Passport_Address_AddResidentialAddress: String { return self._s[2365]! } - public var Channel_Username_Title: String { return self._s[2366]! } + public var Passport_Address_AddResidentialAddress: String { return self._s[2367]! } + public var Channel_Username_Title: String { return self._s[2368]! } public func Notification_RemovedGroupPhoto(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2367]!, self._r[2367]!, [_0]) + return formatWithArgumentRanges(self._s[2369]!, self._r[2369]!, [_0]) } - public var AttachmentMenu_File: String { return self._s[2369]! } - public var AppleWatch_Title: String { return self._s[2370]! } - public var Activity_RecordingVideoMessage: String { return self._s[2371]! } - public var Weekday_Saturday: String { return self._s[2372]! } - public var Profile_CreateEncryptedChatError: String { return self._s[2373]! } - public var Common_Next: String { return self._s[2375]! } - public var Channel_Stickers_YourStickers: String { return self._s[2377]! } - public var Call_AudioRouteHeadphones: String { return self._s[2378]! } - public var TwoStepAuth_EnterPasswordForgot: String { return self._s[2380]! } - public var Watch_Contacts_NoResults: String { return self._s[2382]! } - public var PhotoEditor_TintTool: String { return self._s[2384]! } - public var LoginPassword_ResetAccount: String { return self._s[2386]! } - public var Settings_SavedMessages: String { return self._s[2387]! } - public var StickerPack_Add: String { return self._s[2388]! } - public var Your_cards_number_is_invalid: String { return self._s[2389]! } - public var Checkout_TotalAmount: String { return self._s[2390]! } + public var AttachmentMenu_File: String { return self._s[2371]! } + public var AppleWatch_Title: String { return self._s[2372]! } + public var Activity_RecordingVideoMessage: String { return self._s[2373]! } + public var Weekday_Saturday: String { return self._s[2374]! } + public var Profile_CreateEncryptedChatError: String { return self._s[2375]! } + public var Common_Next: String { return self._s[2377]! } + public var Channel_Stickers_YourStickers: String { return self._s[2379]! } + public var Call_AudioRouteHeadphones: String { return self._s[2380]! } + public var TwoStepAuth_EnterPasswordForgot: String { return self._s[2382]! } + public var Watch_Contacts_NoResults: String { return self._s[2384]! } + public var PhotoEditor_TintTool: String { return self._s[2386]! } + public var LoginPassword_ResetAccount: String { return self._s[2388]! } + public var Settings_SavedMessages: String { return self._s[2389]! } + public var StickerPack_Add: String { return self._s[2390]! } + public var Your_cards_number_is_invalid: String { return self._s[2391]! } + public var Checkout_TotalAmount: String { return self._s[2392]! } public func ChangePhoneNumberCode_CallTimer(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2391]!, self._r[2391]!, [_0]) + return formatWithArgumentRanges(self._s[2393]!, self._r[2393]!, [_0]) } - public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[2392]! } + public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[2394]! } public func CHANNEL_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2394]!, self._r[2394]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2396]!, self._r[2396]!, [_1, _2]) } public func Conversation_RestrictedTextTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2395]!, self._r[2395]!, [_0]) + return formatWithArgumentRanges(self._s[2397]!, self._r[2397]!, [_0]) } - public var GroupInfo_InviteLink_ShareLink: String { return self._s[2396]! } - public var StickerPack_Share: String { return self._s[2397]! } - public var Passport_DeleteAddress: String { return self._s[2398]! } - public var Settings_Passport: String { return self._s[2399]! } - public var SharedMedia_EmptyFilesText: String { return self._s[2400]! } - public var Conversation_DeleteMessagesForMe: String { return self._s[2401]! } - public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[2402]! } - public var Contacts_PermissionsText: String { return self._s[2403]! } - public var Group_Setup_HistoryVisible: String { return self._s[2404]! } - public var Passport_Address_AddRentalAgreement: String { return self._s[2406]! } - public var SocksProxySetup_Title: String { return self._s[2407]! } - public var Notification_Mute1h: String { return self._s[2408]! } + public var GroupInfo_InviteLink_ShareLink: String { return self._s[2398]! } + public var StickerPack_Share: String { return self._s[2399]! } + public var Passport_DeleteAddress: String { return self._s[2400]! } + public var Settings_Passport: String { return self._s[2401]! } + public var SharedMedia_EmptyFilesText: String { return self._s[2402]! } + public var Conversation_DeleteMessagesForMe: String { return self._s[2403]! } + public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[2404]! } + public var Contacts_PermissionsText: String { return self._s[2405]! } + public var Group_Setup_HistoryVisible: String { return self._s[2406]! } + public var Passport_Address_AddRentalAgreement: String { return self._s[2408]! } + public var SocksProxySetup_Title: String { return self._s[2409]! } + public var Notification_Mute1h: String { return self._s[2410]! } public func Passport_Email_CodeHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2409]!, self._r[2409]!, [_0]) + return formatWithArgumentRanges(self._s[2411]!, self._r[2411]!, [_0]) } - public var FastTwoStepSetup_PasswordSection: String { return self._s[2410]! } - public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[2413]! } - public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[2415]! } - public var DialogList_NoMessagesText: String { return self._s[2416]! } - public var Privacy_ContactsResetConfirmation: String { return self._s[2417]! } - public var Privacy_Calls_P2PHelp: String { return self._s[2418]! } - public var Your_cards_expiration_year_is_invalid: String { return self._s[2420]! } - public var Common_TakePhotoOrVideo: String { return self._s[2421]! } - public var Call_StatusBusy: String { return self._s[2422]! } - public var Conversation_PinnedMessage: String { return self._s[2423]! } - public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[2424]! } - public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[2425]! } - public var AppleWatch_ReplyPresets: String { return self._s[2426]! } - public var Passport_DiscardMessageDescription: String { return self._s[2428]! } - public var Login_NetworkError: String { return self._s[2429]! } + public var FastTwoStepSetup_PasswordSection: String { return self._s[2412]! } + public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[2415]! } + public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[2417]! } + public var DialogList_NoMessagesText: String { return self._s[2418]! } + public var Privacy_ContactsResetConfirmation: String { return self._s[2419]! } + public var Privacy_Calls_P2PHelp: String { return self._s[2420]! } + public var Your_cards_expiration_year_is_invalid: String { return self._s[2422]! } + public var Common_TakePhotoOrVideo: String { return self._s[2423]! } + public var Call_StatusBusy: String { return self._s[2424]! } + public var Conversation_PinnedMessage: String { return self._s[2425]! } + public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[2426]! } + public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[2427]! } + public var AppleWatch_ReplyPresets: String { return self._s[2428]! } + public var Passport_DiscardMessageDescription: String { return self._s[2430]! } + public var Login_NetworkError: String { return self._s[2431]! } public func Notification_PinnedRoundMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2430]!, self._r[2430]!, [_0]) + return formatWithArgumentRanges(self._s[2432]!, self._r[2432]!, [_0]) } public func Channel_AdminLog_MessageRemovedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2431]!, self._r[2431]!, [_0]) + return formatWithArgumentRanges(self._s[2433]!, self._r[2433]!, [_0]) } - public var SocksProxySetup_PasswordPlaceholder: String { return self._s[2432]! } + public var SocksProxySetup_PasswordPlaceholder: String { return self._s[2434]! } public func CONTACT_JOINED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2434]!, self._r[2434]!, [_1]) + return formatWithArgumentRanges(self._s[2436]!, self._r[2436]!, [_1]) } - public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[2435]! } + public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[2437]! } public func Watch_LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2437]!, self._r[2437]!, [_0]) + return formatWithArgumentRanges(self._s[2439]!, self._r[2439]!, [_0]) } - public var Call_ConnectionErrorMessage: String { return self._s[2438]! } - public var Compose_GroupTokenListPlaceholder: String { return self._s[2440]! } - public var ConversationMedia_Title: String { return self._s[2441]! } - public var EncryptionKey_Title: String { return self._s[2443]! } - public var TwoStepAuth_EnterPasswordTitle: String { return self._s[2444]! } - public var Notification_Exceptions_AddException: String { return self._s[2445]! } - public var Profile_MessageLifetime1m: String { return self._s[2446]! } + public var Call_ConnectionErrorMessage: String { return self._s[2440]! } + public var Compose_GroupTokenListPlaceholder: String { return self._s[2442]! } + public var ConversationMedia_Title: String { return self._s[2443]! } + public var EncryptionKey_Title: String { return self._s[2445]! } + public var TwoStepAuth_EnterPasswordTitle: String { return self._s[2446]! } + public var Notification_Exceptions_AddException: String { return self._s[2447]! } + public var Profile_MessageLifetime1m: String { return self._s[2448]! } public func Channel_AdminLog_MessageUnkickedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2447]!, self._r[2447]!, [_1]) + return formatWithArgumentRanges(self._s[2449]!, self._r[2449]!, [_1]) } - public var Month_GenMay: String { return self._s[2448]! } + public var Month_GenMay: String { return self._s[2450]! } public func LiveLocationUpdated_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2449]!, self._r[2449]!, [_0]) + return formatWithArgumentRanges(self._s[2451]!, self._r[2451]!, [_0]) } - public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[2450]! } - public var Conversation_EmptyPlaceholder: String { return self._s[2452]! } - public var Passport_Address_AddPassportRegistration: String { return self._s[2453]! } - public var Notifications_ChannelNotificationsAlert: String { return self._s[2454]! } - public var Camera_TapAndHoldForVideo: String { return self._s[2455]! } - public var Channel_JoinChannel: String { return self._s[2457]! } - public var Appearance_Animations: String { return self._s[2460]! } + public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[2452]! } + public var Conversation_EmptyPlaceholder: String { return self._s[2454]! } + public var Passport_Address_AddPassportRegistration: String { return self._s[2455]! } + public var Notifications_ChannelNotificationsAlert: String { return self._s[2456]! } + public var Camera_TapAndHoldForVideo: String { return self._s[2457]! } + public var Channel_JoinChannel: String { return self._s[2459]! } + public var Appearance_Animations: String { return self._s[2462]! } public func Notification_MessageLifetimeChanged(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2461]!, self._r[2461]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2463]!, self._r[2463]!, [_1, _2]) } - public var Stickers_GroupStickers: String { return self._s[2463]! } - public var ConvertToSupergroup_HelpTitle: String { return self._s[2465]! } - public var Passport_Address_Street: String { return self._s[2466]! } - public var Conversation_AddContact: String { return self._s[2467]! } - public var Login_PhonePlaceholder: String { return self._s[2468]! } - public var Channel_Members_InviteLink: String { return self._s[2470]! } - public var Bot_Stop: String { return self._s[2471]! } - public var Notification_PassportValueAddress: String { return self._s[2473]! } - public var Month_ShortJuly: String { return self._s[2474]! } - public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[2475]! } - public var Channel_AdminLog_BanSendMedia: String { return self._s[2476]! } - public var Passport_Identity_ReverseSide: String { return self._s[2477]! } - public var Watch_Stickers_Recents: String { return self._s[2480]! } - public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[2482]! } - public var Map_SendThisLocation: String { return self._s[2483]! } + public var Stickers_GroupStickers: String { return self._s[2465]! } + public var ConvertToSupergroup_HelpTitle: String { return self._s[2467]! } + public var Passport_Address_Street: String { return self._s[2468]! } + public var Conversation_AddContact: String { return self._s[2469]! } + public var Login_PhonePlaceholder: String { return self._s[2470]! } + public var Channel_Members_InviteLink: String { return self._s[2472]! } + public var Bot_Stop: String { return self._s[2473]! } + public var Notification_PassportValueAddress: String { return self._s[2475]! } + public var Month_ShortJuly: String { return self._s[2476]! } + public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[2477]! } + public var Channel_AdminLog_BanSendMedia: String { return self._s[2478]! } + public var Passport_Identity_ReverseSide: String { return self._s[2479]! } + public var Watch_Stickers_Recents: String { return self._s[2482]! } + public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[2484]! } + public var Map_SendThisLocation: String { return self._s[2485]! } public func Time_MonthOfYear_m1(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2484]!, self._r[2484]!, [_0]) + return formatWithArgumentRanges(self._s[2486]!, self._r[2486]!, [_0]) } public func InviteText_SingleContact(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2485]!, self._r[2485]!, [_0]) - } - public var ConvertToSupergroup_Note: String { return self._s[2486]! } - public func FileSize_MB(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2487]!, self._r[2487]!, [_0]) } - public var NetworkUsageSettings_GeneralDataSection: String { return self._s[2488]! } + public var ConvertToSupergroup_Note: String { return self._s[2488]! } + public func FileSize_MB(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2489]!, self._r[2489]!, [_0]) + } + public var NetworkUsageSettings_GeneralDataSection: String { return self._s[2490]! } public func Compatibility_SecretMediaVersionTooLow(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2489]!, self._r[2489]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2491]!, self._r[2491]!, [_0, _1]) } - public var Login_CallRequestState3: String { return self._s[2491]! } + public var Login_CallRequestState3: String { return self._s[2493]! } public func CHANNEL_MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2493]!, self._r[2493]!, [_1]) + return formatWithArgumentRanges(self._s[2495]!, self._r[2495]!, [_1]) } - public var PasscodeSettings_UnlockWithFaceId: String { return self._s[2494]! } - public var Channel_AdminLogFilter_Title: String { return self._s[2495]! } - public var Notifications_GroupNotificationsExceptions: String { return self._s[2499]! } + public var PasscodeSettings_UnlockWithFaceId: String { return self._s[2496]! } + public var Channel_AdminLogFilter_Title: String { return self._s[2497]! } + public var Notifications_GroupNotificationsExceptions: String { return self._s[2501]! } public func FileSize_B(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2500]!, self._r[2500]!, [_0]) - } - public var Passport_CorrectErrors: String { return self._s[2501]! } - public func Channel_MessageTitleUpdated(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2502]!, self._r[2502]!, [_0]) } - public var Map_SendMyCurrentLocation: String { return self._s[2503]! } - public var SharedMedia_SearchNoResults: String { return self._s[2504]! } - public var Permissions_NotificationsText_v0: String { return self._s[2505]! } - public var LoginPassword_FloodError: String { return self._s[2506]! } - public var Group_Setup_HistoryHiddenHelp: String { return self._s[2508]! } - public func TwoStepAuth_PendingEmailHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2509]!, self._r[2509]!, [_0]) + public var Passport_CorrectErrors: String { return self._s[2503]! } + public func Channel_MessageTitleUpdated(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2504]!, self._r[2504]!, [_0]) } - public var Passport_Language_bn: String { return self._s[2510]! } - public func DialogList_SingleUploadingPhotoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { + public var Map_SendMyCurrentLocation: String { return self._s[2505]! } + public var SharedMedia_SearchNoResults: String { return self._s[2506]! } + public var Permissions_NotificationsText_v0: String { return self._s[2507]! } + public var LoginPassword_FloodError: String { return self._s[2508]! } + public var Group_Setup_HistoryHiddenHelp: String { return self._s[2510]! } + public func TwoStepAuth_PendingEmailHelp(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2511]!, self._r[2511]!, [_0]) } - public func Notification_PinnedAudioMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2512]!, self._r[2512]!, [_0]) - } - public func Channel_AdminLog_MessageChangedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { + public var Passport_Language_bn: String { return self._s[2512]! } + public func DialogList_SingleUploadingPhotoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2513]!, self._r[2513]!, [_0]) } - public var GroupInfo_InvitationLinkGroupFull: String { return self._s[2516]! } - public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[2518]! } - public var Contacts_PermissionsAllow: String { return self._s[2519]! } - public var ReportPeer_ReasonCopyright: String { return self._s[2520]! } - public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[2521]! } - public var Paint_Duplicate: String { return self._s[2522]! } - public var Notification_ChannelMigratedFrom: String { return self._s[2523]! } - public var Passport_Address_Country: String { return self._s[2524]! } - public var Notification_RenamedChannel: String { return self._s[2526]! } - public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[2527]! } - public var Group_MessagePhotoUpdated: String { return self._s[2528]! } - public var Channel_BanUser_PermissionSendMedia: String { return self._s[2529]! } - public var Conversation_ContextMenuBan: String { return self._s[2530]! } - public var TwoStepAuth_EmailSent: String { return self._s[2531]! } - public var MessagePoll_NoVotes: String { return self._s[2532]! } - public var Passport_Language_is: String { return self._s[2533]! } - public var Tour_Text5: String { return self._s[2535]! } + public func Notification_PinnedAudioMessage(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2514]!, self._r[2514]!, [_0]) + } + public func Channel_AdminLog_MessageChangedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2515]!, self._r[2515]!, [_0]) + } + public var GroupInfo_InvitationLinkGroupFull: String { return self._s[2518]! } + public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[2520]! } + public var Contacts_PermissionsAllow: String { return self._s[2521]! } + public var ReportPeer_ReasonCopyright: String { return self._s[2522]! } + public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[2523]! } + public var Paint_Duplicate: String { return self._s[2524]! } + public var Notification_ChannelMigratedFrom: String { return self._s[2525]! } + public var Passport_Address_Country: String { return self._s[2526]! } + public var Notification_RenamedChannel: String { return self._s[2528]! } + public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[2529]! } + public var Group_MessagePhotoUpdated: String { return self._s[2530]! } + public var Channel_BanUser_PermissionSendMedia: String { return self._s[2531]! } + public var Conversation_ContextMenuBan: String { return self._s[2532]! } + public var TwoStepAuth_EmailSent: String { return self._s[2533]! } + public var MessagePoll_NoVotes: String { return self._s[2534]! } + public var Passport_Language_is: String { return self._s[2535]! } + public var Tour_Text5: String { return self._s[2537]! } public func Call_GroupFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2537]!, self._r[2537]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2539]!, self._r[2539]!, [_1, _2]) } - public var Paint_Edit: String { return self._s[2539]! } - public var LoginPassword_ForgotPassword: String { return self._s[2542]! } - public var GroupInfo_GroupNamePlaceholder: String { return self._s[2543]! } + public var Paint_Edit: String { return self._s[2541]! } + public var LoginPassword_ForgotPassword: String { return self._s[2544]! } + public var GroupInfo_GroupNamePlaceholder: String { return self._s[2545]! } public func Notification_Kicked(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2544]!, self._r[2544]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2546]!, self._r[2546]!, [_0, _1]) } - public var Conversation_InputTextCaptionPlaceholder: String { return self._s[2545]! } - public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[2546]! } - public var Passport_Language_uz: String { return self._s[2547]! } - public var Conversation_PinMessageAlertGroup: String { return self._s[2548]! } - public var Map_StopLiveLocation: String { return self._s[2550]! } - public var PasscodeSettings_Help: String { return self._s[2552]! } - public var NotificationsSound_Input: String { return self._s[2553]! } - public var Share_Title: String { return self._s[2555]! } - public var Login_TermsOfServiceAgree: String { return self._s[2556]! } - public var Compose_NewEncryptedChatTitle: String { return self._s[2557]! } - public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[2558]! } - public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[2559]! } - public var EnterPasscode_EnterTitle: String { return self._s[2560]! } + public var Conversation_InputTextCaptionPlaceholder: String { return self._s[2547]! } + public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[2548]! } + public var Passport_Language_uz: String { return self._s[2549]! } + public var Conversation_PinMessageAlertGroup: String { return self._s[2550]! } + public var Map_StopLiveLocation: String { return self._s[2552]! } + public var PasscodeSettings_Help: String { return self._s[2554]! } + public var NotificationsSound_Input: String { return self._s[2555]! } + public var Share_Title: String { return self._s[2557]! } + public var Login_TermsOfServiceAgree: String { return self._s[2558]! } + public var Compose_NewEncryptedChatTitle: String { return self._s[2559]! } + public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[2560]! } + public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[2561]! } + public var EnterPasscode_EnterTitle: String { return self._s[2562]! } public func Call_PrivacyErrorMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2561]!, self._r[2561]!, [_0]) + return formatWithArgumentRanges(self._s[2563]!, self._r[2563]!, [_0]) } - public var Settings_CopyPhoneNumber: String { return self._s[2562]! } - public var NotificationsSound_Keys: String { return self._s[2563]! } + public var Settings_CopyPhoneNumber: String { return self._s[2564]! } + public var NotificationsSound_Keys: String { return self._s[2565]! } public func Call_ParticipantVersionOutdatedError(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2564]!, self._r[2564]!, [_0]) + return formatWithArgumentRanges(self._s[2566]!, self._r[2566]!, [_0]) } - public var Notification_MessageLifetime1w: String { return self._s[2565]! } - public var Message_Video: String { return self._s[2566]! } + public var Notification_MessageLifetime1w: String { return self._s[2567]! } + public var Message_Video: String { return self._s[2568]! } public func Notification_JoinedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2569]!, self._r[2569]!, [_0]) + return formatWithArgumentRanges(self._s[2571]!, self._r[2571]!, [_0]) } public func PrivacySettings_LastSeenContactsPlus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2570]!, self._r[2570]!, [_0]) + return formatWithArgumentRanges(self._s[2572]!, self._r[2572]!, [_0]) } - public var Passport_Language_mk: String { return self._s[2571]! } - public var CreatePoll_CancelConfirmation: String { return self._s[2572]! } - public var Conversation_SilentBroadcastTooltipOn: String { return self._s[2574]! } - public var PrivacyPolicy_Decline: String { return self._s[2575]! } - public var Passport_Identity_DoesNotExpire: String { return self._s[2576]! } - public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[2577]! } - public var Permissions_SiriAllow_v0: String { return self._s[2578]! } + public var Passport_Language_mk: String { return self._s[2573]! } + public var CreatePoll_CancelConfirmation: String { return self._s[2574]! } + public var Conversation_SilentBroadcastTooltipOn: String { return self._s[2576]! } + public var PrivacyPolicy_Decline: String { return self._s[2577]! } + public var Passport_Identity_DoesNotExpire: String { return self._s[2578]! } + public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[2579]! } + public var Permissions_SiriAllow_v0: String { return self._s[2580]! } public func CHAT_MESSAGE_STICKER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2579]!, self._r[2579]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2581]!, self._r[2581]!, [_1, _2, _3]) } public func CHANNEL_MESSAGES(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2580]!, self._r[2580]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2582]!, self._r[2582]!, [_1, _2]) } public func Notification_RenamedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2581]!, self._r[2581]!, [_0]) + return formatWithArgumentRanges(self._s[2583]!, self._r[2583]!, [_0]) } - public var Paint_Regular: String { return self._s[2582]! } - public var ChatSettings_AutoDownloadReset: String { return self._s[2583]! } - public var BlockedUsers_SelectUserTitle: String { return self._s[2584]! } - public var GroupInfo_InviteByLink: String { return self._s[2586]! } - public var MessageTimer_Custom: String { return self._s[2587]! } - public var UserInfo_NotificationsDefaultEnabled: String { return self._s[2588]! } - public var Passport_Address_TypeTemporaryRegistration: String { return self._s[2590]! } - public var Channel_Username_InvalidTaken: String { return self._s[2591]! } - public var Conversation_ClousStorageInfo_Description3: String { return self._s[2592]! } + public var Paint_Regular: String { return self._s[2584]! } + public var ChatSettings_AutoDownloadReset: String { return self._s[2585]! } + public var BlockedUsers_SelectUserTitle: String { return self._s[2586]! } + public var GroupInfo_InviteByLink: String { return self._s[2588]! } + public var MessageTimer_Custom: String { return self._s[2589]! } + public var UserInfo_NotificationsDefaultEnabled: String { return self._s[2590]! } + public var Passport_Address_TypeTemporaryRegistration: String { return self._s[2592]! } + public var Channel_Username_InvalidTaken: String { return self._s[2593]! } + public var Conversation_ClousStorageInfo_Description3: String { return self._s[2594]! } public func CHANNEL_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2593]!, self._r[2593]!, [_1]) + return formatWithArgumentRanges(self._s[2595]!, self._r[2595]!, [_1]) } - public var Settings_ChatBackground: String { return self._s[2594]! } - public var Channel_Subscribers_Title: String { return self._s[2595]! } - public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[2596]! } - public var Watch_ConnectionDescription: String { return self._s[2597]! } - public var EditProfile_Title: String { return self._s[2601]! } - public var NotificationsSound_Bamboo: String { return self._s[2603]! } - public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[2605]! } - public var Login_SmsRequestState2: String { return self._s[2606]! } - public var Passport_Language_ar: String { return self._s[2607]! } - public var Conversation_MessageDialogEdit: String { return self._s[2608]! } - public var Common_Close: String { return self._s[2609]! } + public var Settings_ChatBackground: String { return self._s[2596]! } + public var Channel_Subscribers_Title: String { return self._s[2597]! } + public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[2598]! } + public var Watch_ConnectionDescription: String { return self._s[2599]! } + public var EditProfile_Title: String { return self._s[2603]! } + public var NotificationsSound_Bamboo: String { return self._s[2605]! } + public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[2607]! } + public var Login_SmsRequestState2: String { return self._s[2608]! } + public var Passport_Language_ar: String { return self._s[2609]! } + public var Conversation_MessageDialogEdit: String { return self._s[2610]! } + public var Common_Close: String { return self._s[2611]! } public func Channel_AdminLog_MessageToggleInvitesOff(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2613]!, self._r[2613]!, [_0]) - } - public var UserInfo_About_Placeholder: String { return self._s[2614]! } - public func Conversation_FileHowToText(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2615]!, self._r[2615]!, [_0]) } - public var Channel_Info_Banned: String { return self._s[2617]! } + public var UserInfo_About_Placeholder: String { return self._s[2616]! } + public func Conversation_FileHowToText(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2617]!, self._r[2617]!, [_0]) + } + public var Channel_Info_Banned: String { return self._s[2619]! } public func Time_MonthOfYear_m11(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2618]!, self._r[2618]!, [_0]) + return formatWithArgumentRanges(self._s[2620]!, self._r[2620]!, [_0]) } - public var Passport_Language_my: String { return self._s[2619]! } + public var Passport_Language_my: String { return self._s[2621]! } public func Time_PreciseDate_m9(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2620]!, self._r[2620]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2622]!, self._r[2622]!, [_1, _2, _3]) } - public var Preview_CopyAddress: String { return self._s[2621]! } + public var Preview_CopyAddress: String { return self._s[2623]! } public func DialogList_SinglePlayingGameSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2622]!, self._r[2622]!, [_0]) + return formatWithArgumentRanges(self._s[2624]!, self._r[2624]!, [_0]) } - public var KeyCommand_JumpToPreviousChat: String { return self._s[2623]! } - public var UserInfo_BotSettings: String { return self._s[2624]! } - public var LiveLocation_MenuStopAll: String { return self._s[2626]! } - public var Passport_PasswordCreate: String { return self._s[2627]! } - public var StickerSettings_MaskContextInfo: String { return self._s[2628]! } - public var Message_PinnedLocationMessage: String { return self._s[2629]! } - public var Map_Satellite: String { return self._s[2630]! } - public var Username_TooManyPublicUsernamesError: String { return self._s[2631]! } - public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[2632]! } + public var KeyCommand_JumpToPreviousChat: String { return self._s[2625]! } + public var UserInfo_BotSettings: String { return self._s[2626]! } + public var LiveLocation_MenuStopAll: String { return self._s[2628]! } + public var Passport_PasswordCreate: String { return self._s[2629]! } + public var StickerSettings_MaskContextInfo: String { return self._s[2630]! } + public var Message_PinnedLocationMessage: String { return self._s[2631]! } + public var Map_Satellite: String { return self._s[2632]! } + public var Username_TooManyPublicUsernamesError: String { return self._s[2633]! } + public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[2634]! } public func Notification_PinnedTextMessage(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2633]!, self._r[2633]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2635]!, self._r[2635]!, [_0, _1]) } - public var Notifications_ChannelNotificationsHelp: String { return self._s[2634]! } - public var Privacy_Calls_P2PContacts: String { return self._s[2635]! } - public var NotificationsSound_None: String { return self._s[2636]! } - public var AccessDenied_VoiceMicrophone: String { return self._s[2638]! } + public var Notifications_ChannelNotificationsHelp: String { return self._s[2636]! } + public var Privacy_Calls_P2PContacts: String { return self._s[2637]! } + public var NotificationsSound_None: String { return self._s[2638]! } + public var AccessDenied_VoiceMicrophone: String { return self._s[2640]! } public func ApplyLanguage_ChangeLanguageAlreadyActive(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2639]!, self._r[2639]!, [_1]) + return formatWithArgumentRanges(self._s[2641]!, self._r[2641]!, [_1]) } - public var Cache_Indexing: String { return self._s[2640]! } - public var DialogList_RecentTitlePeople: String { return self._s[2642]! } - public var DialogList_EncryptionRejected: String { return self._s[2643]! } - public var Passport_ScanPassportHelp: String { return self._s[2644]! } - public var Application_Name: String { return self._s[2645]! } - public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[2646]! } - public var Passport_Identity_TranslationHelp: String { return self._s[2648]! } + public var Cache_Indexing: String { return self._s[2642]! } + public var DialogList_RecentTitlePeople: String { return self._s[2644]! } + public var DialogList_EncryptionRejected: String { return self._s[2645]! } + public var Passport_ScanPassportHelp: String { return self._s[2646]! } + public var Application_Name: String { return self._s[2647]! } + public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[2648]! } + public var Passport_Identity_TranslationHelp: String { return self._s[2650]! } public func Notification_JoinedGroupByLink(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2649]!, self._r[2649]!, [_0]) + return formatWithArgumentRanges(self._s[2651]!, self._r[2651]!, [_0]) } public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2650]!, self._r[2650]!, [_0]) + return formatWithArgumentRanges(self._s[2652]!, self._r[2652]!, [_0]) } - public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[2651]! } - public var Privacy_ChatsTitle: String { return self._s[2652]! } - public var DialogList_ClearHistoryConfirmation: String { return self._s[2653]! } - public var Watch_Suggestion_HoldOn: String { return self._s[2654]! } - public var SocksProxySetup_RequiredCredentials: String { return self._s[2655]! } - public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[2656]! } - public var TwoStepAuth_EmailSkipAlert: String { return self._s[2657]! } - public var Channel_Setup_TypePublic: String { return self._s[2660]! } + public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[2653]! } + public var Privacy_ChatsTitle: String { return self._s[2654]! } + public var DialogList_ClearHistoryConfirmation: String { return self._s[2655]! } + public var Watch_Suggestion_HoldOn: String { return self._s[2656]! } + public var SocksProxySetup_RequiredCredentials: String { return self._s[2657]! } + public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[2658]! } + public var TwoStepAuth_EmailSkipAlert: String { return self._s[2659]! } + public var Channel_Setup_TypePublic: String { return self._s[2662]! } public func Channel_AdminLog_MessageToggleInvitesOn(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2661]!, self._r[2661]!, [_0]) + return formatWithArgumentRanges(self._s[2663]!, self._r[2663]!, [_0]) } - public var Channel_TypeSetup_Title: String { return self._s[2663]! } - public var Map_OpenInMaps: String { return self._s[2665]! } - public var NotificationsSound_Tremolo: String { return self._s[2667]! } + public var Channel_TypeSetup_Title: String { return self._s[2665]! } + public var Map_OpenInMaps: String { return self._s[2667]! } + public var NotificationsSound_Tremolo: String { return self._s[2669]! } public func Date_ChatDateHeaderYear(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2668]!, self._r[2668]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2670]!, self._r[2670]!, [_1, _2, _3]) } - public var ConversationProfile_UnknownAddMemberError: String { return self._s[2669]! } - public var Passport_PasswordHelp: String { return self._s[2670]! } - public var Login_CodeExpiredError: String { return self._s[2671]! } - public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[2672]! } - public var Conversation_TitleUnmute: String { return self._s[2673]! } - public var Passport_Identity_ScansHelp: String { return self._s[2674]! } - public var Passport_Language_lo: String { return self._s[2675]! } - public var Camera_FlashAuto: String { return self._s[2676]! } - public var Common_Cancel: String { return self._s[2677]! } - public var DialogList_SavedMessagesTooltip: String { return self._s[2678]! } - public var TwoStepAuth_SetupPasswordTitle: String { return self._s[2679]! } - public var Conversation_ReportSpamConfirmation: String { return self._s[2680]! } - public var ChatSettings_Title: String { return self._s[2682]! } - public var Passport_PasswordReset: String { return self._s[2683]! } - public var SocksProxySetup_TypeNone: String { return self._s[2684]! } - public var PhoneNumberHelp_Help: String { return self._s[2686]! } - public var Checkout_EnterPassword: String { return self._s[2687]! } - public var Share_AuthTitle: String { return self._s[2689]! } - public var Activity_UploadingDocument: String { return self._s[2690]! } - public var State_Connecting: String { return self._s[2691]! } - public var Profile_MessageLifetime1w: String { return self._s[2692]! } - public var Conversation_ContextMenuReport: String { return self._s[2693]! } - public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[2694]! } - public var AutoNightTheme_ScheduledTo: String { return self._s[2695]! } - public var AuthSessions_Terminate: String { return self._s[2696]! } - public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[2697]! } - public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[2698]! } - public var PhotoEditor_Set: String { return self._s[2699]! } - public var Login_PadPhoneHelp: String { return self._s[2700]! } - public var PrivacyPolicy_DeclineLastWarning: String { return self._s[2703]! } - public var NotificationsSound_Complete: String { return self._s[2704]! } - public var Group_Info_AdminLog: String { return self._s[2705]! } - public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[2706]! } - public var Conversation_Admin: String { return self._s[2708]! } - public var Conversation_GifTooltip: String { return self._s[2709]! } - public var Passport_NotLoggedInMessage: String { return self._s[2710]! } - public var Profile_MessageLifetimeForever: String { return self._s[2711]! } - public var SharedMedia_EmptyTitle: String { return self._s[2713]! } - public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[2714]! } - public var Username_Help: String { return self._s[2715]! } - public var DialogList_LanguageTooltip: String { return self._s[2717]! } - public var Map_LoadError: String { return self._s[2718]! } - public var Notification_Exceptions_NewException: String { return self._s[2719]! } - public var TwoStepAuth_EmailTitle: String { return self._s[2720]! } - public var WatchRemote_AlertText: String { return self._s[2721]! } - public var ChatSettings_ConnectionType_Title: String { return self._s[2723]! } + public var ConversationProfile_UnknownAddMemberError: String { return self._s[2671]! } + public var Passport_PasswordHelp: String { return self._s[2672]! } + public var Login_CodeExpiredError: String { return self._s[2673]! } + public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[2674]! } + public var Conversation_TitleUnmute: String { return self._s[2675]! } + public var Passport_Identity_ScansHelp: String { return self._s[2676]! } + public var Passport_Language_lo: String { return self._s[2677]! } + public var Camera_FlashAuto: String { return self._s[2678]! } + public var Common_Cancel: String { return self._s[2679]! } + public var DialogList_SavedMessagesTooltip: String { return self._s[2680]! } + public var TwoStepAuth_SetupPasswordTitle: String { return self._s[2681]! } + public var Conversation_ReportSpamConfirmation: String { return self._s[2682]! } + public var ChatSettings_Title: String { return self._s[2684]! } + public var Passport_PasswordReset: String { return self._s[2685]! } + public var SocksProxySetup_TypeNone: String { return self._s[2686]! } + public var PhoneNumberHelp_Help: String { return self._s[2688]! } + public var Checkout_EnterPassword: String { return self._s[2689]! } + public var Share_AuthTitle: String { return self._s[2691]! } + public var Activity_UploadingDocument: String { return self._s[2692]! } + public var State_Connecting: String { return self._s[2693]! } + public var Profile_MessageLifetime1w: String { return self._s[2694]! } + public var Conversation_ContextMenuReport: String { return self._s[2695]! } + public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[2696]! } + public var AutoNightTheme_ScheduledTo: String { return self._s[2697]! } + public var AuthSessions_Terminate: String { return self._s[2698]! } + public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[2699]! } + public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[2700]! } + public var PhotoEditor_Set: String { return self._s[2701]! } + public var Login_PadPhoneHelp: String { return self._s[2702]! } + public var PrivacyPolicy_DeclineLastWarning: String { return self._s[2705]! } + public var NotificationsSound_Complete: String { return self._s[2706]! } + public var Group_Info_AdminLog: String { return self._s[2707]! } + public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[2708]! } + public var Conversation_Admin: String { return self._s[2710]! } + public var Conversation_GifTooltip: String { return self._s[2711]! } + public var Passport_NotLoggedInMessage: String { return self._s[2712]! } + public var Profile_MessageLifetimeForever: String { return self._s[2713]! } + public var SharedMedia_EmptyTitle: String { return self._s[2715]! } + public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[2716]! } + public var Username_Help: String { return self._s[2717]! } + public var DialogList_LanguageTooltip: String { return self._s[2719]! } + public var Map_LoadError: String { return self._s[2720]! } + public var Notification_Exceptions_NewException: String { return self._s[2721]! } + public var TwoStepAuth_EmailTitle: String { return self._s[2722]! } + public var WatchRemote_AlertText: String { return self._s[2723]! } + public var ChatSettings_ConnectionType_Title: String { return self._s[2725]! } public func LOCKED_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2724]!, self._r[2724]!, [_1]) + return formatWithArgumentRanges(self._s[2726]!, self._r[2726]!, [_1]) } - public var Passport_Address_CountryPlaceholder: String { return self._s[2725]! } + public var Passport_Address_CountryPlaceholder: String { return self._s[2727]! } public func DialogList_AwaitingEncryption(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2726]!, self._r[2726]!, [_0]) + return formatWithArgumentRanges(self._s[2728]!, self._r[2728]!, [_0]) } public func Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2727]!, self._r[2727]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2729]!, self._r[2729]!, [_1, _2, _3]) } - public var Group_AdminLog_EmptyText: String { return self._s[2728]! } - public var AccessDenied_VideoMicrophone: String { return self._s[2730]! } - public var Conversation_ContextMenuStickerPackAdd: String { return self._s[2731]! } - public var Cache_ClearNone: String { return self._s[2732]! } - public var SocksProxySetup_FailedToConnect: String { return self._s[2733]! } - public var Permissions_NotificationsTitle_v0: String { return self._s[2734]! } + public var Group_AdminLog_EmptyText: String { return self._s[2730]! } + public var AccessDenied_VideoMicrophone: String { return self._s[2732]! } + public var Conversation_ContextMenuStickerPackAdd: String { return self._s[2733]! } + public var Cache_ClearNone: String { return self._s[2734]! } + public var SocksProxySetup_FailedToConnect: String { return self._s[2735]! } + public var Permissions_NotificationsTitle_v0: String { return self._s[2736]! } public func Channel_AdminLog_MessageEdited(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2735]!, self._r[2735]!, [_0]) - } - public var Passport_Identity_Country: String { return self._s[2736]! } - public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2737]!, self._r[2737]!, [_0]) } - public var AccessDenied_Settings: String { return self._s[2738]! } - public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[2739]! } - public var Month_ShortMay: String { return self._s[2740]! } - public var Compose_NewGroup: String { return self._s[2741]! } - public var Group_Setup_TypePrivate: String { return self._s[2743]! } - public var Login_PadPhoneHelpTitle: String { return self._s[2744]! } - public var Appearance_ThemeDayClassic: String { return self._s[2745]! } - public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[2746]! } - public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[2747]! } - public var Conversation_typing: String { return self._s[2749]! } - public var Paint_Masks: String { return self._s[2750]! } - public var Username_InvalidTaken: String { return self._s[2751]! } - public var TwoStepAuth_EmailAddSuccess: String { return self._s[2752]! } - public func CHAT_PHOTO_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2753]!, self._r[2753]!, [_1, _2]) + public var Passport_Identity_Country: String { return self._s[2738]! } + public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2739]!, self._r[2739]!, [_0]) } - public var Call_StatusNoAnswer: String { return self._s[2754]! } - public var Passport_Identity_Selfie: String { return self._s[2755]! } - public var Login_InfoLastNamePlaceholder: String { return self._s[2756]! } - public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[2757]! } - public var Conversation_ClearSecretHistory: String { return self._s[2758]! } - public var NetworkUsageSettings_Title: String { return self._s[2760]! } - public var Your_cards_security_code_is_invalid: String { return self._s[2762]! } + public var AccessDenied_Settings: String { return self._s[2740]! } + public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[2741]! } + public var Month_ShortMay: String { return self._s[2742]! } + public var Compose_NewGroup: String { return self._s[2743]! } + public var Group_Setup_TypePrivate: String { return self._s[2745]! } + public var Login_PadPhoneHelpTitle: String { return self._s[2746]! } + public var Appearance_ThemeDayClassic: String { return self._s[2747]! } + public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[2748]! } + public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[2749]! } + public var Conversation_typing: String { return self._s[2751]! } + public var Paint_Masks: String { return self._s[2752]! } + public var Username_InvalidTaken: String { return self._s[2753]! } + public var TwoStepAuth_EmailAddSuccess: String { return self._s[2754]! } + public func CHAT_PHOTO_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2755]!, self._r[2755]!, [_1, _2]) + } + public var Call_StatusNoAnswer: String { return self._s[2756]! } + public var Passport_Identity_Selfie: String { return self._s[2757]! } + public var Login_InfoLastNamePlaceholder: String { return self._s[2758]! } + public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[2759]! } + public var Conversation_ClearSecretHistory: String { return self._s[2760]! } + public var NetworkUsageSettings_Title: String { return self._s[2762]! } + public var Your_cards_security_code_is_invalid: String { return self._s[2764]! } public func Notification_LeftChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2764]!, self._r[2764]!, [_0]) + return formatWithArgumentRanges(self._s[2766]!, self._r[2766]!, [_0]) } public func Call_CallInProgressMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2765]!, self._r[2765]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2767]!, self._r[2767]!, [_1, _2]) } - public var SaveIncomingPhotosSettings_From: String { return self._s[2767]! } - public var Map_LiveLocationTitle: String { return self._s[2768]! } - public var Login_InfoAvatarAdd: String { return self._s[2769]! } - public var Passport_Identity_FilesView: String { return self._s[2770]! } - public var UserInfo_GenericPhoneLabel: String { return self._s[2771]! } - public var Privacy_Calls_NeverAllow: String { return self._s[2772]! } + public var SaveIncomingPhotosSettings_From: String { return self._s[2769]! } + public var Map_LiveLocationTitle: String { return self._s[2770]! } + public var Login_InfoAvatarAdd: String { return self._s[2771]! } + public var Passport_Identity_FilesView: String { return self._s[2772]! } + public var UserInfo_GenericPhoneLabel: String { return self._s[2773]! } + public var Privacy_Calls_NeverAllow: String { return self._s[2774]! } public func Contacts_AddPhoneNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2773]!, self._r[2773]!, [_0]) + return formatWithArgumentRanges(self._s[2775]!, self._r[2775]!, [_0]) } - public var TwoStepAuth_ConfirmationText: String { return self._s[2774]! } - public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[2775]! } - public var Channel_AdminLogFilter_AdminsAll: String { return self._s[2776]! } - public var Tour_Title2: String { return self._s[2777]! } - public var Conversation_FileOpenIn: String { return self._s[2778]! } - public var Checkout_ErrorPrecheckoutFailed: String { return self._s[2779]! } - public var Wallpaper_Set: String { return self._s[2780]! } - public var Passport_Identity_Translations: String { return self._s[2782]! } + public var TwoStepAuth_ConfirmationText: String { return self._s[2776]! } + public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[2777]! } + public var Channel_AdminLogFilter_AdminsAll: String { return self._s[2778]! } + public var Tour_Title2: String { return self._s[2779]! } + public var Conversation_FileOpenIn: String { return self._s[2780]! } + public var Checkout_ErrorPrecheckoutFailed: String { return self._s[2781]! } + public var Wallpaper_Set: String { return self._s[2782]! } + public var Passport_Identity_Translations: String { return self._s[2784]! } public func Channel_AdminLog_MessageChangedChannelAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2783]!, self._r[2783]!, [_0]) + return formatWithArgumentRanges(self._s[2785]!, self._r[2785]!, [_0]) } - public var Channel_LeaveChannel: String { return self._s[2784]! } + public var Channel_LeaveChannel: String { return self._s[2786]! } public func PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2785]!, self._r[2785]!, [_1]) + return formatWithArgumentRanges(self._s[2787]!, self._r[2787]!, [_1]) } - public var PhotoEditor_HighlightsTint: String { return self._s[2786]! } - public var Passport_Email_Delete: String { return self._s[2787]! } - public var Conversation_Mute: String { return self._s[2789]! } - public var Channel_AdminLog_CanSendMessages: String { return self._s[2791]! } + public var PhotoEditor_HighlightsTint: String { return self._s[2788]! } + public var Passport_Email_Delete: String { return self._s[2789]! } + public var Conversation_Mute: String { return self._s[2791]! } + public var Channel_AdminLog_CanSendMessages: String { return self._s[2793]! } public func Notification_PassportValuesSentMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2792]!, self._r[2792]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2794]!, self._r[2794]!, [_1, _2]) } - public var Calls_CallTabDescription: String { return self._s[2793]! } - public var Passport_Identity_NativeNameHelp: String { return self._s[2794]! } - public var Common_No: String { return self._s[2795]! } - public var Weekday_Sunday: String { return self._s[2796]! } - public var Notification_Reply: String { return self._s[2797]! } - public var Conversation_ViewMessage: String { return self._s[2798]! } + public var Calls_CallTabDescription: String { return self._s[2795]! } + public var Passport_Identity_NativeNameHelp: String { return self._s[2796]! } + public var Common_No: String { return self._s[2797]! } + public var Weekday_Sunday: String { return self._s[2798]! } + public var Notification_Reply: String { return self._s[2799]! } + public var Conversation_ViewMessage: String { return self._s[2800]! } public func Checkout_SavePasswordTimeoutAndFaceId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2799]!, self._r[2799]!, [_0]) + return formatWithArgumentRanges(self._s[2801]!, self._r[2801]!, [_0]) } public func Map_LiveLocationPrivateDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2800]!, self._r[2800]!, [_0]) + return formatWithArgumentRanges(self._s[2802]!, self._r[2802]!, [_0]) } - public var Message_PinnedDocumentMessage: String { return self._s[2801]! } - public var DialogList_TabTitle: String { return self._s[2803]! } - public var Passport_FieldEmail: String { return self._s[2804]! } - public var Conversation_UnpinMessageAlert: String { return self._s[2805]! } - public var Passport_Address_TypeBankStatement: String { return self._s[2806]! } - public var Passport_Identity_ExpiryDate: String { return self._s[2807]! } - public var Privacy_Calls_P2P: String { return self._s[2808]! } + public var Message_PinnedDocumentMessage: String { return self._s[2803]! } + public var DialogList_TabTitle: String { return self._s[2805]! } + public var Passport_FieldEmail: String { return self._s[2806]! } + public var Conversation_UnpinMessageAlert: String { return self._s[2807]! } + public var Passport_Address_TypeBankStatement: String { return self._s[2808]! } + public var Passport_Identity_ExpiryDate: String { return self._s[2809]! } + public var Privacy_Calls_P2P: String { return self._s[2810]! } public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2810]!, self._r[2810]!, [_0]) + return formatWithArgumentRanges(self._s[2812]!, self._r[2812]!, [_0]) } - public var SocksProxySetup_UseForCallsHelp: String { return self._s[2811]! } - public var EnterPasscode_ChangeTitle: String { return self._s[2812]! } - public var Passport_InfoText: String { return self._s[2813]! } - public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[2814]! } + public var SocksProxySetup_UseForCallsHelp: String { return self._s[2813]! } + public var EnterPasscode_ChangeTitle: String { return self._s[2814]! } + public var Passport_InfoText: String { return self._s[2815]! } + public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[2816]! } public func Time_PreciseDate_m3(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2815]!, self._r[2815]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2817]!, self._r[2817]!, [_1, _2, _3]) } - public var Passport_Identity_EditDriversLicense: String { return self._s[2816]! } - public var Conversation_TapAndHoldToRecord: String { return self._s[2818]! } + public var Passport_Identity_EditDriversLicense: String { return self._s[2818]! } + public var Conversation_TapAndHoldToRecord: String { return self._s[2820]! } public func Notification_CallTimeFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2819]!, self._r[2819]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2821]!, self._r[2821]!, [_1, _2]) } public func Generic_OpenHiddenLinkAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2821]!, self._r[2821]!, [_0]) + return formatWithArgumentRanges(self._s[2823]!, self._r[2823]!, [_0]) } - public var DialogList_Unread: String { return self._s[2822]! } - public var User_DeletedAccount: String { return self._s[2823]! } + public var DialogList_Unread: String { return self._s[2824]! } + public var User_DeletedAccount: String { return self._s[2825]! } public func Watch_Time_ShortYesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2824]!, self._r[2824]!, [_0]) + return formatWithArgumentRanges(self._s[2826]!, self._r[2826]!, [_0]) } - public var UserInfo_NotificationsDefault: String { return self._s[2825]! } - public var SharedMedia_CategoryMedia: String { return self._s[2826]! } - public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[2827]! } - public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[2828]! } - public var Watch_ChatList_Compose: String { return self._s[2829]! } - public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[2830]! } - public var Watch_Microphone_Access: String { return self._s[2831]! } - public var Group_Setup_HistoryHeader: String { return self._s[2832]! } - public var Activity_UploadingPhoto: String { return self._s[2833]! } - public var Conversation_Edit: String { return self._s[2835]! } - public var Group_ErrorSendRestrictedMedia: String { return self._s[2836]! } - public var Login_TermsOfServiceDecline: String { return self._s[2837]! } - public var Message_PinnedContactMessage: String { return self._s[2838]! } + public var UserInfo_NotificationsDefault: String { return self._s[2827]! } + public var SharedMedia_CategoryMedia: String { return self._s[2828]! } + public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[2829]! } + public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[2830]! } + public var Watch_ChatList_Compose: String { return self._s[2831]! } + public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[2832]! } + public var Watch_Microphone_Access: String { return self._s[2833]! } + public var Group_Setup_HistoryHeader: String { return self._s[2834]! } + public var Activity_UploadingPhoto: String { return self._s[2835]! } + public var Conversation_Edit: String { return self._s[2837]! } + public var Group_ErrorSendRestrictedMedia: String { return self._s[2838]! } + public var Login_TermsOfServiceDecline: String { return self._s[2839]! } + public var Message_PinnedContactMessage: String { return self._s[2840]! } public func Channel_AdminLog_MessageRestrictedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2839]!, self._r[2839]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2841]!, self._r[2841]!, [_1, _2]) } - public var TwoStepAuth_AdditionalPassword: String { return self._s[2841]! } - public var Passport_Phone_EnterOtherNumber: String { return self._s[2842]! } - public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[2843]! } - public var Passport_FieldPhone: String { return self._s[2844]! } - public var Message_PinnedPhotoMessage: String { return self._s[2845]! } - public var InfoPlist_NSCameraUsageDescription: String { return self._s[2847]! } - public var Conversation_Call: String { return self._s[2848]! } - public var Common_TakePhoto: String { return self._s[2850]! } - public var Channel_NotificationLoading: String { return self._s[2851]! } + public var TwoStepAuth_AdditionalPassword: String { return self._s[2843]! } + public var Passport_Phone_EnterOtherNumber: String { return self._s[2844]! } + public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[2845]! } + public var Passport_FieldPhone: String { return self._s[2846]! } + public var Message_PinnedPhotoMessage: String { return self._s[2847]! } + public var InfoPlist_NSCameraUsageDescription: String { return self._s[2849]! } + public var Conversation_Call: String { return self._s[2850]! } + public var Common_TakePhoto: String { return self._s[2852]! } + public var Channel_NotificationLoading: String { return self._s[2853]! } public func Notification_Exceptions_Sound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2852]!, self._r[2852]!, [_0]) - } - public var Permissions_SiriTitle_v0: String { return self._s[2853]! } - public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2854]!, self._r[2854]!, [_0]) } - public var Channel_MessagePhotoRemoved: String { return self._s[2855]! } - public var Common_edit: String { return self._s[2856]! } - public var PrivacySettings_AuthSessions: String { return self._s[2857]! } - public var Month_ShortJune: String { return self._s[2858]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[2859]! } - public var Call_ReportSend: String { return self._s[2860]! } - public var Watch_LastSeen_JustNow: String { return self._s[2861]! } - public var Notifications_MessageNotifications: String { return self._s[2862]! } - public var BroadcastListInfo_AddRecipient: String { return self._s[2864]! } - public var Group_Status: String { return self._s[2865]! } + public var Permissions_SiriTitle_v0: String { return self._s[2855]! } + public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2856]!, self._r[2856]!, [_0]) + } + public var Channel_MessagePhotoRemoved: String { return self._s[2857]! } + public var Common_edit: String { return self._s[2858]! } + public var PrivacySettings_AuthSessions: String { return self._s[2859]! } + public var Month_ShortJune: String { return self._s[2860]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[2861]! } + public var Call_ReportSend: String { return self._s[2862]! } + public var Watch_LastSeen_JustNow: String { return self._s[2863]! } + public var Notifications_MessageNotifications: String { return self._s[2864]! } + public var BroadcastListInfo_AddRecipient: String { return self._s[2866]! } + public var Group_Status: String { return self._s[2867]! } public func AutoNightTheme_LocationHelp(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2866]!, self._r[2866]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2868]!, self._r[2868]!, [_0, _1]) } - public var ShareMenu_ShareTo: String { return self._s[2867]! } - public var Conversation_Moderate_Ban: String { return self._s[2868]! } + public var ShareMenu_ShareTo: String { return self._s[2869]! } + public var Conversation_Moderate_Ban: String { return self._s[2870]! } public func Conversation_DeleteMessagesFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2869]!, self._r[2869]!, [_0]) + return formatWithArgumentRanges(self._s[2871]!, self._r[2871]!, [_0]) } - public var SharedMedia_ViewInChat: String { return self._s[2870]! } - public var Map_LiveLocationFor8Hours: String { return self._s[2871]! } + public var SharedMedia_ViewInChat: String { return self._s[2872]! } + public var Map_LiveLocationFor8Hours: String { return self._s[2873]! } public func Map_AccurateTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2873]!, self._r[2873]!, [_0]) + return formatWithArgumentRanges(self._s[2875]!, self._r[2875]!, [_0]) } - public var Appearance_ReduceMotion: String { return self._s[2874]! } - public var Map_OpenInHereMaps: String { return self._s[2875]! } - public var Channel_Setup_TypePublicHelp: String { return self._s[2876]! } - public var Passport_Identity_EditInternalPassport: String { return self._s[2877]! } - public var PhotoEditor_Skip: String { return self._s[2878]! } - public func Notification_GameScoreSimple(_ value: Int32) -> String { + public var Appearance_ReduceMotion: String { return self._s[2876]! } + public var Map_OpenInHereMaps: String { return self._s[2877]! } + public var Channel_Setup_TypePublicHelp: String { return self._s[2878]! } + public var Passport_Identity_EditInternalPassport: String { return self._s[2879]! } + public var PhotoEditor_Skip: String { return self._s[2880]! } + public func StickerPack_AddMaskCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedPolls(_ value: Int32) -> String { + public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, "\(value)") } - public func InviteText_ContactsCountText(_ value: Int32) -> String { + public func ForwardedLocations(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ChatList_DeleteConfirmation(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortWeeks(_ value: Int32) -> String { + public func MessageTimer_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedVideoMessages(_ value: Int32) -> String { + public func Media_SharePhoto(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Weeks(_ value: Int32) -> String { + public func Map_ETAHours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteExpires_Days(_ value: Int32) -> String { + public func Notifications_Exceptions(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_Photo(_ value: Int32) -> String { + public func StickerPack_StickerCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Conversation_StatusSubscribers(_ value: Int32) -> String { + public func SharedMedia_Photo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortHours(_ value: Int32) -> String { + public func MessageTimer_ShortWeeks(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + public func MessageTimer_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_Video(_ value: Int32) -> String { + public func ForwardedFiles(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessagePoll_VotedCount(_ value: Int32) -> String { + public func MuteExpires_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedContacts(_ value: Int32) -> String { + public func AttachmentMenu_SendVideo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + public func SharedMedia_File(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteExpires_Minutes(_ value: Int32) -> String { + public func MessageTimer_Months(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteFor_Hours(_ value: Int32) -> String { + public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedVideos(_ value: Int32) -> String { + public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_File(_ value: Int32) -> String { + public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { + public func Call_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_AddStickerCount(_ value: Int32) -> String { + public func AttachmentMenu_SendItem(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, "\(value)") } - public func GroupInfo_ParticipantCount(_ value: Int32) -> String { + public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Map_ETAMinutes(_ value: Int32) -> String { + public func ForwardedGifs(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Conversation_StatusMembers(_ value: Int32) -> String { + public func MuteFor_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortSeconds(_ value: Int32) -> String { + public func Watch_UserInfo_Mute(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedLocations(_ value: Int32) -> String { + public func LastSeen_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, "\(value)") } - public func AttachmentMenu_SendItem(_ value: Int32) -> String { + public func StickerPack_AddStickerCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_AddMaskCount(_ value: Int32) -> String { + public func ForwardedMessages(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { + public func Contacts_ImportersCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, "\(value)") } - public func LastSeen_HoursAgo(_ value: Int32) -> String { + public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Watch_UserInfo_Mute(_ value: Int32) -> String { + public func Call_ShortSeconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Media_SharePhoto(_ value: Int32) -> String { + public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Media_ShareItem(_ value: Int32) -> String { + public func ForwardedAuthorsOthers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Call_Seconds(_ value: Int32) -> String { + public func Passport_Scans(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Map_ETAHours(_ value: Int32) -> String { + public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, "\(value)") } - public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { + public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Call_ShortSeconds(_ value: Int32) -> String { + public func Conversation_StatusSubscribers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Passport_Scans(_ value: Int32) -> String { + public func ForwardedVideoMessages(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + public func UserCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Days(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, "\(value)") } - public func UserCount(_ value: Int32) -> String { + public func MessageTimer_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { + public func Conversation_StatusOnline(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { + public func LastSeen_HoursAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, "\(value)") } - public func QuickSend_Photos(_ value: Int32) -> String { + public func MuteExpires_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Contacts_ImportersCount(_ value: Int32) -> String { + public func ChatList_DeleteConfirmation(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteExpires_Hours(_ value: Int32) -> String { + public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, "\(value)") } - public func AttachmentMenu_SendVideo(_ value: Int32) -> String { + public func MuteExpires_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, "\(value)") } - public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { + public func MessageTimer_ShortSeconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Conversation_StatusOnline(_ value: Int32) -> String { + public func QuickSend_Photos(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_Generic(_ value: Int32) -> String { + public func Media_ShareVideo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, "\(value)") } - public func LastSeen_MinutesAgo(_ value: Int32) -> String { + public func ForwardedVideos(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { + public func ForwardedStickers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, "\(value)") } - public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { + public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Months(_ value: Int32) -> String { + public func SharedMedia_Generic(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Call_ShortMinutes(_ value: Int32) -> String { + public func ForwardedAudios(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedAuthorsOthers(_ value: Int32) -> String { + public func InviteText_ContactsCountText(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { + public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedStickers(_ value: Int32) -> String { + public func MessageTimer_ShortMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortMinutes(_ value: Int32) -> String { + public func Notification_GameScoreSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedAudios(_ value: Int32) -> String { + public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Hours(_ value: Int32) -> String { + public func MessageTimer_Seconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_StickerCount(_ value: Int32) -> String { + public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedMessages(_ value: Int32) -> String { + public func Notification_GameScoreExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Years(_ value: Int32) -> String { + public func MessagePoll_VotedCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notification_GameScoreExtended(_ value: Int32) -> String { + public func GroupInfo_ParticipantCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Seconds(_ value: Int32) -> String { + public func Invitation_Members(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { + public func Conversation_StatusMembers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Minutes(_ value: Int32) -> String { + public func MessageTimer_ShortDays(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_Link(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedFiles(_ value: Int32) -> String { + public func MuteFor_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { + public func MessageTimer_Weeks(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, "\(value)") } - public func AttachmentMenu_SendGif(_ value: Int32) -> String { + public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Invitation_Members(_ value: Int32) -> String { + public func ForwardedContacts(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortDays(_ value: Int32) -> String { + public func SharedMedia_Link(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notifications_Exceptions(_ value: Int32) -> String { + public func AttachmentMenu_SendGif(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { + public func Media_ShareItem(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Media_ShareVideo(_ value: Int32) -> String { + public func Call_Seconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + public func ForwardedPolls(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, "\(value)") } - public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { + public func MessageTimer_Years(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteFor_Days(_ value: Int32) -> String { + public func ForwardedPhotos(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, "\(value)") } - public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + public func MessageTimer_ShortHours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedPhotos(_ value: Int32) -> String { + public func Map_ETAMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { + public func Call_ShortMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { + public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Call_Minutes(_ value: Int32) -> String { + public func SharedMedia_Video(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedGifs(_ value: Int32) -> String { + public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, "\(value)") } diff --git a/TelegramUI/ProxyServerSettingsController.swift b/TelegramUI/ProxyServerSettingsController.swift index f7ee4c820d..6cdfb288c2 100644 --- a/TelegramUI/ProxyServerSettingsController.swift +++ b/TelegramUI/ProxyServerSettingsController.swift @@ -5,6 +5,20 @@ import Postbox import TelegramCore import MtProtoKitDynamic +private func shareLink(for server: ProxyServerSettings) -> String { + var link: String + switch server.connection { + case let .mtp(secret): + let secret = hexString(secret) + link = "https://t.me/proxy?server=\(server.host)&port=\(server.port)" + link += "&secret=\(secret.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryValueAllowed) ?? "")" + case let .socks5(username, password): + link = "https://t.me/socks?server=\(server.host)&port=\(server.port)" + link += "&user=\(username?.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryValueAllowed) ?? "")&pass=\(password?.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryValueAllowed) ?? "")" + } + return link +} + private final class proxyServerSettingsControllerArguments { let updateState: ((ProxyServerSettingsControllerState) -> ProxyServerSettingsControllerState) -> Void let share: () -> Void @@ -232,6 +246,27 @@ private func proxyServerSettingsControllerEntries(presentationData: (theme: Pres return entries } +private func proxyServerSettings(with state: ProxyServerSettingsControllerState) -> ProxyServerSettings? { + if state.isComplete, let port = Int32(state.port) { + switch state.mode { + case .socks5: + return ProxyServerSettings(host: state.host, port: port, connection: .socks5(username: state.username.isEmpty ? nil : state.username, password: state.password.isEmpty ? nil : state.password)) + case .mtp: + let data = dataWithHexString(state.secret) + var secretIsValid = false + if data.count == 16 { + secretIsValid = true + } else if data.count == 17 && MTSocksProxySettings.secretSupportsExtendedPadding(data) { + secretIsValid = true + } + if secretIsValid { + return ProxyServerSettings(host: state.host, port: port, connection: .mtp(secret: data)) + } + } + } + return nil +} + func proxyServerSettingsController(theme: PresentationTheme, strings: PresentationStrings, updatedPresentationData: Signal<(theme: PresentationTheme, strings: PresentationStrings), NoError>, postbox: Postbox, network: Network, currentSettings: ProxyServerSettings?) -> ViewController { var currentMode: ProxyServerSettingsControllerMode = .socks5 var currentUsername: String? @@ -301,25 +336,7 @@ func proxyServerSettingsController(theme: PresentationTheme, strings: Presentati dismissImpl?() }) let rightNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Done), style: .bold, enabled: state.isComplete, action: { - var proxyServerSettings: ProxyServerSettings? - if state.isComplete, let port = Int32(state.port) { - switch state.mode { - case .socks5: - proxyServerSettings = ProxyServerSettings(host: state.host, port: port, connection: .socks5(username: state.username.isEmpty ? nil : state.username, password: state.password.isEmpty ? nil : state.password)) - case .mtp: - let data = dataWithHexString(state.secret) - var secretIsValid = false - if data.count == 16 { - secretIsValid = true - } else if data.count == 17 && MTSocksProxySettings.secretSupportsExtendedPadding(data) { - secretIsValid = true - } - if secretIsValid { - proxyServerSettings = ProxyServerSettings(host: state.host, port: port, connection: .mtp(secret: data)) - } - } - } - if let proxyServerSettings = proxyServerSettings { + if let proxyServerSettings = proxyServerSettings(with: state) { let _ = (updateProxySettingsInteractively(postbox: postbox, network: network, { settings in var settings = settings if let currentSettings = currentSettings { @@ -356,33 +373,14 @@ func proxyServerSettingsController(theme: PresentationTheme, strings: Presentati let _ = controller?.dismiss() } - shareImpl = { [weak controller] in - guard let strongController = controller else { + shareImpl = { + let state = stateValue.with { $0 } + guard let server = proxyServerSettings(with: state) else { return } - let state = stateValue.with { $0 } - if state.isComplete { - var result: String - switch state.mode { - case .mtp: - result = "https://t.me/proxy?server=\(state.host)&port=\(state.port)" - result += "&secret=\((state.secret as NSString).addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryValueAllowed) ?? "")" - case .socks5: - result = "https://t.me/socks?server=\(state.host)&port=\(state.port)" - if !state.username.isEmpty { - result += "&user=\((state.username as NSString).addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryValueAllowed) ?? "")&pass=\((state.password as NSString).addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryValueAllowed) ?? "")" - } - } - - let activityController = UIActivityViewController(activityItems: [result], applicationActivities: nil) - - if let window = strongController.view.window, let rootViewController = window.rootViewController { - activityController.popoverPresentationController?.sourceView = window - activityController.popoverPresentationController?.sourceRect = CGRect(origin: CGPoint(x: window.bounds.width / 2.0, y: window.bounds.size.height - 1.0), size: CGSize(width: 1.0, height: 1.0)) - rootViewController.present(activityController, animated: true, completion: nil) - } - } + let controller = ShareProxyServerActionSheetController(theme: theme, strings: strings, updatedPresentationData: updatedPresentationData, link: shareLink(for: server)) + presentImpl?(controller, nil) } return controller diff --git a/TelegramUI/QRCode.swift b/TelegramUI/QRCode.swift new file mode 100644 index 0000000000..c657dd3cd6 --- /dev/null +++ b/TelegramUI/QRCode.swift @@ -0,0 +1,86 @@ +import Foundation +import CoreImage +import SwiftSignalKit +import Display + +func qrCode(string: String, color: UIColor, backgroundColor: UIColor? = nil) -> Signal<(TransformImageArguments) -> DrawingContext?, NoError> { + return Signal { subscriber in + if let data = string.data(using: .isoLatin1, allowLossyConversion: false), let filter = CIFilter(name: "CIQRCodeGenerator") { + filter.setValue(data, forKey: "inputMessage") + filter.setValue("M", forKey: "inputCorrectionLevel") + + if let output = filter.outputImage { + subscriber.putNext(output) + } + } + subscriber.putCompletion() + return EmptyDisposable + } + |> map { inputImage in + return { arguments in + let context = DrawingContext(size: arguments.drawingSize, clear: true) + + let drawingRect = arguments.drawingRect + let fittedSize = arguments.imageSize.aspectFilled(arguments.boundingSize).fitted(arguments.imageSize) + let fittedRect = CGRect(origin: CGPoint(x: drawingRect.origin.x + (drawingRect.size.width - fittedSize.width) / 2.0, y: drawingRect.origin.y + (drawingRect.size.height - fittedSize.height) / 2.0), size: fittedSize) + + let scale = arguments.drawingRect.size.width / inputImage.extent.width * context.scale + let transformed = inputImage.transformed(by: CGAffineTransform.init(scaleX: scale, y: scale)) + + let invertFilter = CIFilter(name: "CIColorInvert") + invertFilter?.setValue(transformed, forKey: kCIInputImageKey) + let alphaFilter = CIFilter(name: "CIMaskToAlpha") + alphaFilter?.setValue(invertFilter?.outputImage, forKey: kCIInputImageKey) + + var image: CGImage? + let ciContext = CIContext(options: nil) + if let finalImage = alphaFilter?.outputImage, let cgImage = ciContext.createCGImage(finalImage, from: finalImage.extent) { + image = cgImage + } + + context.withContext { c in + if let backgroundColor = backgroundColor { + c.setFillColor(backgroundColor.cgColor) + c.fill(drawingRect) + } + + c.setBlendMode(.normal) + if let image = image { + c.saveGState() + c.translateBy(x: fittedRect.midX, y: fittedRect.midY) + c.scaleBy(x: 1.0, y: -1.0) + c.translateBy(x: -fittedRect.midX, y: -fittedRect.midY) + + c.clip(to: fittedRect, mask: image) + c.setFillColor(color.cgColor) + c.fill(fittedRect) + c.restoreGState() + } + c.setBlendMode(.clear) + c.setFillColor(UIColor.clear.cgColor) + + let clipOrigin = 93.0 * fittedRect.width / 267.0 + let clipSide = 81.0 * fittedRect.width / 267.0 + c.fill(CGRect(x: clipOrigin, y: clipOrigin, width: clipSide, height: clipSide)) + c.setBlendMode(.normal) + + let iconScale = fittedRect.width / 308.0 + let iconSize = CGSize(width: 65.0 * iconScale, height: 79.0 * iconScale) + let point = CGPoint(x: fittedRect.midX - iconSize.width / 2.0, y: fittedRect.midY - iconSize.height / 2.0) + c.translateBy(x: point.x, y: point.y) + c.scaleBy(x: iconScale, y: iconScale) + c.setFillColor(color.cgColor) + let _ = try? drawSvgPath(c, path: "M0.0,40 C0,20.3664202 20.1230605,0.0 32.5,0.0 C44.8769395,0.0 65,20.3664202 65,40 C65,47.217934 65,55.5505326 65,64.9977957 L32.5,79 L0.0,64.9977957 C0.0,55.0825772 0.0,46.7499786 0.0,40 Z") + + c.setBlendMode(.clear) + c.setFillColor(UIColor.clear.cgColor) + let _ = try? drawSvgPath(c, path: "M7.03608247,43.556701 L18.9836689,32.8350515 L32.5,39.871134 L45.8888139,32.8350515 L57.9639175,43.556701 L57.9639175,60.0 L32.5,71.0 L7.03608247,60.0 Z") + + c.setBlendMode(.normal) + c.setFillColor(color.cgColor) + let _ = try? drawSvgPath(c, path: "M24.1237113,50.5927835 L40.8762887,50.5927835 L40.8762887,60.9793814 L32.5,64.0928525 L24.1237113,60.9793814 Z") + } + return context + } + } +} diff --git a/TelegramUI/RadialCheckContentNode.swift b/TelegramUI/RadialCheckContentNode.swift index 289569b194..6911695334 100644 --- a/TelegramUI/RadialCheckContentNode.swift +++ b/TelegramUI/RadialCheckContentNode.swift @@ -67,10 +67,6 @@ final class RadialCheckContentNode: RadialStatusContentNode { animation.completionBlock = { [weak self] _, _ in if let strongSelf = self { strongSelf.animationCompletionTimer?.invalidate() - /*let animationCompletionTimer = SwiftSignalKit.Timer(timeout: 0.15, repeat: false, completion: { - }, queue: Queue.mainQueue()) - strongSelf.animationCompletionTimer = animationCompletionTimer - animationCompletionTimer.start()*/ if let strongSelf = self { strongSelf.animationCompletionTimer = nil if let enqueuedReadyForTransition = strongSelf.enqueuedReadyForTransition { @@ -158,20 +154,18 @@ final class RadialCheckContentNode: RadialStatusContentNode { } } - override func layout() { - super.layout() - } + private let duration: Double = 0.2 - override func animateOut(completion: @escaping () -> Void) { - self.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.15, removeOnCompletion: false, completion: { _ in + override func animateOut(to: RadialStatusNodeState, completion: @escaping () -> Void) { + self.layer.animateAlpha(from: 1.0, to: 0.0, duration: duration, removeOnCompletion: false, completion: { _ in completion() }) - self.layer.animateScale(from: 1.0, to: 0.6, duration: 0.15, removeOnCompletion: false) + self.layer.animateScale(from: 1.0, to: 0.6, duration: duration, removeOnCompletion: false) } - override func animateIn() { - self.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.15) - self.layer.animateScale(from: 0.7, to: 1.0, duration: 0.15) + override func animateIn(from: RadialStatusNodeState) { + self.layer.animateAlpha(from: 0.0, to: 1.0, duration: duration) + self.layer.animateScale(from: 0.7, to: 1.0, duration: duration) self.animateProgress() } } diff --git a/TelegramUI/RadialCloudProgressContentNode.swift b/TelegramUI/RadialCloudProgressContentNode.swift index 1b3a251047..cef8d36e53 100644 --- a/TelegramUI/RadialCloudProgressContentNode.swift +++ b/TelegramUI/RadialCloudProgressContentNode.swift @@ -287,14 +287,14 @@ final class RadialCloudProgressContentNode: RadialStatusContentNode { self.cancelNode.frame = bounds } - override func animateOut(completion: @escaping () -> Void) { + override func animateOut(to: RadialStatusNodeState, completion: @escaping () -> Void) { self.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.15, removeOnCompletion: false, completion: { _ in completion() }) self.cancelNode.layer.animateScale(from: 1.0, to: 0.3, duration: 0.15, removeOnCompletion: false) } - override func animateIn() { + override func animateIn(from: RadialStatusNodeState) { self.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.15) self.cancelNode.layer.animateScale(from: 0.3, to: 1.0, duration: 0.15) } diff --git a/TelegramUI/RadialDownloadContentNode.swift b/TelegramUI/RadialDownloadContentNode.swift new file mode 100644 index 0000000000..4a849caad4 --- /dev/null +++ b/TelegramUI/RadialDownloadContentNode.swift @@ -0,0 +1,197 @@ +import Foundation +import Display +import AsyncDisplayKit +import LegacyComponents +import SwiftSignalKit + +final class RadialDownloadContentNode: RadialStatusContentNode { + var color: UIColor { + didSet { + self.leftLine.fillColor = UIColor.clear.cgColor + self.leftLine.strokeColor = self.color.cgColor + self.rightLine.fillColor = UIColor.clear.cgColor + self.rightLine.strokeColor = self.color.cgColor + self.arrowBody.fillColor = UIColor.clear.cgColor + self.arrowBody.strokeColor = self.color.cgColor + self.setNeedsDisplay() + } + } + + private var effectiveProgress: CGFloat = 1.0 { + didSet { + self.setNeedsDisplay() + } + } + + private var animationCompletionTimer: SwiftSignalKit.Timer? + + private var isAnimatingProgress: Bool { + return self.pop_animation(forKey: "progress") != nil || self.animationCompletionTimer != nil + } + + private var enqueuedReadyForTransition: (() -> Void)? + + private let leftLine = CAShapeLayer() + private let rightLine = CAShapeLayer() + private let arrowBody = CAShapeLayer() + + init(color: UIColor) { + self.color = color + + super.init() + + self.leftLine.fillColor = UIColor.clear.cgColor + self.leftLine.strokeColor = self.color.cgColor + self.leftLine.lineCap = kCALineCapRound + self.leftLine.lineJoin = kCALineCapRound + self.rightLine.fillColor = UIColor.clear.cgColor + self.rightLine.strokeColor = self.color.cgColor + self.rightLine.lineCap = kCALineCapRound + self.rightLine.lineJoin = kCALineCapRound + self.arrowBody.fillColor = UIColor.clear.cgColor + self.arrowBody.strokeColor = self.color.cgColor + self.arrowBody.lineCap = kCALineCapRound + self.arrowBody.lineJoin = kCALineCapRound + + self.isLayerBacked = true + self.isOpaque = false + + self.layer.addSublayer(self.arrowBody) + self.layer.addSublayer(self.leftLine) + self.layer.addSublayer(self.rightLine) + } + + override func enqueueReadyForTransition(_ f: @escaping () -> Void) { + if self.isAnimatingProgress { + self.enqueuedReadyForTransition = f + } else { + f() + } + } + + private func svgPath(_ path: StaticString, scale: CGFloat = 1.0, offset: CGPoint = CGPoint()) throws -> UIBezierPath { + var index: UnsafePointer = path.utf8Start + let end = path.utf8Start.advanced(by: path.utf8CodeUnitCount) + let path = UIBezierPath() + while index < end { + let c = index.pointee + index = index.successor() + + if c == 77 { // M + let x = try readCGFloat(&index, end: end, separator: 44) * scale + offset.x + let y = try readCGFloat(&index, end: end, separator: 32) * scale + offset.y + + path.move(to: CGPoint(x: x, y: y)) + } else if c == 76 { // L + let x = try readCGFloat(&index, end: end, separator: 44) * scale + offset.x + let y = try readCGFloat(&index, end: end, separator: 32) * scale + offset.y + + path.addLine(to: CGPoint(x: x, y: y)) + } else if c == 67 { // C + let x1 = try readCGFloat(&index, end: end, separator: 44) * scale + offset.x + let y1 = try readCGFloat(&index, end: end, separator: 32) * scale + offset.y + let x2 = try readCGFloat(&index, end: end, separator: 44) * scale + offset.x + let y2 = try readCGFloat(&index, end: end, separator: 32) * scale + offset.y + let x = try readCGFloat(&index, end: end, separator: 44) * scale + offset.x + let y = try readCGFloat(&index, end: end, separator: 32) * scale + offset.y + path.addCurve(to: CGPoint(x: x, y: y), controlPoint1: CGPoint(x: x1, y: y1), controlPoint2: CGPoint(x: x2, y: y2)) + } else if c == 32 { // space + continue + } + } + return path + } + + override func layout() { + super.layout() + + let bounds = self.bounds + let diameter = min(bounds.size.width, bounds.size.height) + + var lineWidth: CGFloat = 2.0 + if diameter < 24.0 { + lineWidth = 1.3 + } + + self.leftLine.lineWidth = lineWidth + self.rightLine.lineWidth = lineWidth + self.arrowBody.lineWidth = lineWidth + + let factor = diameter / 50.0 + + let arrowHeadSize: CGFloat = 15.0 * factor + let arrowLength: CGFloat = 18.0 * factor + let arrowHeadOffset: CGFloat = 1.0 * factor + + var bodyPath = UIBezierPath() + if let path = try? svgPath("M1.20125335,62.2095675 C1.78718228,62.9863141 2.3877868,63.7395876 3.00158591,64.4690754 C22.1087455,87.1775489 54.0019347,86.8368674 54.0066002,54.0178571 L54.0066002,0.625 ", scale: 0.333333 * factor, offset: CGPoint(x: 7.0 * factor, y: (17.0 - UIScreenPixel) * factor)) { + bodyPath = path + } + + self.arrowBody.path = bodyPath.cgPath + self.arrowBody.strokeStart = 0.62 + + let leftPath = UIBezierPath() + leftPath.move(to: CGPoint(x: diameter / 2.0, y: diameter / 2.0 + arrowLength / 2.0 + arrowHeadOffset)) + leftPath.addLine(to: CGPoint(x: diameter / 2.0 - arrowHeadSize / 2.0, y: diameter / 2.0 + arrowLength / 2.0 - arrowHeadSize / 2.0 + arrowHeadOffset)) + self.leftLine.path = leftPath.cgPath + + let rightPath = UIBezierPath() + rightPath.move(to: CGPoint(x: diameter / 2.0, y: diameter / 2.0 + arrowLength / 2.0 + arrowHeadOffset)) + rightPath.addLine(to: CGPoint(x: diameter / 2.0 + arrowHeadSize / 2.0, y: diameter / 2.0 + arrowLength / 2.0 - arrowHeadSize / 2.0 + arrowHeadOffset)) + self.rightLine.path = rightPath.cgPath + } + + private let duration: Double = 0.2 + + override func prepareAnimateOut(completion: @escaping () -> Void) { + self.leftLine.animateStrokeEnd(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false) + self.rightLine.animateStrokeEnd(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false) + + self.leftLine.animateAlpha(from: 1.0, to: 0.0, duration: 0.23, delay: 0.07, removeOnCompletion: false) { finished in + completion() + } + self.rightLine.animateAlpha(from: 1.0, to: 0.0, duration: 0.23, delay: 0.07, removeOnCompletion: false) + } + + override func animateOut(to: RadialStatusNodeState, completion: @escaping () -> Void) { + self.arrowBody.animateStrokeStart(from: 0.62, to: 0.0, duration: 0.5, removeOnCompletion: false, completion: { _ in + completion() + }) + self.arrowBody.animateStrokeEnd(from: 1.0, to: 0.0, duration: 0.5, removeOnCompletion: false, completion: nil) + self.arrowBody.animateAlpha(from: 1.0, to: 0.0, duration: 0.1, delay: 0.4, removeOnCompletion: false) + } + + override func animateIn(from: RadialStatusNodeState) { + if case .progress = from { + var transform = CATransform3DMakeScale(-1.0, 1.0, 1.0) + transform = CATransform3DTranslate(transform, -50.0, 0.0, 0.0) + self.arrowBody.transform = transform + self.arrowBody.animateStrokeStart(from: 0.0, to: 0.62, duration: 0.5, removeOnCompletion: false, completion: { [weak self] _ in + UIView.performWithoutAnimation { + self?.arrowBody.transform = CATransform3DIdentity + } + }) + self.arrowBody.animateStrokeEnd(from: 0.0, to: 1.0, duration: 0.5, removeOnCompletion: false, completion: nil) + + self.leftLine.animateStrokeEnd(from: 0.0, to: 1.0, duration: 0.2, delay: 0.3, removeOnCompletion: false) + self.rightLine.animateStrokeEnd(from: 0.0, to: 1.0, duration: 0.2, delay: 0.3, removeOnCompletion: false) + + self.leftLine.animateAlpha(from: 0.0, to: 1.0, duration: 0.2, delay: 0.1, removeOnCompletion: false) + self.rightLine.animateAlpha(from: 0.0, to: 1.0, duration: 0.2, delay: 0.1, removeOnCompletion: false) + } else { + self.layer.animateAlpha(from: 0.0, to: 1.0, duration: duration) + self.layer.animateScale(from: 0.7, to: 1.0, duration: duration) + } + } +} + +private extension CAShapeLayer { + func animateStrokeStart(from: CGFloat, to: CGFloat, duration: Double, delay: Double = 0.0, timingFunction: String = kCAMediaTimingFunctionEaseInEaseOut, removeOnCompletion: Bool = true, completion: ((Bool) -> ())? = nil) { + self.animate(from: NSNumber(value: Float(from)), to: NSNumber(value: Float(to)), keyPath: "strokeStart", timingFunction: timingFunction, duration: duration, delay: delay, removeOnCompletion: removeOnCompletion, completion: completion) + } + + func animateStrokeEnd(from: CGFloat, to: CGFloat, duration: Double, delay: Double = 0.0, timingFunction: String = kCAMediaTimingFunctionEaseInEaseOut, removeOnCompletion: Bool = true, completion: ((Bool) -> ())? = nil) { + self.animate(from: NSNumber(value: Float(from)), to: NSNumber(value: Float(to)), keyPath: "strokeEnd", timingFunction: timingFunction, duration: duration, delay: delay, removeOnCompletion: removeOnCompletion, completion: completion) + } +} diff --git a/TelegramUI/RadialProgressContentNode.swift b/TelegramUI/RadialProgressContentNode.swift index f957a30c50..b31f494384 100644 --- a/TelegramUI/RadialProgressContentNode.swift +++ b/TelegramUI/RadialProgressContentNode.swift @@ -153,12 +153,13 @@ private final class RadialProgressContentSpinnerNode: ASDisplayNode { let basicAnimation = CABasicAnimation(keyPath: "transform.rotation.z") basicAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) - basicAnimation.duration = 2.0 - basicAnimation.fromValue = NSNumber(value: Float(0.0)) - basicAnimation.toValue = NSNumber(value: Float.pi * 2.0) + basicAnimation.duration = 1.5 + let fromValue = Float.pi + 0.33 + basicAnimation.fromValue = NSNumber(value: fromValue) + basicAnimation.toValue = NSNumber(value: fromValue + Float.pi * 2.0) basicAnimation.repeatCount = Float.infinity basicAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) - basicAnimation.beginTime = 1.0 + basicAnimation.beginTime = 0.0 //1.0 self.layer.add(basicAnimation, forKey: "progressRotation") } @@ -238,11 +239,14 @@ final class RadialProgressContentNode: RadialStatusContentNode { var progress: CGFloat? = 0.0 { didSet { - self.spinnerNode.progress = self.progress + if self.ready { + self.spinnerNode.progress = self.progress + } } } let displayCancel: Bool + var ready: Bool = false private var enqueuedReadyForTransition: (() -> Void)? @@ -287,15 +291,27 @@ final class RadialProgressContentNode: RadialStatusContentNode { self.cancelNode.frame = bounds } - override func animateOut(completion: @escaping () -> Void) { - self.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.15, removeOnCompletion: false, completion: { _ in + private let duration: Double = 0.2 + + override func animateOut(to: RadialStatusNodeState, completion: @escaping () -> Void) { + self.layer.animateAlpha(from: 1.0, to: 0.0, duration: duration, removeOnCompletion: false, completion: { _ in completion() }) - self.cancelNode.layer.animateScale(from: 1.0, to: 0.3, duration: 0.15, removeOnCompletion: false) + self.cancelNode.layer.animateScale(from: 1.0, to: 0.2, duration: duration, removeOnCompletion: false) + self.cancelNode.layer.animateRotation(from: 0.0, to: CGFloat.pi / 3.0, duration: duration) } - override func animateIn() { - self.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.15) - self.cancelNode.layer.animateScale(from: 0.3, to: 1.0, duration: 0.15) + override func prepareAnimateIn() { + self.ready = true + self.spinnerNode.progress = self.progress + } + + override func animateIn(from: RadialStatusNodeState) { + if case .download = from { + } else { + self.layer.animateAlpha(from: 0.0, to: 1.0, duration: duration) + } + self.cancelNode.layer.animateScale(from: 0.2, to: 1.0, duration: duration) + self.cancelNode.layer.animateRotation(from: -CGFloat.pi / 3.0, to: 0.0, duration: duration) } } diff --git a/TelegramUI/RadialStatusContentNode.swift b/TelegramUI/RadialStatusContentNode.swift index ec8b82b3f4..e2ac62ffc1 100644 --- a/TelegramUI/RadialStatusContentNode.swift +++ b/TelegramUI/RadialStatusContentNode.swift @@ -7,15 +7,24 @@ class RadialStatusContentNode: ASDisplayNode { f() } - func animateOut(completion: @escaping () -> Void) { - self.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.15, removeOnCompletion: false, completion: { _ in - completion() - }) - self.layer.animateScale(from: 1.0, to: 0.3, duration: 0.15, removeOnCompletion: false) + private let duration: Double = 0.2 + + func prepareAnimateOut(completion: @escaping () -> Void) { + completion() } - func animateIn() { - self.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.15) - self.layer.animateScale(from: 0.3, to: 1.0, duration: 0.15) + func animateOut(to: RadialStatusNodeState, completion: @escaping () -> Void) { + self.layer.animateAlpha(from: 1.0, to: 0.0, duration: duration, removeOnCompletion: false, completion: { _ in + completion() + }) + self.layer.animateScale(from: 1.0, to: 0.2, duration: duration, removeOnCompletion: false) + } + + func prepareAnimateIn() { + } + + func animateIn(from: RadialStatusNodeState) { + self.layer.animateAlpha(from: 0.0, to: 1.0, duration: duration) + self.layer.animateScale(from: 0.2, to: 1.0, duration: duration) } } diff --git a/TelegramUI/RadialStatusIconContentNode.swift b/TelegramUI/RadialStatusIconContentNode.swift index a98ac45411..04ec731c67 100644 --- a/TelegramUI/RadialStatusIconContentNode.swift +++ b/TelegramUI/RadialStatusIconContentNode.swift @@ -6,7 +6,6 @@ enum RadialStatusIcon { case custom(UIImage) case play(UIColor) case pause(UIColor) - case download(UIColor) } private final class RadialStatusIconContentNodeParameters: NSObject { @@ -47,30 +46,6 @@ final class RadialStatusIconContentNode: RadialStatusContentNode { if let parameters = parameters as? RadialStatusIconContentNodeParameters { let diameter = min(bounds.size.width, bounds.size.height) switch parameters.icon { - case let .download(color): - context.setStrokeColor(color.cgColor) - var lineWidth: CGFloat = 2.0 - if diameter < 24.0 { - lineWidth = 1.3 - } - context.setLineWidth(lineWidth) - context.setLineCap(.round) - context.setLineJoin(.round) - - let factor = diameter / 50.0 - - let arrowHeadSize: CGFloat = 15.0 * factor - let arrowLength: CGFloat = 18.0 * factor - let arrowHeadOffset: CGFloat = 1.0 * factor - - context.move(to: CGPoint(x: diameter / 2.0, y: diameter / 2.0 - arrowLength / 2.0 + arrowHeadOffset)) - context.addLine(to: CGPoint(x: diameter / 2.0, y: diameter / 2.0 + arrowLength / 2.0 - 1.0 + arrowHeadOffset)) - context.strokePath() - - context.move(to: CGPoint(x: diameter / 2.0 - arrowHeadSize / 2.0, y: diameter / 2.0 + arrowLength / 2.0 - arrowHeadSize / 2.0 + arrowHeadOffset)) - context.addLine(to: CGPoint(x: diameter / 2.0, y: diameter / 2.0 + arrowLength / 2.0 + arrowHeadOffset)) - context.addLine(to: CGPoint(x: diameter / 2.0 + arrowHeadSize / 2.0, y: diameter / 2.0 + arrowLength / 2.0 - arrowHeadSize / 2.0 + arrowHeadOffset)) - context.strokePath() case let .play(color): context.setFillColor(color.cgColor) diff --git a/TelegramUI/RadialStatusNode.swift b/TelegramUI/RadialStatusNode.swift index a20c30ec67..5a3eaf67a7 100644 --- a/TelegramUI/RadialStatusNode.swift +++ b/TelegramUI/RadialStatusNode.swift @@ -85,7 +85,7 @@ public enum RadialStatusNodeState: Equatable { case .none: return nil case let .download(color): - return RadialStatusIconContentNode(icon: .download(color)) + return RadialDownloadContentNode(color: color) case let .play(color): return RadialStatusIconContentNode(icon: .play(color)) case let .pause(color): @@ -145,11 +145,12 @@ public final class RadialStatusNode: ASControlNode { public func transitionToState(_ state: RadialStatusNodeState, animated: Bool = true, completion: @escaping () -> Void) { if self.state != state { + let fromState = self.state self.state = state let contentNode = state.contentNode(current: self.contentNode) if contentNode !== self.contentNode { - self.transitionToContentNode(contentNode, backgroundColor: state.backgroundColor(color: self.backgroundNodeColor), animated: animated, completion: completion) + self.transitionToContentNode(contentNode, state: state, fromState: fromState, backgroundColor: state.backgroundColor(color: self.backgroundNodeColor), animated: animated, completion: completion) } else { self.transitionToBackgroundColor(state.backgroundColor(color: self.backgroundNodeColor), animated: animated, completion: completion) } @@ -158,31 +159,34 @@ public final class RadialStatusNode: ASControlNode { } } - private func transitionToContentNode(_ node: RadialStatusContentNode?, backgroundColor: UIColor?, animated: Bool, completion: @escaping () -> Void) { + private func transitionToContentNode(_ node: RadialStatusContentNode?, state: RadialStatusNodeState, fromState: RadialStatusNodeState, backgroundColor: UIColor?, animated: Bool, completion: @escaping () -> Void) { if let contentNode = self.contentNode { self.nextContentNode = node contentNode.enqueueReadyForTransition { [weak contentNode, weak self] in - if let strongSelf = self, let contentNode = contentNode, strongSelf.contentNode === contentNode { + if let strongSelf = self, let previousContentNode = contentNode, strongSelf.contentNode === contentNode { if animated { strongSelf.contentNode = strongSelf.nextContentNode - contentNode.animateOut { [weak contentNode] in + previousContentNode.animateOut(to: state, completion: { [weak contentNode] in if let strongSelf = self, let contentNode = contentNode { if contentNode !== strongSelf.contentNode { contentNode.removeFromSupernode() } } - } - if let contentNode = strongSelf.contentNode { - strongSelf.addSubnode(contentNode) - contentNode.frame = strongSelf.bounds - if strongSelf.isNodeLoaded { - contentNode.layout() - contentNode.animateIn() + }) + previousContentNode.prepareAnimateOut(completion: { + if let contentNode = strongSelf.contentNode { + strongSelf.addSubnode(contentNode) + contentNode.frame = strongSelf.bounds + contentNode.prepareAnimateIn() + if strongSelf.isNodeLoaded { + contentNode.layout() + contentNode.animateIn(from: fromState) + } } - } - strongSelf.transitionToBackgroundColor(backgroundColor, animated: animated, completion: completion) + strongSelf.transitionToBackgroundColor(backgroundColor, animated: animated, completion: completion) + }) } else { - contentNode.removeFromSupernode() + previousContentNode.removeFromSupernode() strongSelf.contentNode = strongSelf.nextContentNode if let contentNode = strongSelf.contentNode { strongSelf.addSubnode(contentNode) @@ -199,6 +203,7 @@ public final class RadialStatusNode: ASControlNode { self.contentNode = node if let contentNode = self.contentNode { contentNode.frame = self.bounds + contentNode.prepareAnimateIn() self.addSubnode(contentNode) } self.transitionToBackgroundColor(backgroundColor, animated: animated, completion: completion) diff --git a/TelegramUI/RadialStatusSecretTimeoutContentNode.swift b/TelegramUI/RadialStatusSecretTimeoutContentNode.swift index fa6d9dae86..50f05c9486 100644 --- a/TelegramUI/RadialStatusSecretTimeoutContentNode.swift +++ b/TelegramUI/RadialStatusSecretTimeoutContentNode.swift @@ -86,13 +86,13 @@ final class RadialStatusSecretTimeoutContentNode: RadialStatusContentNode { super.layout() } - override func animateOut(completion: @escaping () -> Void) { + override func animateOut(to: RadialStatusNodeState, completion: @escaping () -> Void) { self.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.15, removeOnCompletion: false, completion: { _ in completion() }) } - override func animateIn() { + override func animateIn(from: RadialStatusNodeState) { self.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.15) } diff --git a/TelegramUI/Resources/PresentationStrings.mapping b/TelegramUI/Resources/PresentationStrings.mapping index e41f73e65e..0f7a230f6f 100644 Binary files a/TelegramUI/Resources/PresentationStrings.mapping and b/TelegramUI/Resources/PresentationStrings.mapping differ diff --git a/TelegramUI/ShareProxyServerActionSheetController.swift b/TelegramUI/ShareProxyServerActionSheetController.swift new file mode 100644 index 0000000000..aa08be0c95 --- /dev/null +++ b/TelegramUI/ShareProxyServerActionSheetController.swift @@ -0,0 +1,150 @@ +import Foundation +import Display +import TelegramCore +import Postbox +import AsyncDisplayKit +import UIKit +import SwiftSignalKit + +public final class ShareProxyServerActionSheetController: ActionSheetController { + private var presentationDisposable: Disposable? + + private let _ready = Promise() + override public var ready: Promise { + return self._ready + } + + private var isDismissed: Bool = false + + public init(theme: PresentationTheme, strings: PresentationStrings, updatedPresentationData: Signal<(theme: PresentationTheme, strings: PresentationStrings), NoError>, link: String) { + let sheetTheme = ActionSheetControllerTheme(presentationTheme: theme) + super.init(theme: sheetTheme) + + self._ready.set(.single(true)) + + let presentActivityController: (Any) -> Void = { [weak self] item in + let activityController = UIActivityViewController(activityItems: [item], applicationActivities: nil) + if let window = self?.view.window, let rootViewController = window.rootViewController { + activityController.popoverPresentationController?.sourceView = window + activityController.popoverPresentationController?.sourceRect = CGRect(origin: CGPoint(x: window.bounds.width / 2.0, y: window.bounds.size.height - 1.0), size: CGSize(width: 1.0, height: 1.0)) + rootViewController.present(activityController, animated: true, completion: nil) + } + } + + var items: [ActionSheetItem] = [] + items.append(ProxyServerQRCodeItem(strings: strings, link: link)) + items.append(ActionSheetButtonItem(title: "Share QR Code", action: { [weak self] in + self?.dismissAnimated() + let _ = (qrCode(string: link, color: .black, backgroundColor: .white) + |> map { generator -> UIImage? in + let imageSize = CGSize(width: 512.0, height: 512.0) + let context = generator(TransformImageArguments(corners: ImageCorners(), imageSize: imageSize, boundingSize: imageSize, intrinsicInsets: UIEdgeInsets())) + return context?.generateImage() + } + |> deliverOnMainQueue).start(next: { image in + if let image = image { + presentActivityController(image) + } + }) + })) + items.append(ActionSheetButtonItem(title: "Share Link", action: { [weak self] in + self?.dismissAnimated() + presentActivityController(link) + })) + self.setItemGroups([ + ActionSheetItemGroup(items: items), + ActionSheetItemGroup(items: [ + ActionSheetButtonItem(title: strings.Common_Cancel, action: { [weak self] in + self?.dismissAnimated() + }) + ]) + ]) + + self.presentationDisposable = updatedPresentationData.start(next: { [weak self] theme, strings in + if let strongSelf = self { + strongSelf.theme = ActionSheetControllerTheme(presentationTheme: theme) + } + }) + } + + required public init(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + deinit { + self.presentationDisposable?.dispose() + } +} + +private final class ProxyServerQRCodeItem: ActionSheetItem { + private let strings: PresentationStrings + private let link: String + + init(strings: PresentationStrings, link: String) { + self.strings = strings + self.link = link + } + + func node(theme: ActionSheetControllerTheme) -> ActionSheetItemNode { + return ProxyServerQRCodeItemNode(theme: theme, strings: self.strings, link: self.link) + } + + func updateNode(_ node: ActionSheetItemNode) { + } +} + +private final class ProxyServerQRCodeItemNode: ActionSheetItemNode { + private let theme: ActionSheetControllerTheme + private let strings: PresentationStrings + private let link: String + + private let label: ASTextNode + private let imageNode: TransformImageNode + + init(theme: ActionSheetControllerTheme, strings: PresentationStrings, link: String) { + self.theme = theme + self.strings = strings + self.link = link + + self.label = ASTextNode() + self.label.isUserInteractionEnabled = false + self.label.maximumNumberOfLines = 0 + self.label.displaysAsynchronously = false + self.label.truncationMode = .byTruncatingTail + self.label.isUserInteractionEnabled = false + self.label.attributedText = NSAttributedString(string: "Your friends can add this proxy by scanning this code with phone or in-app camera.", font: ActionSheetTextNode.defaultFont, textColor: self.theme.secondaryTextColor, paragraphAlignment: .center) + + self.imageNode = TransformImageNode() + self.imageNode.setSignal(qrCode(string: link, color: self.theme.primaryTextColor)) + + super.init(theme: theme) + + self.addSubnode(self.label) + self.addSubnode(self.imageNode) + } + + override func calculateSizeThatFits(_ constrainedSize: CGSize) -> CGSize { + let labelSize = self.label.measure(CGSize(width: max(1.0, constrainedSize.width - 64.0), height: constrainedSize.height)) + return CGSize(width: constrainedSize.width, height: 14.0 + labelSize.height + 14.0 + constrainedSize.width - 88.0 + 14.0) + } + + override func layout() { + super.layout() + + let size = self.bounds.size + let inset: CGFloat = 32.0 + let imageInset: CGFloat = 44.0 + let spacing: CGFloat = 18.0 + + let labelSize = self.label.measure(CGSize(width: max(1.0, size.width - inset * 2.0), height: size.height)) + self.label.frame = CGRect(origin: CGPoint(x: floorToScreenPixels((size.width - labelSize.width) / 2.0), y: spacing), size: labelSize) + + let imageFrame = CGRect(x: imageInset, y: self.label.frame.maxY + spacing - 4.0, width: size.width - imageInset * 2.0, height: size.width - imageInset * 2.0) + + let makeLayout = self.imageNode.asyncLayout() + let apply = makeLayout(TransformImageArguments(corners: ImageCorners(), imageSize: imageFrame.size, boundingSize: imageFrame.size, intrinsicInsets: UIEdgeInsets(), emptyColor: nil)) + apply() + + self.imageNode.frame = imageFrame + } +} diff --git a/TelegramUI/ShareSearchContainerNode.swift b/TelegramUI/ShareSearchContainerNode.swift index 58996e0576..f76a2946be 100644 --- a/TelegramUI/ShareSearchContainerNode.swift +++ b/TelegramUI/ShareSearchContainerNode.swift @@ -249,7 +249,8 @@ final class ShareSearchContainerNode: ASDisplayNode, ShareContentContainerNode { var existingPeerIds = Set() - if strings.DialogList_SavedMessages.lowercased().hasPrefix(query.lowercased()) { + let lowercasedQuery = query.lowercased() + if strings.DialogList_SavedMessages.lowercased().hasPrefix(lowercasedQuery) || "saved messages".hasPrefix(lowercasedQuery) { if !existingPeerIds.contains(accountPeer.id) { existingPeerIds.insert(accountPeer.id) entries.append(ShareSearchPeerEntry(index: index, peer: RenderedPeer(peer: accountPeer), theme: theme, strings: strings)) diff --git a/TelegramUI/StickerPackPreviewController.swift b/TelegramUI/StickerPackPreviewController.swift index 64a6317403..1d32d045ff 100644 --- a/TelegramUI/StickerPackPreviewController.swift +++ b/TelegramUI/StickerPackPreviewController.swift @@ -5,6 +5,11 @@ import Postbox import TelegramCore import SwiftSignalKit +enum StickerPackPreviewControllerMode { + case `default` + case settings +} + final class StickerPackPreviewController: ViewController { private var controllerNode: StickerPackPreviewControllerNode { return self.displayNode as! StickerPackPreviewControllerNode @@ -14,6 +19,7 @@ final class StickerPackPreviewController: ViewController { private var dismissed = false private let account: Account + private let mode: StickerPackPreviewControllerMode private weak var parentNavigationController: NavigationController? private let stickerPack: StickerPackReference @@ -45,8 +51,9 @@ final class StickerPackPreviewController: ViewController { } } - init(account: Account, stickerPack: StickerPackReference, parentNavigationController: NavigationController?) { + init(account: Account, stickerPack: StickerPackReference, mode: StickerPackPreviewControllerMode = .default, parentNavigationController: NavigationController?) { self.account = account + self.mode = mode self.parentNavigationController = parentNavigationController self.stickerPack = stickerPack @@ -77,16 +84,20 @@ final class StickerPackPreviewController: ViewController { } override func loadDisplayNode() { - self.displayNode = StickerPackPreviewControllerNode(account: self.account, openShare: { [weak self] in - guard let strongSelf = self else { - return + var openShareImpl: (() -> Void)? + if self.mode == .settings { + openShareImpl = { [weak self] in + guard let strongSelf = self else { + return + } + + if let stickerPackContentsValue = strongSelf.stickerPackContentsValue, case let .result(info, _, _) = stickerPackContentsValue, !info.shortName.isEmpty { + strongSelf.present(ShareController(account: strongSelf.account, subject: .url("https://t.me/addstickers/\(info.shortName)"), externalShare: true), in: .window(.root)) + strongSelf.dismiss() + } } - - if let stickerPackContentsValue = strongSelf.stickerPackContentsValue, case let .result(info, _, _) = stickerPackContentsValue, !info.shortName.isEmpty { - strongSelf.present(ShareController(account: strongSelf.account, subject: .url("https://t.me/addstickers/\(info.shortName)"), externalShare: true), in: .window(.root)) - strongSelf.dismiss() - } - }, openMention: { [weak self] mention in + } + self.displayNode = StickerPackPreviewControllerNode(account: self.account, openShare: openShareImpl, openMention: { [weak self] mention in guard let strongSelf = self else { return } diff --git a/TelegramUI/StickerPackPreviewControllerNode.swift b/TelegramUI/StickerPackPreviewControllerNode.swift index 5c310ba322..3a58a6b8d5 100644 --- a/TelegramUI/StickerPackPreviewControllerNode.swift +++ b/TelegramUI/StickerPackPreviewControllerNode.swift @@ -38,7 +38,7 @@ private struct StickerPackPreviewGridTransaction { final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrollViewDelegate { private let account: Account - private let openShare: () -> Void + private let openShare: (() -> Void)? private var presentationData: PresentationData private var containerLayout: (ContainerViewLayout, CGFloat)? @@ -53,8 +53,9 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol private let contentGridNode: GridNode private let installActionButtonNode: ASButtonNode private let installActionSeparatorNode: ASDisplayNode + private let shareActionButtonNode: ASButtonNode + private let shareActionSeparatorNode: ASDisplayNode private let contentTitleNode: ImmediateTextNode - private let contentShareButtonNode: HighlightableButtonNode private let contentSeparatorNode: ASDisplayNode private var activityIndicator: ActivityIndicator? @@ -77,7 +78,7 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol private var hapticFeedback: HapticFeedback? - init(account: Account, openShare: @escaping () -> Void, openMention: @escaping (String) -> Void) { + init(account: Account, openShare: (() -> Void)?, openMention: @escaping (String) -> Void) { self.account = account self.openShare = openShare self.presentationData = account.telegramApplicationContext.currentPresentationData.with { $0 } @@ -106,13 +107,14 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol self.installActionButtonNode.displaysAsynchronously = false self.installActionButtonNode.titleNode.displaysAsynchronously = false + self.shareActionButtonNode = HighlightTrackingButtonNode() + self.shareActionButtonNode.displaysAsynchronously = false + self.shareActionButtonNode.titleNode.displaysAsynchronously = false + self.contentTitleNode = ImmediateTextNode() self.contentTitleNode.displaysAsynchronously = false self.contentTitleNode.maximumNumberOfLines = 1 - self.contentShareButtonNode = HighlightableButtonNode() - self.contentShareButtonNode.isHidden = true - self.contentSeparatorNode = ASDisplayNode() self.contentSeparatorNode.isLayerBacked = true @@ -120,6 +122,10 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol self.installActionSeparatorNode.isLayerBacked = true self.installActionSeparatorNode.displaysAsynchronously = false + self.shareActionSeparatorNode = ASDisplayNode() + self.shareActionSeparatorNode.isLayerBacked = true + self.shareActionSeparatorNode.displaysAsynchronously = false + super.init() self.interaction = StickerPackPreviewInteraction(sendSticker: { [weak self] item in @@ -143,6 +149,7 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol self.cancelButtonNode.addTarget(self, action: #selector(self.cancelButtonPressed), forControlEvents: .touchUpInside) self.installActionButtonNode.addTarget(self, action: #selector(self.installActionButtonPressed), forControlEvents: .touchUpInside) + self.shareActionButtonNode.addTarget(self, action: #selector(self.sharePressed), forControlEvents: .touchUpInside) self.wrappingScrollNode.addSubnode(self.contentBackgroundNode) @@ -150,8 +157,11 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol self.contentContainerNode.addSubnode(self.contentGridNode) self.contentContainerNode.addSubnode(self.installActionSeparatorNode) self.contentContainerNode.addSubnode(self.installActionButtonNode) + if openShare != nil { + self.contentContainerNode.addSubnode(self.shareActionSeparatorNode) + self.contentContainerNode.addSubnode(self.shareActionButtonNode) + } self.wrappingScrollNode.addSubnode(self.contentTitleNode) - //self.wrappingScrollNode.addSubnode(self.contentShareButtonNode) self.wrappingScrollNode.addSubnode(self.contentSeparatorNode) self.contentGridNode.presentationLayoutUpdated = { [weak self] presentationLayout, transition in @@ -171,8 +181,6 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol openMention(String(mention[mention.index(after: mention.startIndex)...])) } } - - self.contentShareButtonNode.addTarget(self, action: #selector(self.sharePressed), forControlEvents: .touchUpInside) } override func didLoad() { @@ -244,6 +252,18 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol self.presentationData = presentationData let theme = presentationData.theme + let solidBackground = generateImage(CGSize(width: 1.0, height: 1.0), rotatedContext: { size, context in + context.clear(CGRect(origin: CGPoint(), size: size)) + context.setFillColor(theme.actionSheet.opaqueItemBackgroundColor.cgColor) + context.fill(CGRect(origin: CGPoint(), size: CGSize(width: size.width, height: size.height))) + })?.stretchableImage(withLeftCapWidth: 16, topCapHeight: 1) + + let highlightedSolidBackground = generateImage(CGSize(width: 1.0, height: 1.0), rotatedContext: { size, context in + context.clear(CGRect(origin: CGPoint(), size: size)) + context.setFillColor(theme.actionSheet.opaqueItemHighlightedBackgroundColor.cgColor) + context.fill(CGRect(origin: CGPoint(), size: CGSize(width: size.width, height: size.height))) + })?.stretchableImage(withLeftCapWidth: 16, topCapHeight: 1) + let halfRoundedBackground = generateImage(CGSize(width: 32.0, height: 32.0), rotatedContext: { size, context in context.clear(CGRect(origin: CGPoint(), size: size)) context.setFillColor(theme.actionSheet.opaqueItemBackgroundColor.cgColor) @@ -262,16 +282,25 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol let highlightedRoundedBackground = generateStretchableFilledCircleImage(radius: 16.0, color: presentationData.theme.actionSheet.opaqueItemHighlightedBackgroundColor) self.contentBackgroundNode.image = roundedBackground - self.contentShareButtonNode.setImage(generateTintedImage(image: UIImage(bundleImageName: "Share/ShareIcon"), color: presentationData.theme.actionSheet.controlAccentColor), for: []) self.cancelButtonNode.setBackgroundImage(roundedBackground, for: .normal) self.cancelButtonNode.setBackgroundImage(highlightedRoundedBackground, for: .highlighted) - self.installActionButtonNode.setBackgroundImage(halfRoundedBackground, for: .normal) - self.installActionButtonNode.setBackgroundImage(highlightedHalfRoundedBackground, for: .highlighted) + if self.shareActionButtonNode.supernode != nil { + self.installActionButtonNode.setBackgroundImage(solidBackground, for: .normal) + self.installActionButtonNode.setBackgroundImage(highlightedSolidBackground, for: .highlighted) + } else { + self.installActionButtonNode.setBackgroundImage(halfRoundedBackground, for: .normal) + self.installActionButtonNode.setBackgroundImage(highlightedHalfRoundedBackground, for: .highlighted) + } + + self.shareActionButtonNode.setBackgroundImage(halfRoundedBackground, for: .normal) + self.shareActionButtonNode.setBackgroundImage(highlightedHalfRoundedBackground, for: .highlighted) + self.shareActionButtonNode.setTitle(presentationData.strings.Conversation_ContextMenuShare, with: Font.regular(20.0), with: presentationData.theme.actionSheet.controlAccentColor, for: .normal) self.contentSeparatorNode.backgroundColor = presentationData.theme.actionSheet.opaqueItemSeparatorColor self.installActionSeparatorNode.backgroundColor = presentationData.theme.actionSheet.opaqueItemSeparatorColor + self.shareActionSeparatorNode.backgroundColor = presentationData.theme.actionSheet.opaqueItemSeparatorColor self.cancelButtonNode.setTitle(presentationData.strings.Common_Cancel, with: Font.medium(20.0), with: presentationData.theme.actionSheet.standardActionTextColor, for: .normal) @@ -290,6 +319,7 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol var insets = layout.insets(options: [.statusBar]) insets.top = max(10.0, insets.top) let cleanInsets = layout.insets(options: [.statusBar]) + let hasShareButton = self.shareActionButtonNode.supernode != nil transition.updateFrame(node: self.dimNode, frame: CGRect(origin: CGPoint(), size: layout.size)) @@ -356,10 +386,6 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol self.contentTitleNode.frame = titleFrame transition.animatePosition(node: self.contentTitleNode, from: CGPoint(x: titleFrame.midX + deltaTitlePosition.x, y: titleFrame.midY + deltaTitlePosition.y)) -// let titleButtonSize = CGSize(width: 44.0, height: 44.0) -// let shareButtonFrame = CGRect(origin: CGPoint(x: contentContainerFrame.minX + contentContainerFrame.size.width - titleButtonSize.width - 4.0, y: titleFrame.minY - 13.0), size: titleButtonSize) -// transition.updateFrame(node: self.contentShareButtonNode, frame: shareButtonFrame) - transition.updateFrame(node: self.contentTitleNode, frame: titleFrame) transition.updateFrame(node: self.contentSeparatorNode, frame: CGRect(origin: CGPoint(x: contentContainerFrame.minX, y: self.contentBackgroundNode.frame.minY + titleAreaHeight), size: CGSize(width: contentContainerFrame.size.width, height: UIScreenPixel))) @@ -371,7 +397,7 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol let initiallyRevealedRowCount = min(minimallyRevealedRowCount, CGFloat(rowCount)) let topInset = max(0.0, contentFrame.size.height - initiallyRevealedRowCount * itemWidth - titleAreaHeight - buttonHeight) - let bottomGridInset = buttonHeight + let bottomGridInset = hasShareButton ? buttonHeight * 2.0 : buttonHeight transition.updateFrame(node: self.contentContainerNode, frame: contentContainerFrame) @@ -381,8 +407,12 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol transition.updateFrame(node: activityIndicator, frame: CGRect(origin: CGPoint(x: contentFrame.minX + floor((contentFrame.width - indicatorSize.width) / 2.0), y: contentFrame.maxY - indicatorSize.height - 30.0), size: indicatorSize)) } - transition.updateFrame(node: self.installActionButtonNode, frame: CGRect(origin: CGPoint(x: 0.0, y: contentContainerFrame.size.height - buttonHeight), size: CGSize(width: contentContainerFrame.size.width, height: buttonHeight))) - transition.updateFrame(node: self.installActionSeparatorNode, frame: CGRect(origin: CGPoint(x: 0.0, y: contentContainerFrame.size.height - buttonHeight - UIScreenPixel), size: CGSize(width: contentContainerFrame.size.width, height: UIScreenPixel))) + let installButtonOffset = hasShareButton ? buttonHeight * 2.0 : buttonHeight + transition.updateFrame(node: self.installActionButtonNode, frame: CGRect(origin: CGPoint(x: 0.0, y: contentContainerFrame.size.height - installButtonOffset), size: CGSize(width: contentContainerFrame.size.width, height: buttonHeight))) + transition.updateFrame(node: self.installActionSeparatorNode, frame: CGRect(origin: CGPoint(x: 0.0, y: contentContainerFrame.size.height - installButtonOffset - UIScreenPixel), size: CGSize(width: contentContainerFrame.size.width, height: UIScreenPixel))) + + transition.updateFrame(node: self.shareActionButtonNode, frame: CGRect(origin: CGPoint(x: 0.0, y: contentContainerFrame.size.height - buttonHeight), size: CGSize(width: contentContainerFrame.size.width, height: buttonHeight))) + transition.updateFrame(node: self.shareActionSeparatorNode, frame: CGRect(origin: CGPoint(x: 0.0, y: contentContainerFrame.size.height - buttonHeight - UIScreenPixel), size: CGSize(width: contentContainerFrame.size.width, height: UIScreenPixel))) let gridSize = CGSize(width: contentFrame.size.width, height: max(32.0, contentFrame.size.height - titleAreaHeight)) @@ -390,12 +420,11 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol transition.updateFrame(node: self.contentGridNode, frame: CGRect(origin: CGPoint(x: floor((contentContainerFrame.size.width - contentFrame.size.width) / 2.0), y: titleAreaHeight), size: gridSize)) if animateIn { - self.contentShareButtonNode.isHidden = false - self.contentShareButtonNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.3) - self.contentGridNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) self.installActionButtonNode.titleNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) self.installActionSeparatorNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) + self.shareActionButtonNode.titleNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) + self.shareActionSeparatorNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) } if let _ = self.stickerPack, self.stickerPackUpdated { @@ -448,11 +477,7 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol let titleSize = self.contentTitleNode.bounds.size let titleFrame = CGRect(origin: CGPoint(x: contentFrame.minX + floor((contentFrame.size.width - titleSize.width) / 2.0), y: backgroundFrame.minY + 15.0), size: titleSize) transition.updateFrame(node: self.contentTitleNode, frame: titleFrame) - - let titleButtonSize = CGSize(width: 44.0, height: 44.0) - let shareButtonFrame = CGRect(origin: CGPoint(x: contentFrame.minX + contentFrame.size.width - titleButtonSize.width - 4.0, y: titleFrame.minY - 13.0), size: titleButtonSize) - transition.updateFrame(node: self.contentShareButtonNode, frame: shareButtonFrame) - + transition.updateFrame(node: self.contentSeparatorNode, frame: CGRect(origin: CGPoint(x: contentFrame.minX, y: backgroundFrame.minY + titleAreaHeight), size: CGSize(width: contentFrame.size.width, height: UIScreenPixel))) if !compactFrame && CGFloat(0.0).isLessThanOrEqualTo(presentationLayout.contentOffset.y) { @@ -594,6 +619,9 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol if let result = self.installActionButtonNode.hitTest(self.installActionButtonNode.convert(point, from: self), with: event) { return result } + else if self.shareActionButtonNode.supernode != nil, let result = self.shareActionButtonNode.hitTest(self.shareActionButtonNode.convert(point, from: self), with: event) { + return result + } if self.bounds.contains(point) { if !self.contentBackgroundNode.bounds.contains(self.convert(point, to: self.contentBackgroundNode)) && !self.cancelButtonNode.bounds.contains(self.convert(point, to: self.cancelButtonNode)) { return self.dimNode.view @@ -624,6 +652,6 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol } @objc private func sharePressed() { - self.openShare() + self.openShare?() } } diff --git a/TelegramUI/ThemeGalleryController.swift b/TelegramUI/ThemeGalleryController.swift index 896297f53f..71ad155293 100644 --- a/TelegramUI/ThemeGalleryController.swift +++ b/TelegramUI/ThemeGalleryController.swift @@ -44,6 +44,9 @@ class ThemeGalleryController: ViewController { private let disposable = MetaDisposable() + private var presentationData: PresentationData + private var presentationDataDisposable: Disposable? + private var entries: [ThemeGalleryEntry] = [] private var centralEntryIndex: Int? @@ -64,12 +67,12 @@ class ThemeGalleryController: ViewController { init(account: Account, wallpapers: [TelegramWallpaper], at centralWallpaper: TelegramWallpaper) { self.account = account + self.presentationData = account.telegramApplicationContext.currentPresentationData.with { $0 } - super.init(navigationBarPresentationData: nil) + super.init(navigationBarPresentationData: NavigationBarPresentationData(presentationData: presentationData)) - self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.donePressed)) - - self.statusBar.statusBarStyle = .Hide + self.title = "Chat Preview" + self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBar.style.style let initialEntries: [ThemeGalleryEntry] = wallpapers.map { ThemeGalleryEntry.wallpaper($0) } @@ -90,6 +93,19 @@ class ThemeGalleryController: ViewController { } })) + self.presentationDataDisposable = (account.telegramApplicationContext.presentationData + |> deliverOnMainQueue).start(next: { [weak self] presentationData in + if let strongSelf = self { + let previousTheme = strongSelf.presentationData.theme + let previousStrings = strongSelf.presentationData.strings + + strongSelf.presentationData = presentationData + if previousTheme !== presentationData.theme || previousStrings !== presentationData.strings { + strongSelf.updateThemeAndStrings() + } + } + }) + self.centralItemAttributesDisposable.add(self.centralItemTitle.get().start(next: { [weak self] title in self?.navigationItem.title = title })) @@ -103,34 +119,6 @@ class ThemeGalleryController: ViewController { $0.withUpdatedFooterContentNode(footerContentNode) }, transition: .immediate) })) - - /*self.centralItemAttributesDisposable.add(self.centralItemNavigationStyle.get().start(next: { [weak self] style in - if let strongSelf = self { - switch style { - case .dark: - strongSelf.statusBar.statusBarStyle = .White - strongSelf.navigationBar.backgroundColor = UIColor(white: 0.0, alpha: 0.5) - strongSelf.navigationBar.stripeColor = UIColor.clear - strongSelf.navigationBar.foregroundColor = UIColor.white - strongSelf.navigationBar.accentColor = UIColor.white - strongSelf.galleryNode.backgroundNode.backgroundColor = UIColor.black - strongSelf.galleryNode.isBackgroundExtendedOverNavigationBar = true - case .light: - strongSelf.statusBar.statusBarStyle = .Black - strongSelf.navigationBar.backgroundColor = UIColor(red: 0.968626451, green: 0.968626451, blue: 0.968626451, alpha: 1.0) - strongSelf.navigationBar.foregroundColor = UIColor.black - strongSelf.navigationBar.accentColor = UIColor(rgb: 0x007ee5) - strongSelf.navigationBar.stripeColor = UIColor(red: 0.6953125, green: 0.6953125, blue: 0.6953125, alpha: 1.0) - strongSelf.galleryNode.backgroundNode.backgroundColor = UIColor(rgb: 0xbdbdc2) - strongSelf.galleryNode.isBackgroundExtendedOverNavigationBar = false - } - } - }))*/ - - self.statusBar.statusBarStyle = .Hide - /*strongSelf.navigationBar.stripeColor = UIColor.clear - strongSelf.navigationBar.foregroundColor = UIColor.white - strongSelf.navigationBar.accentColor = UIColor.white*/ } required init(coder aDecoder: NSCoder) { @@ -139,40 +127,26 @@ class ThemeGalleryController: ViewController { deinit { self.disposable.dispose() + self.presentationDataDisposable?.dispose() self.centralItemAttributesDisposable.dispose() } + private func updateThemeAndStrings() { + self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBar.style.style + self.toolbarNode?.updateThemeAndStrings(theme: self.presentationData.theme, strings: self.presentationData.strings) + } + @objc func donePressed() { self.dismiss(forceAway: false) } private func dismiss(forceAway: Bool) { - var animatedOutNode = true - var animatedOutInterface = false - let completion = { [weak self] in - if animatedOutNode && animatedOutInterface { - self?._hiddenMedia.set(.single(nil)) - self?.presentingViewController?.dismiss(animated: false, completion: nil) - } + self?._hiddenMedia.set(.single(nil)) + self?.presentingViewController?.dismiss(animated: false, completion: nil) } - if let centralItemNode = self.galleryNode.pager.centralItemNode(), let presentationArguments = self.presentationArguments as? ThemePreviewControllerPresentationArguments { - if !self.entries.isEmpty { - if centralItemNode.index == 0, let transitionArguments = presentationArguments.transitionArguments(self.entries[centralItemNode.index]), !forceAway { - animatedOutNode = false - centralItemNode.animateOut(to: transitionArguments.transitionNode, addToTransitionSurface: transitionArguments.addToTransitionSurface, completion: { - animatedOutNode = true - completion() - }) - } - } - } - - self.galleryNode.animateOut(animateContent: animatedOutNode, completion: { - animatedOutInterface = true - completion() - }) + self.galleryNode.modalAnimateOut(completion: completion) } override func loadDisplayNode() { @@ -182,15 +156,12 @@ class ThemeGalleryController: ViewController { } }, dismissController: { [weak self] in self?.dismiss(forceAway: true) - }, replaceRootController: { [weak self] controller, ready in - if let strongSelf = self { - //strongSelf.replaceRootController(controller, ready) - } + }, replaceRootController: { controller, ready in }) self.displayNode = GalleryControllerNode(controllerInteraction: controllerInteraction, pageGap: 0.0) self.displayNodeDidLoad() - //self.galleryNode.statusBar = self.statusBar + self.galleryNode.statusBar = self.statusBar self.galleryNode.navigationBar = self.navigationBar self.galleryNode.transitionDataForCentralItem = { [weak self] in @@ -232,7 +203,7 @@ class ThemeGalleryController: ViewController { self.galleryNode.isBackgroundExtendedOverNavigationBar = true let presentationData = self.account.telegramApplicationContext.currentPresentationData.with { $0 } - let toolbarNode = ThemeGalleryToolbarNode(strings: presentationData.strings) + let toolbarNode = ThemeGalleryToolbarNode(theme: presentationData.theme, strings: presentationData.strings) self.toolbarNode = toolbarNode self.galleryNode.addSubnode(toolbarNode) self.galleryNode.toolbarNode = toolbarNode @@ -271,23 +242,7 @@ class ThemeGalleryController: ViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) - var nodeAnimatesItself = false - - if let centralItemNode = self.galleryNode.pager.centralItemNode(), let presentationArguments = self.presentationArguments as? ThemePreviewControllerPresentationArguments { - self.centralItemTitle.set(centralItemNode.title()) - self.centralItemTitleView.set(centralItemNode.titleView()) - self.centralItemNavigationStyle.set(centralItemNode.navigationStyle()) - self.centralItemFooterContentNode.set(centralItemNode.footerContent()) - - if let transitionArguments = presentationArguments.transitionArguments(self.entries[centralItemNode.index]) { - nodeAnimatesItself = true - centralItemNode.animateIn(from: transitionArguments.transitionNode, addToTransitionSurface: transitionArguments.addToTransitionSurface) - - self._hiddenMedia.set(.single(self.entries[centralItemNode.index])) - } - } - - self.galleryNode.animateIn(animateContent: !nodeAnimatesItself) + self.galleryNode.modalAnimateIn() } override func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { @@ -307,3 +262,15 @@ class ThemeGalleryController: ViewController { } } } + +private extension GalleryControllerNode { + func modalAnimateIn(completion: (() -> Void)? = nil) { + self.layer.animatePosition(from: CGPoint(x: self.layer.position.x, y: self.layer.position.y + self.layer.bounds.size.height), to: self.layer.position, duration: 0.5, timingFunction: kCAMediaTimingFunctionSpring) + } + + func modalAnimateOut(completion: (() -> Void)? = nil) { + self.layer.animatePosition(from: self.layer.position, to: CGPoint(x: self.layer.position.x, y: self.layer.position.y + self.layer.bounds.size.height), duration: 0.2, timingFunction: kCAMediaTimingFunctionEaseInEaseOut, removeOnCompletion: false, completion: { _ in + completion?() + }) + } +} diff --git a/TelegramUI/ThemeGalleryItem.swift b/TelegramUI/ThemeGalleryItem.swift index 254281d5e2..9c8880e9dd 100644 --- a/TelegramUI/ThemeGalleryItem.swift +++ b/TelegramUI/ThemeGalleryItem.swift @@ -16,9 +16,7 @@ class ThemeGalleryItem: GalleryItem { func node() -> GalleryItemNode { let node = ThemeGalleryItemNode(account: self.account) - node.setEntry(self.entry) - return node } @@ -41,7 +39,6 @@ final class ThemeGalleryItemNode: ZoomableContentGalleryItemNode { private let imageNode: TransformImageNode fileprivate let _ready = Promise() fileprivate let _title = Promise() - //private let footerContentNode: ChatItemGalleryFooterContentNode private var fetchDisposable = MetaDisposable() @@ -49,11 +46,10 @@ final class ThemeGalleryItemNode: ZoomableContentGalleryItemNode { self.account = account self.imageNode = TransformImageNode() - //self.footerContentNode = ChatItemGalleryFooterContentNode(account: account) super.init() - self.backgroundColor = .white + self.backgroundColor = .clear self.imageNode.imageUpdated = { [weak self] in self?._ready.set(.single(Void())) @@ -133,7 +129,6 @@ final class ThemeGalleryItemNode: ZoomableContentGalleryItemNode { self.imageNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.07) transformedFrame.origin = CGPoint() - //self.imageNode.layer.animateBounds(from: transformedFrame, to: self.imageNode.layer.bounds, duration: 0.25, timingFunction: kCAMediaTimingFunctionSpring) let transform = CATransform3DScale(self.imageNode.layer.transform, transformedFrame.size.width / self.imageNode.layer.bounds.size.width, transformedFrame.size.height / self.imageNode.layer.bounds.size.height, 1.0) self.imageNode.layer.animate(from: NSValue(caTransform3D: transform), to: NSValue(caTransform3D: self.imageNode.layer.transform), keyPath: "transform", timingFunction: kCAMediaTimingFunctionSpring, duration: 0.25) @@ -188,11 +183,6 @@ final class ThemeGalleryItemNode: ZoomableContentGalleryItemNode { transformedFrame.origin = CGPoint() - /*self.imageNode.layer.animateBounds(from: self.imageNode.layer.bounds, to: transformedFrame, duration: 0.25 * durationFactor, timingFunction: kCAMediaTimingFunctionSpring, removeOnCompletion: false, completion: { _ in - boundsCompleted = true - intermediateCompletion() - })*/ - let transform = CATransform3DScale(self.imageNode.layer.transform, transformedFrame.size.width / self.imageNode.layer.bounds.size.width, transformedFrame.size.height / self.imageNode.layer.bounds.size.height, 1.0) self.imageNode.layer.animate(from: NSValue(caTransform3D: self.imageNode.layer.transform), to: NSValue(caTransform3D: transform), keyPath: "transform", timingFunction: kCAMediaTimingFunctionSpring, duration: 0.25 * durationFactor, removeOnCompletion: false, completion: { _ in boundsCompleted = true @@ -210,4 +200,7 @@ final class ThemeGalleryItemNode: ZoomableContentGalleryItemNode { override func title() -> Signal { return self._title.get() } + + @objc override func contentTap(_ recognizer: TapLongTapOrDoubleTapGestureRecognizer) { + } } diff --git a/TelegramUI/ThemeGalleryToolbarNode.swift b/TelegramUI/ThemeGalleryToolbarNode.swift index 62bd1c48ac..8cfeedb2ef 100644 --- a/TelegramUI/ThemeGalleryToolbarNode.swift +++ b/TelegramUI/ThemeGalleryToolbarNode.swift @@ -11,7 +11,7 @@ final class ThemeGalleryToolbarNode: ASDisplayNode { var cancel: (() -> Void)? var done: (() -> Void)? - init(strings: PresentationStrings) { + init(theme: PresentationTheme, strings: PresentationStrings) { super.init() self.addSubnode(self.cancelButton) @@ -19,12 +19,7 @@ final class ThemeGalleryToolbarNode: ASDisplayNode { self.addSubnode(self.separatorNode) self.addSubnode(self.topSeparatorNode) - self.backgroundColor = UIColor(rgb: 0xeaebeb) - self.separatorNode.backgroundColor = .black - self.topSeparatorNode.backgroundColor = .black - - self.cancelButton.setTitle(strings.Common_Cancel, with: Font.regular(17.0), with: .black, for: []) - self.doneButton.setTitle(strings.Wallpaper_Set, with: Font.regular(17.0), with: .black, for: []) + self.updateThemeAndStrings(theme: theme, strings: strings) self.cancelButton.highligthedChanged = { [weak self] highlighted in if let strongSelf = self { @@ -54,6 +49,15 @@ final class ThemeGalleryToolbarNode: ASDisplayNode { self.doneButton.addTarget(self, action: #selector(self.donePressed), forControlEvents: .touchUpInside) } + func updateThemeAndStrings(theme: PresentationTheme, strings: PresentationStrings) { + self.backgroundColor = theme.rootController.tabBar.backgroundColor + self.separatorNode.backgroundColor = theme.rootController.tabBar.separatorColor + self.topSeparatorNode.backgroundColor = theme.rootController.tabBar.separatorColor + + self.cancelButton.setTitle(strings.Common_Cancel, with: Font.regular(17.0), with: theme.rootController.navigationBar.primaryTextColor, for: []) + self.doneButton.setTitle(strings.Wallpaper_Set, with: Font.regular(17.0), with: theme.rootController.navigationBar.primaryTextColor, for: []) + } + func updateLayout(size: CGSize, layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { self.cancelButton.frame = CGRect(origin: CGPoint(), size: CGSize(width: floor(size.width / 2.0), height: size.height)) self.doneButton.frame = CGRect(origin: CGPoint(x: floor(size.width / 2.0), y: 0.0), size: CGSize(width: size.width - floor(size.width / 2.0), height: size.height)) diff --git a/TelegramUI/ThemeGridActionNode.swift b/TelegramUI/ThemeGridActionNode.swift new file mode 100644 index 0000000000..653b7c6f24 --- /dev/null +++ b/TelegramUI/ThemeGridActionNode.swift @@ -0,0 +1,14 @@ +import Foundation +import AsyncDisplayKit +import Display + +final class ThemeGridActionNode: NSObject { +// private let button: HighlightableButtonNode +// private var background: ASDisplayNode +// private var topSeparator: ASDisplayNode +// private var bottomSeparator: ASDisplayNode + + override init() { + super.init() + } +} diff --git a/TelegramUI/ThemeGridController.swift b/TelegramUI/ThemeGridController.swift index 581adb3f80..188b1af84d 100644 --- a/TelegramUI/ThemeGridController.swift +++ b/TelegramUI/ThemeGridController.swift @@ -5,6 +5,11 @@ import Postbox import TelegramCore import SwiftSignalKit +enum ThemeGridControllerMode { + case wallpapers + case solidColors +} + final class ThemeGridController: ViewController { private var controllerNode: ThemeGridControllerNode { return self.displayNode as! ThemeGridControllerNode @@ -16,17 +21,24 @@ final class ThemeGridController: ViewController { } private let account: Account + private let mode: ThemeGridControllerMode private var presentationData: PresentationData private var presentationDataDisposable: Disposable? - init(account: Account) { + init(account: Account, mode: ThemeGridControllerMode) { self.account = account + self.mode = mode self.presentationData = account.telegramApplicationContext.currentPresentationData.with { $0 } super.init(navigationBarPresentationData: NavigationBarPresentationData(presentationData: self.presentationData)) - self.title = self.presentationData.strings.Wallpaper_Title + switch mode { + case .wallpapers: + self.title = self.presentationData.strings.Wallpaper_Title + case .solidColors: + self.title = "Solid Colors" + } self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBar.style.style self.scrollToTop = { [weak self] in @@ -34,18 +46,18 @@ final class ThemeGridController: ViewController { } self.presentationDataDisposable = (account.telegramApplicationContext.presentationData - |> deliverOnMainQueue).start(next: { [weak self] presentationData in - if let strongSelf = self { - let previousTheme = strongSelf.presentationData.theme - let previousStrings = strongSelf.presentationData.strings - - strongSelf.presentationData = presentationData - - if previousTheme !== presentationData.theme || previousStrings !== presentationData.strings { - strongSelf.updateThemeAndStrings() - } + |> deliverOnMainQueue).start(next: { [weak self] presentationData in + if let strongSelf = self { + let previousTheme = strongSelf.presentationData.theme + let previousStrings = strongSelf.presentationData.strings + + strongSelf.presentationData = presentationData + + if previousTheme !== presentationData.theme || previousStrings !== presentationData.strings { + strongSelf.updateThemeAndStrings() } - }) + } + }) } required public init(coder aDecoder: NSCoder) { @@ -57,7 +69,12 @@ final class ThemeGridController: ViewController { } private func updateThemeAndStrings() { - self.title = self.presentationData.strings.Wallpaper_Title + switch mode { + case .wallpapers: + self.title = self.presentationData.strings.Wallpaper_Title + case .solidColors: + self.title = "Solid Colors" + } self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBar.style.style self.navigationBar?.updatePresentationData(NavigationBarPresentationData(presentationData: self.presentationData)) @@ -68,7 +85,7 @@ final class ThemeGridController: ViewController { } override func loadDisplayNode() { - self.displayNode = ThemeGridControllerNode(account: self.account, presentationData: self.presentationData, present: { [weak self] controller, arguments in + self.displayNode = ThemeGridControllerNode(account: self.account, presentationData: self.presentationData, mode: self.mode, present: { [weak self] controller, arguments in self?.present(controller, in: .window(.root), with: arguments, blockInteraction: true) }, selectCustomWallpaper: { [weak self] in if let strongSelf = self { diff --git a/TelegramUI/ThemeGridControllerNode.swift b/TelegramUI/ThemeGridControllerNode.swift index 5cb1f148e4..14c25403df 100644 --- a/TelegramUI/ThemeGridControllerNode.swift +++ b/TelegramUI/ThemeGridControllerNode.swift @@ -65,10 +65,14 @@ final class ThemeGridControllerNode: ASDisplayNode { let ready = ValuePromise() - private let customWallpaperButton: HighlightableButtonNode - private var customWallpaperButtonBackground: ASDisplayNode private var customWallpaperBackground: ASDisplayNode private var customWallpaperSeparator: ASDisplayNode + + //private let photoLibraryButton: ThemeGridActionNode + //private let solidColorsButton: ThemeGridActionNode + + private let customWallpaperButton: HighlightableButtonNode + private var customWallpaperButtonBackground: ASDisplayNode private var customWallpaperButtonTopSeparator: ASDisplayNode private var customWallpaperButtonBottomSeparator: ASDisplayNode @@ -78,7 +82,7 @@ final class ThemeGridControllerNode: ASDisplayNode { private var disposable: Disposable? - init(account: Account, presentationData: PresentationData, present: @escaping (ViewController, Any?) -> Void, selectCustomWallpaper: @escaping () -> Void) { + init(account: Account, presentationData: PresentationData, mode: ThemeGridControllerMode, present: @escaping (ViewController, Any?) -> Void, selectCustomWallpaper: @escaping () -> Void) { self.account = account self.presentationData = presentationData self.present = present diff --git a/TelegramUI/ThemeSettingsChatPreviewItem.swift b/TelegramUI/ThemeSettingsChatPreviewItem.swift index 0f3f1b2d3b..4543478ce1 100644 --- a/TelegramUI/ThemeSettingsChatPreviewItem.swift +++ b/TelegramUI/ThemeSettingsChatPreviewItem.swift @@ -104,6 +104,7 @@ class ThemeSettingsChatPreviewItemNode: ListViewItemNode { }, addContact: { _ in }, rateCall: { _, _ in }, requestSelectMessagePollOption: { _, _ in + }, openAppStorePage: { }, requestMessageUpdate: { _ in }, cancelInteractiveKeyboardGestures: { }, automaticMediaDownloadSettings: AutomaticMediaDownloadSettings.defaultSettings, diff --git a/TelegramUI/ThemeSettingsController.swift b/TelegramUI/ThemeSettingsController.swift index cd5a2dbead..61c51bb0f8 100644 --- a/TelegramUI/ThemeSettingsController.swift +++ b/TelegramUI/ThemeSettingsController.swift @@ -275,7 +275,7 @@ public func themeSettingsController(account: Account) -> ViewController { return PresentationThemeSettings(chatWallpaper: current.chatWallpaper, theme: current.theme, themeAccentColor: current.themeAccentColor, fontSize: size, automaticThemeSwitchSetting: current.automaticThemeSwitchSetting, disableAnimations: current.disableAnimations) }).start() }, openWallpaperSettings: { - pushControllerImpl?(ThemeGridController(account: account)) + pushControllerImpl?(ThemeGridController(account: account, mode: .wallpapers)) }, openAccentColor: { color in let presentationData = account.telegramApplicationContext.currentPresentationData.with { $0 } presentControllerImpl?(ThemeAccentColorActionSheet(account: account, currentValue: color, applyValue: { color in