diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index aef07d871d..b428707a48 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -5338,7 +5338,7 @@ Any member of this group will be able to see messages in the channel."; "PeerInfo.PaneMedia" = "Media"; "PeerInfo.PaneFiles" = "Files"; "PeerInfo.PaneLinks" = "Links"; -"PeerInfo.PaneVoice" = "Voice Messages"; +"PeerInfo.PaneVoiceAndVideo" = "Voice"; "PeerInfo.PaneAudio" = "Audio"; "PeerInfo.PaneGroups" = "Groups"; "PeerInfo.PaneMembers" = "Members"; diff --git a/submodules/Display/Source/ContextGesture.swift b/submodules/Display/Source/ContextGesture.swift index 818594b431..79a767a1a6 100644 --- a/submodules/Display/Source/ContextGesture.swift +++ b/submodules/Display/Source/ContextGesture.swift @@ -228,6 +228,8 @@ public final class ContextGesture: UIGestureRecognizer, UIGestureRecognizerDeleg self.delayTimer?.invalidate() self.animator?.invalidate() self.state = .failed + } else { + self.state = .failed } } diff --git a/submodules/Display/Source/ListView.swift b/submodules/Display/Source/ListView.swift index 37e8b62e41..02c885d9e8 100644 --- a/submodules/Display/Source/ListView.swift +++ b/submodules/Display/Source/ListView.swift @@ -131,6 +131,19 @@ public enum GeneralScrollDirection { case down } +private func cancelContextGestures(view: UIView) { + if let gestureRecognizers = view.gestureRecognizers { + for gesture in gestureRecognizers { + if let gesture = gesture as? ContextGesture { + gesture.cancel() + } + } + } + for subview in view.subviews { + cancelContextGestures(view: subview) + } +} + open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGestureRecognizerDelegate { public final let scroller: ListViewScroller private final var visibleSize: CGSize = CGSize() @@ -666,6 +679,10 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture self.scrolledToItem = nil self.beganInteractiveDragging() + + for itemNode in self.itemNodes { + cancelContextGestures(view: itemNode.view) + } } public func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { @@ -739,8 +756,10 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture self.decelerationAnimator?.isPaused = false } + public var defaultToSynchronousTransactionWhileScrolling: Bool = false + public func scrollViewDidScroll(_ scrollView: UIScrollView) { - self.updateScrollViewDidScroll(scrollView, synchronous: false) + self.updateScrollViewDidScroll(scrollView, synchronous: self.defaultToSynchronousTransactionWhileScrolling) } private var generalAccumulatedDeltaY: CGFloat = 0.0 @@ -3606,8 +3625,12 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture var updatedState = state var updatedOperations = operations updatedState.removeInvisibleNodes(&updatedOperations) - self.dispatchOnVSync { + if synchronous { self.replayOperations(animated: false, animateAlpha: false, animateCrossfade: false, synchronous: false, animateTopItemVerticalOrigin: false, operations: updatedOperations, requestItemInsertionAnimationsIndices: Set(), scrollToItem: nil, additionalScrollDistance: 0.0, updateSizeAndInsets: nil, stationaryItemIndex: nil, updateOpaqueState: nil, completion: completion) + } else { + self.dispatchOnVSync { + self.replayOperations(animated: false, animateAlpha: false, animateCrossfade: false, synchronous: false, animateTopItemVerticalOrigin: false, operations: updatedOperations, requestItemInsertionAnimationsIndices: Set(), scrollToItem: nil, additionalScrollDistance: 0.0, updateSizeAndInsets: nil, stationaryItemIndex: nil, updateOpaqueState: nil, completion: completion) + } } } } diff --git a/submodules/ItemListStickerPackItem/Sources/ItemListStickerPackItem.swift b/submodules/ItemListStickerPackItem/Sources/ItemListStickerPackItem.swift index f707e88839..040bf8b63a 100644 --- a/submodules/ItemListStickerPackItem/Sources/ItemListStickerPackItem.swift +++ b/submodules/ItemListStickerPackItem/Sources/ItemListStickerPackItem.swift @@ -264,7 +264,7 @@ class ItemListStickerPackItemNode: ItemListRevealOptionsItemNode { let editableControlLayout = ItemListEditableControlNode.asyncLayout(self.editableControlNode) let reorderControlLayout = ItemListEditableReorderControlNode.asyncLayout(self.reorderControlNode) - var previousThumbnailItem = self.currentThumbnailItem + let previousThumbnailItem = self.currentThumbnailItem var currentDisabledOverlayNode = self.disabledOverlayNode let currentItem = self.layoutParams?.0 diff --git a/submodules/PhotoResources/Sources/PhotoResources.swift b/submodules/PhotoResources/Sources/PhotoResources.swift index 60e58770b5..fc842fa10d 100644 --- a/submodules/PhotoResources/Sources/PhotoResources.swift +++ b/submodules/PhotoResources/Sources/PhotoResources.swift @@ -1279,14 +1279,14 @@ public func gifPaneVideoThumbnail(account: Account, videoReference: FileMediaRef } } -public func mediaGridMessageVideo(postbox: Postbox, videoReference: FileMediaReference, onlyFullSize: Bool = false, synchronousLoad: Bool = false, autoFetchFullSizeThumbnail: Bool = false) -> Signal<(TransformImageArguments) -> DrawingContext?, NoError> { - return internalMediaGridMessageVideo(postbox: postbox, videoReference: videoReference, onlyFullSize: onlyFullSize, synchronousLoad: synchronousLoad, autoFetchFullSizeThumbnail: autoFetchFullSizeThumbnail) +public func mediaGridMessageVideo(postbox: Postbox, videoReference: FileMediaReference, onlyFullSize: Bool = false, synchronousLoad: Bool = false, autoFetchFullSizeThumbnail: Bool = false, overlayColor: UIColor? = nil) -> Signal<(TransformImageArguments) -> DrawingContext?, NoError> { + return internalMediaGridMessageVideo(postbox: postbox, videoReference: videoReference, onlyFullSize: onlyFullSize, synchronousLoad: synchronousLoad, autoFetchFullSizeThumbnail: autoFetchFullSizeThumbnail, overlayColor: overlayColor) |> map { return $0.1 } } -public func internalMediaGridMessageVideo(postbox: Postbox, videoReference: FileMediaReference, imageReference: ImageMediaReference? = nil, onlyFullSize: Bool = false, synchronousLoad: Bool = false, autoFetchFullSizeThumbnail: Bool = false) -> Signal<(() -> CGSize?, (TransformImageArguments) -> DrawingContext?), NoError> { +public func internalMediaGridMessageVideo(postbox: Postbox, videoReference: FileMediaReference, imageReference: ImageMediaReference? = nil, onlyFullSize: Bool = false, synchronousLoad: Bool = false, autoFetchFullSizeThumbnail: Bool = false, overlayColor: UIColor? = nil) -> Signal<(() -> CGSize?, (TransformImageArguments) -> DrawingContext?), NoError> { let signal: Signal?, Bool>, NoError> if let imageReference = imageReference { signal = chatMessagePhotoDatas(postbox: postbox, photoReference: imageReference, tryAdditionalRepresentations: true, synchronousLoad: synchronousLoad) @@ -1480,6 +1480,14 @@ public func internalMediaGridMessageVideo(postbox: Postbox, videoReference: File } } + if let overlayColor = overlayColor { + context.withFlippedContext { c in + c.setBlendMode(.normal) + c.setFillColor(overlayColor.cgColor) + c.fill(arguments.drawingRect) + } + } + addCorners(context, arguments: arguments) return context @@ -2400,7 +2408,7 @@ private func drawAlbumArtPlaceholder(into c: CGContext, arguments: TransformImag } } -public func playerAlbumArt(postbox: Postbox, fileReference: FileMediaReference?, albumArt: SharedMediaPlaybackAlbumArt?, thumbnail: Bool) -> Signal<(TransformImageArguments) -> DrawingContext?, NoError> { +public func playerAlbumArt(postbox: Postbox, fileReference: FileMediaReference?, albumArt: SharedMediaPlaybackAlbumArt?, thumbnail: Bool, overlayColor: UIColor? = nil, emptyColor: UIColor? = nil) -> Signal<(TransformImageArguments) -> DrawingContext?, NoError> { var fileArtworkData: Signal = .single(nil) if let fileReference = fileReference { let size = thumbnail ? CGSize(width: 48.0, height: 48.0) : CGSize(width: 320.0, height: 320.0) @@ -2471,10 +2479,22 @@ public func playerAlbumArt(postbox: Postbox, fileReference: FileMediaReference?, let imageSize = sourceImage.size.aspectFilled(arguments.drawingRect.size) context.withFlippedContext { c in c.draw(cgImage, in: CGRect(origin: CGPoint(x: floor((arguments.drawingRect.size.width - imageSize.width) / 2.0), y: floor((arguments.drawingRect.size.height - imageSize.height) / 2.0)), size: imageSize)) + if let overlayColor = overlayColor { + c.setFillColor(overlayColor.cgColor) + c.fill(arguments.drawingRect) + } } } else { - context.withFlippedContext { c in - drawAlbumArtPlaceholder(into: c, arguments: arguments, thumbnail: thumbnail) + if let emptyColor = emptyColor { + context.withFlippedContext { c in + let rect = arguments.drawingRect + c.setFillColor(emptyColor.cgColor) + c.fill(rect) + } + } else { + context.withFlippedContext { c in + drawAlbumArtPlaceholder(into: c, arguments: arguments, thumbnail: thumbnail) + } } } diff --git a/submodules/SemanticStatusNode/Sources/SemanticStatusNode.swift b/submodules/SemanticStatusNode/Sources/SemanticStatusNode.swift index 483e62c5a5..ea921fd018 100644 --- a/submodules/SemanticStatusNode/Sources/SemanticStatusNode.swift +++ b/submodules/SemanticStatusNode/Sources/SemanticStatusNode.swift @@ -440,18 +440,23 @@ private final class SemanticStatusNodeTransitionContext { public final class SemanticStatusNode: ASControlNode { public var backgroundNodeColor: UIColor { didSet { - self.setNeedsDisplay() + if !self.backgroundNodeColor.isEqual(oldValue) { + self.setNeedsDisplay() + } } } public var foregroundNodeColor: UIColor { didSet { - self.setNeedsDisplay() + if !self.foregroundNodeColor.isEqual(oldValue) { + self.setNeedsDisplay() + } } } private var animator: ConstantDisplayLinkAnimator? + private var hasState: Bool = false public private(set) var state: SemanticStatusNodeState private var transtionContext: SemanticStatusNodeTransitionContext? private var stateContext: SemanticStatusNodeStateContext @@ -505,8 +510,11 @@ public final class SemanticStatusNode: ASControlNode { public func transitionToState(_ state: SemanticStatusNodeState, animated: Bool = true, synchronous: Bool = false, completion: @escaping () -> Void = {}) { var animated = animated + if !self.hasState { + self.hasState = true + animated = false + } if self.state != state { - let fromState = self.state self.state = state let previousStateContext = self.stateContext self.stateContext = self.state.context(current: self.stateContext) diff --git a/submodules/TelegramBaseController/Sources/MediaNavigationAccessoryContainerNode.swift b/submodules/TelegramBaseController/Sources/MediaNavigationAccessoryContainerNode.swift index 8c2612dec1..7da9dfd92b 100644 --- a/submodules/TelegramBaseController/Sources/MediaNavigationAccessoryContainerNode.swift +++ b/submodules/TelegramBaseController/Sources/MediaNavigationAccessoryContainerNode.swift @@ -7,9 +7,9 @@ import SyncCore import TelegramPresentationData import AccountContext -final class MediaNavigationAccessoryContainerNode: ASDisplayNode, UIGestureRecognizerDelegate { - let backgroundNode: ASDisplayNode - let headerNode: MediaNavigationAccessoryHeaderNode +public final class MediaNavigationAccessoryContainerNode: ASDisplayNode, UIGestureRecognizerDelegate { + public let backgroundNode: ASDisplayNode + public let headerNode: MediaNavigationAccessoryHeaderNode private let currentHeaderHeight: CGFloat = MediaNavigationAccessoryHeaderNode.minimizedHeight @@ -44,7 +44,7 @@ final class MediaNavigationAccessoryContainerNode: ASDisplayNode, UIGestureRecog self.headerNode.updateLayout(size: CGSize(width: size.width, height: headerHeight), leftInset: leftInset, rightInset: rightInset, transition: transition) } - override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { + override public func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { if !self.headerNode.frame.contains(point) { return nil } diff --git a/submodules/TelegramBaseController/Sources/MediaNavigationAccessoryHeaderNode.swift b/submodules/TelegramBaseController/Sources/MediaNavigationAccessoryHeaderNode.swift index 518bad26a3..78dca72176 100644 --- a/submodules/TelegramBaseController/Sources/MediaNavigationAccessoryHeaderNode.swift +++ b/submodules/TelegramBaseController/Sources/MediaNavigationAccessoryHeaderNode.swift @@ -127,8 +127,8 @@ private func generateMaskImage(color: UIColor) -> UIImage? { }) } -final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollViewDelegate { - static let minimizedHeight: CGFloat = 37.0 +public final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollViewDelegate { + public static let minimizedHeight: CGFloat = 37.0 private var theme: PresentationTheme private var strings: PresentationStrings @@ -156,7 +156,7 @@ final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollViewDeleg private var validLayout: (CGSize, CGFloat, CGFloat)? - var displayScrubber: Bool = true { + public var displayScrubber: Bool = true { didSet { self.scrubbingNode.isHidden = !self.displayScrubber } @@ -166,14 +166,14 @@ final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollViewDeleg private var tapRecognizer: UITapGestureRecognizer? - var tapAction: (() -> Void)? - var close: (() -> Void)? - var toggleRate: (() -> Void)? - var togglePlayPause: (() -> Void)? - var playPrevious: (() -> Void)? - var playNext: (() -> Void)? + public var tapAction: (() -> Void)? + public var close: (() -> Void)? + public var toggleRate: (() -> Void)? + public var togglePlayPause: (() -> Void)? + public var playPrevious: (() -> Void)? + public var playNext: (() -> Void)? - var playbackBaseRate: AudioPlaybackRate? = nil { + public var playbackBaseRate: AudioPlaybackRate? = nil { didSet { guard self.playbackBaseRate != oldValue, let playbackBaseRate = self.playbackBaseRate else { return @@ -193,13 +193,13 @@ final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollViewDeleg } } - var playbackStatus: Signal? { + public var playbackStatus: Signal? { didSet { self.scrubbingNode.status = self.playbackStatus } } - var playbackItems: (SharedMediaPlaylistItem?, SharedMediaPlaylistItem?, SharedMediaPlaylistItem?)? { + public var playbackItems: (SharedMediaPlaylistItem?, SharedMediaPlaylistItem?, SharedMediaPlaylistItem?)? { didSet { if !arePlaylistItemsEqual(self.playbackItems?.0, oldValue?.0) || !arePlaylistItemsEqual(self.playbackItems?.1, oldValue?.1) || !arePlaylistItemsEqual(self.playbackItems?.2, oldValue?.2), let layout = validLayout { self.updateLayout(size: layout.0, leftInset: layout.1, rightInset: layout.2, transition: .immediate) @@ -207,7 +207,7 @@ final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollViewDeleg } } - init(presentationData: PresentationData) { + public init(presentationData: PresentationData) { self.theme = presentationData.theme self.strings = presentationData.strings self.dateTimeFormat = presentationData.dateTimeFormat @@ -346,7 +346,7 @@ final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollViewDeleg } } - override func didLoad() { + override public func didLoad() { super.didLoad() self.view.disablesInteractiveTransitionGestureRecognizer = true @@ -361,7 +361,7 @@ final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollViewDeleg self.view.addGestureRecognizer(tapRecognizer) } - func updatePresentationData(_ presentationData: PresentationData) { + public func updatePresentationData(_ presentationData: PresentationData) { self.theme = presentationData.theme self.strings = presentationData.strings self.nameDisplayOrder = presentationData.nameDisplayOrder @@ -390,17 +390,17 @@ final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollViewDeleg } } - func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { + public func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { if scrollView.isDecelerating { self.changeTrack() } } - func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { + public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { self.changeTrack() } - func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { + public func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { guard !decelerate else { return } @@ -418,7 +418,7 @@ final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollViewDeleg } } - func updateLayout(size: CGSize, leftInset: CGFloat, rightInset: CGFloat, transition: ContainedViewLayoutTransition) { + public func updateLayout(size: CGSize, leftInset: CGFloat, rightInset: CGFloat, transition: ContainedViewLayoutTransition) { self.validLayout = (size, leftInset, rightInset) let minHeight = MediaNavigationAccessoryHeaderNode.minimizedHeight @@ -472,19 +472,19 @@ final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollViewDeleg self.accessibilityAreaNode.frame = CGRect(origin: CGPoint(x: self.actionButton.frame.maxX, y: 0.0), size: CGSize(width: self.rateButton.frame.minX - self.actionButton.frame.maxX, height: minHeight)) } - @objc func closeButtonPressed() { + @objc public func closeButtonPressed() { self.close?() } - @objc func rateButtonPressed() { + @objc public func rateButtonPressed() { self.toggleRate?() } - @objc func actionButtonPressed() { + @objc public func actionButtonPressed() { self.togglePlayPause?() } - @objc func tapGesture(_ recognizer: UITapGestureRecognizer) { + @objc public func tapGesture(_ recognizer: UITapGestureRecognizer) { if case .ended = recognizer.state { self.tapAction?() } diff --git a/submodules/TelegramBaseController/Sources/MediaNavigationAccessoryPanel.swift b/submodules/TelegramBaseController/Sources/MediaNavigationAccessoryPanel.swift index 18534db138..5f6aa9da2b 100644 --- a/submodules/TelegramBaseController/Sources/MediaNavigationAccessoryPanel.swift +++ b/submodules/TelegramBaseController/Sources/MediaNavigationAccessoryPanel.swift @@ -6,17 +6,17 @@ import TelegramCore import SyncCore import AccountContext -final class MediaNavigationAccessoryPanel: ASDisplayNode { - let containerNode: MediaNavigationAccessoryContainerNode +public final class MediaNavigationAccessoryPanel: ASDisplayNode { + public let containerNode: MediaNavigationAccessoryContainerNode - var close: (() -> Void)? - var toggleRate: (() -> Void)? - var togglePlayPause: (() -> Void)? - var tapAction: (() -> Void)? - var playPrevious: (() -> Void)? - var playNext: (() -> Void)? + public var close: (() -> Void)? + public var toggleRate: (() -> Void)? + public var togglePlayPause: (() -> Void)? + public var tapAction: (() -> Void)? + public var playPrevious: (() -> Void)? + public var playNext: (() -> Void)? - init(context: AccountContext) { + public init(context: AccountContext) { self.containerNode = MediaNavigationAccessoryContainerNode(context: context) super.init() @@ -53,12 +53,12 @@ final class MediaNavigationAccessoryPanel: ASDisplayNode { } } - func updateLayout(size: CGSize, leftInset: CGFloat, rightInset: CGFloat, transition: ContainedViewLayoutTransition) { + public func updateLayout(size: CGSize, leftInset: CGFloat, rightInset: CGFloat, transition: ContainedViewLayoutTransition) { transition.updateFrame(node: self.containerNode, frame: CGRect(origin: CGPoint(), size: size)) self.containerNode.updateLayout(size: size, leftInset: leftInset, rightInset: rightInset, transition: transition) } - func animateIn(transition: ContainedViewLayoutTransition) { + public func animateIn(transition: ContainedViewLayoutTransition) { self.clipsToBounds = true let contentPosition = self.containerNode.layer.position transition.animatePosition(node: self.containerNode, from: CGPoint(x: contentPosition.x, y: contentPosition.y - 37.0), completion: { [weak self] _ in @@ -66,7 +66,7 @@ final class MediaNavigationAccessoryPanel: ASDisplayNode { }) } - func animateOut(transition: ContainedViewLayoutTransition, completion: @escaping () -> Void) { + public func animateOut(transition: ContainedViewLayoutTransition, completion: @escaping () -> Void) { self.clipsToBounds = true let contentPosition = self.containerNode.layer.position transition.animatePosition(node: self.containerNode, to: CGPoint(x: contentPosition.x, y: contentPosition.y - 37.0), removeOnCompletion: false, completion: { [weak self] _ in @@ -75,7 +75,7 @@ final class MediaNavigationAccessoryPanel: ASDisplayNode { }) } - override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { + override public func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { return self.containerNode.hitTest(point, with: event) } } diff --git a/submodules/TelegramBaseController/Sources/TelegramBaseController.swift b/submodules/TelegramBaseController/Sources/TelegramBaseController.swift index 6aab136dce..53d3b5a46b 100644 --- a/submodules/TelegramBaseController/Sources/TelegramBaseController.swift +++ b/submodules/TelegramBaseController/Sources/TelegramBaseController.swift @@ -72,7 +72,7 @@ open class TelegramBaseController: ViewController, KeyShortcutResponder { public var tempVoicePlaylistEnded: (() -> Void)? public var tempVoicePlaylistItemChanged: ((SharedMediaPlaylistItem?, SharedMediaPlaylistItem?) -> Void)? - private var mediaAccessoryPanel: (MediaNavigationAccessoryPanel, MediaManagerPlayerType)? + public var mediaAccessoryPanel: (MediaNavigationAccessoryPanel, MediaManagerPlayerType)? private var locationBroadcastMode: LocationBroadcastNavigationAccessoryPanelMode? private var locationBroadcastPeers: [Peer]? diff --git a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift index 18627fd2aa..454aefa020 100644 --- a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift +++ b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift @@ -960,2110 +960,2110 @@ public final class PresentationStrings: Equatable { public var Passport_Identity_MainPage: String { return self._s[716]! } public var TwoStepAuth_ConfirmEmailResendCode: String { return self._s[717]! } public var Passport_Language_de: String { return self._s[718]! } - public var PeerInfo_PaneVoice: String { return self._s[719]! } - public var Update_Title: String { return self._s[720]! } - public var ContactInfo_PhoneLabelWorkFax: String { return self._s[721]! } - public var Channel_AdminLog_BanEmbedLinks: String { return self._s[722]! } - public var Passport_Email_UseTelegramEmailHelp: String { return self._s[723]! } - public var Notifications_ChannelNotificationsPreview: String { return self._s[724]! } - public var NotificationsSound_Telegraph: String { return self._s[725]! } - public var Watch_LastSeen_ALongTimeAgo: String { return self._s[726]! } - public var ChannelMembers_WhoCanAddMembers: String { return self._s[727]! } + public var Update_Title: String { return self._s[719]! } + public var ContactInfo_PhoneLabelWorkFax: String { return self._s[720]! } + public var Channel_AdminLog_BanEmbedLinks: String { return self._s[721]! } + public var Passport_Email_UseTelegramEmailHelp: String { return self._s[722]! } + public var Notifications_ChannelNotificationsPreview: String { return self._s[723]! } + public var NotificationsSound_Telegraph: String { return self._s[724]! } + public var Watch_LastSeen_ALongTimeAgo: String { return self._s[725]! } + public var ChannelMembers_WhoCanAddMembers: String { return self._s[726]! } public func AutoDownloadSettings_UpTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[728]!, self._r[728]!, [_0]) + return formatWithArgumentRanges(self._s[727]!, self._r[727]!, [_0]) } - public var ClearCache_Description: String { return self._s[729]! } - public var Stickers_SuggestAll: String { return self._s[730]! } - public var Conversation_ForwardTitle: String { return self._s[731]! } - public var Appearance_ThemePreview_ChatList_7_Name: String { return self._s[732]! } + public var ClearCache_Description: String { return self._s[728]! } + public var Stickers_SuggestAll: String { return self._s[729]! } + public var Conversation_ForwardTitle: String { return self._s[730]! } + public var Appearance_ThemePreview_ChatList_7_Name: String { return self._s[731]! } public func Notification_JoinedChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[733]!, self._r[733]!, [_0]) + return formatWithArgumentRanges(self._s[732]!, self._r[732]!, [_0]) } - public var Calls_NewCall: String { return self._s[734]! } - public var Call_StatusEnded: String { return self._s[735]! } - public var AutoDownloadSettings_DataUsageLow: String { return self._s[736]! } - public var Settings_ProxyConnected: String { return self._s[737]! } - public var Channel_AdminLogFilter_EventsPinned: String { return self._s[738]! } - public var PhotoEditor_QualityVeryLow: String { return self._s[739]! } - public var Channel_AdminLogFilter_EventsDeletedMessages: String { return self._s[740]! } - public var Passport_PasswordPlaceholder: String { return self._s[741]! } - public var Message_PinnedInvoice: String { return self._s[742]! } - public var Passport_Identity_IssueDate: String { return self._s[743]! } - public var Passport_Language_pl: String { return self._s[744]! } + public var Calls_NewCall: String { return self._s[733]! } + public var Call_StatusEnded: String { return self._s[734]! } + public var AutoDownloadSettings_DataUsageLow: String { return self._s[735]! } + public var Settings_ProxyConnected: String { return self._s[736]! } + public var Channel_AdminLogFilter_EventsPinned: String { return self._s[737]! } + public var PhotoEditor_QualityVeryLow: String { return self._s[738]! } + public var Channel_AdminLogFilter_EventsDeletedMessages: String { return self._s[739]! } + public var Passport_PasswordPlaceholder: String { return self._s[740]! } + public var Message_PinnedInvoice: String { return self._s[741]! } + public var Passport_Identity_IssueDate: String { return self._s[742]! } + public var Passport_Language_pl: String { return self._s[743]! } public func ChannelInfo_ChannelForbidden(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[745]!, self._r[745]!, [_0]) + return formatWithArgumentRanges(self._s[744]!, self._r[744]!, [_0]) } - public var Call_StatusConnecting: String { return self._s[746]! } - public var SocksProxySetup_PasteFromClipboard: String { return self._s[747]! } + public var Call_StatusConnecting: String { return self._s[745]! } + public var SocksProxySetup_PasteFromClipboard: String { return self._s[746]! } public func Username_UsernameIsAvailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[748]!, self._r[748]!, [_0]) + return formatWithArgumentRanges(self._s[747]!, self._r[747]!, [_0]) } - public var ChatSettings_ConnectionType_UseProxy: String { return self._s[750]! } - public var Common_Edit: String { return self._s[751]! } - public var PrivacySettings_LastSeenNobody: String { return self._s[752]! } + public var ChatSettings_ConnectionType_UseProxy: String { return self._s[749]! } + public var Common_Edit: String { return self._s[750]! } + public var PrivacySettings_LastSeenNobody: String { return self._s[751]! } public func Notification_LeftChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[753]!, self._r[753]!, [_0]) + return formatWithArgumentRanges(self._s[752]!, self._r[752]!, [_0]) } - public var GroupInfo_ChatAdmins: String { return self._s[754]! } - public var PrivateDataSettings_Title: String { return self._s[755]! } - public var Login_CancelPhoneVerificationStop: String { return self._s[756]! } - public var ChatList_Read: String { return self._s[757]! } - public var Wallet_WordImport_Text: String { return self._s[758]! } - public var Undo_ChatClearedForBothSides: String { return self._s[759]! } - public var ChatListFolder_AddChats: String { return self._s[760]! } - public var GroupPermission_SectionTitle: String { return self._s[761]! } - public var TwoFactorSetup_Intro_Title: String { return self._s[763]! } + public var GroupInfo_ChatAdmins: String { return self._s[753]! } + public var PrivateDataSettings_Title: String { return self._s[754]! } + public var Login_CancelPhoneVerificationStop: String { return self._s[755]! } + public var ChatList_Read: String { return self._s[756]! } + public var Wallet_WordImport_Text: String { return self._s[757]! } + public var Undo_ChatClearedForBothSides: String { return self._s[758]! } + public var ChatListFolder_AddChats: String { return self._s[759]! } + public var GroupPermission_SectionTitle: String { return self._s[760]! } + public var TwoFactorSetup_Intro_Title: String { return self._s[762]! } public func PUSH_CHAT_LEFT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[764]!, self._r[764]!, [_1, _2]) + return formatWithArgumentRanges(self._s[763]!, self._r[763]!, [_1, _2]) } - public var Checkout_ErrorPaymentFailed: String { return self._s[765]! } - public var Update_UpdateApp: String { return self._s[767]! } - public var Group_Username_RevokeExistingUsernamesInfo: String { return self._s[768]! } - public var Settings_Appearance: String { return self._s[769]! } - public var SettingsSearch_Synonyms_Stickers_SuggestStickers: String { return self._s[773]! } - public var Watch_Location_Access: String { return self._s[774]! } - public var ShareMenu_CopyShareLink: String { return self._s[776]! } - public var TwoStepAuth_SetupHintTitle: String { return self._s[777]! } - public var Conversation_Theme: String { return self._s[779]! } + public var Checkout_ErrorPaymentFailed: String { return self._s[764]! } + public var Update_UpdateApp: String { return self._s[766]! } + public var Group_Username_RevokeExistingUsernamesInfo: String { return self._s[767]! } + public var Settings_Appearance: String { return self._s[768]! } + public var SettingsSearch_Synonyms_Stickers_SuggestStickers: String { return self._s[772]! } + public var Watch_Location_Access: String { return self._s[773]! } + public var ShareMenu_CopyShareLink: String { return self._s[775]! } + public var TwoStepAuth_SetupHintTitle: String { return self._s[776]! } + public var Conversation_Theme: String { return self._s[778]! } public func DialogList_SingleRecordingVideoMessageSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[780]!, self._r[780]!, [_0]) + return formatWithArgumentRanges(self._s[779]!, self._r[779]!, [_0]) } - public var Notifications_ClassicTones: String { return self._s[781]! } - public var Weekday_ShortWednesday: String { return self._s[782]! } - public var WallpaperPreview_SwipeColorsBottomText: String { return self._s[783]! } - public var Undo_LeftGroup: String { return self._s[786]! } - public var ChatListFolder_DiscardCancel: String { return self._s[787]! } - public var Wallet_RestoreFailed_Text: String { return self._s[788]! } - public var Conversation_LinkDialogCopy: String { return self._s[789]! } - public var Wallet_TransactionInfo_NoAddress: String { return self._s[791]! } - public var Wallet_Navigation_Back: String { return self._s[792]! } - public var KeyCommand_FocusOnInputField: String { return self._s[793]! } - public var Contacts_SelectAll: String { return self._s[794]! } - public var Preview_SaveToCameraRoll: String { return self._s[795]! } - public var PrivacySettings_PasscodeOff: String { return self._s[796]! } - public var Appearance_ThemePreview_ChatList_6_Name: String { return self._s[797]! } + public var Notifications_ClassicTones: String { return self._s[780]! } + public var Weekday_ShortWednesday: String { return self._s[781]! } + public var WallpaperPreview_SwipeColorsBottomText: String { return self._s[782]! } + public var Undo_LeftGroup: String { return self._s[785]! } + public var ChatListFolder_DiscardCancel: String { return self._s[786]! } + public var Wallet_RestoreFailed_Text: String { return self._s[787]! } + public var Conversation_LinkDialogCopy: String { return self._s[788]! } + public var Wallet_TransactionInfo_NoAddress: String { return self._s[790]! } + public var Wallet_Navigation_Back: String { return self._s[791]! } + public var KeyCommand_FocusOnInputField: String { return self._s[792]! } + public var Contacts_SelectAll: String { return self._s[793]! } + public var Preview_SaveToCameraRoll: String { return self._s[794]! } + public var PrivacySettings_PasscodeOff: String { return self._s[795]! } + public var Appearance_ThemePreview_ChatList_6_Name: String { return self._s[796]! } public func PUSH_CHANNEL_MESSAGE_QUIZ(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[798]!, self._r[798]!, [_1]) + return formatWithArgumentRanges(self._s[797]!, self._r[797]!, [_1]) } - public var Wallpaper_Title: String { return self._s[799]! } - public var Conversation_FilePhotoOrVideo: String { return self._s[800]! } - public var AccessDenied_Camera: String { return self._s[801]! } - public var Watch_Compose_CurrentLocation: String { return self._s[802]! } - public var PeerInfo_ButtonMessage: String { return self._s[804]! } - public var Channel_DiscussionGroup_MakeHistoryPublicProceed: String { return self._s[805]! } + public var Wallpaper_Title: String { return self._s[798]! } + public var Conversation_FilePhotoOrVideo: String { return self._s[799]! } + public var AccessDenied_Camera: String { return self._s[800]! } + public var Watch_Compose_CurrentLocation: String { return self._s[801]! } + public var PeerInfo_ButtonMessage: String { return self._s[803]! } + public var Channel_DiscussionGroup_MakeHistoryPublicProceed: String { return self._s[804]! } public func SecretImage_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[806]!, self._r[806]!, [_0]) + return formatWithArgumentRanges(self._s[805]!, self._r[805]!, [_0]) } - public var GroupInfo_InvitationLinkDoesNotExist: String { return self._s[807]! } - public var Passport_Language_ro: String { return self._s[808]! } - public var EditTheme_UploadNewTheme: String { return self._s[809]! } - public var CheckoutInfo_SaveInfoHelp: String { return self._s[810]! } - public var Wallet_Intro_Terms: String { return self._s[811]! } + public var GroupInfo_InvitationLinkDoesNotExist: String { return self._s[806]! } + public var Passport_Language_ro: String { return self._s[807]! } + public var EditTheme_UploadNewTheme: String { return self._s[808]! } + public var CheckoutInfo_SaveInfoHelp: String { return self._s[809]! } + public var Wallet_Intro_Terms: String { return self._s[810]! } public func Notification_SecretChatMessageScreenshot(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[812]!, self._r[812]!, [_0]) + return formatWithArgumentRanges(self._s[811]!, self._r[811]!, [_0]) } - public var Login_CancelPhoneVerification: String { return self._s[813]! } - public var State_ConnectingToProxy: String { return self._s[814]! } - public var Calls_RatingTitle: String { return self._s[815]! } - public var Generic_ErrorMoreInfo: String { return self._s[816]! } - public var ChatList_Search_ShowMore: String { return self._s[817]! } - public var Appearance_PreviewReplyText: String { return self._s[818]! } - public var CheckoutInfo_ShippingInfoPostcodePlaceholder: String { return self._s[819]! } + public var Login_CancelPhoneVerification: String { return self._s[812]! } + public var State_ConnectingToProxy: String { return self._s[813]! } + public var Calls_RatingTitle: String { return self._s[814]! } + public var Generic_ErrorMoreInfo: String { return self._s[815]! } + public var ChatList_Search_ShowMore: String { return self._s[816]! } + public var Appearance_PreviewReplyText: String { return self._s[817]! } + public var CheckoutInfo_ShippingInfoPostcodePlaceholder: String { return self._s[818]! } public func Wallet_Send_Balance(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[820]!, self._r[820]!, [_0]) + return formatWithArgumentRanges(self._s[819]!, self._r[819]!, [_0]) } - public var IntentsSettings_SuggestedChatsContacts: String { return self._s[821]! } - public var SharedMedia_CategoryLinks: String { return self._s[822]! } - public var Calls_Missed: String { return self._s[823]! } - public var Cache_Photos: String { return self._s[827]! } - public var GroupPermission_NoAddMembers: String { return self._s[828]! } - public var ScheduledMessages_Title: String { return self._s[829]! } + public var IntentsSettings_SuggestedChatsContacts: String { return self._s[820]! } + public var SharedMedia_CategoryLinks: String { return self._s[821]! } + public var Calls_Missed: String { return self._s[822]! } + public var Cache_Photos: String { return self._s[826]! } + public var GroupPermission_NoAddMembers: String { return self._s[827]! } + public var ScheduledMessages_Title: String { return self._s[828]! } public func Channel_AdminLog_MessageUnpinned(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[830]!, self._r[830]!, [_0]) + return formatWithArgumentRanges(self._s[829]!, self._r[829]!, [_0]) } - public var Conversation_ShareBotLocationConfirmationTitle: String { return self._s[831]! } - public var Settings_ProxyDisabled: String { return self._s[832]! } + public var Conversation_ShareBotLocationConfirmationTitle: String { return self._s[830]! } + public var Settings_ProxyDisabled: String { return self._s[831]! } public func Settings_ApplyProxyAlertCredentials(_ _1: String, _ _2: String, _ _3: String, _ _4: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[833]!, self._r[833]!, [_1, _2, _3, _4]) + return formatWithArgumentRanges(self._s[832]!, self._r[832]!, [_1, _2, _3, _4]) } public func Conversation_RestrictedMediaTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[834]!, self._r[834]!, [_0]) + return formatWithArgumentRanges(self._s[833]!, self._r[833]!, [_0]) } - public var Stats_ViewsPerPost: String { return self._s[836]! } - public var ChatList_Context_RemoveFromRecents: String { return self._s[837]! } - public var Appearance_Title: String { return self._s[838]! } + public var Stats_ViewsPerPost: String { return self._s[835]! } + public var ChatList_Context_RemoveFromRecents: String { return self._s[836]! } + public var Appearance_Title: String { return self._s[837]! } public func Time_MonthOfYear_m2(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[840]!, self._r[840]!, [_0]) + return formatWithArgumentRanges(self._s[839]!, self._r[839]!, [_0]) } - public var Conversation_WalletRequiredText: String { return self._s[841]! } - public var StickerPacksSettings_ShowStickersButtonHelp: String { return self._s[842]! } - public var OldChannels_NoticeCreateText: String { return self._s[843]! } - public var Channel_EditMessageErrorGeneric: String { return self._s[844]! } - public var Privacy_Calls_IntegrationHelp: String { return self._s[845]! } - public var Preview_DeletePhoto: String { return self._s[846]! } - public var Appearance_AppIconFilledX: String { return self._s[847]! } - public var PrivacySettings_PrivacyTitle: String { return self._s[848]! } + public var Conversation_WalletRequiredText: String { return self._s[840]! } + public var StickerPacksSettings_ShowStickersButtonHelp: String { return self._s[841]! } + public var OldChannels_NoticeCreateText: String { return self._s[842]! } + public var Channel_EditMessageErrorGeneric: String { return self._s[843]! } + public var Privacy_Calls_IntegrationHelp: String { return self._s[844]! } + public var Preview_DeletePhoto: String { return self._s[845]! } + public var Appearance_AppIconFilledX: String { return self._s[846]! } + public var PrivacySettings_PrivacyTitle: String { return self._s[847]! } public func Conversation_BotInteractiveUrlAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[849]!, self._r[849]!, [_0]) + return formatWithArgumentRanges(self._s[848]!, self._r[848]!, [_0]) } - public var ChatListFolder_TitleEdit: String { return self._s[852]! } - public var MuteFor_Forever: String { return self._s[853]! } - public var Coub_TapForSound: String { return self._s[854]! } - public var Map_LocatingError: String { return self._s[855]! } - public var TwoStepAuth_EmailChangeSuccess: String { return self._s[857]! } - public var Conversation_SendMessage_SendSilently: String { return self._s[858]! } - public var VoiceOver_MessageContextOpenMessageMenu: String { return self._s[859]! } + public var ChatListFolder_TitleEdit: String { return self._s[851]! } + public var MuteFor_Forever: String { return self._s[852]! } + public var Coub_TapForSound: String { return self._s[853]! } + public var Map_LocatingError: String { return self._s[854]! } + public var TwoStepAuth_EmailChangeSuccess: String { return self._s[856]! } + public var Conversation_SendMessage_SendSilently: String { return self._s[857]! } + public var VoiceOver_MessageContextOpenMessageMenu: String { return self._s[858]! } public func Wallet_Time_PreciseDate_m8(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[860]!, self._r[860]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[859]!, self._r[859]!, [_1, _2, _3]) } - public var Passport_ForgottenPassword: String { return self._s[861]! } - public var GroupInfo_InviteLink_RevokeLink: String { return self._s[862]! } - public var StickerPacksSettings_ArchivedPacks: String { return self._s[863]! } - public var Login_TermsOfServiceSignupDecline: String { return self._s[865]! } - public var Channel_Moderator_AccessLevelRevoke: String { return self._s[866]! } - public var Message_Location: String { return self._s[867]! } - public var Passport_Identity_NamePlaceholder: String { return self._s[868]! } - public var Channel_Management_Title: String { return self._s[869]! } - public var DialogList_SearchSectionDialogs: String { return self._s[871]! } - public var Compose_NewChannel_Members: String { return self._s[872]! } + public var Passport_ForgottenPassword: String { return self._s[860]! } + public var GroupInfo_InviteLink_RevokeLink: String { return self._s[861]! } + public var StickerPacksSettings_ArchivedPacks: String { return self._s[862]! } + public var Login_TermsOfServiceSignupDecline: String { return self._s[864]! } + public var Channel_Moderator_AccessLevelRevoke: String { return self._s[865]! } + public var Message_Location: String { return self._s[866]! } + public var Passport_Identity_NamePlaceholder: String { return self._s[867]! } + public var Channel_Management_Title: String { return self._s[868]! } + public var DialogList_SearchSectionDialogs: String { return self._s[870]! } + public var Compose_NewChannel_Members: String { return self._s[871]! } public func DialogList_SingleUploadingFileSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[873]!, self._r[873]!, [_0]) + return formatWithArgumentRanges(self._s[872]!, self._r[872]!, [_0]) } - public var GroupInfo_Location: String { return self._s[874]! } - public var Appearance_ThemePreview_ChatList_5_Name: String { return self._s[875]! } - public var ClearCache_Clear: String { return self._s[876]! } - public var InstantPage_FeedbackButtonShort: String { return self._s[877]! } - public var AutoNightTheme_ScheduledFrom: String { return self._s[878]! } - public var PhotoEditor_WarmthTool: String { return self._s[879]! } - public var Passport_Language_tr: String { return self._s[880]! } + public var GroupInfo_Location: String { return self._s[873]! } + public var Appearance_ThemePreview_ChatList_5_Name: String { return self._s[874]! } + public var ClearCache_Clear: String { return self._s[875]! } + public var InstantPage_FeedbackButtonShort: String { return self._s[876]! } + public var AutoNightTheme_ScheduledFrom: String { return self._s[877]! } + public var PhotoEditor_WarmthTool: String { return self._s[878]! } + public var Passport_Language_tr: String { return self._s[879]! } public func PUSH_MESSAGE_GAME_SCORE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[881]!, self._r[881]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[880]!, self._r[880]!, [_1, _2, _3]) } - public var OldChannels_NoticeUpgradeText: String { return self._s[882]! } - public var Login_ResetAccountProtected_Reset: String { return self._s[884]! } - public var Watch_PhotoView_Title: String { return self._s[885]! } - public var Passport_Phone_Delete: String { return self._s[886]! } - public var Undo_ChatDeletedForBothSides: String { return self._s[887]! } - public var Conversation_EditingMessageMediaEditCurrentPhoto: String { return self._s[888]! } - public var GroupInfo_Permissions: String { return self._s[889]! } - public var PasscodeSettings_TurnPasscodeOff: String { return self._s[890]! } - public var Profile_ShareContactButton: String { return self._s[891]! } - public var ChatSettings_Other: String { return self._s[892]! } - public var UserInfo_NotificationsDisabled: String { return self._s[893]! } - public var CheckoutInfo_ShippingInfoCity: String { return self._s[894]! } - public var LastSeen_WithinAMonth: String { return self._s[895]! } - public var VoiceOver_Chat_PlayHint: String { return self._s[896]! } - public var Conversation_ReportGroupLocation: String { return self._s[897]! } - public var Conversation_EncryptionCanceled: String { return self._s[898]! } - public var MediaPicker_GroupDescription: String { return self._s[899]! } - public var WebSearch_Images: String { return self._s[900]! } + public var OldChannels_NoticeUpgradeText: String { return self._s[881]! } + public var Login_ResetAccountProtected_Reset: String { return self._s[883]! } + public var Watch_PhotoView_Title: String { return self._s[884]! } + public var Passport_Phone_Delete: String { return self._s[885]! } + public var Undo_ChatDeletedForBothSides: String { return self._s[886]! } + public var Conversation_EditingMessageMediaEditCurrentPhoto: String { return self._s[887]! } + public var GroupInfo_Permissions: String { return self._s[888]! } + public var PasscodeSettings_TurnPasscodeOff: String { return self._s[889]! } + public var Profile_ShareContactButton: String { return self._s[890]! } + public var ChatSettings_Other: String { return self._s[891]! } + public var UserInfo_NotificationsDisabled: String { return self._s[892]! } + public var CheckoutInfo_ShippingInfoCity: String { return self._s[893]! } + public var LastSeen_WithinAMonth: String { return self._s[894]! } + public var VoiceOver_Chat_PlayHint: String { return self._s[895]! } + public var Conversation_ReportGroupLocation: String { return self._s[896]! } + public var Conversation_EncryptionCanceled: String { return self._s[897]! } + public var MediaPicker_GroupDescription: String { return self._s[898]! } + public var WebSearch_Images: String { return self._s[899]! } public func Channel_Management_PromotedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[901]!, self._r[901]!, [_0]) + return formatWithArgumentRanges(self._s[900]!, self._r[900]!, [_0]) } - public var Message_Photo: String { return self._s[902]! } - public var PasscodeSettings_HelpBottom: String { return self._s[903]! } - public var AutoDownloadSettings_VideosTitle: String { return self._s[904]! } - public var VoiceOver_Media_PlaybackRateChange: String { return self._s[905]! } - public var Passport_Identity_AddDriversLicense: String { return self._s[906]! } - public var TwoStepAuth_EnterPasswordPassword: String { return self._s[907]! } - public var NotificationsSound_Calypso: String { return self._s[908]! } - public var Map_Map: String { return self._s[909]! } + public var Message_Photo: String { return self._s[901]! } + public var PasscodeSettings_HelpBottom: String { return self._s[902]! } + public var AutoDownloadSettings_VideosTitle: String { return self._s[903]! } + public var VoiceOver_Media_PlaybackRateChange: String { return self._s[904]! } + public var Passport_Identity_AddDriversLicense: String { return self._s[905]! } + public var TwoStepAuth_EnterPasswordPassword: String { return self._s[906]! } + public var NotificationsSound_Calypso: String { return self._s[907]! } + public var Map_Map: String { return self._s[908]! } public func Conversation_LiveLocationYouAndOther(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[910]!, self._r[910]!, [_0]) + return formatWithArgumentRanges(self._s[909]!, self._r[909]!, [_0]) } - public var CheckoutInfo_ReceiverInfoTitle: String { return self._s[912]! } - public var ChatSettings_TextSizeUnits: String { return self._s[913]! } + public var CheckoutInfo_ReceiverInfoTitle: String { return self._s[911]! } + public var ChatSettings_TextSizeUnits: String { return self._s[912]! } public func VoiceOver_Chat_FileFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[914]!, self._r[914]!, [_0]) + return formatWithArgumentRanges(self._s[913]!, self._r[913]!, [_0]) } - public var Common_of: String { return self._s[915]! } - public var Conversation_ForwardContacts: String { return self._s[918]! } - public var IntentsSettings_SuggestByAll: String { return self._s[920]! } + public var Common_of: String { return self._s[914]! } + public var Conversation_ForwardContacts: String { return self._s[917]! } + public var IntentsSettings_SuggestByAll: String { return self._s[919]! } public func Call_AnsweringWithAccount(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[921]!, self._r[921]!, [_0]) + return formatWithArgumentRanges(self._s[920]!, self._r[920]!, [_0]) } - public var Passport_Language_hy: String { return self._s[922]! } - public var Notifications_MessageNotificationsHelp: String { return self._s[923]! } - public var AutoDownloadSettings_Reset: String { return self._s[924]! } - public var Wallet_TransactionInfo_AddressCopied: String { return self._s[925]! } - public var Paint_ClearConfirm: String { return self._s[926]! } - public var Camera_VideoMode: String { return self._s[927]! } + public var Passport_Language_hy: String { return self._s[921]! } + public var Notifications_MessageNotificationsHelp: String { return self._s[922]! } + public var AutoDownloadSettings_Reset: String { return self._s[923]! } + public var Wallet_TransactionInfo_AddressCopied: String { return self._s[924]! } + public var Paint_ClearConfirm: String { return self._s[925]! } + public var Camera_VideoMode: String { return self._s[926]! } public func Conversation_RestrictedStickersTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[928]!, self._r[928]!, [_0]) + return formatWithArgumentRanges(self._s[927]!, self._r[927]!, [_0]) } - public var Privacy_Calls_AlwaysAllow_Placeholder: String { return self._s[929]! } - public var Conversation_ViewBackground: String { return self._s[930]! } + public var Privacy_Calls_AlwaysAllow_Placeholder: String { return self._s[928]! } + public var Conversation_ViewBackground: String { return self._s[929]! } public func Wallet_Info_TransactionDateHeaderYear(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[931]!, self._r[931]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[930]!, self._r[930]!, [_1, _2, _3]) } - public var Passport_Language_el: String { return self._s[932]! } - public var PhotoEditor_Original: String { return self._s[933]! } - public var Settings_FAQ_Button: String { return self._s[935]! } - public var Channel_Setup_PublicNoLink: String { return self._s[937]! } - public var Conversation_UnsupportedMedia: String { return self._s[938]! } - public var Conversation_SlideToCancel: String { return self._s[939]! } - public var Appearance_ThemePreview_ChatList_4_Name: String { return self._s[940]! } - public var Passport_Identity_OneOfTypeInternalPassport: String { return self._s[941]! } - public var CheckoutInfo_ShippingInfoPostcode: String { return self._s[942]! } - public var Conversation_ReportSpamChannelConfirmation: String { return self._s[943]! } - public var AutoNightTheme_NotAvailable: String { return self._s[944]! } - public var Conversation_Owner: String { return self._s[945]! } - public var Common_Create: String { return self._s[946]! } - public var Settings_ApplyProxyAlertEnable: String { return self._s[947]! } - public var ContactList_Context_Call: String { return self._s[948]! } - public var Localization_ChooseLanguage: String { return self._s[950]! } - public var ChatList_Context_AddToContacts: String { return self._s[952]! } - public var OldChannels_NoticeTitle: String { return self._s[953]! } - public var Settings_Proxy: String { return self._s[955]! } - public var Privacy_TopPeersHelp: String { return self._s[956]! } - public var CheckoutInfo_ShippingInfoCountryPlaceholder: String { return self._s[957]! } - public var Chat_UnsendMyMessages: String { return self._s[958]! } + public var Passport_Language_el: String { return self._s[931]! } + public var PhotoEditor_Original: String { return self._s[932]! } + public var Settings_FAQ_Button: String { return self._s[934]! } + public var Channel_Setup_PublicNoLink: String { return self._s[936]! } + public var Conversation_UnsupportedMedia: String { return self._s[937]! } + public var Conversation_SlideToCancel: String { return self._s[938]! } + public var Appearance_ThemePreview_ChatList_4_Name: String { return self._s[939]! } + public var Passport_Identity_OneOfTypeInternalPassport: String { return self._s[940]! } + public var CheckoutInfo_ShippingInfoPostcode: String { return self._s[941]! } + public var Conversation_ReportSpamChannelConfirmation: String { return self._s[942]! } + public var AutoNightTheme_NotAvailable: String { return self._s[943]! } + public var Conversation_Owner: String { return self._s[944]! } + public var Common_Create: String { return self._s[945]! } + public var Settings_ApplyProxyAlertEnable: String { return self._s[946]! } + public var ContactList_Context_Call: String { return self._s[947]! } + public var Localization_ChooseLanguage: String { return self._s[949]! } + public var ChatList_Context_AddToContacts: String { return self._s[951]! } + public var OldChannels_NoticeTitle: String { return self._s[952]! } + public var Settings_Proxy: String { return self._s[954]! } + public var Privacy_TopPeersHelp: String { return self._s[955]! } + public var CheckoutInfo_ShippingInfoCountryPlaceholder: String { return self._s[956]! } + public var Chat_UnsendMyMessages: String { return self._s[957]! } public func VoiceOver_Chat_Duration(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[959]!, self._r[959]!, [_0]) + return formatWithArgumentRanges(self._s[958]!, self._r[958]!, [_0]) } - public var TwoStepAuth_ConfirmationAbort: String { return self._s[960]! } + public var TwoStepAuth_ConfirmationAbort: String { return self._s[959]! } public func Contacts_AccessDeniedHelpPortrait(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[962]!, self._r[962]!, [_0]) + return formatWithArgumentRanges(self._s[961]!, self._r[961]!, [_0]) } - public var Contacts_SortedByPresence: String { return self._s[963]! } - public var Passport_Identity_SurnamePlaceholder: String { return self._s[964]! } - public var Cache_Title: String { return self._s[965]! } + public var Contacts_SortedByPresence: String { return self._s[962]! } + public var Passport_Identity_SurnamePlaceholder: String { return self._s[963]! } + public var Cache_Title: String { return self._s[964]! } public func Login_PhoneBannedEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[966]!, self._r[966]!, [_0]) + return formatWithArgumentRanges(self._s[965]!, self._r[965]!, [_0]) } - public var TwoStepAuth_EmailCodeExpired: String { return self._s[967]! } - public var Channel_Moderator_Title: String { return self._s[968]! } - public var InstantPage_AutoNightTheme: String { return self._s[970]! } + public var TwoStepAuth_EmailCodeExpired: String { return self._s[966]! } + public var Channel_Moderator_Title: String { return self._s[967]! } + public var InstantPage_AutoNightTheme: String { return self._s[969]! } public func PUSH_MESSAGE_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[973]!, self._r[973]!, [_1]) + return formatWithArgumentRanges(self._s[972]!, self._r[972]!, [_1]) } - public var Passport_Scans_Upload: String { return self._s[974]! } - public var Undo_Undo: String { return self._s[976]! } - public var Contacts_AccessDeniedHelpON: String { return self._s[977]! } - public var TwoStepAuth_RemovePassword: String { return self._s[978]! } - public var Common_Delete: String { return self._s[979]! } - public var Contacts_AddPeopleNearby: String { return self._s[981]! } - public var Conversation_ContextMenuDelete: String { return self._s[982]! } - public var SocksProxySetup_Credentials: String { return self._s[983]! } - public var Appearance_EditTheme: String { return self._s[985]! } - public var ClearCache_StorageOtherApps: String { return self._s[986]! } - public var PasscodeSettings_AutoLock_Disabled: String { return self._s[988]! } - public var Wallet_Send_NetworkErrorText: String { return self._s[989]! } - public var AuthSessions_DevicesTitle: String { return self._s[991]! } - public var Passport_Address_OneOfTypeRentalAgreement: String { return self._s[993]! } - public var Conversation_ShareBotContactConfirmationTitle: String { return self._s[994]! } - public var Passport_Language_id: String { return self._s[996]! } - public var WallpaperSearch_ColorTeal: String { return self._s[997]! } - public var ChannelIntro_Title: String { return self._s[998]! } + public var Passport_Scans_Upload: String { return self._s[973]! } + public var Undo_Undo: String { return self._s[975]! } + public var Contacts_AccessDeniedHelpON: String { return self._s[976]! } + public var TwoStepAuth_RemovePassword: String { return self._s[977]! } + public var Common_Delete: String { return self._s[978]! } + public var Contacts_AddPeopleNearby: String { return self._s[980]! } + public var Conversation_ContextMenuDelete: String { return self._s[981]! } + public var SocksProxySetup_Credentials: String { return self._s[982]! } + public var Appearance_EditTheme: String { return self._s[984]! } + public var ClearCache_StorageOtherApps: String { return self._s[985]! } + public var PasscodeSettings_AutoLock_Disabled: String { return self._s[987]! } + public var Wallet_Send_NetworkErrorText: String { return self._s[988]! } + public var AuthSessions_DevicesTitle: String { return self._s[990]! } + public var Passport_Address_OneOfTypeRentalAgreement: String { return self._s[992]! } + public var Conversation_ShareBotContactConfirmationTitle: String { return self._s[993]! } + public var Passport_Language_id: String { return self._s[995]! } + public var WallpaperSearch_ColorTeal: String { return self._s[996]! } + public var ChannelIntro_Title: String { return self._s[997]! } public func Channel_AdminLog_MessageToggleSignaturesOff(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[999]!, self._r[999]!, [_0]) + return formatWithArgumentRanges(self._s[998]!, self._r[998]!, [_0]) } - public var VoiceOver_Chat_OpenLinkHint: String { return self._s[1001]! } - public var VoiceOver_Chat_Reply: String { return self._s[1002]! } - public var ScheduledMessages_BotActionUnavailable: String { return self._s[1003]! } - public var Channel_Info_Description: String { return self._s[1004]! } - public var Stickers_FavoriteStickers: String { return self._s[1005]! } - public var Channel_BanUser_PermissionAddMembers: String { return self._s[1006]! } - public var Notifications_DisplayNamesOnLockScreen: String { return self._s[1007]! } - public var ChatSearch_ResultsTooltip: String { return self._s[1008]! } - public var Wallet_VoiceOver_Editing_ClearText: String { return self._s[1009]! } - public var Calls_NoMissedCallsPlacehoder: String { return self._s[1010]! } - public var Group_PublicLink_Placeholder: String { return self._s[1011]! } - public var Notifications_ExceptionsDefaultSound: String { return self._s[1012]! } + public var VoiceOver_Chat_OpenLinkHint: String { return self._s[1000]! } + public var VoiceOver_Chat_Reply: String { return self._s[1001]! } + public var ScheduledMessages_BotActionUnavailable: String { return self._s[1002]! } + public var Channel_Info_Description: String { return self._s[1003]! } + public var Stickers_FavoriteStickers: String { return self._s[1004]! } + public var Channel_BanUser_PermissionAddMembers: String { return self._s[1005]! } + public var Notifications_DisplayNamesOnLockScreen: String { return self._s[1006]! } + public var ChatSearch_ResultsTooltip: String { return self._s[1007]! } + public var Wallet_VoiceOver_Editing_ClearText: String { return self._s[1008]! } + public var Calls_NoMissedCallsPlacehoder: String { return self._s[1009]! } + public var Group_PublicLink_Placeholder: String { return self._s[1010]! } + public var Notifications_ExceptionsDefaultSound: String { return self._s[1011]! } public func PUSH_CHANNEL_MESSAGE_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1013]!, self._r[1013]!, [_1]) + return formatWithArgumentRanges(self._s[1012]!, self._r[1012]!, [_1]) } - public var TextFormat_Underline: String { return self._s[1014]! } + public var TextFormat_Underline: String { return self._s[1013]! } public func DialogList_SearchSubtitleFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1016]!, self._r[1016]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1015]!, self._r[1015]!, [_1, _2]) } public func Channel_AdminLog_MessageRemovedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1017]!, self._r[1017]!, [_0]) + return formatWithArgumentRanges(self._s[1016]!, self._r[1016]!, [_0]) } - public var Appearance_ThemePreview_ChatList_3_Name: String { return self._s[1018]! } + public var Appearance_ThemePreview_ChatList_3_Name: String { return self._s[1017]! } public func Channel_OwnershipTransfer_TransferCompleted(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1019]!, self._r[1019]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1018]!, self._r[1018]!, [_1, _2]) } - public var Wallet_Intro_ImportExisting: String { return self._s[1020]! } - public var GroupPermission_Delete: String { return self._s[1021]! } - public var Passport_Language_uk: String { return self._s[1022]! } - public var StickerPack_HideStickers: String { return self._s[1024]! } - public var ChangePhoneNumberNumber_NumberPlaceholder: String { return self._s[1025]! } + public var Wallet_Intro_ImportExisting: String { return self._s[1019]! } + public var GroupPermission_Delete: String { return self._s[1020]! } + public var Passport_Language_uk: String { return self._s[1021]! } + public var StickerPack_HideStickers: String { return self._s[1023]! } + public var ChangePhoneNumberNumber_NumberPlaceholder: String { return self._s[1024]! } public func PUSH_CHAT_MESSAGE_PHOTO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1026]!, self._r[1026]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1025]!, self._r[1025]!, [_1, _2]) } - public var Activity_UploadingVideoMessage: String { return self._s[1027]! } + public var Activity_UploadingVideoMessage: String { return self._s[1026]! } public func GroupPermission_ApplyAlertText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1028]!, self._r[1028]!, [_0]) + return formatWithArgumentRanges(self._s[1027]!, self._r[1027]!, [_0]) } - public var Channel_TitleInfo: String { return self._s[1029]! } - public var StickerPacksSettings_ArchivedPacks_Info: String { return self._s[1030]! } - public var Settings_CallSettings: String { return self._s[1031]! } - public var Camera_SquareMode: String { return self._s[1032]! } - public var Conversation_SendMessage_ScheduleMessage: String { return self._s[1033]! } - public var GroupInfo_SharedMediaNone: String { return self._s[1034]! } + public var Channel_TitleInfo: String { return self._s[1028]! } + public var StickerPacksSettings_ArchivedPacks_Info: String { return self._s[1029]! } + public var Settings_CallSettings: String { return self._s[1030]! } + public var Camera_SquareMode: String { return self._s[1031]! } + public var Conversation_SendMessage_ScheduleMessage: String { return self._s[1032]! } + public var GroupInfo_SharedMediaNone: String { return self._s[1033]! } public func PUSH_MESSAGE_VIDEO_SECRET(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1035]!, self._r[1035]!, [_1]) + return formatWithArgumentRanges(self._s[1034]!, self._r[1034]!, [_1]) } - public var Bot_GenericBotStatus: String { return self._s[1036]! } - public var Application_Update: String { return self._s[1038]! } - public var Month_ShortJanuary: String { return self._s[1039]! } - public var Contacts_PermissionsKeepDisabled: String { return self._s[1040]! } - public var Channel_AdminLog_BanReadMessages: String { return self._s[1041]! } - public var Settings_AppLanguage_Unofficial: String { return self._s[1042]! } - public var Passport_Address_Street2Placeholder: String { return self._s[1043]! } + public var Bot_GenericBotStatus: String { return self._s[1035]! } + public var Application_Update: String { return self._s[1037]! } + public var Month_ShortJanuary: String { return self._s[1038]! } + public var Contacts_PermissionsKeepDisabled: String { return self._s[1039]! } + public var Channel_AdminLog_BanReadMessages: String { return self._s[1040]! } + public var Settings_AppLanguage_Unofficial: String { return self._s[1041]! } + public var Passport_Address_Street2Placeholder: String { return self._s[1042]! } public func Map_LiveLocationShortHour(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1044]!, self._r[1044]!, [_0]) + return formatWithArgumentRanges(self._s[1043]!, self._r[1043]!, [_0]) } - public var NetworkUsageSettings_Cellular: String { return self._s[1045]! } - public var Appearance_PreviewOutgoingText: String { return self._s[1046]! } + public var NetworkUsageSettings_Cellular: String { return self._s[1044]! } + public var Appearance_PreviewOutgoingText: String { return self._s[1045]! } public func StickerPackActionInfo_RemovedText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1047]!, self._r[1047]!, [_0]) + return formatWithArgumentRanges(self._s[1046]!, self._r[1046]!, [_0]) } - public var Notifications_PermissionsAllowInSettings: String { return self._s[1048]! } - public var AutoDownloadSettings_OnForAll: String { return self._s[1050]! } - public var Map_Directions: String { return self._s[1051]! } - public var Passport_FieldIdentityTranslationHelp: String { return self._s[1053]! } - public var Appearance_ThemeDay: String { return self._s[1054]! } - public var LogoutOptions_LogOut: String { return self._s[1055]! } - public var Group_PublicLink_Title: String { return self._s[1057]! } - public var Channel_AddBotErrorNoRights: String { return self._s[1058]! } - public var ChatList_Search_ShowLess: String { return self._s[1059]! } - public var Passport_Identity_AddPassport: String { return self._s[1060]! } - public var LocalGroup_ButtonTitle: String { return self._s[1061]! } - public var Stats_InteractionsTitle: String { return self._s[1062]! } - public var Call_Message: String { return self._s[1063]! } - public var PhotoEditor_ExposureTool: String { return self._s[1064]! } - public var Wallet_Receive_CommentInfo: String { return self._s[1066]! } - public var Passport_FieldOneOf_Delimeter: String { return self._s[1067]! } - public var Channel_AdminLog_CanBanUsers: String { return self._s[1069]! } - public var Appearance_ThemePreview_ChatList_2_Name: String { return self._s[1070]! } - public var Appearance_Preview: String { return self._s[1071]! } - public var Compose_ChannelMembers: String { return self._s[1072]! } - public var Conversation_DeleteManyMessages: String { return self._s[1073]! } - public var ReportPeer_ReasonOther_Title: String { return self._s[1074]! } - public var Checkout_ErrorProviderAccountTimeout: String { return self._s[1075]! } - public var TwoStepAuth_ResetAccountConfirmation: String { return self._s[1076]! } - public var Channel_Stickers_CreateYourOwn: String { return self._s[1079]! } - public var Conversation_UpdateTelegram: String { return self._s[1080]! } - public var EditTheme_Create_TopInfo: String { return self._s[1081]! } + public var Notifications_PermissionsAllowInSettings: String { return self._s[1047]! } + public var AutoDownloadSettings_OnForAll: String { return self._s[1049]! } + public var Map_Directions: String { return self._s[1050]! } + public var Passport_FieldIdentityTranslationHelp: String { return self._s[1052]! } + public var Appearance_ThemeDay: String { return self._s[1053]! } + public var LogoutOptions_LogOut: String { return self._s[1054]! } + public var Group_PublicLink_Title: String { return self._s[1056]! } + public var Channel_AddBotErrorNoRights: String { return self._s[1057]! } + public var ChatList_Search_ShowLess: String { return self._s[1058]! } + public var Passport_Identity_AddPassport: String { return self._s[1059]! } + public var LocalGroup_ButtonTitle: String { return self._s[1060]! } + public var Stats_InteractionsTitle: String { return self._s[1061]! } + public var Call_Message: String { return self._s[1062]! } + public var PhotoEditor_ExposureTool: String { return self._s[1063]! } + public var Wallet_Receive_CommentInfo: String { return self._s[1065]! } + public var Passport_FieldOneOf_Delimeter: String { return self._s[1066]! } + public var Channel_AdminLog_CanBanUsers: String { return self._s[1068]! } + public var Appearance_ThemePreview_ChatList_2_Name: String { return self._s[1069]! } + public var Appearance_Preview: String { return self._s[1070]! } + public var Compose_ChannelMembers: String { return self._s[1071]! } + public var Conversation_DeleteManyMessages: String { return self._s[1072]! } + public var ReportPeer_ReasonOther_Title: String { return self._s[1073]! } + public var Checkout_ErrorProviderAccountTimeout: String { return self._s[1074]! } + public var TwoStepAuth_ResetAccountConfirmation: String { return self._s[1075]! } + public var Channel_Stickers_CreateYourOwn: String { return self._s[1078]! } + public var Conversation_UpdateTelegram: String { return self._s[1079]! } + public var EditTheme_Create_TopInfo: String { return self._s[1080]! } public func Notification_PinnedPhotoMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1082]!, self._r[1082]!, [_0]) + return formatWithArgumentRanges(self._s[1081]!, self._r[1081]!, [_0]) } - public var Wallet_WordCheck_Continue: String { return self._s[1083]! } - public var TwoFactorSetup_Hint_Action: String { return self._s[1084]! } - public var IntentsSettings_ResetAll: String { return self._s[1085]! } + public var Wallet_WordCheck_Continue: String { return self._s[1082]! } + public var TwoFactorSetup_Hint_Action: String { return self._s[1083]! } + public var IntentsSettings_ResetAll: String { return self._s[1084]! } public func PUSH_PINNED_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1086]!, self._r[1086]!, [_1]) + return formatWithArgumentRanges(self._s[1085]!, self._r[1085]!, [_1]) } - public var ChatList_RemoveFolder: String { return self._s[1087]! } - public var GroupInfo_Administrators_Title: String { return self._s[1088]! } - public var Privacy_Forwards_PreviewMessageText: String { return self._s[1089]! } + public var ChatList_RemoveFolder: String { return self._s[1086]! } + public var GroupInfo_Administrators_Title: String { return self._s[1087]! } + public var Privacy_Forwards_PreviewMessageText: String { return self._s[1088]! } public func PrivacySettings_LastSeenNobodyPlus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1090]!, self._r[1090]!, [_0]) + return formatWithArgumentRanges(self._s[1089]!, self._r[1089]!, [_0]) } - public var Tour_Title3: String { return self._s[1091]! } - public var Channel_EditAdmin_PermissionInviteSubscribers: String { return self._s[1092]! } - public var Clipboard_SendPhoto: String { return self._s[1096]! } - public var MediaPicker_Videos: String { return self._s[1097]! } - public var Passport_Email_Title: String { return self._s[1098]! } + public var Tour_Title3: String { return self._s[1090]! } + public var Channel_EditAdmin_PermissionInviteSubscribers: String { return self._s[1091]! } + public var Clipboard_SendPhoto: String { return self._s[1095]! } + public var MediaPicker_Videos: String { return self._s[1096]! } + public var Passport_Email_Title: String { return self._s[1097]! } public func PrivacySettings_LastSeenEverybodyMinus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1099]!, self._r[1099]!, [_0]) + return formatWithArgumentRanges(self._s[1098]!, self._r[1098]!, [_0]) } - public var StickerPacksSettings_Title: String { return self._s[1100]! } - public var Conversation_MessageDialogDelete: String { return self._s[1101]! } - public var Privacy_Calls_CustomHelp: String { return self._s[1103]! } - public var Message_Wallpaper: String { return self._s[1104]! } - public var MemberSearch_BotSection: String { return self._s[1105]! } - public var GroupInfo_SetSound: String { return self._s[1106]! } - public var Wallet_Send_EncryptComment: String { return self._s[1107]! } + public var StickerPacksSettings_Title: String { return self._s[1099]! } + public var Conversation_MessageDialogDelete: String { return self._s[1100]! } + public var Privacy_Calls_CustomHelp: String { return self._s[1102]! } + public var Message_Wallpaper: String { return self._s[1103]! } + public var MemberSearch_BotSection: String { return self._s[1104]! } + public var GroupInfo_SetSound: String { return self._s[1105]! } + public var Wallet_Send_EncryptComment: String { return self._s[1106]! } public func Time_TomorrowAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1108]!, self._r[1108]!, [_0]) + return formatWithArgumentRanges(self._s[1107]!, self._r[1107]!, [_0]) } - public var Core_ServiceUserStatus: String { return self._s[1109]! } - public var LiveLocationUpdated_JustNow: String { return self._s[1110]! } - public var Call_StatusFailed: String { return self._s[1111]! } - public var TwoFactorSetup_Email_Placeholder: String { return self._s[1112]! } - public var TwoStepAuth_SetupPasswordDescription: String { return self._s[1113]! } - public var TwoStepAuth_SetPassword: String { return self._s[1114]! } - public var Permissions_PeopleNearbyText_v0: String { return self._s[1115]! } + public var Core_ServiceUserStatus: String { return self._s[1108]! } + public var LiveLocationUpdated_JustNow: String { return self._s[1109]! } + public var Call_StatusFailed: String { return self._s[1110]! } + public var TwoFactorSetup_Email_Placeholder: String { return self._s[1111]! } + public var TwoStepAuth_SetupPasswordDescription: String { return self._s[1112]! } + public var TwoStepAuth_SetPassword: String { return self._s[1113]! } + public var Permissions_PeopleNearbyText_v0: String { return self._s[1114]! } public func SocksProxySetup_ProxyStatusPing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1117]!, self._r[1117]!, [_0]) + return formatWithArgumentRanges(self._s[1116]!, self._r[1116]!, [_0]) } - public var Calls_SubmitRating: String { return self._s[1118]! } - public var Map_NoPlacesNearby: String { return self._s[1119]! } - public var Profile_Username: String { return self._s[1120]! } - public var Bot_DescriptionTitle: String { return self._s[1121]! } - public var MaskStickerSettings_Title: String { return self._s[1122]! } - public var SharedMedia_CategoryOther: String { return self._s[1123]! } - public var GroupInfo_SetGroupPhoto: String { return self._s[1124]! } - public var Common_NotNow: String { return self._s[1125]! } - public var CallFeedback_IncludeLogsInfo: String { return self._s[1126]! } - public var Conversation_ShareMyPhoneNumber: String { return self._s[1127]! } - public var Map_Location: String { return self._s[1128]! } - public var Invitation_JoinGroup: String { return self._s[1129]! } - public var AutoDownloadSettings_Title: String { return self._s[1131]! } - public var Conversation_DiscardVoiceMessageDescription: String { return self._s[1132]! } - public var Channel_ErrorAddBlocked: String { return self._s[1133]! } - public var ChatList_AddChatsToFolder: String { return self._s[1134]! } - public var Conversation_UnblockUser: String { return self._s[1135]! } - public var EditTheme_Edit_TopInfo: String { return self._s[1136]! } - public var Watch_Bot_Restart: String { return self._s[1137]! } - public var TwoStepAuth_Title: String { return self._s[1138]! } - public var Channel_AdminLog_BanSendMessages: String { return self._s[1139]! } - public var Checkout_ShippingMethod: String { return self._s[1140]! } - public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[1141]! } + public var Calls_SubmitRating: String { return self._s[1117]! } + public var Map_NoPlacesNearby: String { return self._s[1118]! } + public var Profile_Username: String { return self._s[1119]! } + public var Bot_DescriptionTitle: String { return self._s[1120]! } + public var MaskStickerSettings_Title: String { return self._s[1121]! } + public var SharedMedia_CategoryOther: String { return self._s[1122]! } + public var GroupInfo_SetGroupPhoto: String { return self._s[1123]! } + public var Common_NotNow: String { return self._s[1124]! } + public var CallFeedback_IncludeLogsInfo: String { return self._s[1125]! } + public var Conversation_ShareMyPhoneNumber: String { return self._s[1126]! } + public var Map_Location: String { return self._s[1127]! } + public var Invitation_JoinGroup: String { return self._s[1128]! } + public var AutoDownloadSettings_Title: String { return self._s[1130]! } + public var Conversation_DiscardVoiceMessageDescription: String { return self._s[1131]! } + public var Channel_ErrorAddBlocked: String { return self._s[1132]! } + public var ChatList_AddChatsToFolder: String { return self._s[1133]! } + public var Conversation_UnblockUser: String { return self._s[1134]! } + public var EditTheme_Edit_TopInfo: String { return self._s[1135]! } + public var Watch_Bot_Restart: String { return self._s[1136]! } + public var TwoStepAuth_Title: String { return self._s[1137]! } + public var Channel_AdminLog_BanSendMessages: String { return self._s[1138]! } + public var Checkout_ShippingMethod: String { return self._s[1139]! } + public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[1140]! } public func PUSH_CHAT_MESSAGE_STICKER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1142]!, self._r[1142]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1141]!, self._r[1141]!, [_1, _2, _3]) } - public var PeerInfo_ButtonDiscuss: String { return self._s[1143]! } - public var EditTheme_ChangeColors: String { return self._s[1145]! } + public var PeerInfo_ButtonDiscuss: String { return self._s[1142]! } + public var EditTheme_ChangeColors: String { return self._s[1144]! } public func Chat_UnsendMyMessagesAlertTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1146]!, self._r[1146]!, [_0]) + return formatWithArgumentRanges(self._s[1145]!, self._r[1145]!, [_0]) } public func Channel_Username_LinkHint(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1147]!, self._r[1147]!, [_0]) + return formatWithArgumentRanges(self._s[1146]!, self._r[1146]!, [_0]) } - public var Appearance_ThemePreview_ChatList_1_Name: String { return self._s[1148]! } - public var SettingsSearch_Synonyms_Data_AutoplayGifs: String { return self._s[1150]! } - public var AuthSessions_TerminateOtherSessions: String { return self._s[1151]! } - public var Contacts_FailedToSendInvitesMessage: String { return self._s[1152]! } - public var PrivacySettings_TwoStepAuth: String { return self._s[1153]! } - public var Notification_Exceptions_PreviewAlwaysOn: String { return self._s[1154]! } - public var SettingsSearch_Synonyms_Privacy_Passcode: String { return self._s[1155]! } - public var Conversation_EditingMessagePanelMedia: String { return self._s[1156]! } - public var Checkout_PaymentMethod_Title: String { return self._s[1157]! } - public var SocksProxySetup_Connection: String { return self._s[1158]! } - public var Group_MessagePhotoRemoved: String { return self._s[1159]! } - public var PeopleNearby_MakeInvisible: String { return self._s[1161]! } - public var Channel_Stickers_NotFound: String { return self._s[1163]! } - public var Group_About_Help: String { return self._s[1164]! } - public var Notification_PassportValueProofOfIdentity: String { return self._s[1165]! } - public var PeopleNearby_Title: String { return self._s[1167]! } + public var Appearance_ThemePreview_ChatList_1_Name: String { return self._s[1147]! } + public var SettingsSearch_Synonyms_Data_AutoplayGifs: String { return self._s[1149]! } + public var AuthSessions_TerminateOtherSessions: String { return self._s[1150]! } + public var Contacts_FailedToSendInvitesMessage: String { return self._s[1151]! } + public var PrivacySettings_TwoStepAuth: String { return self._s[1152]! } + public var Notification_Exceptions_PreviewAlwaysOn: String { return self._s[1153]! } + public var SettingsSearch_Synonyms_Privacy_Passcode: String { return self._s[1154]! } + public var Conversation_EditingMessagePanelMedia: String { return self._s[1155]! } + public var Checkout_PaymentMethod_Title: String { return self._s[1156]! } + public var SocksProxySetup_Connection: String { return self._s[1157]! } + public var Group_MessagePhotoRemoved: String { return self._s[1158]! } + public var PeopleNearby_MakeInvisible: String { return self._s[1160]! } + public var Channel_Stickers_NotFound: String { return self._s[1162]! } + public var Group_About_Help: String { return self._s[1163]! } + public var Notification_PassportValueProofOfIdentity: String { return self._s[1164]! } + public var PeopleNearby_Title: String { return self._s[1166]! } public func ApplyLanguage_ChangeLanguageOfficialText(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1168]!, self._r[1168]!, [_1]) + return formatWithArgumentRanges(self._s[1167]!, self._r[1167]!, [_1]) } - public var Map_Home: String { return self._s[1169]! } - public var Stats_ZoomOut: String { return self._s[1170]! } - public var CheckoutInfo_ShippingInfoStatePlaceholder: String { return self._s[1172]! } - public var Notifications_GroupNotificationsExceptionsHelp: String { return self._s[1173]! } - public var SocksProxySetup_Password: String { return self._s[1174]! } - public var Notifications_PermissionsEnable: String { return self._s[1175]! } - public var TwoStepAuth_ChangeEmail: String { return self._s[1177]! } + public var Map_Home: String { return self._s[1168]! } + public var Stats_ZoomOut: String { return self._s[1169]! } + public var CheckoutInfo_ShippingInfoStatePlaceholder: String { return self._s[1171]! } + public var Notifications_GroupNotificationsExceptionsHelp: String { return self._s[1172]! } + public var SocksProxySetup_Password: String { return self._s[1173]! } + public var Notifications_PermissionsEnable: String { return self._s[1174]! } + public var TwoStepAuth_ChangeEmail: String { return self._s[1176]! } public func Channel_AdminLog_MessageInvitedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1178]!, self._r[1178]!, [_1]) + return formatWithArgumentRanges(self._s[1177]!, self._r[1177]!, [_1]) } public func Time_MonthOfYear_m10(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1180]!, self._r[1180]!, [_0]) + return formatWithArgumentRanges(self._s[1179]!, self._r[1179]!, [_0]) } - public var Passport_Identity_TypeDriversLicense: String { return self._s[1181]! } - public var ArchivedPacksAlert_Title: String { return self._s[1182]! } - public var Wallet_Receive_InvoiceUrlCopied: String { return self._s[1183]! } - public var Map_PlacesNearby: String { return self._s[1184]! } + public var Passport_Identity_TypeDriversLicense: String { return self._s[1180]! } + public var ArchivedPacksAlert_Title: String { return self._s[1181]! } + public var Wallet_Receive_InvoiceUrlCopied: String { return self._s[1182]! } + public var Map_PlacesNearby: String { return self._s[1183]! } public func Time_PreciseDate_m7(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1185]!, self._r[1185]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1184]!, self._r[1184]!, [_1, _2, _3]) } - public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[1186]! } - public var Privacy_Calls_NeverAllow_Placeholder: String { return self._s[1189]! } - public var Conversation_StatusTyping: String { return self._s[1190]! } - public var Broadcast_AdminLog_EmptyText: String { return self._s[1191]! } - public var Notification_PassportValueProofOfAddress: String { return self._s[1192]! } - public var UserInfo_CreateNewContact: String { return self._s[1193]! } - public var Passport_Identity_FrontSide: String { return self._s[1194]! } - public var Login_PhoneNumberAlreadyAuthorizedSwitch: String { return self._s[1195]! } - public var Calls_CallTabTitle: String { return self._s[1196]! } - public var Channel_AdminLog_ChannelEmptyText: String { return self._s[1197]! } + public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[1185]! } + public var Privacy_Calls_NeverAllow_Placeholder: String { return self._s[1188]! } + public var Conversation_StatusTyping: String { return self._s[1189]! } + public var Broadcast_AdminLog_EmptyText: String { return self._s[1190]! } + public var Notification_PassportValueProofOfAddress: String { return self._s[1191]! } + public var UserInfo_CreateNewContact: String { return self._s[1192]! } + public var Passport_Identity_FrontSide: String { return self._s[1193]! } + public var Login_PhoneNumberAlreadyAuthorizedSwitch: String { return self._s[1194]! } + public var Calls_CallTabTitle: String { return self._s[1195]! } + public var Channel_AdminLog_ChannelEmptyText: String { return self._s[1196]! } public func Login_BannedPhoneBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1199]!, self._r[1199]!, [_0]) + return formatWithArgumentRanges(self._s[1198]!, self._r[1198]!, [_0]) } - public var Watch_UserInfo_MuteTitle: String { return self._s[1200]! } - public var Group_EditAdmin_RankAdminPlaceholder: String { return self._s[1201]! } - public var SharedMedia_EmptyMusicText: String { return self._s[1202]! } - public var Wallet_Completed_Text: String { return self._s[1203]! } - public var PasscodeSettings_AutoLock_IfAwayFor_1minute: String { return self._s[1204]! } - public var Paint_Stickers: String { return self._s[1205]! } - public var Privacy_GroupsAndChannels: String { return self._s[1206]! } - public var ChatList_Context_Delete: String { return self._s[1208]! } - public var UserInfo_AddContact: String { return self._s[1209]! } + public var Watch_UserInfo_MuteTitle: String { return self._s[1199]! } + public var Group_EditAdmin_RankAdminPlaceholder: String { return self._s[1200]! } + public var SharedMedia_EmptyMusicText: String { return self._s[1201]! } + public var Wallet_Completed_Text: String { return self._s[1202]! } + public var PasscodeSettings_AutoLock_IfAwayFor_1minute: String { return self._s[1203]! } + public var Paint_Stickers: String { return self._s[1204]! } + public var Privacy_GroupsAndChannels: String { return self._s[1205]! } + public var ChatList_Context_Delete: String { return self._s[1207]! } + public var UserInfo_AddContact: String { return self._s[1208]! } public func Conversation_MessageViaUser(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1210]!, self._r[1210]!, [_0]) + return formatWithArgumentRanges(self._s[1209]!, self._r[1209]!, [_0]) } - public var PhoneNumberHelp_ChangeNumber: String { return self._s[1212]! } + public var PhoneNumberHelp_ChangeNumber: String { return self._s[1211]! } public func ChatList_ClearChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1214]!, self._r[1214]!, [_0]) + return formatWithArgumentRanges(self._s[1213]!, self._r[1213]!, [_0]) } - public var DialogList_NoMessagesTitle: String { return self._s[1215]! } - public var EditProfile_NameAndPhotoHelp: String { return self._s[1216]! } - public var BlockedUsers_BlockUser: String { return self._s[1217]! } - public var Notifications_PermissionsOpenSettings: String { return self._s[1218]! } - public var MediaPicker_UngroupDescription: String { return self._s[1220]! } - public var Watch_NoConnection: String { return self._s[1221]! } - public var Month_GenSeptember: String { return self._s[1222]! } - public var Conversation_ViewGroup: String { return self._s[1224]! } - public var Channel_AdminLogFilter_EventsLeavingSubscribers: String { return self._s[1227]! } - public var Privacy_Forwards_AlwaysLink: String { return self._s[1228]! } - public var Channel_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[1229]! } - public var Passport_FieldOneOf_FinalDelimeter: String { return self._s[1230]! } - public var Wallet_WordCheck_IncorrectHeader: String { return self._s[1231]! } - public var MediaPicker_CameraRoll: String { return self._s[1233]! } - public var Month_GenAugust: String { return self._s[1234]! } - public var Wallet_Configuration_SourceHeader: String { return self._s[1235]! } - public var AccessDenied_VideoMessageMicrophone: String { return self._s[1236]! } - public var SharedMedia_EmptyText: String { return self._s[1237]! } - public var Map_ShareLiveLocation: String { return self._s[1238]! } - public var Calls_All: String { return self._s[1239]! } - public var Map_SendThisPlace: String { return self._s[1241]! } - public var Appearance_ThemeNight: String { return self._s[1243]! } - public var Conversation_HoldForAudio: String { return self._s[1244]! } - public var SettingsSearch_Synonyms_Support: String { return self._s[1247]! } - public var GroupInfo_GroupHistoryHidden: String { return self._s[1248]! } - public var SocksProxySetup_Secret: String { return self._s[1249]! } + public var DialogList_NoMessagesTitle: String { return self._s[1214]! } + public var EditProfile_NameAndPhotoHelp: String { return self._s[1215]! } + public var BlockedUsers_BlockUser: String { return self._s[1216]! } + public var Notifications_PermissionsOpenSettings: String { return self._s[1217]! } + public var MediaPicker_UngroupDescription: String { return self._s[1219]! } + public var Watch_NoConnection: String { return self._s[1220]! } + public var Month_GenSeptember: String { return self._s[1221]! } + public var Conversation_ViewGroup: String { return self._s[1223]! } + public var Channel_AdminLogFilter_EventsLeavingSubscribers: String { return self._s[1226]! } + public var Privacy_Forwards_AlwaysLink: String { return self._s[1227]! } + public var Channel_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[1228]! } + public var Passport_FieldOneOf_FinalDelimeter: String { return self._s[1229]! } + public var Wallet_WordCheck_IncorrectHeader: String { return self._s[1230]! } + public var MediaPicker_CameraRoll: String { return self._s[1232]! } + public var Month_GenAugust: String { return self._s[1233]! } + public var Wallet_Configuration_SourceHeader: String { return self._s[1234]! } + public var AccessDenied_VideoMessageMicrophone: String { return self._s[1235]! } + public var SharedMedia_EmptyText: String { return self._s[1236]! } + public var Map_ShareLiveLocation: String { return self._s[1237]! } + public var Calls_All: String { return self._s[1238]! } + public var Map_SendThisPlace: String { return self._s[1240]! } + public var Appearance_ThemeNight: String { return self._s[1242]! } + public var Conversation_HoldForAudio: String { return self._s[1243]! } + public var SettingsSearch_Synonyms_Support: String { return self._s[1246]! } + public var GroupInfo_GroupHistoryHidden: String { return self._s[1247]! } + public var SocksProxySetup_Secret: String { return self._s[1248]! } public func Activity_RemindAboutChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1250]!, self._r[1250]!, [_0]) + return formatWithArgumentRanges(self._s[1249]!, self._r[1249]!, [_0]) } - public var Channel_BanList_RestrictedTitle: String { return self._s[1252]! } - public var Conversation_Location: String { return self._s[1253]! } + public var Channel_BanList_RestrictedTitle: String { return self._s[1251]! } + public var Conversation_Location: String { return self._s[1252]! } public func AutoDownloadSettings_UpToFor(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1254]!, self._r[1254]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1253]!, self._r[1253]!, [_1, _2]) } - public var ChatSettings_AutoDownloadPhotos: String { return self._s[1256]! } - public var SettingsSearch_Synonyms_Privacy_Title: String { return self._s[1257]! } - public var Notifications_PermissionsText: String { return self._s[1258]! } - public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[1259]! } - public var Call_Flip: String { return self._s[1260]! } - public var Channel_AdminLog_CanDeleteMessagesOfOthers: String { return self._s[1262]! } - public var SocksProxySetup_ProxyStatusConnecting: String { return self._s[1263]! } - public var Wallet_TransactionInfo_StorageFeeInfoUrl: String { return self._s[1264]! } - public var PrivacyPhoneNumberSettings_DiscoveryHeader: String { return self._s[1265]! } - public var Channel_EditAdmin_PermissionPinMessages: String { return self._s[1267]! } - public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[1269]! } - public var ChatList_EditFolders: String { return self._s[1271]! } - public var Channel_TooMuchBots: String { return self._s[1272]! } - public var Passport_DeletePassportConfirmation: String { return self._s[1273]! } - public var Login_InvalidCodeError: String { return self._s[1274]! } - public var StickerPacksSettings_FeaturedPacks: String { return self._s[1275]! } + public var ChatSettings_AutoDownloadPhotos: String { return self._s[1255]! } + public var SettingsSearch_Synonyms_Privacy_Title: String { return self._s[1256]! } + public var Notifications_PermissionsText: String { return self._s[1257]! } + public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[1258]! } + public var Call_Flip: String { return self._s[1259]! } + public var Channel_AdminLog_CanDeleteMessagesOfOthers: String { return self._s[1261]! } + public var SocksProxySetup_ProxyStatusConnecting: String { return self._s[1262]! } + public var Wallet_TransactionInfo_StorageFeeInfoUrl: String { return self._s[1263]! } + public var PrivacyPhoneNumberSettings_DiscoveryHeader: String { return self._s[1264]! } + public var Channel_EditAdmin_PermissionPinMessages: String { return self._s[1266]! } + public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[1268]! } + public var ChatList_EditFolders: String { return self._s[1270]! } + public var Channel_TooMuchBots: String { return self._s[1271]! } + public var Passport_DeletePassportConfirmation: String { return self._s[1272]! } + public var Login_InvalidCodeError: String { return self._s[1273]! } + public var StickerPacksSettings_FeaturedPacks: String { return self._s[1274]! } public func ChatList_DeleteSecretChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1276]!, self._r[1276]!, [_0]) + return formatWithArgumentRanges(self._s[1275]!, self._r[1275]!, [_0]) } public func GroupInfo_InvitationLinkAcceptChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1277]!, self._r[1277]!, [_0]) + return formatWithArgumentRanges(self._s[1276]!, self._r[1276]!, [_0]) } - public var VoiceOver_Navigation_ProxySettings: String { return self._s[1278]! } - public var Call_CallInProgressTitle: String { return self._s[1279]! } - public var Month_ShortSeptember: String { return self._s[1280]! } - public var Watch_ChannelInfo_Title: String { return self._s[1281]! } - public var ChatList_DeleteSavedMessagesConfirmation: String { return self._s[1284]! } - public var DialogList_PasscodeLockHelp: String { return self._s[1285]! } - public var Chat_MultipleTextMessagesDisabled: String { return self._s[1286]! } - public var Wallet_Receive_Title: String { return self._s[1287]! } - public var Notifications_Badge_IncludePublicGroups: String { return self._s[1288]! } - public var Channel_AdminLogFilter_EventsTitle: String { return self._s[1289]! } - public var PhotoEditor_CropReset: String { return self._s[1290]! } - public var Group_Username_CreatePrivateLinkHelp: String { return self._s[1292]! } - public var Channel_Management_LabelEditor: String { return self._s[1293]! } - public var Passport_Identity_LatinNameHelp: String { return self._s[1295]! } - public var PhotoEditor_HighlightsTool: String { return self._s[1296]! } - public var Wallet_Info_WalletCreated: String { return self._s[1297]! } - public var UserInfo_Title: String { return self._s[1298]! } - public var ChatList_HideAction: String { return self._s[1299]! } - public var AccessDenied_Title: String { return self._s[1300]! } - public var DialogList_SearchLabel: String { return self._s[1301]! } - public var Group_Setup_HistoryHidden: String { return self._s[1302]! } - public var TwoStepAuth_PasswordChangeSuccess: String { return self._s[1303]! } - public var State_Updating: String { return self._s[1305]! } - public var Contacts_TabTitle: String { return self._s[1306]! } - public var Notifications_Badge_CountUnreadMessages: String { return self._s[1308]! } - public var GroupInfo_GroupHistory: String { return self._s[1309]! } - public var Conversation_UnsupportedMediaPlaceholder: String { return self._s[1310]! } - public var Wallpaper_SetColor: String { return self._s[1311]! } - public var CheckoutInfo_ShippingInfoCountry: String { return self._s[1312]! } - public var SettingsSearch_Synonyms_SavedMessages: String { return self._s[1313]! } - public var ChatList_ReorderTabs: String { return self._s[1314]! } - public var ChatListFolder_IncludeChatsTitle: String { return self._s[1315]! } - public var Chat_AttachmentLimitReached: String { return self._s[1316]! } - public var Passport_Identity_OneOfTypeDriversLicense: String { return self._s[1317]! } - public var Contacts_NotRegisteredSection: String { return self._s[1318]! } + public var VoiceOver_Navigation_ProxySettings: String { return self._s[1277]! } + public var Call_CallInProgressTitle: String { return self._s[1278]! } + public var Month_ShortSeptember: String { return self._s[1279]! } + public var Watch_ChannelInfo_Title: String { return self._s[1280]! } + public var ChatList_DeleteSavedMessagesConfirmation: String { return self._s[1283]! } + public var DialogList_PasscodeLockHelp: String { return self._s[1284]! } + public var Chat_MultipleTextMessagesDisabled: String { return self._s[1285]! } + public var Wallet_Receive_Title: String { return self._s[1286]! } + public var Notifications_Badge_IncludePublicGroups: String { return self._s[1287]! } + public var Channel_AdminLogFilter_EventsTitle: String { return self._s[1288]! } + public var PhotoEditor_CropReset: String { return self._s[1289]! } + public var Group_Username_CreatePrivateLinkHelp: String { return self._s[1291]! } + public var Channel_Management_LabelEditor: String { return self._s[1292]! } + public var Passport_Identity_LatinNameHelp: String { return self._s[1294]! } + public var PhotoEditor_HighlightsTool: String { return self._s[1295]! } + public var Wallet_Info_WalletCreated: String { return self._s[1296]! } + public var UserInfo_Title: String { return self._s[1297]! } + public var ChatList_HideAction: String { return self._s[1298]! } + public var AccessDenied_Title: String { return self._s[1299]! } + public var DialogList_SearchLabel: String { return self._s[1300]! } + public var Group_Setup_HistoryHidden: String { return self._s[1301]! } + public var TwoStepAuth_PasswordChangeSuccess: String { return self._s[1302]! } + public var State_Updating: String { return self._s[1304]! } + public var Contacts_TabTitle: String { return self._s[1305]! } + public var Notifications_Badge_CountUnreadMessages: String { return self._s[1307]! } + public var GroupInfo_GroupHistory: String { return self._s[1308]! } + public var Conversation_UnsupportedMediaPlaceholder: String { return self._s[1309]! } + public var Wallpaper_SetColor: String { return self._s[1310]! } + public var CheckoutInfo_ShippingInfoCountry: String { return self._s[1311]! } + public var SettingsSearch_Synonyms_SavedMessages: String { return self._s[1312]! } + public var ChatList_ReorderTabs: String { return self._s[1313]! } + public var ChatListFolder_IncludeChatsTitle: String { return self._s[1314]! } + public var Chat_AttachmentLimitReached: String { return self._s[1315]! } + public var Passport_Identity_OneOfTypeDriversLicense: String { return self._s[1316]! } + public var Contacts_NotRegisteredSection: String { return self._s[1317]! } public func Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1319]!, self._r[1319]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1318]!, self._r[1318]!, [_1, _2, _3]) } - public var Paint_Clear: String { return self._s[1320]! } - public var StickerPacksSettings_ArchivedMasks: String { return self._s[1321]! } - public var SocksProxySetup_Connecting: String { return self._s[1322]! } - public var ExplicitContent_AlertChannel: String { return self._s[1323]! } - public var CreatePoll_AllOptionsAdded: String { return self._s[1324]! } - public var Conversation_Contact: String { return self._s[1325]! } - public var Login_CodeExpired: String { return self._s[1326]! } - public var Passport_DiscardMessageAction: String { return self._s[1327]! } - public var ChatList_Context_Unpin: String { return self._s[1328]! } - public var Channel_AdminLog_MessagePreviousDescription: String { return self._s[1329]! } + public var Paint_Clear: String { return self._s[1319]! } + public var StickerPacksSettings_ArchivedMasks: String { return self._s[1320]! } + public var SocksProxySetup_Connecting: String { return self._s[1321]! } + public var ExplicitContent_AlertChannel: String { return self._s[1322]! } + public var CreatePoll_AllOptionsAdded: String { return self._s[1323]! } + public var Conversation_Contact: String { return self._s[1324]! } + public var Login_CodeExpired: String { return self._s[1325]! } + public var Passport_DiscardMessageAction: String { return self._s[1326]! } + public var ChatList_Context_Unpin: String { return self._s[1327]! } + public var Channel_AdminLog_MessagePreviousDescription: String { return self._s[1328]! } public func VoiceOver_Chat_MusicFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1330]!, self._r[1330]!, [_0]) + return formatWithArgumentRanges(self._s[1329]!, self._r[1329]!, [_0]) } - public var Channel_AdminLog_EmptyMessageText: String { return self._s[1331]! } - public var SettingsSearch_Synonyms_Data_NetworkUsage: String { return self._s[1332]! } + public var Channel_AdminLog_EmptyMessageText: String { return self._s[1330]! } + public var SettingsSearch_Synonyms_Data_NetworkUsage: String { return self._s[1331]! } public func Group_EditAdmin_RankInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1333]!, self._r[1333]!, [_0]) + return formatWithArgumentRanges(self._s[1332]!, self._r[1332]!, [_0]) } - public var Month_ShortApril: String { return self._s[1334]! } - public var AuthSessions_CurrentSession: String { return self._s[1335]! } - public var Chat_AttachmentMultipleFilesDisabled: String { return self._s[1338]! } - public var Wallet_Navigation_Cancel: String { return self._s[1340]! } - public var WallpaperPreview_CropTopText: String { return self._s[1341]! } - public var PrivacySettings_DeleteAccountIfAwayFor: String { return self._s[1342]! } - public var CheckoutInfo_ShippingInfoTitle: String { return self._s[1343]! } + public var Month_ShortApril: String { return self._s[1333]! } + public var AuthSessions_CurrentSession: String { return self._s[1334]! } + public var Chat_AttachmentMultipleFilesDisabled: String { return self._s[1337]! } + public var Wallet_Navigation_Cancel: String { return self._s[1339]! } + public var WallpaperPreview_CropTopText: String { return self._s[1340]! } + public var PrivacySettings_DeleteAccountIfAwayFor: String { return self._s[1341]! } + public var CheckoutInfo_ShippingInfoTitle: String { return self._s[1342]! } public func Conversation_ScheduleMessage_SendOn(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1344]!, self._r[1344]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1343]!, self._r[1343]!, [_0, _1]) } - public var Appearance_ThemePreview_Chat_2_Text: String { return self._s[1345]! } - public var Channel_Setup_TypePrivate: String { return self._s[1347]! } - public var Forward_ChannelReadOnly: String { return self._s[1350]! } - public var PhotoEditor_CurvesBlue: String { return self._s[1351]! } - public var AddContact_SharedContactException: String { return self._s[1352]! } - public var UserInfo_BotPrivacy: String { return self._s[1354]! } - public var Wallet_CreateInvoice_Title: String { return self._s[1355]! } - public var Notification_PassportValueEmail: String { return self._s[1356]! } - public var EmptyGroupInfo_Subtitle: String { return self._s[1357]! } - public var GroupPermission_NewTitle: String { return self._s[1358]! } - public var CallFeedback_ReasonDropped: String { return self._s[1359]! } - public var GroupInfo_Permissions_AddException: String { return self._s[1360]! } - public var Channel_SignMessages_Help: String { return self._s[1362]! } - public var Undo_ChatDeleted: String { return self._s[1364]! } - public var Conversation_ChatBackground: String { return self._s[1365]! } + public var Appearance_ThemePreview_Chat_2_Text: String { return self._s[1344]! } + public var Channel_Setup_TypePrivate: String { return self._s[1346]! } + public var Forward_ChannelReadOnly: String { return self._s[1349]! } + public var PhotoEditor_CurvesBlue: String { return self._s[1350]! } + public var AddContact_SharedContactException: String { return self._s[1351]! } + public var UserInfo_BotPrivacy: String { return self._s[1353]! } + public var Wallet_CreateInvoice_Title: String { return self._s[1354]! } + public var Notification_PassportValueEmail: String { return self._s[1355]! } + public var EmptyGroupInfo_Subtitle: String { return self._s[1356]! } + public var GroupPermission_NewTitle: String { return self._s[1357]! } + public var CallFeedback_ReasonDropped: String { return self._s[1358]! } + public var GroupInfo_Permissions_AddException: String { return self._s[1359]! } + public var Channel_SignMessages_Help: String { return self._s[1361]! } + public var Undo_ChatDeleted: String { return self._s[1363]! } + public var Conversation_ChatBackground: String { return self._s[1364]! } public func Wallet_WordCheck_Text(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1366]!, self._r[1366]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1365]!, self._r[1365]!, [_1, _2, _3]) } public func PUSH_CHAT_MESSAGE_QUIZ(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1367]!, self._r[1367]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1366]!, self._r[1366]!, [_1, _2, _3]) } - public var ChannelMembers_WhoCanAddMembers_Admins: String { return self._s[1368]! } - public var FastTwoStepSetup_EmailPlaceholder: String { return self._s[1369]! } - public var Passport_Language_pt: String { return self._s[1370]! } - public var VoiceOver_Chat_YourVoiceMessage: String { return self._s[1371]! } - public var NotificationsSound_Popcorn: String { return self._s[1374]! } - public var AutoNightTheme_Disabled: String { return self._s[1375]! } - public var BlockedUsers_LeavePrefix: String { return self._s[1376]! } - public var WallpaperPreview_CustomColorTopText: String { return self._s[1377]! } - public var Contacts_PermissionsSuppressWarningText: String { return self._s[1378]! } - public var WallpaperSearch_ColorBlue: String { return self._s[1379]! } + public var ChannelMembers_WhoCanAddMembers_Admins: String { return self._s[1367]! } + public var FastTwoStepSetup_EmailPlaceholder: String { return self._s[1368]! } + public var Passport_Language_pt: String { return self._s[1369]! } + public var VoiceOver_Chat_YourVoiceMessage: String { return self._s[1370]! } + public var NotificationsSound_Popcorn: String { return self._s[1373]! } + public var AutoNightTheme_Disabled: String { return self._s[1374]! } + public var BlockedUsers_LeavePrefix: String { return self._s[1375]! } + public var WallpaperPreview_CustomColorTopText: String { return self._s[1376]! } + public var Contacts_PermissionsSuppressWarningText: String { return self._s[1377]! } + public var WallpaperSearch_ColorBlue: String { return self._s[1378]! } public func CancelResetAccount_TextSMS(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1380]!, self._r[1380]!, [_0]) + return formatWithArgumentRanges(self._s[1379]!, self._r[1379]!, [_0]) } - public var ChatListFolder_TitleCreate: String { return self._s[1381]! } - public var CheckoutInfo_ErrorNameInvalid: String { return self._s[1382]! } - public var SocksProxySetup_UseForCalls: String { return self._s[1383]! } - public var Passport_DeleteDocumentConfirmation: String { return self._s[1385]! } - public var PeerInfo_PaneGroups: String { return self._s[1386]! } + public var ChatListFolder_TitleCreate: String { return self._s[1380]! } + public var CheckoutInfo_ErrorNameInvalid: String { return self._s[1381]! } + public var SocksProxySetup_UseForCalls: String { return self._s[1382]! } + public var Passport_DeleteDocumentConfirmation: String { return self._s[1384]! } + public var PeerInfo_PaneGroups: String { return self._s[1385]! } public func Conversation_Megabytes(_ _0: Float) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1387]!, self._r[1387]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[1386]!, self._r[1386]!, ["\(_0)"]) } - public var SocksProxySetup_Hostname: String { return self._s[1390]! } - public var ChatSettings_AutoDownloadSettings_OffForAll: String { return self._s[1391]! } - public var Compose_NewEncryptedChat: String { return self._s[1392]! } - public var Login_CodeFloodError: String { return self._s[1393]! } - public var Calls_TabTitle: String { return self._s[1394]! } - public var Privacy_ProfilePhoto: String { return self._s[1395]! } - public var Passport_Language_he: String { return self._s[1396]! } + public var SocksProxySetup_Hostname: String { return self._s[1389]! } + public var ChatSettings_AutoDownloadSettings_OffForAll: String { return self._s[1390]! } + public var Compose_NewEncryptedChat: String { return self._s[1391]! } + public var Login_CodeFloodError: String { return self._s[1392]! } + public var Calls_TabTitle: String { return self._s[1393]! } + public var Privacy_ProfilePhoto: String { return self._s[1394]! } + public var Passport_Language_he: String { return self._s[1395]! } public func Conversation_SetReminder_RemindToday(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1397]!, self._r[1397]!, [_0]) + return formatWithArgumentRanges(self._s[1396]!, self._r[1396]!, [_0]) } - public var ChatList_TabIconFoldersTooltipNonEmptyFolders: String { return self._s[1398]! } - public var GroupPermission_Title: String { return self._s[1399]! } + public var ChatList_TabIconFoldersTooltipNonEmptyFolders: String { return self._s[1397]! } + public var GroupPermission_Title: String { return self._s[1398]! } public func Channel_AdminLog_MessageGroupPreHistoryHidden(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1400]!, self._r[1400]!, [_0]) + return formatWithArgumentRanges(self._s[1399]!, self._r[1399]!, [_0]) } - public var Wallet_TransactionInfo_SenderHeader: String { return self._s[1401]! } - public var GroupPermission_NoChangeInfo: String { return self._s[1402]! } - public var ChatList_DeleteForCurrentUser: String { return self._s[1403]! } - public var Tour_Text1: String { return self._s[1404]! } - public var Channel_EditAdmin_TransferOwnership: String { return self._s[1405]! } - public var Month_ShortFebruary: String { return self._s[1406]! } - public var TwoStepAuth_EmailSkip: String { return self._s[1407]! } + public var Wallet_TransactionInfo_SenderHeader: String { return self._s[1400]! } + public var GroupPermission_NoChangeInfo: String { return self._s[1401]! } + public var ChatList_DeleteForCurrentUser: String { return self._s[1402]! } + public var Tour_Text1: String { return self._s[1403]! } + public var Channel_EditAdmin_TransferOwnership: String { return self._s[1404]! } + public var Month_ShortFebruary: String { return self._s[1405]! } + public var TwoStepAuth_EmailSkip: String { return self._s[1406]! } public func Wallet_Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1408]!, self._r[1408]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1407]!, self._r[1407]!, [_1, _2, _3]) } - public var Stats_LanguagesTitle: String { return self._s[1409]! } - public var NotificationsSound_Glass: String { return self._s[1410]! } - public var Appearance_ThemeNightBlue: String { return self._s[1411]! } - public var CheckoutInfo_Pay: String { return self._s[1412]! } - public var PeerInfo_ButtonLeave: String { return self._s[1414]! } - public var Invite_LargeRecipientsCountWarning: String { return self._s[1415]! } - public var Call_CallAgain: String { return self._s[1417]! } - public var AttachmentMenu_SendAsFile: String { return self._s[1418]! } - public var AccessDenied_MicrophoneRestricted: String { return self._s[1419]! } - public var Passport_InvalidPasswordError: String { return self._s[1420]! } - public var Watch_Message_Game: String { return self._s[1421]! } - public var Stickers_Install: String { return self._s[1422]! } - public var VoiceOver_Chat_Message: String { return self._s[1423]! } - public var PrivacyLastSeenSettings_NeverShareWith: String { return self._s[1424]! } - public var Passport_Identity_ResidenceCountry: String { return self._s[1426]! } - public var Notifications_GroupNotificationsHelp: String { return self._s[1427]! } - public var AuthSessions_OtherSessions: String { return self._s[1428]! } - public var Channel_Username_Help: String { return self._s[1429]! } - public var Camera_Title: String { return self._s[1430]! } - public var IntentsSettings_Title: String { return self._s[1431]! } - public var GroupInfo_SetGroupPhotoDelete: String { return self._s[1433]! } - public var Privacy_ProfilePhoto_NeverShareWith_Title: String { return self._s[1434]! } - public var Channel_AdminLog_SendPolls: String { return self._s[1435]! } - public var Channel_AdminLog_TitleAllEvents: String { return self._s[1436]! } - public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[1437]! } - public var Contacts_MemberSearchSectionTitleGroup: String { return self._s[1438]! } - public var ScheduledMessages_DeleteMany: String { return self._s[1439]! } - public var Conversation_RestrictedStickers: String { return self._s[1440]! } - public var Notifications_ExceptionsResetToDefaults: String { return self._s[1442]! } - public var UserInfo_TelegramCall: String { return self._s[1444]! } - public var TwoStepAuth_SetupResendEmailCode: String { return self._s[1445]! } - public var CreatePoll_OptionsHeader: String { return self._s[1446]! } - public var SettingsSearch_Synonyms_Data_CallsUseLessData: String { return self._s[1447]! } - public var ArchivedChats_IntroTitle1: String { return self._s[1448]! } - public var Privacy_GroupsAndChannels_AlwaysAllow_Title: String { return self._s[1449]! } - public var Theme_Colors_Proceed: String { return self._s[1450]! } - public var Passport_Identity_EditPersonalDetails: String { return self._s[1451]! } + public var Stats_LanguagesTitle: String { return self._s[1408]! } + public var NotificationsSound_Glass: String { return self._s[1409]! } + public var Appearance_ThemeNightBlue: String { return self._s[1410]! } + public var CheckoutInfo_Pay: String { return self._s[1411]! } + public var PeerInfo_ButtonLeave: String { return self._s[1413]! } + public var Invite_LargeRecipientsCountWarning: String { return self._s[1414]! } + public var Call_CallAgain: String { return self._s[1416]! } + public var AttachmentMenu_SendAsFile: String { return self._s[1417]! } + public var AccessDenied_MicrophoneRestricted: String { return self._s[1418]! } + public var Passport_InvalidPasswordError: String { return self._s[1419]! } + public var Watch_Message_Game: String { return self._s[1420]! } + public var Stickers_Install: String { return self._s[1421]! } + public var VoiceOver_Chat_Message: String { return self._s[1422]! } + public var PrivacyLastSeenSettings_NeverShareWith: String { return self._s[1423]! } + public var Passport_Identity_ResidenceCountry: String { return self._s[1425]! } + public var Notifications_GroupNotificationsHelp: String { return self._s[1426]! } + public var AuthSessions_OtherSessions: String { return self._s[1427]! } + public var Channel_Username_Help: String { return self._s[1428]! } + public var Camera_Title: String { return self._s[1429]! } + public var IntentsSettings_Title: String { return self._s[1430]! } + public var GroupInfo_SetGroupPhotoDelete: String { return self._s[1432]! } + public var Privacy_ProfilePhoto_NeverShareWith_Title: String { return self._s[1433]! } + public var Channel_AdminLog_SendPolls: String { return self._s[1434]! } + public var Channel_AdminLog_TitleAllEvents: String { return self._s[1435]! } + public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[1436]! } + public var Contacts_MemberSearchSectionTitleGroup: String { return self._s[1437]! } + public var ScheduledMessages_DeleteMany: String { return self._s[1438]! } + public var Conversation_RestrictedStickers: String { return self._s[1439]! } + public var Notifications_ExceptionsResetToDefaults: String { return self._s[1441]! } + public var UserInfo_TelegramCall: String { return self._s[1443]! } + public var TwoStepAuth_SetupResendEmailCode: String { return self._s[1444]! } + public var CreatePoll_OptionsHeader: String { return self._s[1445]! } + public var SettingsSearch_Synonyms_Data_CallsUseLessData: String { return self._s[1446]! } + public var ArchivedChats_IntroTitle1: String { return self._s[1447]! } + public var Privacy_GroupsAndChannels_AlwaysAllow_Title: String { return self._s[1448]! } + public var Theme_Colors_Proceed: String { return self._s[1449]! } + public var Passport_Identity_EditPersonalDetails: String { return self._s[1450]! } public func Time_PreciseDate_m1(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1452]!, self._r[1452]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1451]!, self._r[1451]!, [_1, _2, _3]) } - public var Wallet_Month_GenAugust: String { return self._s[1453]! } - public var Settings_SaveEditedPhotos: String { return self._s[1454]! } - public var Stats_FollowersBySourceTitle: String { return self._s[1455]! } - public var TwoStepAuth_ConfirmationTitle: String { return self._s[1456]! } - public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[1457]! } - public var Conversation_MessageDialogRetry: String { return self._s[1458]! } - public var ChatList_Context_MarkAsUnread: String { return self._s[1459]! } - public var MessagePoll_SubmitVote: String { return self._s[1460]! } - public var Conversation_DiscardVoiceMessageAction: String { return self._s[1461]! } - public var Permissions_PeopleNearbyTitle_v0: String { return self._s[1462]! } - public var Group_Setup_TypeHeader: String { return self._s[1463]! } - public var Paint_RecentStickers: String { return self._s[1464]! } - public var PhotoEditor_GrainTool: String { return self._s[1465]! } - public var CheckoutInfo_ShippingInfoState: String { return self._s[1466]! } - public var EmptyGroupInfo_Line4: String { return self._s[1467]! } - public var Watch_AuthRequired: String { return self._s[1469]! } + public var Wallet_Month_GenAugust: String { return self._s[1452]! } + public var Settings_SaveEditedPhotos: String { return self._s[1453]! } + public var Stats_FollowersBySourceTitle: String { return self._s[1454]! } + public var TwoStepAuth_ConfirmationTitle: String { return self._s[1455]! } + public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[1456]! } + public var Conversation_MessageDialogRetry: String { return self._s[1457]! } + public var ChatList_Context_MarkAsUnread: String { return self._s[1458]! } + public var MessagePoll_SubmitVote: String { return self._s[1459]! } + public var Conversation_DiscardVoiceMessageAction: String { return self._s[1460]! } + public var Permissions_PeopleNearbyTitle_v0: String { return self._s[1461]! } + public var Group_Setup_TypeHeader: String { return self._s[1462]! } + public var Paint_RecentStickers: String { return self._s[1463]! } + public var PhotoEditor_GrainTool: String { return self._s[1464]! } + public var CheckoutInfo_ShippingInfoState: String { return self._s[1465]! } + public var EmptyGroupInfo_Line4: String { return self._s[1466]! } + public var Watch_AuthRequired: String { return self._s[1468]! } public func Passport_Email_UseTelegramEmail(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1470]!, self._r[1470]!, [_0]) + return formatWithArgumentRanges(self._s[1469]!, self._r[1469]!, [_0]) } - public var Conversation_EncryptedDescriptionTitle: String { return self._s[1471]! } - public var ChannelIntro_Text: String { return self._s[1472]! } - public var DialogList_DeleteBotConfirmation: String { return self._s[1473]! } - public var GroupPermission_NoSendMedia: String { return self._s[1474]! } - public var Calls_AddTab: String { return self._s[1475]! } - public var Message_ReplyActionButtonShowReceipt: String { return self._s[1476]! } - public var Channel_AdminLog_EmptyFilterText: String { return self._s[1477]! } - public var Conversation_WalletRequiredSetup: String { return self._s[1478]! } - public var Notification_MessageLifetime1d: String { return self._s[1479]! } - public var Notifications_ChannelNotificationsExceptionsHelp: String { return self._s[1480]! } - public var Channel_BanUser_PermissionsHeader: String { return self._s[1481]! } - public var Passport_Identity_GenderFemale: String { return self._s[1482]! } - public var BlockedUsers_BlockTitle: String { return self._s[1483]! } + public var Conversation_EncryptedDescriptionTitle: String { return self._s[1470]! } + public var ChannelIntro_Text: String { return self._s[1471]! } + public var DialogList_DeleteBotConfirmation: String { return self._s[1472]! } + public var GroupPermission_NoSendMedia: String { return self._s[1473]! } + public var Calls_AddTab: String { return self._s[1474]! } + public var Message_ReplyActionButtonShowReceipt: String { return self._s[1475]! } + public var Channel_AdminLog_EmptyFilterText: String { return self._s[1476]! } + public var Conversation_WalletRequiredSetup: String { return self._s[1477]! } + public var Notification_MessageLifetime1d: String { return self._s[1478]! } + public var Notifications_ChannelNotificationsExceptionsHelp: String { return self._s[1479]! } + public var Channel_BanUser_PermissionsHeader: String { return self._s[1480]! } + public var Passport_Identity_GenderFemale: String { return self._s[1481]! } + public var BlockedUsers_BlockTitle: String { return self._s[1482]! } public func PUSH_CHANNEL_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1484]!, self._r[1484]!, [_1]) + return formatWithArgumentRanges(self._s[1483]!, self._r[1483]!, [_1]) } - public var Weekday_Yesterday: String { return self._s[1485]! } - public var WallpaperSearch_ColorBlack: String { return self._s[1486]! } - public var Settings_Context_Logout: String { return self._s[1487]! } - public var Wallet_Info_UnknownTransaction: String { return self._s[1488]! } - public var ChatList_ArchiveAction: String { return self._s[1489]! } - public var AutoNightTheme_Scheduled: String { return self._s[1490]! } - public var TwoFactorSetup_Email_SkipAction: String { return self._s[1491]! } - public var Settings_Devices: String { return self._s[1492]! } - public var ContactInfo_Note: String { return self._s[1493]! } + public var Weekday_Yesterday: String { return self._s[1484]! } + public var WallpaperSearch_ColorBlack: String { return self._s[1485]! } + public var Settings_Context_Logout: String { return self._s[1486]! } + public var Wallet_Info_UnknownTransaction: String { return self._s[1487]! } + public var ChatList_ArchiveAction: String { return self._s[1488]! } + public var AutoNightTheme_Scheduled: String { return self._s[1489]! } + public var TwoFactorSetup_Email_SkipAction: String { return self._s[1490]! } + public var Settings_Devices: String { return self._s[1491]! } + public var ContactInfo_Note: String { return self._s[1492]! } public func Login_PhoneGenericEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String, _ _6: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1494]!, self._r[1494]!, [_1, _2, _3, _4, _5, _6]) + return formatWithArgumentRanges(self._s[1493]!, self._r[1493]!, [_1, _2, _3, _4, _5, _6]) } - public var EditTheme_ThemeTemplateAlertTitle: String { return self._s[1495]! } - public var Wallet_Receive_CreateInvoice: String { return self._s[1496]! } - public var PrivacyPolicy_DeclineDeleteNow: String { return self._s[1497]! } - public var Theme_Colors_ColorWallpaperWarningProceed: String { return self._s[1498]! } + public var EditTheme_ThemeTemplateAlertTitle: String { return self._s[1494]! } + public var Wallet_Receive_CreateInvoice: String { return self._s[1495]! } + public var PrivacyPolicy_DeclineDeleteNow: String { return self._s[1496]! } + public var Theme_Colors_ColorWallpaperWarningProceed: String { return self._s[1497]! } public func PUSH_CHAT_JOINED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1499]!, self._r[1499]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1498]!, self._r[1498]!, [_1, _2]) } - public var CreatePoll_Create: String { return self._s[1500]! } - public var Channel_Members_AddBannedErrorAdmin: String { return self._s[1501]! } + public var CreatePoll_Create: String { return self._s[1499]! } + public var Channel_Members_AddBannedErrorAdmin: String { return self._s[1500]! } public func Notification_CallFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1502]!, self._r[1502]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1501]!, self._r[1501]!, [_1, _2]) } - public var ScheduledMessages_ClearAllConfirmation: String { return self._s[1503]! } - public var Checkout_ErrorProviderAccountInvalid: String { return self._s[1504]! } - public var Notifications_InAppNotificationsSounds: String { return self._s[1506]! } + public var ScheduledMessages_ClearAllConfirmation: String { return self._s[1502]! } + public var Checkout_ErrorProviderAccountInvalid: String { return self._s[1503]! } + public var Notifications_InAppNotificationsSounds: String { return self._s[1505]! } public func PUSH_PINNED_GAME_SCORE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1507]!, self._r[1507]!, [_1]) + return formatWithArgumentRanges(self._s[1506]!, self._r[1506]!, [_1]) } - public var Preview_OpenInInstagram: String { return self._s[1508]! } - public var Notification_MessageLifetimeRemovedOutgoing: String { return self._s[1509]! } + public var Preview_OpenInInstagram: String { return self._s[1507]! } + public var Notification_MessageLifetimeRemovedOutgoing: String { return self._s[1508]! } public func PUSH_CHAT_ADD_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1510]!, self._r[1510]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1509]!, self._r[1509]!, [_1, _2, _3]) } public func Passport_PrivacyPolicy(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1511]!, self._r[1511]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1510]!, self._r[1510]!, [_1, _2]) } - public var Channel_AdminLog_InfoPanelAlertTitle: String { return self._s[1512]! } - public var ArchivedChats_IntroText3: String { return self._s[1513]! } - public var ChatList_UndoArchiveHiddenText: String { return self._s[1514]! } - public var NetworkUsageSettings_TotalSection: String { return self._s[1515]! } - public var Wallet_Month_GenSeptember: String { return self._s[1516]! } - public var Channel_Setup_TypePrivateHelp: String { return self._s[1517]! } + public var Channel_AdminLog_InfoPanelAlertTitle: String { return self._s[1511]! } + public var ArchivedChats_IntroText3: String { return self._s[1512]! } + public var ChatList_UndoArchiveHiddenText: String { return self._s[1513]! } + public var NetworkUsageSettings_TotalSection: String { return self._s[1514]! } + public var Wallet_Month_GenSeptember: String { return self._s[1515]! } + public var Channel_Setup_TypePrivateHelp: String { return self._s[1516]! } public func PUSH_CHAT_MESSAGE_POLL(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1518]!, self._r[1518]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1517]!, self._r[1517]!, [_1, _2, _3]) } - public var Privacy_GroupsAndChannels_NeverAllow_Placeholder: String { return self._s[1520]! } - public var FastTwoStepSetup_HintSection: String { return self._s[1521]! } - public var Wallpaper_PhotoLibrary: String { return self._s[1522]! } - public var TwoStepAuth_SetupResendEmailCodeAlert: String { return self._s[1523]! } - public var Gif_NoGifsFound: String { return self._s[1524]! } - public var Watch_LastSeen_WithinAMonth: String { return self._s[1525]! } - public var VoiceOver_MessageContextDelete: String { return self._s[1526]! } - public var EditTheme_Preview: String { return self._s[1527]! } + public var Privacy_GroupsAndChannels_NeverAllow_Placeholder: String { return self._s[1519]! } + public var FastTwoStepSetup_HintSection: String { return self._s[1520]! } + public var Wallpaper_PhotoLibrary: String { return self._s[1521]! } + public var TwoStepAuth_SetupResendEmailCodeAlert: String { return self._s[1522]! } + public var Gif_NoGifsFound: String { return self._s[1523]! } + public var Watch_LastSeen_WithinAMonth: String { return self._s[1524]! } + public var VoiceOver_MessageContextDelete: String { return self._s[1525]! } + public var EditTheme_Preview: String { return self._s[1526]! } public func ClearCache_StorageTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1528]!, self._r[1528]!, [_0]) + return formatWithArgumentRanges(self._s[1527]!, self._r[1527]!, [_0]) } - public var GroupInfo_ActionPromote: String { return self._s[1529]! } - public var PasscodeSettings_SimplePasscode: String { return self._s[1530]! } - public var GroupInfo_Permissions_Title: String { return self._s[1531]! } - public var Permissions_ContactsText_v0: String { return self._s[1532]! } - public var PrivacyPhoneNumberSettings_CustomDisabledHelp: String { return self._s[1533]! } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedPublicGroups: String { return self._s[1534]! } - public var PrivacySettings_DataSettingsHelp: String { return self._s[1537]! } - public var Passport_FieldEmailHelp: String { return self._s[1538]! } + public var GroupInfo_ActionPromote: String { return self._s[1528]! } + public var PasscodeSettings_SimplePasscode: String { return self._s[1529]! } + public var GroupInfo_Permissions_Title: String { return self._s[1530]! } + public var Permissions_ContactsText_v0: String { return self._s[1531]! } + public var PrivacyPhoneNumberSettings_CustomDisabledHelp: String { return self._s[1532]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedPublicGroups: String { return self._s[1533]! } + public var PrivacySettings_DataSettingsHelp: String { return self._s[1536]! } + public var Passport_FieldEmailHelp: String { return self._s[1537]! } public func Activity_RemindAboutUser(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1539]!, self._r[1539]!, [_0]) + return formatWithArgumentRanges(self._s[1538]!, self._r[1538]!, [_0]) } - public var Passport_Identity_GenderPlaceholder: String { return self._s[1540]! } - public var Weekday_ShortSaturday: String { return self._s[1541]! } - public var ContactInfo_PhoneLabelMain: String { return self._s[1542]! } - public var Watch_Conversation_UserInfo: String { return self._s[1543]! } - public var CheckoutInfo_ShippingInfoCityPlaceholder: String { return self._s[1544]! } - public var GroupPermission_PermissionDisabledByDefault: String { return self._s[1545]! } - public var PrivacyLastSeenSettings_Title: String { return self._s[1546]! } - public var Conversation_ShareBotLocationConfirmation: String { return self._s[1548]! } - public var PhotoEditor_VignetteTool: String { return self._s[1549]! } - public var Conversation_ContextMenuDiscuss: String { return self._s[1550]! } - public var Passport_Address_Street1Placeholder: String { return self._s[1551]! } - public var Passport_Language_et: String { return self._s[1552]! } - public var AppUpgrade_Running: String { return self._s[1553]! } - public var Channel_DiscussionGroup_Info: String { return self._s[1555]! } - public var EditTheme_Create_Preview_IncomingReplyName: String { return self._s[1556]! } - public var Passport_Language_bg: String { return self._s[1557]! } - public var Stickers_NoStickersFound: String { return self._s[1559]! } + public var Passport_Identity_GenderPlaceholder: String { return self._s[1539]! } + public var Weekday_ShortSaturday: String { return self._s[1540]! } + public var ContactInfo_PhoneLabelMain: String { return self._s[1541]! } + public var Watch_Conversation_UserInfo: String { return self._s[1542]! } + public var CheckoutInfo_ShippingInfoCityPlaceholder: String { return self._s[1543]! } + public var GroupPermission_PermissionDisabledByDefault: String { return self._s[1544]! } + public var PrivacyLastSeenSettings_Title: String { return self._s[1545]! } + public var Conversation_ShareBotLocationConfirmation: String { return self._s[1547]! } + public var PhotoEditor_VignetteTool: String { return self._s[1548]! } + public var Conversation_ContextMenuDiscuss: String { return self._s[1549]! } + public var Passport_Address_Street1Placeholder: String { return self._s[1550]! } + public var Passport_Language_et: String { return self._s[1551]! } + public var AppUpgrade_Running: String { return self._s[1552]! } + public var Channel_DiscussionGroup_Info: String { return self._s[1554]! } + public var EditTheme_Create_Preview_IncomingReplyName: String { return self._s[1555]! } + public var Passport_Language_bg: String { return self._s[1556]! } + public var Stickers_NoStickersFound: String { return self._s[1558]! } public func PUSH_CHANNEL_MESSAGE_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1561]!, self._r[1561]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1560]!, self._r[1560]!, [_1, _2]) } public func VoiceOver_Chat_ContactFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1562]!, self._r[1562]!, [_0]) + return formatWithArgumentRanges(self._s[1561]!, self._r[1561]!, [_0]) } - public var Wallet_Month_GenJuly: String { return self._s[1563]! } - public var Wallet_Receive_AddressHeader: String { return self._s[1564]! } - public var Wallet_Send_AmountText: String { return self._s[1565]! } - public var Settings_About: String { return self._s[1566]! } + public var Wallet_Month_GenJuly: String { return self._s[1562]! } + public var Wallet_Receive_AddressHeader: String { return self._s[1563]! } + public var Wallet_Send_AmountText: String { return self._s[1564]! } + public var Settings_About: String { return self._s[1565]! } public func Channel_AdminLog_MessageRestricted(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1567]!, self._r[1567]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[1566]!, self._r[1566]!, [_0, _1, _2]) } - public var ChatList_Context_MarkAsRead: String { return self._s[1569]! } - public var KeyCommand_NewMessage: String { return self._s[1570]! } - public var Group_ErrorAddBlocked: String { return self._s[1571]! } + public var ChatList_Context_MarkAsRead: String { return self._s[1568]! } + public var KeyCommand_NewMessage: String { return self._s[1569]! } + public var Group_ErrorAddBlocked: String { return self._s[1570]! } public func Message_PaymentSent(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1572]!, self._r[1572]!, [_0]) + return formatWithArgumentRanges(self._s[1571]!, self._r[1571]!, [_0]) } - public var Map_LocationTitle: String { return self._s[1573]! } - public var ReportGroupLocation_Title: String { return self._s[1574]! } - public var CallSettings_UseLessDataLongDescription: String { return self._s[1575]! } - public var Cache_ClearProgress: String { return self._s[1576]! } + public var Map_LocationTitle: String { return self._s[1572]! } + public var ReportGroupLocation_Title: String { return self._s[1573]! } + public var CallSettings_UseLessDataLongDescription: String { return self._s[1574]! } + public var Cache_ClearProgress: String { return self._s[1575]! } public func Channel_Management_ErrorNotMember(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1577]!, self._r[1577]!, [_0]) + return formatWithArgumentRanges(self._s[1576]!, self._r[1576]!, [_0]) } - public var GroupRemoved_AddToGroup: String { return self._s[1578]! } + public var GroupRemoved_AddToGroup: String { return self._s[1577]! } public func External_OpenIn(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1579]!, self._r[1579]!, [_0]) + return formatWithArgumentRanges(self._s[1578]!, self._r[1578]!, [_0]) } - public var Passport_UpdateRequiredError: String { return self._s[1580]! } - public var Wallet_SecureStorageNotAvailable_Text: String { return self._s[1581]! } + public var Passport_UpdateRequiredError: String { return self._s[1579]! } + public var Wallet_SecureStorageNotAvailable_Text: String { return self._s[1580]! } public func PUSH_MESSAGE_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1582]!, self._r[1582]!, [_1]) + return formatWithArgumentRanges(self._s[1581]!, self._r[1581]!, [_1]) } - public var Notifications_PermissionsSuppressWarningText: String { return self._s[1584]! } - public var Passport_Identity_MainPageHelp: String { return self._s[1585]! } - public var PeerInfo_ButtonSearch: String { return self._s[1586]! } - public var Conversation_StatusKickedFromGroup: String { return self._s[1587]! } - public var Passport_Language_ka: String { return self._s[1588]! } + public var Notifications_PermissionsSuppressWarningText: String { return self._s[1583]! } + public var Passport_Identity_MainPageHelp: String { return self._s[1584]! } + public var PeerInfo_ButtonSearch: String { return self._s[1585]! } + public var Conversation_StatusKickedFromGroup: String { return self._s[1586]! } + public var Passport_Language_ka: String { return self._s[1587]! } public func Wallet_Time_PreciseDate_m12(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1589]!, self._r[1589]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1588]!, self._r[1588]!, [_1, _2, _3]) } - public var Call_Decline: String { return self._s[1590]! } - public var SocksProxySetup_ProxyEnabled: String { return self._s[1591]! } - public var TwoFactorSetup_Email_SkipConfirmationText: String { return self._s[1594]! } + public var Call_Decline: String { return self._s[1589]! } + public var SocksProxySetup_ProxyEnabled: String { return self._s[1590]! } + public var TwoFactorSetup_Email_SkipConfirmationText: String { return self._s[1593]! } public func AuthCode_Alert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1595]!, self._r[1595]!, [_0]) + return formatWithArgumentRanges(self._s[1594]!, self._r[1594]!, [_0]) } - public var CallFeedback_Send: String { return self._s[1596]! } - public var EditTheme_EditTitle: String { return self._s[1597]! } + public var CallFeedback_Send: String { return self._s[1595]! } + public var EditTheme_EditTitle: String { return self._s[1596]! } public func Channel_AdminLog_MessagePromotedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1598]!, self._r[1598]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1597]!, self._r[1597]!, [_1, _2]) } - public var Passport_Phone_UseTelegramNumberHelp: String { return self._s[1599]! } + public var Passport_Phone_UseTelegramNumberHelp: String { return self._s[1598]! } public func Wallet_Updated_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1601]!, self._r[1601]!, [_0]) + return formatWithArgumentRanges(self._s[1600]!, self._r[1600]!, [_0]) } - public var SettingsSearch_Synonyms_Data_Title: String { return self._s[1602]! } - public var Passport_DeletePassport: String { return self._s[1603]! } - public var Appearance_AppIconFilled: String { return self._s[1604]! } - public var Privacy_Calls_P2PAlways: String { return self._s[1605]! } - public var Month_ShortDecember: String { return self._s[1606]! } - public var Channel_AdminLog_CanEditMessages: String { return self._s[1608]! } + public var SettingsSearch_Synonyms_Data_Title: String { return self._s[1601]! } + public var Passport_DeletePassport: String { return self._s[1602]! } + public var Appearance_AppIconFilled: String { return self._s[1603]! } + public var Privacy_Calls_P2PAlways: String { return self._s[1604]! } + public var Month_ShortDecember: String { return self._s[1605]! } + public var Channel_AdminLog_CanEditMessages: String { return self._s[1607]! } public func Contacts_AccessDeniedHelpLandscape(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1609]!, self._r[1609]!, [_0]) + return formatWithArgumentRanges(self._s[1608]!, self._r[1608]!, [_0]) } - public var Channel_Stickers_Searching: String { return self._s[1610]! } - public var Conversation_EncryptedDescription1: String { return self._s[1611]! } - public var Conversation_EncryptedDescription2: String { return self._s[1612]! } - public var PasscodeSettings_PasscodeOptions: String { return self._s[1613]! } - public var ChatListFolder_NameUnread: String { return self._s[1615]! } - public var Conversation_EncryptedDescription3: String { return self._s[1616]! } - public var PhotoEditor_SharpenTool: String { return self._s[1617]! } - public var Wallet_Configuration_Title: String { return self._s[1618]! } + public var Channel_Stickers_Searching: String { return self._s[1609]! } + public var Conversation_EncryptedDescription1: String { return self._s[1610]! } + public var Conversation_EncryptedDescription2: String { return self._s[1611]! } + public var PasscodeSettings_PasscodeOptions: String { return self._s[1612]! } + public var ChatListFolder_NameUnread: String { return self._s[1614]! } + public var Conversation_EncryptedDescription3: String { return self._s[1615]! } + public var PhotoEditor_SharpenTool: String { return self._s[1616]! } + public var Wallet_Configuration_Title: String { return self._s[1617]! } public func Conversation_AddNameToContacts(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1619]!, self._r[1619]!, [_0]) + return formatWithArgumentRanges(self._s[1618]!, self._r[1618]!, [_0]) } - public var Conversation_EncryptedDescription4: String { return self._s[1621]! } - public var Channel_Members_AddMembers: String { return self._s[1622]! } - public var Wallpaper_Search: String { return self._s[1623]! } + public var Conversation_EncryptedDescription4: String { return self._s[1620]! } + public var Channel_Members_AddMembers: String { return self._s[1621]! } + public var Wallpaper_Search: String { return self._s[1622]! } public func Message_GenericForwardedPsa(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1625]!, self._r[1625]!, [_0]) + return formatWithArgumentRanges(self._s[1624]!, self._r[1624]!, [_0]) } - public var Weekday_Friday: String { return self._s[1626]! } - public var Privacy_ContactsSync: String { return self._s[1627]! } - public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[1628]! } - public var ApplyLanguage_ChangeLanguageAction: String { return self._s[1629]! } + public var Weekday_Friday: String { return self._s[1625]! } + public var Privacy_ContactsSync: String { return self._s[1626]! } + public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[1627]! } + public var ApplyLanguage_ChangeLanguageAction: String { return self._s[1628]! } public func Channel_Management_RestrictedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1630]!, self._r[1630]!, [_0]) + return formatWithArgumentRanges(self._s[1629]!, self._r[1629]!, [_0]) } - public var Wallet_Configuration_BlockchainIdHeader: String { return self._s[1631]! } - public var GroupInfo_Permissions_Removed: String { return self._s[1632]! } - public var ScheduledMessages_ScheduledOnline: String { return self._s[1633]! } - public var Passport_Identity_GenderMale: String { return self._s[1634]! } + public var Wallet_Configuration_BlockchainIdHeader: String { return self._s[1630]! } + public var GroupInfo_Permissions_Removed: String { return self._s[1631]! } + public var ScheduledMessages_ScheduledOnline: String { return self._s[1632]! } + public var Passport_Identity_GenderMale: String { return self._s[1633]! } public func Call_StatusBar(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1635]!, self._r[1635]!, [_0]) + return formatWithArgumentRanges(self._s[1634]!, self._r[1634]!, [_0]) } - public var Notifications_PermissionsKeepDisabled: String { return self._s[1636]! } - public var Conversation_JumpToDate: String { return self._s[1637]! } - public var Contacts_GlobalSearch: String { return self._s[1638]! } - public var AutoDownloadSettings_ResetHelp: String { return self._s[1639]! } - public var SettingsSearch_Synonyms_FAQ: String { return self._s[1640]! } - public var ChatListFolderSettings_NewFolder: String { return self._s[1641]! } - public var Profile_MessageLifetime1d: String { return self._s[1642]! } + public var Notifications_PermissionsKeepDisabled: String { return self._s[1635]! } + public var Conversation_JumpToDate: String { return self._s[1636]! } + public var Contacts_GlobalSearch: String { return self._s[1637]! } + public var AutoDownloadSettings_ResetHelp: String { return self._s[1638]! } + public var SettingsSearch_Synonyms_FAQ: String { return self._s[1639]! } + public var ChatListFolderSettings_NewFolder: String { return self._s[1640]! } + public var Profile_MessageLifetime1d: String { return self._s[1641]! } public func MESSAGE_INVOICE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1643]!, self._r[1643]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1642]!, self._r[1642]!, [_1, _2]) } - public var StickerPack_BuiltinPackName: String { return self._s[1646]! } + public var StickerPack_BuiltinPackName: String { return self._s[1645]! } public func PUSH_CHAT_MESSAGE_AUDIO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1647]!, self._r[1647]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1646]!, self._r[1646]!, [_1, _2]) } - public var VoiceOver_Chat_RecordModeVoiceMessageInfo: String { return self._s[1648]! } - public var Passport_InfoTitle: String { return self._s[1650]! } - public var Notifications_PermissionsUnreachableText: String { return self._s[1651]! } + public var VoiceOver_Chat_RecordModeVoiceMessageInfo: String { return self._s[1647]! } + public var Passport_InfoTitle: String { return self._s[1649]! } + public var Notifications_PermissionsUnreachableText: String { return self._s[1650]! } public func NetworkUsageSettings_CellularUsageSince(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1655]!, self._r[1655]!, [_0]) + return formatWithArgumentRanges(self._s[1654]!, self._r[1654]!, [_0]) } public func PUSH_CHAT_MESSAGE_GEO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1656]!, self._r[1656]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1655]!, self._r[1655]!, [_1, _2]) } - public var Passport_Address_TypePassportRegistrationUploadScan: String { return self._s[1657]! } - public var Profile_BotInfo: String { return self._s[1658]! } - public var Watch_Compose_CreateMessage: String { return self._s[1659]! } - public var AutoDownloadSettings_VoiceMessagesInfo: String { return self._s[1660]! } - public var Month_ShortNovember: String { return self._s[1661]! } - public var Conversation_ScamWarning: String { return self._s[1662]! } - public var Wallpaper_SetCustomBackground: String { return self._s[1663]! } - public var Appearance_TextSize_Title: String { return self._s[1664]! } - public var ChatList_EmptyChatListFilterTitle: String { return self._s[1665]! } - public var Passport_Identity_TranslationsHelp: String { return self._s[1666]! } - public var NotificationsSound_Chime: String { return self._s[1667]! } - public var Passport_Language_ko: String { return self._s[1669]! } - public var InviteText_URL: String { return self._s[1670]! } - public var TextFormat_Monospace: String { return self._s[1671]! } + public var Passport_Address_TypePassportRegistrationUploadScan: String { return self._s[1656]! } + public var Profile_BotInfo: String { return self._s[1657]! } + public var Watch_Compose_CreateMessage: String { return self._s[1658]! } + public var AutoDownloadSettings_VoiceMessagesInfo: String { return self._s[1659]! } + public var Month_ShortNovember: String { return self._s[1660]! } + public var Conversation_ScamWarning: String { return self._s[1661]! } + public var Wallpaper_SetCustomBackground: String { return self._s[1662]! } + public var Appearance_TextSize_Title: String { return self._s[1663]! } + public var ChatList_EmptyChatListFilterTitle: String { return self._s[1664]! } + public var Passport_Identity_TranslationsHelp: String { return self._s[1665]! } + public var NotificationsSound_Chime: String { return self._s[1666]! } + public var Passport_Language_ko: String { return self._s[1668]! } + public var InviteText_URL: String { return self._s[1669]! } + public var TextFormat_Monospace: String { return self._s[1670]! } public func Time_PreciseDate_m11(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1672]!, self._r[1672]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1671]!, self._r[1671]!, [_1, _2, _3]) } - public var EditTheme_Edit_BottomInfo: String { return self._s[1673]! } + public var EditTheme_Edit_BottomInfo: String { return self._s[1672]! } public func Login_WillSendSms(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1674]!, self._r[1674]!, [_0]) + return formatWithArgumentRanges(self._s[1673]!, self._r[1673]!, [_0]) } public func Watch_Time_ShortWeekdayAt(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1675]!, self._r[1675]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1674]!, self._r[1674]!, [_1, _2]) } - public var Wallet_Words_Title: String { return self._s[1676]! } - public var Wallet_Month_ShortMay: String { return self._s[1677]! } - public var EditTheme_CreateTitle: String { return self._s[1679]! } - public var Passport_InfoLearnMore: String { return self._s[1680]! } - public var TwoStepAuth_EmailPlaceholder: String { return self._s[1681]! } - public var Passport_Identity_AddIdentityCard: String { return self._s[1682]! } - public var Your_card_has_expired: String { return self._s[1683]! } - public var StickerPacksSettings_StickerPacksSection: String { return self._s[1684]! } - public var GroupInfo_InviteLink_Help: String { return self._s[1685]! } - public var TwoFactorSetup_EmailVerification_ResendAction: String { return self._s[1689]! } - public var Conversation_Report: String { return self._s[1691]! } - public var Notifications_MessageNotificationsSound: String { return self._s[1692]! } - public var Notification_MessageLifetime1m: String { return self._s[1693]! } - public var Privacy_ContactsTitle: String { return self._s[1694]! } - public var Conversation_ShareMyContactInfo: String { return self._s[1695]! } - public var Wallet_WordCheck_Title: String { return self._s[1696]! } - public var ChannelMembers_WhoCanAddMembersAdminsHelp: String { return self._s[1697]! } - public var Channel_Members_Title: String { return self._s[1698]! } - public var Map_OpenInWaze: String { return self._s[1699]! } - public var Appearance_RemoveThemeColorConfirmation: String { return self._s[1700]! } - public var Login_PhoneBannedError: String { return self._s[1701]! } - public var PeerInfo_GroupAboutItem: String { return self._s[1702]! } + public var Wallet_Words_Title: String { return self._s[1675]! } + public var Wallet_Month_ShortMay: String { return self._s[1676]! } + public var EditTheme_CreateTitle: String { return self._s[1678]! } + public var Passport_InfoLearnMore: String { return self._s[1679]! } + public var TwoStepAuth_EmailPlaceholder: String { return self._s[1680]! } + public var Passport_Identity_AddIdentityCard: String { return self._s[1681]! } + public var Your_card_has_expired: String { return self._s[1682]! } + public var StickerPacksSettings_StickerPacksSection: String { return self._s[1683]! } + public var GroupInfo_InviteLink_Help: String { return self._s[1684]! } + public var TwoFactorSetup_EmailVerification_ResendAction: String { return self._s[1688]! } + public var Conversation_Report: String { return self._s[1690]! } + public var Notifications_MessageNotificationsSound: String { return self._s[1691]! } + public var Notification_MessageLifetime1m: String { return self._s[1692]! } + public var Privacy_ContactsTitle: String { return self._s[1693]! } + public var Conversation_ShareMyContactInfo: String { return self._s[1694]! } + public var Wallet_WordCheck_Title: String { return self._s[1695]! } + public var ChannelMembers_WhoCanAddMembersAdminsHelp: String { return self._s[1696]! } + public var Channel_Members_Title: String { return self._s[1697]! } + public var Map_OpenInWaze: String { return self._s[1698]! } + public var Appearance_RemoveThemeColorConfirmation: String { return self._s[1699]! } + public var Login_PhoneBannedError: String { return self._s[1700]! } + public var PeerInfo_GroupAboutItem: String { return self._s[1701]! } public func LiveLocationUpdated_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1703]!, self._r[1703]!, [_0]) + return formatWithArgumentRanges(self._s[1702]!, self._r[1702]!, [_0]) } - public var IntentsSettings_MainAccount: String { return self._s[1704]! } - public var Group_Management_AddModeratorHelp: String { return self._s[1705]! } - public var AutoDownloadSettings_WifiTitle: String { return self._s[1706]! } - public var Common_OK: String { return self._s[1707]! } - public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[1708]! } - public var Wallet_Words_NotDoneResponse: String { return self._s[1709]! } - public var Cache_Music: String { return self._s[1710]! } - public var Wallet_Configuration_SourceURL: String { return self._s[1711]! } - public var SettingsSearch_Synonyms_EditProfile_PhoneNumber: String { return self._s[1712]! } - public var PasscodeSettings_UnlockWithTouchId: String { return self._s[1715]! } - public var ChatList_EmptyChatListEditFilter: String { return self._s[1716]! } - public var TwoStepAuth_HintPlaceholder: String { return self._s[1717]! } + public var IntentsSettings_MainAccount: String { return self._s[1703]! } + public var Group_Management_AddModeratorHelp: String { return self._s[1704]! } + public var AutoDownloadSettings_WifiTitle: String { return self._s[1705]! } + public var Common_OK: String { return self._s[1706]! } + public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[1707]! } + public var Wallet_Words_NotDoneResponse: String { return self._s[1708]! } + public var Cache_Music: String { return self._s[1709]! } + public var Wallet_Configuration_SourceURL: String { return self._s[1710]! } + public var SettingsSearch_Synonyms_EditProfile_PhoneNumber: String { return self._s[1711]! } + public var PasscodeSettings_UnlockWithTouchId: String { return self._s[1714]! } + public var ChatList_EmptyChatListEditFilter: String { return self._s[1715]! } + public var TwoStepAuth_HintPlaceholder: String { return self._s[1716]! } public func PUSH_PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1718]!, self._r[1718]!, [_1]) + return formatWithArgumentRanges(self._s[1717]!, self._r[1717]!, [_1]) } public func Passport_RequestHeader(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1719]!, self._r[1719]!, [_0]) + return formatWithArgumentRanges(self._s[1718]!, self._r[1718]!, [_0]) } - public var TwoFactorSetup_Done_Action: String { return self._s[1720]! } + public var TwoFactorSetup_Done_Action: String { return self._s[1719]! } public func VoiceOver_Chat_ContactOrganization(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1721]!, self._r[1721]!, [_0]) + return formatWithArgumentRanges(self._s[1720]!, self._r[1720]!, [_0]) } - public var Wallet_Send_ErrorNotEnoughFundsText: String { return self._s[1722]! } - public var Watch_MessageView_ViewOnPhone: String { return self._s[1724]! } - public var Privacy_Calls_CustomShareHelp: String { return self._s[1725]! } - public var Wallet_Receive_CreateInvoiceInfo: String { return self._s[1727]! } - public var ChangePhoneNumberNumber_Title: String { return self._s[1728]! } - public var State_ConnectingToProxyInfo: String { return self._s[1729]! } - public var Conversation_SwipeToReplyHintTitle: String { return self._s[1730]! } - public var Message_VideoMessage: String { return self._s[1732]! } - public var ChannelInfo_DeleteChannel: String { return self._s[1733]! } - public var ContactInfo_PhoneLabelOther: String { return self._s[1734]! } - public var Channel_EditAdmin_CannotEdit: String { return self._s[1735]! } - public var Passport_DeleteAddressConfirmation: String { return self._s[1736]! } + public var Wallet_Send_ErrorNotEnoughFundsText: String { return self._s[1721]! } + public var Watch_MessageView_ViewOnPhone: String { return self._s[1723]! } + public var Privacy_Calls_CustomShareHelp: String { return self._s[1724]! } + public var Wallet_Receive_CreateInvoiceInfo: String { return self._s[1726]! } + public var ChangePhoneNumberNumber_Title: String { return self._s[1727]! } + public var State_ConnectingToProxyInfo: String { return self._s[1728]! } + public var Conversation_SwipeToReplyHintTitle: String { return self._s[1729]! } + public var Message_VideoMessage: String { return self._s[1731]! } + public var ChannelInfo_DeleteChannel: String { return self._s[1732]! } + public var ContactInfo_PhoneLabelOther: String { return self._s[1733]! } + public var Channel_EditAdmin_CannotEdit: String { return self._s[1734]! } + public var Passport_DeleteAddressConfirmation: String { return self._s[1735]! } public func Wallet_Time_PreciseDate_m9(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1737]!, self._r[1737]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1736]!, self._r[1736]!, [_1, _2, _3]) } - public var WallpaperPreview_SwipeBottomText: String { return self._s[1738]! } - public var Activity_RecordingAudio: String { return self._s[1739]! } - public var SettingsSearch_Synonyms_Watch: String { return self._s[1740]! } - public var PasscodeSettings_TryAgainIn1Minute: String { return self._s[1741]! } - public var Wallet_Info_Address: String { return self._s[1742]! } + public var WallpaperPreview_SwipeBottomText: String { return self._s[1737]! } + public var Activity_RecordingAudio: String { return self._s[1738]! } + public var SettingsSearch_Synonyms_Watch: String { return self._s[1739]! } + public var PasscodeSettings_TryAgainIn1Minute: String { return self._s[1740]! } + public var Wallet_Info_Address: String { return self._s[1741]! } public func Notification_ChangedGroupName(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1744]!, self._r[1744]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1743]!, self._r[1743]!, [_0, _1]) } public func EmptyGroupInfo_Line1(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1748]!, self._r[1748]!, [_0]) + return formatWithArgumentRanges(self._s[1747]!, self._r[1747]!, [_0]) } - public var ChatList_RemoveFolderConfirmation: String { return self._s[1749]! } - public var Conversation_ApplyLocalization: String { return self._s[1750]! } - public var TwoFactorSetup_Intro_Action: String { return self._s[1751]! } - public var UserInfo_AddPhone: String { return self._s[1752]! } - public var Map_ShareLiveLocationHelp: String { return self._s[1753]! } + public var ChatList_RemoveFolderConfirmation: String { return self._s[1748]! } + public var Conversation_ApplyLocalization: String { return self._s[1749]! } + public var TwoFactorSetup_Intro_Action: String { return self._s[1750]! } + public var UserInfo_AddPhone: String { return self._s[1751]! } + public var Map_ShareLiveLocationHelp: String { return self._s[1752]! } public func Passport_Identity_NativeNameGenericHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1754]!, self._r[1754]!, [_0]) + return formatWithArgumentRanges(self._s[1753]!, self._r[1753]!, [_0]) } - public var ChatListFolder_CategoryArchived: String { return self._s[1756]! } - public var Passport_Scans: String { return self._s[1757]! } - public var BlockedUsers_Unblock: String { return self._s[1758]! } + public var ChatListFolder_CategoryArchived: String { return self._s[1755]! } + public var Passport_Scans: String { return self._s[1756]! } + public var BlockedUsers_Unblock: String { return self._s[1757]! } public func PUSH_ENCRYPTION_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1759]!, self._r[1759]!, [_1]) + return formatWithArgumentRanges(self._s[1758]!, self._r[1758]!, [_1]) } - public var Channel_Management_LabelCreator: String { return self._s[1760]! } - public var Conversation_ReportSpamAndLeave: String { return self._s[1761]! } - public var SettingsSearch_Synonyms_EditProfile_Bio: String { return self._s[1762]! } - public var ChatList_UndoArchiveMultipleTitle: String { return self._s[1763]! } - public var Passport_Identity_NativeNameGenericTitle: String { return self._s[1764]! } + public var Channel_Management_LabelCreator: String { return self._s[1759]! } + public var Conversation_ReportSpamAndLeave: String { return self._s[1760]! } + public var SettingsSearch_Synonyms_EditProfile_Bio: String { return self._s[1761]! } + public var ChatList_UndoArchiveMultipleTitle: String { return self._s[1762]! } + public var Passport_Identity_NativeNameGenericTitle: String { return self._s[1763]! } public func Login_EmailPhoneBody(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1765]!, self._r[1765]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[1764]!, self._r[1764]!, [_0, _1, _2]) } - public var Login_PhoneNumberHelp: String { return self._s[1766]! } - public var LastSeen_ALongTimeAgo: String { return self._s[1767]! } - public var Channel_AdminLog_CanPinMessages: String { return self._s[1768]! } - public var ChannelIntro_CreateChannel: String { return self._s[1769]! } - public var Conversation_UnreadMessages: String { return self._s[1770]! } - public var SettingsSearch_Synonyms_Stickers_ArchivedPacks: String { return self._s[1771]! } - public var Channel_AdminLog_EmptyText: String { return self._s[1772]! } - public var Theme_Context_Apply: String { return self._s[1773]! } - public var Notification_GroupActivated: String { return self._s[1774]! } - public var NotificationSettings_ContactJoinedInfo: String { return self._s[1775]! } - public var Wallet_Intro_CreateWallet: String { return self._s[1776]! } + public var Login_PhoneNumberHelp: String { return self._s[1765]! } + public var LastSeen_ALongTimeAgo: String { return self._s[1766]! } + public var Channel_AdminLog_CanPinMessages: String { return self._s[1767]! } + public var ChannelIntro_CreateChannel: String { return self._s[1768]! } + public var Conversation_UnreadMessages: String { return self._s[1769]! } + public var SettingsSearch_Synonyms_Stickers_ArchivedPacks: String { return self._s[1770]! } + public var Channel_AdminLog_EmptyText: String { return self._s[1771]! } + public var Theme_Context_Apply: String { return self._s[1772]! } + public var Notification_GroupActivated: String { return self._s[1773]! } + public var NotificationSettings_ContactJoinedInfo: String { return self._s[1774]! } + public var Wallet_Intro_CreateWallet: String { return self._s[1775]! } public func Notification_PinnedContactMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1777]!, self._r[1777]!, [_0]) + return formatWithArgumentRanges(self._s[1776]!, self._r[1776]!, [_0]) } public func DownloadingStatus(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1778]!, self._r[1778]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1777]!, self._r[1777]!, [_0, _1]) } - public var GroupInfo_ConvertToSupergroup: String { return self._s[1780]! } + public var GroupInfo_ConvertToSupergroup: String { return self._s[1779]! } public func PrivacyPolicy_AgeVerificationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1781]!, self._r[1781]!, [_0]) + return formatWithArgumentRanges(self._s[1780]!, self._r[1780]!, [_0]) } - public var Undo_DeletedChannel: String { return self._s[1782]! } - public var CallFeedback_AddComment: String { return self._s[1783]! } + public var Undo_DeletedChannel: String { return self._s[1781]! } + public var CallFeedback_AddComment: String { return self._s[1782]! } public func Conversation_OpenBotLinkAllowMessages(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1784]!, self._r[1784]!, [_0]) + return formatWithArgumentRanges(self._s[1783]!, self._r[1783]!, [_0]) } - public var Document_TargetConfirmationFormat: String { return self._s[1785]! } + public var Document_TargetConfirmationFormat: String { return self._s[1784]! } public func Call_StatusOngoing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1786]!, self._r[1786]!, [_0]) + return formatWithArgumentRanges(self._s[1785]!, self._r[1785]!, [_0]) } - public var LogoutOptions_SetPasscodeTitle: String { return self._s[1787]! } + public var LogoutOptions_SetPasscodeTitle: String { return self._s[1786]! } public func PUSH_CHAT_MESSAGE_GAME_SCORE(_ _1: String, _ _2: String, _ _3: String, _ _4: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1788]!, self._r[1788]!, [_1, _2, _3, _4]) + return formatWithArgumentRanges(self._s[1787]!, self._r[1787]!, [_1, _2, _3, _4]) } - public var Wallet_SecureStorageChanged_PasscodeText: String { return self._s[1789]! } - public var Theme_ErrorNotFound: String { return self._s[1790]! } - public var Contacts_SortByName: String { return self._s[1791]! } - public var SettingsSearch_Synonyms_Privacy_Forwards: String { return self._s[1792]! } + public var Wallet_SecureStorageChanged_PasscodeText: String { return self._s[1788]! } + public var Theme_ErrorNotFound: String { return self._s[1789]! } + public var Contacts_SortByName: String { return self._s[1790]! } + public var SettingsSearch_Synonyms_Privacy_Forwards: String { return self._s[1791]! } public func CHAT_MESSAGE_INVOICE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1794]!, self._r[1794]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1793]!, self._r[1793]!, [_1, _2, _3]) } - public var Notification_Exceptions_RemoveFromExceptions: String { return self._s[1795]! } - public var ScheduledMessages_EditTime: String { return self._s[1796]! } - public var Conversation_ClearSelfHistory: String { return self._s[1797]! } - public var Checkout_NewCard_PostcodePlaceholder: String { return self._s[1798]! } - public var PasscodeSettings_DoNotMatch: String { return self._s[1799]! } - public var Stickers_SuggestNone: String { return self._s[1800]! } - public var ChatSettings_Cache: String { return self._s[1801]! } - public var Settings_SaveIncomingPhotos: String { return self._s[1802]! } - public var Media_ShareThisPhoto: String { return self._s[1803]! } - public var Chat_SlowmodeTooltipPending: String { return self._s[1804]! } - public var InfoPlist_NSContactsUsageDescription: String { return self._s[1805]! } - public var Conversation_ContextMenuCopyLink: String { return self._s[1806]! } - public var PrivacyPolicy_AgeVerificationTitle: String { return self._s[1807]! } - public var SettingsSearch_Synonyms_Stickers_Masks: String { return self._s[1808]! } - public var TwoStepAuth_SetupPasswordEnterPasswordNew: String { return self._s[1809]! } - public var Appearance_ThemePreview_Chat_6_Text: String { return self._s[1810]! } + public var Notification_Exceptions_RemoveFromExceptions: String { return self._s[1794]! } + public var ScheduledMessages_EditTime: String { return self._s[1795]! } + public var Conversation_ClearSelfHistory: String { return self._s[1796]! } + public var Checkout_NewCard_PostcodePlaceholder: String { return self._s[1797]! } + public var PasscodeSettings_DoNotMatch: String { return self._s[1798]! } + public var Stickers_SuggestNone: String { return self._s[1799]! } + public var ChatSettings_Cache: String { return self._s[1800]! } + public var Settings_SaveIncomingPhotos: String { return self._s[1801]! } + public var Media_ShareThisPhoto: String { return self._s[1802]! } + public var Chat_SlowmodeTooltipPending: String { return self._s[1803]! } + public var InfoPlist_NSContactsUsageDescription: String { return self._s[1804]! } + public var Conversation_ContextMenuCopyLink: String { return self._s[1805]! } + public var PrivacyPolicy_AgeVerificationTitle: String { return self._s[1806]! } + public var SettingsSearch_Synonyms_Stickers_Masks: String { return self._s[1807]! } + public var TwoStepAuth_SetupPasswordEnterPasswordNew: String { return self._s[1808]! } + public var Appearance_ThemePreview_Chat_6_Text: String { return self._s[1809]! } public func Wallet_SecureStorageReset_BiometryText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1811]!, self._r[1811]!, [_0]) + return formatWithArgumentRanges(self._s[1810]!, self._r[1810]!, [_0]) } - public var Permissions_CellularDataTitle_v0: String { return self._s[1812]! } - public var WallpaperSearch_ColorWhite: String { return self._s[1814]! } - public var Channel_AdminLog_DefaultRestrictionsUpdated: String { return self._s[1815]! } - public var Conversation_ErrorInaccessibleMessage: String { return self._s[1816]! } - public var Map_OpenIn: String { return self._s[1817]! } - public var PeerInfo_ButtonCall: String { return self._s[1818]! } + public var Permissions_CellularDataTitle_v0: String { return self._s[1811]! } + public var WallpaperSearch_ColorWhite: String { return self._s[1813]! } + public var Channel_AdminLog_DefaultRestrictionsUpdated: String { return self._s[1814]! } + public var Conversation_ErrorInaccessibleMessage: String { return self._s[1815]! } + public var Map_OpenIn: String { return self._s[1816]! } + public var PeerInfo_ButtonCall: String { return self._s[1817]! } public func PUSH_PHONE_CALL_MISSED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1822]!, self._r[1822]!, [_1]) + return formatWithArgumentRanges(self._s[1821]!, self._r[1821]!, [_1]) } public func ChannelInfo_AddParticipantConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1823]!, self._r[1823]!, [_0]) + return formatWithArgumentRanges(self._s[1822]!, self._r[1822]!, [_0]) } - public var GroupInfo_Permissions_SlowmodeHeader: String { return self._s[1824]! } - public var MessagePoll_LabelClosed: String { return self._s[1825]! } - public var GroupPermission_PermissionGloballyDisabled: String { return self._s[1827]! } - public var Wallet_Send_SendAnyway: String { return self._s[1828]! } - public var Passport_Identity_MiddleNamePlaceholder: String { return self._s[1829]! } - public var UserInfo_FirstNamePlaceholder: String { return self._s[1830]! } - public var PrivacyLastSeenSettings_WhoCanSeeMyTimestamp: String { return self._s[1831]! } - public var Map_SetThisPlace: String { return self._s[1832]! } - public var Login_SelectCountry_Title: String { return self._s[1833]! } - public var Channel_EditAdmin_PermissionBanUsers: String { return self._s[1834]! } + public var GroupInfo_Permissions_SlowmodeHeader: String { return self._s[1823]! } + public var MessagePoll_LabelClosed: String { return self._s[1824]! } + public var GroupPermission_PermissionGloballyDisabled: String { return self._s[1826]! } + public var Wallet_Send_SendAnyway: String { return self._s[1827]! } + public var Passport_Identity_MiddleNamePlaceholder: String { return self._s[1828]! } + public var UserInfo_FirstNamePlaceholder: String { return self._s[1829]! } + public var PrivacyLastSeenSettings_WhoCanSeeMyTimestamp: String { return self._s[1830]! } + public var Map_SetThisPlace: String { return self._s[1831]! } + public var Login_SelectCountry_Title: String { return self._s[1832]! } + public var Channel_EditAdmin_PermissionBanUsers: String { return self._s[1833]! } public func Conversation_OpenBotLinkLogin(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1835]!, self._r[1835]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1834]!, self._r[1834]!, [_1, _2]) } - public var Channel_AdminLog_ChangeInfo: String { return self._s[1836]! } - public var Watch_Suggestion_BRB: String { return self._s[1837]! } - public var Passport_Identity_EditIdentityCard: String { return self._s[1838]! } - public var Contacts_PermissionsTitle: String { return self._s[1839]! } - public var Conversation_RestrictedInline: String { return self._s[1840]! } - public var Appearance_RemoveThemeColor: String { return self._s[1842]! } - public var StickerPack_ViewPack: String { return self._s[1843]! } - public var Wallet_UnknownError: String { return self._s[1844]! } + public var Channel_AdminLog_ChangeInfo: String { return self._s[1835]! } + public var Watch_Suggestion_BRB: String { return self._s[1836]! } + public var Passport_Identity_EditIdentityCard: String { return self._s[1837]! } + public var Contacts_PermissionsTitle: String { return self._s[1838]! } + public var Conversation_RestrictedInline: String { return self._s[1839]! } + public var Appearance_RemoveThemeColor: String { return self._s[1841]! } + public var StickerPack_ViewPack: String { return self._s[1842]! } + public var Wallet_UnknownError: String { return self._s[1843]! } public func Update_AppVersion(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1845]!, self._r[1845]!, [_0]) + return formatWithArgumentRanges(self._s[1844]!, self._r[1844]!, [_0]) } - public var Compose_NewChannel: String { return self._s[1847]! } - public var ChatSettings_AutoDownloadSettings_TypePhoto: String { return self._s[1851]! } - public var MessagePoll_LabelQuiz: String { return self._s[1853]! } - public var Conversation_ReportSpamGroupConfirmation: String { return self._s[1854]! } - public var Channel_Info_Stickers: String { return self._s[1855]! } - public var AutoNightTheme_PreferredTheme: String { return self._s[1856]! } - public var PrivacyPolicy_AgeVerificationAgree: String { return self._s[1857]! } - public var Passport_DeletePersonalDetails: String { return self._s[1858]! } - public var LogoutOptions_AddAccountTitle: String { return self._s[1859]! } - public var Channel_DiscussionGroupInfo: String { return self._s[1860]! } - public var Group_EditAdmin_RankOwnerPlaceholder: String { return self._s[1861]! } - public var Stats_LoadingText: String { return self._s[1864]! } - public var Conversation_SearchNoResults: String { return self._s[1865]! } - public var ChatList_AddFolder: String { return self._s[1866]! } - public var Wallet_Configuration_ApplyErrorTextURLInvalid: String { return self._s[1867]! } - public var ChatListFolder_NameNonContacts: String { return self._s[1868]! } - public var MessagePoll_LabelAnonymous: String { return self._s[1869]! } - public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[1870]! } - public var Login_Code: String { return self._s[1871]! } - public var EditTheme_Create_BottomInfo: String { return self._s[1872]! } - public var Watch_Suggestion_WhatsUp: String { return self._s[1873]! } - public var Weekday_ShortThursday: String { return self._s[1874]! } - public var Resolve_ErrorNotFound: String { return self._s[1876]! } - public var LastSeen_Offline: String { return self._s[1877]! } - public var PeopleNearby_NoMembers: String { return self._s[1878]! } - public var GroupPermission_AddMembersNotAvailable: String { return self._s[1879]! } - public var Privacy_Calls_AlwaysAllow_Title: String { return self._s[1880]! } - public var Conversation_Dice_u1F3AF: String { return self._s[1882]! } - public var GroupInfo_Title: String { return self._s[1883]! } - public var NotificationsSound_Note: String { return self._s[1884]! } - public var Conversation_EditingMessagePanelTitle: String { return self._s[1885]! } - public var Watch_Message_Poll: String { return self._s[1886]! } - public var Privacy_Calls: String { return self._s[1887]! } + public var Compose_NewChannel: String { return self._s[1846]! } + public var ChatSettings_AutoDownloadSettings_TypePhoto: String { return self._s[1850]! } + public var MessagePoll_LabelQuiz: String { return self._s[1852]! } + public var Conversation_ReportSpamGroupConfirmation: String { return self._s[1853]! } + public var Channel_Info_Stickers: String { return self._s[1854]! } + public var AutoNightTheme_PreferredTheme: String { return self._s[1855]! } + public var PrivacyPolicy_AgeVerificationAgree: String { return self._s[1856]! } + public var Passport_DeletePersonalDetails: String { return self._s[1857]! } + public var LogoutOptions_AddAccountTitle: String { return self._s[1858]! } + public var Channel_DiscussionGroupInfo: String { return self._s[1859]! } + public var Group_EditAdmin_RankOwnerPlaceholder: String { return self._s[1860]! } + public var Stats_LoadingText: String { return self._s[1863]! } + public var Conversation_SearchNoResults: String { return self._s[1864]! } + public var ChatList_AddFolder: String { return self._s[1865]! } + public var Wallet_Configuration_ApplyErrorTextURLInvalid: String { return self._s[1866]! } + public var ChatListFolder_NameNonContacts: String { return self._s[1867]! } + public var MessagePoll_LabelAnonymous: String { return self._s[1868]! } + public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[1869]! } + public var Login_Code: String { return self._s[1870]! } + public var EditTheme_Create_BottomInfo: String { return self._s[1871]! } + public var Watch_Suggestion_WhatsUp: String { return self._s[1872]! } + public var Weekday_ShortThursday: String { return self._s[1873]! } + public var Resolve_ErrorNotFound: String { return self._s[1875]! } + public var LastSeen_Offline: String { return self._s[1876]! } + public var PeopleNearby_NoMembers: String { return self._s[1877]! } + public var GroupPermission_AddMembersNotAvailable: String { return self._s[1878]! } + public var Privacy_Calls_AlwaysAllow_Title: String { return self._s[1879]! } + public var Conversation_Dice_u1F3AF: String { return self._s[1881]! } + public var GroupInfo_Title: String { return self._s[1882]! } + public var NotificationsSound_Note: String { return self._s[1883]! } + public var Conversation_EditingMessagePanelTitle: String { return self._s[1884]! } + public var Watch_Message_Poll: String { return self._s[1885]! } + public var Privacy_Calls: String { return self._s[1886]! } public func Channel_AdminLog_MessageRankUsername(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1888]!, self._r[1888]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1887]!, self._r[1887]!, [_1, _2, _3]) } - public var Month_ShortAugust: String { return self._s[1889]! } - public var TwoStepAuth_SetPasswordHelp: String { return self._s[1890]! } - public var Notifications_Reset: String { return self._s[1891]! } - public var Conversation_Pin: String { return self._s[1892]! } - public var Passport_Language_lv: String { return self._s[1893]! } - public var Permissions_PeopleNearbyAllowInSettings_v0: String { return self._s[1894]! } - public var BlockedUsers_Info: String { return self._s[1895]! } - public var SettingsSearch_Synonyms_Data_AutoplayVideos: String { return self._s[1897]! } - public var Watch_Conversation_Unblock: String { return self._s[1899]! } + public var Month_ShortAugust: String { return self._s[1888]! } + public var TwoStepAuth_SetPasswordHelp: String { return self._s[1889]! } + public var Notifications_Reset: String { return self._s[1890]! } + public var Conversation_Pin: String { return self._s[1891]! } + public var Passport_Language_lv: String { return self._s[1892]! } + public var Permissions_PeopleNearbyAllowInSettings_v0: String { return self._s[1893]! } + public var BlockedUsers_Info: String { return self._s[1894]! } + public var SettingsSearch_Synonyms_Data_AutoplayVideos: String { return self._s[1896]! } + public var Watch_Conversation_Unblock: String { return self._s[1898]! } public func Time_MonthOfYear_m9(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1900]!, self._r[1900]!, [_0]) + return formatWithArgumentRanges(self._s[1899]!, self._r[1899]!, [_0]) } - public var CloudStorage_Title: String { return self._s[1901]! } - public var GroupInfo_DeleteAndExitConfirmation: String { return self._s[1902]! } + public var CloudStorage_Title: String { return self._s[1900]! } + public var GroupInfo_DeleteAndExitConfirmation: String { return self._s[1901]! } public func NetworkUsageSettings_WifiUsageSince(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1903]!, self._r[1903]!, [_0]) + return formatWithArgumentRanges(self._s[1902]!, self._r[1902]!, [_0]) } - public var Channel_AdminLogFilter_AdminsTitle: String { return self._s[1904]! } - public var Watch_Suggestion_OnMyWay: String { return self._s[1905]! } - public var TwoStepAuth_RecoveryEmailTitle: String { return self._s[1906]! } - public var Passport_Address_EditBankStatement: String { return self._s[1907]! } + public var Channel_AdminLogFilter_AdminsTitle: String { return self._s[1903]! } + public var Watch_Suggestion_OnMyWay: String { return self._s[1904]! } + public var TwoStepAuth_RecoveryEmailTitle: String { return self._s[1905]! } + public var Passport_Address_EditBankStatement: String { return self._s[1906]! } public func Channel_AdminLog_MessageChangedUnlinkedGroup(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1908]!, self._r[1908]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1907]!, self._r[1907]!, [_1, _2]) } - public var ChatSettings_DownloadInBackgroundInfo: String { return self._s[1909]! } - public var ShareMenu_Comment: String { return self._s[1910]! } - public var Permissions_ContactsTitle_v0: String { return self._s[1911]! } - public var Notifications_PermissionsTitle: String { return self._s[1912]! } - public var GroupPermission_NoSendLinks: String { return self._s[1913]! } - public var Privacy_Forwards_NeverAllow_Title: String { return self._s[1914]! } - public var Wallet_SecureStorageChanged_ImportWallet: String { return self._s[1915]! } - public var PeerInfo_PaneLinks: String { return self._s[1916]! } - public var Settings_Support: String { return self._s[1917]! } - public var Notifications_ChannelNotificationsSound: String { return self._s[1918]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadReset: String { return self._s[1919]! } - public var Privacy_Forwards_Preview: String { return self._s[1920]! } - public var GroupPermission_ApplyAlertAction: String { return self._s[1921]! } - public var Watch_Stickers_StickerPacks: String { return self._s[1922]! } - public var Common_Select: String { return self._s[1924]! } - public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[1925]! } - public var WallpaperSearch_ColorGray: String { return self._s[1928]! } - public var TwoFactorSetup_Password_PlaceholderPassword: String { return self._s[1929]! } - public var TwoFactorSetup_Hint_SkipAction: String { return self._s[1930]! } - public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[1931]! } - public var PollResults_Title: String { return self._s[1932]! } - public var PasscodeSettings_AutoLock_IfAwayFor_5hours: String { return self._s[1933]! } - public var Appearance_PreviewReplyAuthor: String { return self._s[1934]! } - public var TwoStepAuth_RecoveryTitle: String { return self._s[1935]! } - public var Widget_AuthRequired: String { return self._s[1936]! } - public var Camera_FlashOn: String { return self._s[1937]! } - public var Conversation_ContextMenuLookUp: String { return self._s[1938]! } - public var Channel_Stickers_NotFoundHelp: String { return self._s[1939]! } - public var Watch_Suggestion_OK: String { return self._s[1940]! } + public var ChatSettings_DownloadInBackgroundInfo: String { return self._s[1908]! } + public var ShareMenu_Comment: String { return self._s[1909]! } + public var Permissions_ContactsTitle_v0: String { return self._s[1910]! } + public var Notifications_PermissionsTitle: String { return self._s[1911]! } + public var GroupPermission_NoSendLinks: String { return self._s[1912]! } + public var Privacy_Forwards_NeverAllow_Title: String { return self._s[1913]! } + public var Wallet_SecureStorageChanged_ImportWallet: String { return self._s[1914]! } + public var PeerInfo_PaneLinks: String { return self._s[1915]! } + public var Settings_Support: String { return self._s[1916]! } + public var Notifications_ChannelNotificationsSound: String { return self._s[1917]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadReset: String { return self._s[1918]! } + public var Privacy_Forwards_Preview: String { return self._s[1919]! } + public var GroupPermission_ApplyAlertAction: String { return self._s[1920]! } + public var Watch_Stickers_StickerPacks: String { return self._s[1921]! } + public var Common_Select: String { return self._s[1923]! } + public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[1924]! } + public var WallpaperSearch_ColorGray: String { return self._s[1927]! } + public var TwoFactorSetup_Password_PlaceholderPassword: String { return self._s[1928]! } + public var TwoFactorSetup_Hint_SkipAction: String { return self._s[1929]! } + public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[1930]! } + public var PollResults_Title: String { return self._s[1931]! } + public var PasscodeSettings_AutoLock_IfAwayFor_5hours: String { return self._s[1932]! } + public var Appearance_PreviewReplyAuthor: String { return self._s[1933]! } + public var TwoStepAuth_RecoveryTitle: String { return self._s[1934]! } + public var Widget_AuthRequired: String { return self._s[1935]! } + public var Camera_FlashOn: String { return self._s[1936]! } + public var Conversation_ContextMenuLookUp: String { return self._s[1937]! } + public var Channel_Stickers_NotFoundHelp: String { return self._s[1938]! } + public var Watch_Suggestion_OK: String { return self._s[1939]! } public func Username_LinkHint(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1942]!, self._r[1942]!, [_0]) + return formatWithArgumentRanges(self._s[1941]!, self._r[1941]!, [_0]) } public func Notification_PinnedLiveLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1944]!, self._r[1944]!, [_0]) + return formatWithArgumentRanges(self._s[1943]!, self._r[1943]!, [_0]) } - public var TextFormat_Strikethrough: String { return self._s[1945]! } - public var DialogList_AdLabel: String { return self._s[1946]! } - public var WatchRemote_NotificationText: String { return self._s[1947]! } - public var IntentsSettings_SuggestedChatsSavedMessages: String { return self._s[1948]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsAlert: String { return self._s[1949]! } - public var Conversation_ReportSpam: String { return self._s[1950]! } - public var SettingsSearch_Synonyms_Privacy_Data_TopPeers: String { return self._s[1951]! } - public var Settings_LogoutConfirmationTitle: String { return self._s[1953]! } - public var PhoneLabel_Title: String { return self._s[1954]! } - public var Passport_Address_EditRentalAgreement: String { return self._s[1955]! } - public var Settings_ChangePhoneNumber: String { return self._s[1956]! } - public var Notifications_ExceptionsTitle: String { return self._s[1957]! } - public var Notifications_AlertTones: String { return self._s[1958]! } - public var Call_ReportIncludeLogDescription: String { return self._s[1959]! } - public var SettingsSearch_Synonyms_Notifications_ResetAllNotifications: String { return self._s[1960]! } - public var AutoDownloadSettings_PrivateChats: String { return self._s[1961]! } - public var VoiceOver_Chat_Photo: String { return self._s[1963]! } - public var TwoStepAuth_AddHintTitle: String { return self._s[1964]! } - public var Stats_PostsTitle: String { return self._s[1965]! } - public var ReportPeer_ReasonOther: String { return self._s[1966]! } - public var ChatList_Context_JoinChannel: String { return self._s[1967]! } - public var KeyCommand_ScrollDown: String { return self._s[1969]! } - public var Conversation_ScheduleMessage_Title: String { return self._s[1970]! } + public var TextFormat_Strikethrough: String { return self._s[1944]! } + public var DialogList_AdLabel: String { return self._s[1945]! } + public var WatchRemote_NotificationText: String { return self._s[1946]! } + public var IntentsSettings_SuggestedChatsSavedMessages: String { return self._s[1947]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsAlert: String { return self._s[1948]! } + public var Conversation_ReportSpam: String { return self._s[1949]! } + public var SettingsSearch_Synonyms_Privacy_Data_TopPeers: String { return self._s[1950]! } + public var Settings_LogoutConfirmationTitle: String { return self._s[1952]! } + public var PhoneLabel_Title: String { return self._s[1953]! } + public var Passport_Address_EditRentalAgreement: String { return self._s[1954]! } + public var Settings_ChangePhoneNumber: String { return self._s[1955]! } + public var Notifications_ExceptionsTitle: String { return self._s[1956]! } + public var Notifications_AlertTones: String { return self._s[1957]! } + public var Call_ReportIncludeLogDescription: String { return self._s[1958]! } + public var SettingsSearch_Synonyms_Notifications_ResetAllNotifications: String { return self._s[1959]! } + public var AutoDownloadSettings_PrivateChats: String { return self._s[1960]! } + public var VoiceOver_Chat_Photo: String { return self._s[1962]! } + public var TwoStepAuth_AddHintTitle: String { return self._s[1963]! } + public var Stats_PostsTitle: String { return self._s[1964]! } + public var ReportPeer_ReasonOther: String { return self._s[1965]! } + public var ChatList_Context_JoinChannel: String { return self._s[1966]! } + public var KeyCommand_ScrollDown: String { return self._s[1968]! } + public var Conversation_ScheduleMessage_Title: String { return self._s[1969]! } public func Login_BannedPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1971]!, self._r[1971]!, [_0]) + return formatWithArgumentRanges(self._s[1970]!, self._r[1970]!, [_0]) } - public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[1973]! } - public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[1974]! } - public var AuthSessions_LogOut: String { return self._s[1975]! } - public var Passport_Identity_TypeInternalPassport: String { return self._s[1976]! } - public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[1977]! } - public var Passport_Phone_Title: String { return self._s[1978]! } - public var ContactList_Context_StartSecretChat: String { return self._s[1979]! } - public var Settings_PhoneNumber: String { return self._s[1980]! } + public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[1972]! } + public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[1973]! } + public var AuthSessions_LogOut: String { return self._s[1974]! } + public var Passport_Identity_TypeInternalPassport: String { return self._s[1975]! } + public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[1976]! } + public var Passport_Phone_Title: String { return self._s[1977]! } + public var ContactList_Context_StartSecretChat: String { return self._s[1978]! } + public var Settings_PhoneNumber: String { return self._s[1979]! } public func Conversation_ScheduleMessage_SendToday(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1981]!, self._r[1981]!, [_0]) + return formatWithArgumentRanges(self._s[1980]!, self._r[1980]!, [_0]) } - public var NotificationsSound_Alert: String { return self._s[1983]! } - public var Wallet_SecureStorageChanged_CreateWallet: String { return self._s[1984]! } - public var WebSearch_SearchNoResults: String { return self._s[1985]! } - public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[1987]! } - public var Wallet_Configuration_SourceInfo: String { return self._s[1988]! } - public var LogoutOptions_AlternativeOptionsSection: String { return self._s[1989]! } - public var SettingsSearch_Synonyms_Passport: String { return self._s[1990]! } - public var PhotoEditor_CurvesTool: String { return self._s[1991]! } - public var Checkout_PaymentMethod: String { return self._s[1993]! } + public var NotificationsSound_Alert: String { return self._s[1982]! } + public var Wallet_SecureStorageChanged_CreateWallet: String { return self._s[1983]! } + public var WebSearch_SearchNoResults: String { return self._s[1984]! } + public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[1986]! } + public var Wallet_Configuration_SourceInfo: String { return self._s[1987]! } + public var LogoutOptions_AlternativeOptionsSection: String { return self._s[1988]! } + public var SettingsSearch_Synonyms_Passport: String { return self._s[1989]! } + public var PhotoEditor_CurvesTool: String { return self._s[1990]! } + public var Checkout_PaymentMethod: String { return self._s[1992]! } public func PUSH_CHAT_ADD_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1994]!, self._r[1994]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1993]!, self._r[1993]!, [_1, _2]) } - public var Contacts_AccessDeniedError: String { return self._s[1995]! } - public var Camera_PhotoMode: String { return self._s[1998]! } - public var EditTheme_Expand_Preview_IncomingText: String { return self._s[1999]! } - public var Appearance_TextSize_Apply: String { return self._s[2000]! } - public var Passport_Address_AddUtilityBill: String { return self._s[2002]! } - public var ChatListFolderSettings_RecommendedNewFolder: String { return self._s[2003]! } - public var CallSettings_OnMobile: String { return self._s[2004]! } - public var Tour_Text2: String { return self._s[2005]! } + public var Contacts_AccessDeniedError: String { return self._s[1994]! } + public var Camera_PhotoMode: String { return self._s[1997]! } + public var EditTheme_Expand_Preview_IncomingText: String { return self._s[1998]! } + public var Appearance_TextSize_Apply: String { return self._s[1999]! } + public var Passport_Address_AddUtilityBill: String { return self._s[2001]! } + public var ChatListFolderSettings_RecommendedNewFolder: String { return self._s[2002]! } + public var CallSettings_OnMobile: String { return self._s[2003]! } + public var Tour_Text2: String { return self._s[2004]! } public func PUSH_CHAT_MESSAGE_ROUND(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2006]!, self._r[2006]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2005]!, self._r[2005]!, [_1, _2]) } - public var DialogList_EncryptionProcessing: String { return self._s[2008]! } - public var Permissions_Skip: String { return self._s[2009]! } - public var Wallet_Words_NotDoneOk: String { return self._s[2010]! } - public var SecretImage_Title: String { return self._s[2011]! } - public var Watch_MessageView_Title: String { return self._s[2012]! } - public var Channel_DiscussionGroupAdd: String { return self._s[2013]! } - public var AttachmentMenu_Poll: String { return self._s[2014]! } + public var DialogList_EncryptionProcessing: String { return self._s[2007]! } + public var Permissions_Skip: String { return self._s[2008]! } + public var Wallet_Words_NotDoneOk: String { return self._s[2009]! } + public var SecretImage_Title: String { return self._s[2010]! } + public var Watch_MessageView_Title: String { return self._s[2011]! } + public var Channel_DiscussionGroupAdd: String { return self._s[2012]! } + public var AttachmentMenu_Poll: String { return self._s[2013]! } public func Notification_GroupInviter(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2015]!, self._r[2015]!, [_0]) + return formatWithArgumentRanges(self._s[2014]!, self._r[2014]!, [_0]) } public func Channel_DiscussionGroup_PrivateChannelLink(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2016]!, self._r[2016]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2015]!, self._r[2015]!, [_1, _2]) } - public var Notification_CallCanceled: String { return self._s[2017]! } - public var WallpaperPreview_Title: String { return self._s[2018]! } - public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[2019]! } - public var Settings_ProxyConnecting: String { return self._s[2020]! } - public var Settings_CheckPhoneNumberText: String { return self._s[2022]! } - public var VoiceOver_Chat_YourVideo: String { return self._s[2023]! } - public var Wallet_Intro_Title: String { return self._s[2024]! } - public var TwoFactorSetup_Password_Action: String { return self._s[2025]! } - public var Profile_MessageLifetime5s: String { return self._s[2026]! } - public var Username_InvalidCharacters: String { return self._s[2027]! } - public var VoiceOver_Media_PlaybackRateFast: String { return self._s[2028]! } - public var ScheduledMessages_ClearAll: String { return self._s[2029]! } - public var WallpaperPreview_CropBottomText: String { return self._s[2030]! } - public var AutoDownloadSettings_LimitBySize: String { return self._s[2031]! } - public var Settings_AddAccount: String { return self._s[2032]! } - public var Notification_CreatedChannel: String { return self._s[2035]! } + public var Notification_CallCanceled: String { return self._s[2016]! } + public var WallpaperPreview_Title: String { return self._s[2017]! } + public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[2018]! } + public var Settings_ProxyConnecting: String { return self._s[2019]! } + public var Settings_CheckPhoneNumberText: String { return self._s[2021]! } + public var VoiceOver_Chat_YourVideo: String { return self._s[2022]! } + public var Wallet_Intro_Title: String { return self._s[2023]! } + public var TwoFactorSetup_Password_Action: String { return self._s[2024]! } + public var Profile_MessageLifetime5s: String { return self._s[2025]! } + public var Username_InvalidCharacters: String { return self._s[2026]! } + public var VoiceOver_Media_PlaybackRateFast: String { return self._s[2027]! } + public var ScheduledMessages_ClearAll: String { return self._s[2028]! } + public var WallpaperPreview_CropBottomText: String { return self._s[2029]! } + public var AutoDownloadSettings_LimitBySize: String { return self._s[2030]! } + public var Settings_AddAccount: String { return self._s[2031]! } + public var Notification_CreatedChannel: String { return self._s[2034]! } public func PUSH_CHAT_DELETE_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2036]!, self._r[2036]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2035]!, self._r[2035]!, [_1, _2, _3]) } - public var Passcode_AppLockedAlert: String { return self._s[2038]! } - public var StickerPacksSettings_AnimatedStickersInfo: String { return self._s[2039]! } - public var VoiceOver_Media_PlaybackStop: String { return self._s[2040]! } - public var Contacts_TopSection: String { return self._s[2041]! } - public var ChatList_DeleteForEveryoneConfirmationAction: String { return self._s[2042]! } + public var Passcode_AppLockedAlert: String { return self._s[2037]! } + public var StickerPacksSettings_AnimatedStickersInfo: String { return self._s[2038]! } + public var VoiceOver_Media_PlaybackStop: String { return self._s[2039]! } + public var Contacts_TopSection: String { return self._s[2040]! } + public var ChatList_DeleteForEveryoneConfirmationAction: String { return self._s[2041]! } public func Conversation_SetReminder_RemindOn(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2043]!, self._r[2043]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2042]!, self._r[2042]!, [_0, _1]) } - public var Wallet_Info_Receive: String { return self._s[2044]! } - public var Wallet_Completed_ViewWallet: String { return self._s[2045]! } + public var Wallet_Info_Receive: String { return self._s[2043]! } + public var Wallet_Completed_ViewWallet: String { return self._s[2044]! } public func Time_MonthOfYear_m6(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2046]!, self._r[2046]!, [_0]) + return formatWithArgumentRanges(self._s[2045]!, self._r[2045]!, [_0]) } - public var ReportPeer_ReasonSpam: String { return self._s[2047]! } - public var UserInfo_TapToCall: String { return self._s[2048]! } - public var Conversation_ForwardAuthorHiddenTooltip: String { return self._s[2050]! } - public var AutoDownloadSettings_DataUsageCustom: String { return self._s[2051]! } - public var Common_Search: String { return self._s[2052]! } - public var ScheduledMessages_EmptyPlaceholder: String { return self._s[2053]! } + public var ReportPeer_ReasonSpam: String { return self._s[2046]! } + public var UserInfo_TapToCall: String { return self._s[2047]! } + public var Conversation_ForwardAuthorHiddenTooltip: String { return self._s[2049]! } + public var AutoDownloadSettings_DataUsageCustom: String { return self._s[2050]! } + public var Common_Search: String { return self._s[2051]! } + public var ScheduledMessages_EmptyPlaceholder: String { return self._s[2052]! } public func Channel_AdminLog_MessageChangedGroupGeoLocation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2054]!, self._r[2054]!, [_0]) + return formatWithArgumentRanges(self._s[2053]!, self._r[2053]!, [_0]) } - public var Wallet_Month_ShortJuly: String { return self._s[2055]! } - public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[2057]! } - public var Message_InvoiceLabel: String { return self._s[2058]! } - public var Conversation_InputTextPlaceholder: String { return self._s[2059]! } - public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[2060]! } + public var Wallet_Month_ShortJuly: String { return self._s[2054]! } + public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[2056]! } + public var Message_InvoiceLabel: String { return self._s[2057]! } + public var Conversation_InputTextPlaceholder: String { return self._s[2058]! } + public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[2059]! } public func Passport_Address_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2061]!, self._r[2061]!, [_0]) + return formatWithArgumentRanges(self._s[2060]!, self._r[2060]!, [_0]) } - public var IntentsSettings_Reset: String { return self._s[2062]! } - public var Conversation_Info: String { return self._s[2063]! } - public var Login_InfoDeletePhoto: String { return self._s[2064]! } - public var ChatListFolder_DiscardDiscard: String { return self._s[2066]! } - public var Passport_Language_vi: String { return self._s[2067]! } - public var UserInfo_ScamUserWarning: String { return self._s[2068]! } - public var Conversation_Search: String { return self._s[2069]! } - public var DialogList_DeleteBotConversationConfirmation: String { return self._s[2071]! } - public var ChatListFolder_NameGroups: String { return self._s[2072]! } - public var ReportPeer_ReasonPornography: String { return self._s[2073]! } - public var AutoDownloadSettings_PhotosTitle: String { return self._s[2074]! } - public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[2075]! } - public var Map_LiveLocationGroupDescription: String { return self._s[2076]! } - public var Channel_Setup_TypeHeader: String { return self._s[2077]! } - public var AuthSessions_LoggedIn: String { return self._s[2078]! } - public var Privacy_Forwards_AlwaysAllow_Title: String { return self._s[2079]! } - public var Login_SmsRequestState3: String { return self._s[2080]! } - public var Passport_Address_EditUtilityBill: String { return self._s[2081]! } - public var Appearance_ReduceMotionInfo: String { return self._s[2082]! } - public var Join_ChannelsTooMuch: String { return self._s[2083]! } - public var Channel_Edit_LinkItem: String { return self._s[2084]! } - public var Privacy_Calls_P2PNever: String { return self._s[2085]! } - public var Conversation_AddToReadingList: String { return self._s[2087]! } - public var Share_MultipleMessagesDisabled: String { return self._s[2088]! } - public var Message_Animation: String { return self._s[2089]! } - public var Conversation_DefaultRestrictedMedia: String { return self._s[2090]! } - public var Map_Unknown: String { return self._s[2091]! } - public var AutoDownloadSettings_LastDelimeter: String { return self._s[2092]! } + public var IntentsSettings_Reset: String { return self._s[2061]! } + public var Conversation_Info: String { return self._s[2062]! } + public var Login_InfoDeletePhoto: String { return self._s[2063]! } + public var ChatListFolder_DiscardDiscard: String { return self._s[2065]! } + public var Passport_Language_vi: String { return self._s[2066]! } + public var UserInfo_ScamUserWarning: String { return self._s[2067]! } + public var Conversation_Search: String { return self._s[2068]! } + public var DialogList_DeleteBotConversationConfirmation: String { return self._s[2070]! } + public var ChatListFolder_NameGroups: String { return self._s[2071]! } + public var ReportPeer_ReasonPornography: String { return self._s[2072]! } + public var AutoDownloadSettings_PhotosTitle: String { return self._s[2073]! } + public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[2074]! } + public var Map_LiveLocationGroupDescription: String { return self._s[2075]! } + public var Channel_Setup_TypeHeader: String { return self._s[2076]! } + public var AuthSessions_LoggedIn: String { return self._s[2077]! } + public var Privacy_Forwards_AlwaysAllow_Title: String { return self._s[2078]! } + public var Login_SmsRequestState3: String { return self._s[2079]! } + public var Passport_Address_EditUtilityBill: String { return self._s[2080]! } + public var Appearance_ReduceMotionInfo: String { return self._s[2081]! } + public var Join_ChannelsTooMuch: String { return self._s[2082]! } + public var Channel_Edit_LinkItem: String { return self._s[2083]! } + public var Privacy_Calls_P2PNever: String { return self._s[2084]! } + public var Conversation_AddToReadingList: String { return self._s[2086]! } + public var Share_MultipleMessagesDisabled: String { return self._s[2087]! } + public var Message_Animation: String { return self._s[2088]! } + public var Conversation_DefaultRestrictedMedia: String { return self._s[2089]! } + public var Map_Unknown: String { return self._s[2090]! } + public var AutoDownloadSettings_LastDelimeter: String { return self._s[2091]! } public func PUSH_PINNED_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2093]!, self._r[2093]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2092]!, self._r[2092]!, [_1, _2]) } public func Passport_FieldOneOf_Or(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2094]!, self._r[2094]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2093]!, self._r[2093]!, [_1, _2]) } - public var Call_StatusRequesting: String { return self._s[2095]! } - public var Conversation_SecretChatContextBotAlert: String { return self._s[2096]! } - public var SocksProxySetup_ProxyStatusChecking: String { return self._s[2097]! } + public var Call_StatusRequesting: String { return self._s[2094]! } + public var Conversation_SecretChatContextBotAlert: String { return self._s[2095]! } + public var SocksProxySetup_ProxyStatusChecking: String { return self._s[2096]! } public func PUSH_CHAT_MESSAGE_DOC(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2098]!, self._r[2098]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2097]!, self._r[2097]!, [_1, _2]) } public func Notification_PinnedLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2099]!, self._r[2099]!, [_0]) + return formatWithArgumentRanges(self._s[2098]!, self._r[2098]!, [_0]) } - public var Update_Skip: String { return self._s[2100]! } - public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[2101]! } - public var BlockedUsers_Title: String { return self._s[2102]! } - public var Weekday_Monday: String { return self._s[2103]! } + public var Update_Skip: String { return self._s[2099]! } + public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[2100]! } + public var BlockedUsers_Title: String { return self._s[2101]! } + public var Weekday_Monday: String { return self._s[2102]! } public func PUSH_CHANNEL_MESSAGE_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2104]!, self._r[2104]!, [_1]) + return formatWithArgumentRanges(self._s[2103]!, self._r[2103]!, [_1]) } - public var Username_CheckingUsername: String { return self._s[2105]! } - public var NotificationsSound_Bell: String { return self._s[2106]! } - public var Conversation_SendMessageErrorFlood: String { return self._s[2107]! } - public var SettingsSearch_Synonyms_Notifications_DisplayNamesOnLockScreen: String { return self._s[2108]! } - public var ChannelMembers_ChannelAdminsTitle: String { return self._s[2109]! } - public var ChatSettings_Groups: String { return self._s[2110]! } - public var WallpaperPreview_PatternPaternDiscard: String { return self._s[2111]! } - public var ChatList_PeerTypeContact: String { return self._s[2112]! } + public var Username_CheckingUsername: String { return self._s[2104]! } + public var NotificationsSound_Bell: String { return self._s[2105]! } + public var Conversation_SendMessageErrorFlood: String { return self._s[2106]! } + public var SettingsSearch_Synonyms_Notifications_DisplayNamesOnLockScreen: String { return self._s[2107]! } + public var ChannelMembers_ChannelAdminsTitle: String { return self._s[2108]! } + public var ChatSettings_Groups: String { return self._s[2109]! } + public var WallpaperPreview_PatternPaternDiscard: String { return self._s[2110]! } + public var ChatList_PeerTypeContact: String { return self._s[2111]! } public func Conversation_SetReminder_RemindTomorrow(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2113]!, self._r[2113]!, [_0]) + return formatWithArgumentRanges(self._s[2112]!, self._r[2112]!, [_0]) } - public var Your_card_was_declined: String { return self._s[2114]! } - public var TwoStepAuth_EnterPasswordHelp: String { return self._s[2116]! } - public var Wallet_Month_ShortApril: String { return self._s[2117]! } - public var ChatList_Unmute: String { return self._s[2118]! } - public var AuthSessions_AddDevice_ScanTitle: String { return self._s[2119]! } - public var PhotoEditor_CurvesAll: String { return self._s[2120]! } - public var Weekday_ShortTuesday: String { return self._s[2121]! } - public var DialogList_Read: String { return self._s[2122]! } - public var Appearance_AppIconClassic: String { return self._s[2123]! } - public var Conversation_Dice_u1F3B2: String { return self._s[2124]! } - public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[2125]! } - public var Passport_Identity_Gender: String { return self._s[2126]! } + public var Your_card_was_declined: String { return self._s[2113]! } + public var TwoStepAuth_EnterPasswordHelp: String { return self._s[2115]! } + public var Wallet_Month_ShortApril: String { return self._s[2116]! } + public var ChatList_Unmute: String { return self._s[2117]! } + public var AuthSessions_AddDevice_ScanTitle: String { return self._s[2118]! } + public var PhotoEditor_CurvesAll: String { return self._s[2119]! } + public var Weekday_ShortTuesday: String { return self._s[2120]! } + public var DialogList_Read: String { return self._s[2121]! } + public var Appearance_AppIconClassic: String { return self._s[2122]! } + public var Conversation_Dice_u1F3B2: String { return self._s[2123]! } + public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[2124]! } + public var Passport_Identity_Gender: String { return self._s[2125]! } public func Target_ShareGameConfirmationPrivate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2127]!, self._r[2127]!, [_0]) + return formatWithArgumentRanges(self._s[2126]!, self._r[2126]!, [_0]) } - public var Target_SelectGroup: String { return self._s[2128]! } - public var Map_HomeAndWorkInfo: String { return self._s[2130]! } + public var Target_SelectGroup: String { return self._s[2127]! } + public var Map_HomeAndWorkInfo: String { return self._s[2129]! } public func DialogList_EncryptedChatStartedIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2131]!, self._r[2131]!, [_0]) + return formatWithArgumentRanges(self._s[2130]!, self._r[2130]!, [_0]) } - public var Passport_Language_en: String { return self._s[2132]! } - public var AutoDownloadSettings_AutodownloadPhotos: String { return self._s[2133]! } - public var Channel_Username_CreatePublicLinkHelp: String { return self._s[2134]! } - public var Login_CancelPhoneVerificationContinue: String { return self._s[2135]! } - public var ScheduledMessages_SendNow: String { return self._s[2136]! } - public var Checkout_NewCard_PaymentCard: String { return self._s[2138]! } - public var Login_InfoHelp: String { return self._s[2139]! } - public var Appearance_BubbleCorners_AdjustAdjacent: String { return self._s[2140]! } - public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[2141]! } - public var SettingsSearch_Synonyms_Stickers_FeaturedPacks: String { return self._s[2142]! } + public var Passport_Language_en: String { return self._s[2131]! } + public var AutoDownloadSettings_AutodownloadPhotos: String { return self._s[2132]! } + public var Channel_Username_CreatePublicLinkHelp: String { return self._s[2133]! } + public var Login_CancelPhoneVerificationContinue: String { return self._s[2134]! } + public var ScheduledMessages_SendNow: String { return self._s[2135]! } + public var Checkout_NewCard_PaymentCard: String { return self._s[2137]! } + public var Login_InfoHelp: String { return self._s[2138]! } + public var Appearance_BubbleCorners_AdjustAdjacent: String { return self._s[2139]! } + public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[2140]! } + public var SettingsSearch_Synonyms_Stickers_FeaturedPacks: String { return self._s[2141]! } public func Channel_AdminLog_MessageChangedLinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2143]!, self._r[2143]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2142]!, self._r[2142]!, [_1, _2]) } - public var SocksProxySetup_AddProxy: String { return self._s[2146]! } - public var CreatePoll_Title: String { return self._s[2147]! } - public var MessagePoll_QuizNoUsers: String { return self._s[2148]! } - public var Conversation_ViewTheme: String { return self._s[2149]! } - public var SettingsSearch_Synonyms_Privacy_Data_SecretChatLinkPreview: String { return self._s[2150]! } - public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[2151]! } - public var TwoFactorSetup_Intro_Text: String { return self._s[2152]! } - public var UserInfo_GroupsInCommon: String { return self._s[2153]! } - public var TelegramWallet_Intro_TermsUrl: String { return self._s[2154]! } - public var Stats_ViewsByHoursTitle: String { return self._s[2155]! } - public var Call_AudioRouteHide: String { return self._s[2156]! } + public var SocksProxySetup_AddProxy: String { return self._s[2145]! } + public var CreatePoll_Title: String { return self._s[2146]! } + public var MessagePoll_QuizNoUsers: String { return self._s[2147]! } + public var Conversation_ViewTheme: String { return self._s[2148]! } + public var SettingsSearch_Synonyms_Privacy_Data_SecretChatLinkPreview: String { return self._s[2149]! } + public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[2150]! } + public var TwoFactorSetup_Intro_Text: String { return self._s[2151]! } + public var UserInfo_GroupsInCommon: String { return self._s[2152]! } + public var TelegramWallet_Intro_TermsUrl: String { return self._s[2153]! } + public var Stats_ViewsByHoursTitle: String { return self._s[2154]! } + public var Call_AudioRouteHide: String { return self._s[2155]! } public func Wallet_Info_TransactionDateHeader(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2158]!, self._r[2158]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2157]!, self._r[2157]!, [_1, _2]) } - public var ContactInfo_PhoneLabelMobile: String { return self._s[2159]! } - public var IntentsSettings_SuggestedChatsInfo: String { return self._s[2160]! } - public var CreatePoll_QuizOptionsHeader: String { return self._s[2161]! } + public var ContactInfo_PhoneLabelMobile: String { return self._s[2158]! } + public var IntentsSettings_SuggestedChatsInfo: String { return self._s[2159]! } + public var CreatePoll_QuizOptionsHeader: String { return self._s[2160]! } public func ChatList_LeaveGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2162]!, self._r[2162]!, [_0]) + return formatWithArgumentRanges(self._s[2161]!, self._r[2161]!, [_0]) } - public var TextFormat_Bold: String { return self._s[2163]! } - public var CreatePoll_ExplanationInfo: String { return self._s[2164]! } - public var FastTwoStepSetup_EmailSection: String { return self._s[2165]! } - public var StickerPackActionInfo_AddedTitle: String { return self._s[2166]! } - public var Notifications_Title: String { return self._s[2167]! } - public var Group_Username_InvalidTooShort: String { return self._s[2168]! } - public var Channel_ErrorAddTooMuch: String { return self._s[2169]! } + public var TextFormat_Bold: String { return self._s[2162]! } + public var CreatePoll_ExplanationInfo: String { return self._s[2163]! } + public var FastTwoStepSetup_EmailSection: String { return self._s[2164]! } + public var StickerPackActionInfo_AddedTitle: String { return self._s[2165]! } + public var Notifications_Title: String { return self._s[2166]! } + public var Group_Username_InvalidTooShort: String { return self._s[2167]! } + public var Channel_ErrorAddTooMuch: String { return self._s[2168]! } public func DialogList_MultipleTypingSuffix(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2170]!, self._r[2170]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[2169]!, self._r[2169]!, ["\(_0)"]) } - public var VoiceOver_DiscardPreparedContent: String { return self._s[2172]! } - public var Stickers_SuggestAdded: String { return self._s[2173]! } - public var Login_CountryCode: String { return self._s[2174]! } - public var ChatSettings_AutoPlayVideos: String { return self._s[2175]! } - public var Map_GetDirections: String { return self._s[2176]! } - public var Wallet_Receive_ShareInvoiceUrl: String { return self._s[2177]! } - public var Login_PhoneFloodError: String { return self._s[2178]! } + public var VoiceOver_DiscardPreparedContent: String { return self._s[2171]! } + public var Stickers_SuggestAdded: String { return self._s[2172]! } + public var Login_CountryCode: String { return self._s[2173]! } + public var ChatSettings_AutoPlayVideos: String { return self._s[2174]! } + public var Map_GetDirections: String { return self._s[2175]! } + public var Wallet_Receive_ShareInvoiceUrl: String { return self._s[2176]! } + public var Login_PhoneFloodError: String { return self._s[2177]! } public func Time_MonthOfYear_m3(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2179]!, self._r[2179]!, [_0]) + return formatWithArgumentRanges(self._s[2178]!, self._r[2178]!, [_0]) } public func Wallet_Time_PreciseDate_m10(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2180]!, self._r[2180]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2179]!, self._r[2179]!, [_1, _2, _3]) } - public var IntentsSettings_SuggestedChatsPrivateChats: String { return self._s[2181]! } - public var Settings_SetUsername: String { return self._s[2183]! } - public var Group_Location_ChangeLocation: String { return self._s[2184]! } - public var Notification_GroupInviterSelf: String { return self._s[2185]! } - public var InstantPage_TapToOpenLink: String { return self._s[2186]! } + public var IntentsSettings_SuggestedChatsPrivateChats: String { return self._s[2180]! } + public var Settings_SetUsername: String { return self._s[2182]! } + public var Group_Location_ChangeLocation: String { return self._s[2183]! } + public var Notification_GroupInviterSelf: String { return self._s[2184]! } + public var InstantPage_TapToOpenLink: String { return self._s[2185]! } public func Notification_ChannelInviter(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2187]!, self._r[2187]!, [_0]) + return formatWithArgumentRanges(self._s[2186]!, self._r[2186]!, [_0]) } - public var Watch_Suggestion_TalkLater: String { return self._s[2188]! } - public var SecretChat_Title: String { return self._s[2189]! } - public var Group_UpgradeNoticeText1: String { return self._s[2190]! } - public var AuthSessions_Title: String { return self._s[2191]! } + public var Watch_Suggestion_TalkLater: String { return self._s[2187]! } + public var SecretChat_Title: String { return self._s[2188]! } + public var Group_UpgradeNoticeText1: String { return self._s[2189]! } + public var AuthSessions_Title: String { return self._s[2190]! } public func TextFormat_AddLinkText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2192]!, self._r[2192]!, [_0]) + return formatWithArgumentRanges(self._s[2191]!, self._r[2191]!, [_0]) } - public var PhotoEditor_CropAuto: String { return self._s[2193]! } - public var Channel_About_Title: String { return self._s[2194]! } - public var Theme_ThemeChanged: String { return self._s[2195]! } - public var FastTwoStepSetup_EmailHelp: String { return self._s[2196]! } + public var PhotoEditor_CropAuto: String { return self._s[2192]! } + public var Channel_About_Title: String { return self._s[2193]! } + public var Theme_ThemeChanged: String { return self._s[2194]! } + public var FastTwoStepSetup_EmailHelp: String { return self._s[2195]! } public func Conversation_Bytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2198]!, self._r[2198]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[2197]!, self._r[2197]!, ["\(_0)"]) } - public var VoiceOver_MessageContextReport: String { return self._s[2199]! } - public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[2201]! } - public var Group_Setup_HistoryVisibleHelp: String { return self._s[2202]! } + public var VoiceOver_MessageContextReport: String { return self._s[2198]! } + public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[2200]! } + public var Group_Setup_HistoryVisibleHelp: String { return self._s[2201]! } public func PUSH_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2203]!, self._r[2203]!, [_1]) + return formatWithArgumentRanges(self._s[2202]!, self._r[2202]!, [_1]) } public func SharedMedia_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2205]!, self._r[2205]!, [_0]) + return formatWithArgumentRanges(self._s[2204]!, self._r[2204]!, [_0]) } public func TwoStepAuth_RecoveryEmailUnavailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2206]!, self._r[2206]!, [_0]) + return formatWithArgumentRanges(self._s[2205]!, self._r[2205]!, [_0]) } - public var Privacy_PaymentsClearInfoHelp: String { return self._s[2207]! } - public var PeopleNearby_DiscoverDescription: String { return self._s[2209]! } - public var Presence_online: String { return self._s[2211]! } - public var PasscodeSettings_Title: String { return self._s[2212]! } - public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[2213]! } - public var Web_OpenExternal: String { return self._s[2214]! } - public var AutoDownloadSettings_AutoDownload: String { return self._s[2216]! } - public var Channel_OwnershipTransfer_EnterPasswordText: String { return self._s[2217]! } - public var LocalGroup_Title: String { return self._s[2218]! } + public var Privacy_PaymentsClearInfoHelp: String { return self._s[2206]! } + public var PeopleNearby_DiscoverDescription: String { return self._s[2208]! } + public var Presence_online: String { return self._s[2210]! } + public var PasscodeSettings_Title: String { return self._s[2211]! } + public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[2212]! } + public var Web_OpenExternal: String { return self._s[2213]! } + public var AutoDownloadSettings_AutoDownload: String { return self._s[2215]! } + public var Channel_OwnershipTransfer_EnterPasswordText: String { return self._s[2216]! } + public var LocalGroup_Title: String { return self._s[2217]! } public func AutoNightTheme_AutomaticHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2219]!, self._r[2219]!, [_0]) + return formatWithArgumentRanges(self._s[2218]!, self._r[2218]!, [_0]) } - public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[2220]! } - public var Conversation_StopQuizConfirmation: String { return self._s[2221]! } - public var Map_YouAreHere: String { return self._s[2222]! } + public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[2219]! } + public var Conversation_StopQuizConfirmation: String { return self._s[2220]! } + public var Map_YouAreHere: String { return self._s[2221]! } public func AuthSessions_Message(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2223]!, self._r[2223]!, [_0]) + return formatWithArgumentRanges(self._s[2222]!, self._r[2222]!, [_0]) } public func ChatList_DeleteChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2224]!, self._r[2224]!, [_0]) + return formatWithArgumentRanges(self._s[2223]!, self._r[2223]!, [_0]) } - public var Theme_Context_ChangeColors: String { return self._s[2225]! } - public var PrivacyLastSeenSettings_AlwaysShareWith: String { return self._s[2226]! } - public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[2227]! } + public var Theme_Context_ChangeColors: String { return self._s[2224]! } + public var PrivacyLastSeenSettings_AlwaysShareWith: String { return self._s[2225]! } + public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[2226]! } public func AuthSessions_AppUnofficial(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2228]!, self._r[2228]!, [_0]) + return formatWithArgumentRanges(self._s[2227]!, self._r[2227]!, [_0]) } public func DialogList_LiveLocationSharingTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2229]!, self._r[2229]!, [_0]) + return formatWithArgumentRanges(self._s[2228]!, self._r[2228]!, [_0]) } - public var SocksProxySetup_Username: String { return self._s[2230]! } - public var Bot_Start: String { return self._s[2231]! } + public var SocksProxySetup_Username: String { return self._s[2229]! } + public var Bot_Start: String { return self._s[2230]! } public func Channel_AdminLog_EmptyFilterQueryText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2232]!, self._r[2232]!, [_0]) + return formatWithArgumentRanges(self._s[2231]!, self._r[2231]!, [_0]) } public func Channel_AdminLog_MessagePinned(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2233]!, self._r[2233]!, [_0]) + return formatWithArgumentRanges(self._s[2232]!, self._r[2232]!, [_0]) } - public var Contacts_SortByPresence: String { return self._s[2234]! } - public var AccentColor_Title: String { return self._s[2237]! } - public var Conversation_DiscardVoiceMessageTitle: String { return self._s[2238]! } + public var Contacts_SortByPresence: String { return self._s[2233]! } + public var AccentColor_Title: String { return self._s[2236]! } + public var Conversation_DiscardVoiceMessageTitle: String { return self._s[2237]! } public func PUSH_CHAT_CREATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2239]!, self._r[2239]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2238]!, self._r[2238]!, [_1, _2]) } public func PrivacySettings_LastSeenContactsMinus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2240]!, self._r[2240]!, [_0]) + return formatWithArgumentRanges(self._s[2239]!, self._r[2239]!, [_0]) } public func Channel_AdminLog_MessageChangedLinkedGroup(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2241]!, self._r[2241]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2240]!, self._r[2240]!, [_1, _2]) } - public var Passport_Email_EnterOtherEmail: String { return self._s[2242]! } - public var Login_InfoAvatarPhoto: String { return self._s[2243]! } - public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[2244]! } - public var Tour_Title4: String { return self._s[2245]! } - public var Passport_Identity_Translation: String { return self._s[2246]! } - public var SettingsSearch_Synonyms_Notifications_ContactJoined: String { return self._s[2247]! } - public var Login_TermsOfServiceLabel: String { return self._s[2249]! } - public var Passport_Language_it: String { return self._s[2250]! } - public var KeyCommand_JumpToNextUnreadChat: String { return self._s[2251]! } - public var Passport_Identity_SelfieHelp: String { return self._s[2252]! } - public var Conversation_ClearAll: String { return self._s[2254]! } - public var Wallet_Send_UninitializedText: String { return self._s[2256]! } - public var Channel_OwnershipTransfer_Title: String { return self._s[2257]! } - public var TwoStepAuth_FloodError: String { return self._s[2258]! } + public var Passport_Email_EnterOtherEmail: String { return self._s[2241]! } + public var Login_InfoAvatarPhoto: String { return self._s[2242]! } + public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[2243]! } + public var Tour_Title4: String { return self._s[2244]! } + public var Passport_Identity_Translation: String { return self._s[2245]! } + public var SettingsSearch_Synonyms_Notifications_ContactJoined: String { return self._s[2246]! } + public var Login_TermsOfServiceLabel: String { return self._s[2248]! } + public var Passport_Language_it: String { return self._s[2249]! } + public var KeyCommand_JumpToNextUnreadChat: String { return self._s[2250]! } + public var Passport_Identity_SelfieHelp: String { return self._s[2251]! } + public var Conversation_ClearAll: String { return self._s[2253]! } + public var Wallet_Send_UninitializedText: String { return self._s[2255]! } + public var Channel_OwnershipTransfer_Title: String { return self._s[2256]! } + public var TwoStepAuth_FloodError: String { return self._s[2257]! } public func PUSH_CHANNEL_MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2259]!, self._r[2259]!, [_1]) + return formatWithArgumentRanges(self._s[2258]!, self._r[2258]!, [_1]) } - public var Paint_Delete: String { return self._s[2260]! } + public var Paint_Delete: String { return self._s[2259]! } public func Wallet_Sent_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2261]!, self._r[2261]!, [_0]) + return formatWithArgumentRanges(self._s[2260]!, self._r[2260]!, [_0]) } - public var Privacy_AddNewPeer: String { return self._s[2262]! } + public var Privacy_AddNewPeer: String { return self._s[2261]! } public func Channel_AdminLog_MessageRank(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2263]!, self._r[2263]!, [_1]) + return formatWithArgumentRanges(self._s[2262]!, self._r[2262]!, [_1]) } - public var LogoutOptions_SetPasscodeText: String { return self._s[2264]! } + public var LogoutOptions_SetPasscodeText: String { return self._s[2263]! } public func Passport_AcceptHelp(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2265]!, self._r[2265]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2264]!, self._r[2264]!, [_1, _2]) } - public var Message_PinnedAudioMessage: String { return self._s[2266]! } + public var Message_PinnedAudioMessage: String { return self._s[2265]! } public func Watch_Time_ShortTodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2267]!, self._r[2267]!, [_0]) + return formatWithArgumentRanges(self._s[2266]!, self._r[2266]!, [_0]) } - public var Notification_Mute1hMin: String { return self._s[2268]! } - public var Notifications_GroupNotificationsSound: String { return self._s[2269]! } - public var Wallet_Month_GenNovember: String { return self._s[2270]! } - public var SocksProxySetup_ShareProxyList: String { return self._s[2271]! } - public var Conversation_MessageEditedLabel: String { return self._s[2272]! } + public var Notification_Mute1hMin: String { return self._s[2267]! } + public var Notifications_GroupNotificationsSound: String { return self._s[2268]! } + public var Wallet_Month_GenNovember: String { return self._s[2269]! } + public var SocksProxySetup_ShareProxyList: String { return self._s[2270]! } + public var Conversation_MessageEditedLabel: String { return self._s[2271]! } public func ClearCache_Success(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2273]!, self._r[2273]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2272]!, self._r[2272]!, [_0, _1]) } - public var Notification_Exceptions_AlwaysOff: String { return self._s[2274]! } - public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[2275]! } + public var Notification_Exceptions_AlwaysOff: String { return self._s[2273]! } + public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[2274]! } public func Channel_AdminLog_MessageAdmin(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2276]!, self._r[2276]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[2275]!, self._r[2275]!, [_0, _1, _2]) } - public var NetworkUsageSettings_ResetStats: String { return self._s[2277]! } + public var NetworkUsageSettings_ResetStats: String { return self._s[2276]! } public func PUSH_MESSAGE_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2278]!, self._r[2278]!, [_1]) + return formatWithArgumentRanges(self._s[2277]!, self._r[2277]!, [_1]) } - public var AccessDenied_LocationTracking: String { return self._s[2279]! } - public var Month_GenOctober: String { return self._s[2280]! } - public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[2281]! } - public var EnterPasscode_EnterPasscode: String { return self._s[2282]! } - public var MediaPicker_TimerTooltip: String { return self._s[2284]! } - public var SharedMedia_TitleAll: String { return self._s[2285]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsExceptions: String { return self._s[2288]! } - public var Conversation_RestrictedMedia: String { return self._s[2289]! } - public var AccessDenied_PhotosRestricted: String { return self._s[2290]! } - public var Privacy_Forwards_WhoCanForward: String { return self._s[2292]! } - public var ChangePhoneNumberCode_Called: String { return self._s[2293]! } + public var AccessDenied_LocationTracking: String { return self._s[2278]! } + public var Month_GenOctober: String { return self._s[2279]! } + public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[2280]! } + public var EnterPasscode_EnterPasscode: String { return self._s[2281]! } + public var MediaPicker_TimerTooltip: String { return self._s[2283]! } + public var SharedMedia_TitleAll: String { return self._s[2284]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsExceptions: String { return self._s[2287]! } + public var Conversation_RestrictedMedia: String { return self._s[2288]! } + public var AccessDenied_PhotosRestricted: String { return self._s[2289]! } + public var Privacy_Forwards_WhoCanForward: String { return self._s[2291]! } + public var ChangePhoneNumberCode_Called: String { return self._s[2292]! } public func Notification_PinnedDocumentMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2294]!, self._r[2294]!, [_0]) + return formatWithArgumentRanges(self._s[2293]!, self._r[2293]!, [_0]) } - public var Conversation_SavedMessages: String { return self._s[2297]! } - public var Your_cards_expiration_month_is_invalid: String { return self._s[2299]! } - public var FastTwoStepSetup_PasswordPlaceholder: String { return self._s[2300]! } + public var Conversation_SavedMessages: String { return self._s[2296]! } + public var Your_cards_expiration_month_is_invalid: String { return self._s[2298]! } + public var FastTwoStepSetup_PasswordPlaceholder: String { return self._s[2299]! } public func Target_ShareGameConfirmationGroup(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2302]!, self._r[2302]!, [_0]) + return formatWithArgumentRanges(self._s[2301]!, self._r[2301]!, [_0]) } - public var VoiceOver_Chat_YourMessage: String { return self._s[2303]! } + public var VoiceOver_Chat_YourMessage: String { return self._s[2302]! } public func VoiceOver_Chat_Title(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2304]!, self._r[2304]!, [_0]) + return formatWithArgumentRanges(self._s[2303]!, self._r[2303]!, [_0]) } - public var ReportPeer_AlertSuccess: String { return self._s[2305]! } - public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[2306]! } + public var ReportPeer_AlertSuccess: String { return self._s[2304]! } + public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[2305]! } public func InstantPage_RelatedArticleAuthorAndDateTitle(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2307]!, self._r[2307]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2306]!, self._r[2306]!, [_1, _2]) } - public var Checkout_PasswordEntry_Title: String { return self._s[2308]! } - public var PhotoEditor_FadeTool: String { return self._s[2309]! } - public var Privacy_ContactsReset: String { return self._s[2310]! } + public var Checkout_PasswordEntry_Title: String { return self._s[2307]! } + public var PhotoEditor_FadeTool: String { return self._s[2308]! } + public var Privacy_ContactsReset: String { return self._s[2309]! } public func Channel_AdminLog_MessageRestrictedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2312]!, self._r[2312]!, [_0]) + return formatWithArgumentRanges(self._s[2311]!, self._r[2311]!, [_0]) } - public var Message_PinnedVideoMessage: String { return self._s[2313]! } - public var ChatList_Mute: String { return self._s[2314]! } + public var Message_PinnedVideoMessage: String { return self._s[2312]! } + public var ChatList_Mute: String { return self._s[2313]! } public func Wallet_Time_PreciseDate_m5(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2315]!, self._r[2315]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2314]!, self._r[2314]!, [_1, _2, _3]) } - public var Permissions_CellularDataText_v0: String { return self._s[2316]! } - public var Conversation_PinnedQuiz: String { return self._s[2318]! } - public var ShareMenu_SelectChats: String { return self._s[2320]! } - public var ChatList_Context_Unarchive: String { return self._s[2321]! } - public var MusicPlayer_VoiceNote: String { return self._s[2322]! } - public var Conversation_RestrictedText: String { return self._s[2323]! } - public var SettingsSearch_Synonyms_Privacy_Data_DeleteDrafts: String { return self._s[2324]! } - public var Wallet_Month_GenApril: String { return self._s[2325]! } - public var Wallet_Month_ShortMarch: String { return self._s[2326]! } - public var TwoStepAuth_DisableSuccess: String { return self._s[2327]! } - public var Chat_PsaTooltip_covid: String { return self._s[2328]! } - public var Cache_Videos: String { return self._s[2329]! } - public var PrivacySettings_PhoneNumber: String { return self._s[2330]! } - public var Wallet_Month_GenFebruary: String { return self._s[2331]! } - public var FeatureDisabled_Oops: String { return self._s[2333]! } - public var ChatList_RemoveFolderAction: String { return self._s[2334]! } - public var Passport_Address_PostcodePlaceholder: String { return self._s[2335]! } + public var Permissions_CellularDataText_v0: String { return self._s[2315]! } + public var Conversation_PinnedQuiz: String { return self._s[2317]! } + public var ShareMenu_SelectChats: String { return self._s[2319]! } + public var ChatList_Context_Unarchive: String { return self._s[2320]! } + public var MusicPlayer_VoiceNote: String { return self._s[2321]! } + public var Conversation_RestrictedText: String { return self._s[2322]! } + public var SettingsSearch_Synonyms_Privacy_Data_DeleteDrafts: String { return self._s[2323]! } + public var Wallet_Month_GenApril: String { return self._s[2324]! } + public var Wallet_Month_ShortMarch: String { return self._s[2325]! } + public var TwoStepAuth_DisableSuccess: String { return self._s[2326]! } + public var Chat_PsaTooltip_covid: String { return self._s[2327]! } + public var Cache_Videos: String { return self._s[2328]! } + public var PrivacySettings_PhoneNumber: String { return self._s[2329]! } + public var Wallet_Month_GenFebruary: String { return self._s[2330]! } + public var FeatureDisabled_Oops: String { return self._s[2332]! } + public var ChatList_RemoveFolderAction: String { return self._s[2333]! } + public var Passport_Address_PostcodePlaceholder: String { return self._s[2334]! } public func AddContact_StatusSuccess(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2336]!, self._r[2336]!, [_0]) + return formatWithArgumentRanges(self._s[2335]!, self._r[2335]!, [_0]) } - public var Stickers_GroupStickersHelp: String { return self._s[2338]! } - public var GroupPermission_NoSendPolls: String { return self._s[2339]! } - public var Wallet_Qr_ScanCode: String { return self._s[2340]! } - public var Message_VideoExpired: String { return self._s[2342]! } - public var GroupInfo_GroupHistoryVisible: String { return self._s[2343]! } - public var Notifications_Badge: String { return self._s[2344]! } - public var Wallet_Receive_AddressCopied: String { return self._s[2345]! } - public var CreatePoll_OptionPlaceholder: String { return self._s[2346]! } - public var Username_InvalidTooShort: String { return self._s[2347]! } - public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[2348]! } - public var Channel_AdminLog_PinMessages: String { return self._s[2349]! } - public var ArchivedChats_IntroTitle3: String { return self._s[2350]! } + public var Stickers_GroupStickersHelp: String { return self._s[2337]! } + public var GroupPermission_NoSendPolls: String { return self._s[2338]! } + public var Wallet_Qr_ScanCode: String { return self._s[2339]! } + public var Message_VideoExpired: String { return self._s[2341]! } + public var GroupInfo_GroupHistoryVisible: String { return self._s[2342]! } + public var Notifications_Badge: String { return self._s[2343]! } + public var Wallet_Receive_AddressCopied: String { return self._s[2344]! } + public var CreatePoll_OptionPlaceholder: String { return self._s[2345]! } + public var Username_InvalidTooShort: String { return self._s[2346]! } + public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[2347]! } + public var Channel_AdminLog_PinMessages: String { return self._s[2348]! } + public var ArchivedChats_IntroTitle3: String { return self._s[2349]! } public func Notification_MessageLifetimeRemoved(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2351]!, self._r[2351]!, [_1]) + return formatWithArgumentRanges(self._s[2350]!, self._r[2350]!, [_1]) } - public var Permissions_SiriAllowInSettings_v0: String { return self._s[2352]! } - public var Conversation_DefaultRestrictedText: String { return self._s[2353]! } - public var SharedMedia_CategoryDocs: String { return self._s[2356]! } + public var Permissions_SiriAllowInSettings_v0: String { return self._s[2351]! } + public var Conversation_DefaultRestrictedText: String { return self._s[2352]! } + public var SharedMedia_CategoryDocs: String { return self._s[2355]! } public func PUSH_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2357]!, self._r[2357]!, [_1]) + return formatWithArgumentRanges(self._s[2356]!, self._r[2356]!, [_1]) } - public var Wallet_Send_UninitializedTitle: String { return self._s[2358]! } - public var StickerPackActionInfo_ArchivedTitle: String { return self._s[2359]! } - public var Privacy_Forwards_NeverLink: String { return self._s[2361]! } + public var Wallet_Send_UninitializedTitle: String { return self._s[2357]! } + public var StickerPackActionInfo_ArchivedTitle: String { return self._s[2358]! } + public var Privacy_Forwards_NeverLink: String { return self._s[2360]! } public func Notification_MessageLifetimeChangedOutgoing(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2362]!, self._r[2362]!, [_1]) + return formatWithArgumentRanges(self._s[2361]!, self._r[2361]!, [_1]) } - public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[2363]! } + public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[2362]! } public func Time_MonthOfYear_m12(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2364]!, self._r[2364]!, [_0]) + return formatWithArgumentRanges(self._s[2363]!, self._r[2363]!, [_0]) } - public var ChatSettings_PrivateChats: String { return self._s[2365]! } - public var SettingsSearch_Synonyms_EditProfile_Logout: String { return self._s[2366]! } - public var Conversation_PrivateMessageLinkCopied: String { return self._s[2367]! } - public var Channel_UpdatePhotoItem: String { return self._s[2368]! } - public var GroupInfo_LeftStatus: String { return self._s[2369]! } - public var Watch_MessageView_Forward: String { return self._s[2371]! } - public var ReportPeer_ReasonChildAbuse: String { return self._s[2372]! } - public var Cache_ClearEmpty: String { return self._s[2374]! } - public var Localization_LanguageName: String { return self._s[2375]! } - public var Wallet_AccessDenied_Title: String { return self._s[2376]! } - public var WebSearch_GIFs: String { return self._s[2377]! } - public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[2378]! } - public var Wallet_AccessDenied_Settings: String { return self._s[2379]! } - public var Username_InvalidStartsWithNumber: String { return self._s[2380]! } - public var Common_Back: String { return self._s[2381]! } - public var GroupInfo_Permissions_EditingDisabled: String { return self._s[2382]! } - public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[2383]! } - public var Wallet_Send_Send: String { return self._s[2384]! } + public var ChatSettings_PrivateChats: String { return self._s[2364]! } + public var SettingsSearch_Synonyms_EditProfile_Logout: String { return self._s[2365]! } + public var Conversation_PrivateMessageLinkCopied: String { return self._s[2366]! } + public var Channel_UpdatePhotoItem: String { return self._s[2367]! } + public var GroupInfo_LeftStatus: String { return self._s[2368]! } + public var Watch_MessageView_Forward: String { return self._s[2370]! } + public var ReportPeer_ReasonChildAbuse: String { return self._s[2371]! } + public var Cache_ClearEmpty: String { return self._s[2373]! } + public var Localization_LanguageName: String { return self._s[2374]! } + public var Wallet_AccessDenied_Title: String { return self._s[2375]! } + public var WebSearch_GIFs: String { return self._s[2376]! } + public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[2377]! } + public var Wallet_AccessDenied_Settings: String { return self._s[2378]! } + public var Username_InvalidStartsWithNumber: String { return self._s[2379]! } + public var Common_Back: String { return self._s[2380]! } + public var GroupInfo_Permissions_EditingDisabled: String { return self._s[2381]! } + public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[2382]! } + public var Wallet_Send_Send: String { return self._s[2383]! } public func PUSH_CHANNEL_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2386]!, self._r[2386]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2385]!, self._r[2385]!, [_1, _2]) } - public var Wallet_Info_RefreshErrorTitle: String { return self._s[2387]! } - public var ChatList_Tabs_All: String { return self._s[2388]! } - public var Wallet_Month_GenJune: String { return self._s[2389]! } - public var Passport_Email_Help: String { return self._s[2390]! } - public var Watch_Conversation_Reply: String { return self._s[2392]! } - public var Conversation_EditingMessageMediaChange: String { return self._s[2395]! } - public var Passport_Identity_IssueDatePlaceholder: String { return self._s[2396]! } - public var Channel_BanUser_Unban: String { return self._s[2398]! } - public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[2399]! } - public var Group_Username_CreatePublicLinkHelp: String { return self._s[2400]! } - public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[2402]! } - public var Wallet_Send_AddressHeader: String { return self._s[2403]! } - public var Passport_Identity_Name: String { return self._s[2404]! } + public var Wallet_Info_RefreshErrorTitle: String { return self._s[2386]! } + public var ChatList_Tabs_All: String { return self._s[2387]! } + public var Wallet_Month_GenJune: String { return self._s[2388]! } + public var Passport_Email_Help: String { return self._s[2389]! } + public var Watch_Conversation_Reply: String { return self._s[2391]! } + public var Conversation_EditingMessageMediaChange: String { return self._s[2394]! } + public var Passport_Identity_IssueDatePlaceholder: String { return self._s[2395]! } + public var Channel_BanUser_Unban: String { return self._s[2397]! } + public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[2398]! } + public var Group_Username_CreatePublicLinkHelp: String { return self._s[2399]! } + public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[2401]! } + public var Wallet_Send_AddressHeader: String { return self._s[2402]! } + public var Passport_Identity_Name: String { return self._s[2403]! } public func Channel_DiscussionGroup_HeaderGroupSet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2405]!, self._r[2405]!, [_0]) + return formatWithArgumentRanges(self._s[2404]!, self._r[2404]!, [_0]) } - public var GroupRemoved_ViewUserInfo: String { return self._s[2406]! } - public var Conversation_BlockUser: String { return self._s[2407]! } - public var Month_GenJanuary: String { return self._s[2408]! } - public var ChatSettings_TextSize: String { return self._s[2409]! } - public var Notification_PassportValuePhone: String { return self._s[2410]! } - public var MediaPlayer_UnknownArtist: String { return self._s[2411]! } - public var Passport_Language_ne: String { return self._s[2412]! } - public var Notification_CallBack: String { return self._s[2413]! } - public var Wallet_SecureStorageReset_BiometryTouchId: String { return self._s[2414]! } - public var TwoStepAuth_EmailHelp: String { return self._s[2415]! } + public var GroupRemoved_ViewUserInfo: String { return self._s[2405]! } + public var Conversation_BlockUser: String { return self._s[2406]! } + public var Month_GenJanuary: String { return self._s[2407]! } + public var ChatSettings_TextSize: String { return self._s[2408]! } + public var Notification_PassportValuePhone: String { return self._s[2409]! } + public var MediaPlayer_UnknownArtist: String { return self._s[2410]! } + public var Passport_Language_ne: String { return self._s[2411]! } + public var Notification_CallBack: String { return self._s[2412]! } + public var Wallet_SecureStorageReset_BiometryTouchId: String { return self._s[2413]! } + public var TwoStepAuth_EmailHelp: String { return self._s[2414]! } public func Time_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2416]!, self._r[2416]!, [_0]) + return formatWithArgumentRanges(self._s[2415]!, self._r[2415]!, [_0]) } - public var Channel_Info_Management: String { return self._s[2417]! } - public var Passport_FieldIdentityUploadHelp: String { return self._s[2418]! } - public var Stickers_FrequentlyUsed: String { return self._s[2420]! } - public var Channel_BanUser_PermissionSendMessages: String { return self._s[2421]! } - public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[2423]! } + public var Channel_Info_Management: String { return self._s[2416]! } + public var Passport_FieldIdentityUploadHelp: String { return self._s[2417]! } + public var Stickers_FrequentlyUsed: String { return self._s[2419]! } + public var Channel_BanUser_PermissionSendMessages: String { return self._s[2420]! } + public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[2422]! } public func LOCAL_CHANNEL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2424]!, self._r[2424]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[2423]!, self._r[2423]!, [_1, "\(_2)"]) } - public var TwoFactorSetup_Password_Title: String { return self._s[2425]! } - public var Passport_Address_EditResidentialAddress: String { return self._s[2426]! } - public var PrivacyPolicy_DeclineTitle: String { return self._s[2427]! } - public var CreatePoll_TextHeader: String { return self._s[2428]! } + public var TwoFactorSetup_Password_Title: String { return self._s[2424]! } + public var Passport_Address_EditResidentialAddress: String { return self._s[2425]! } + public var PrivacyPolicy_DeclineTitle: String { return self._s[2426]! } + public var CreatePoll_TextHeader: String { return self._s[2427]! } public func Checkout_SavePasswordTimeoutAndTouchId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2429]!, self._r[2429]!, [_0]) + return formatWithArgumentRanges(self._s[2428]!, self._r[2428]!, [_0]) } - public var PhotoEditor_QualityMedium: String { return self._s[2430]! } - public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[2431]! } - public var Conversation_StatusKickedFromChannel: String { return self._s[2433]! } - public var CheckoutInfo_ReceiverInfoName: String { return self._s[2434]! } - public var Group_ErrorSendRestrictedStickers: String { return self._s[2435]! } + public var PhotoEditor_QualityMedium: String { return self._s[2429]! } + public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[2430]! } + public var Conversation_StatusKickedFromChannel: String { return self._s[2432]! } + public var CheckoutInfo_ReceiverInfoName: String { return self._s[2433]! } + public var Group_ErrorSendRestrictedStickers: String { return self._s[2434]! } public func Conversation_RestrictedInlineTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2436]!, self._r[2436]!, [_0]) + return formatWithArgumentRanges(self._s[2435]!, self._r[2435]!, [_0]) } public func Channel_AdminLog_MessageTransferedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2437]!, self._r[2437]!, [_1]) + return formatWithArgumentRanges(self._s[2436]!, self._r[2436]!, [_1]) } - public var LogoutOptions_LogOutWalletInfo: String { return self._s[2438]! } - public var TwoFactorSetup_Email_SkipConfirmationTitle: String { return self._s[2439]! } - public var Conversation_LinkDialogOpen: String { return self._s[2441]! } - public var TwoFactorSetup_Hint_Title: String { return self._s[2442]! } - public var VoiceOver_Chat_PollNoVotes: String { return self._s[2443]! } - public var Settings_Username: String { return self._s[2445]! } - public var Conversation_Block: String { return self._s[2447]! } - public var Wallpaper_Wallpaper: String { return self._s[2448]! } - public var SocksProxySetup_UseProxy: String { return self._s[2450]! } - public var Wallet_Send_Confirmation: String { return self._s[2451]! } - public var EditTheme_UploadEditedTheme: String { return self._s[2452]! } - public var UserInfo_ShareMyContactInfo: String { return self._s[2453]! } - public var MessageTimer_Forever: String { return self._s[2454]! } - public var Privacy_Calls_WhoCanCallMe: String { return self._s[2455]! } - public var PhotoEditor_DiscardChanges: String { return self._s[2456]! } - public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[2457]! } - public var Passport_Language_da: String { return self._s[2458]! } - public var SocksProxySetup_PortPlaceholder: String { return self._s[2460]! } + public var LogoutOptions_LogOutWalletInfo: String { return self._s[2437]! } + public var TwoFactorSetup_Email_SkipConfirmationTitle: String { return self._s[2438]! } + public var Conversation_LinkDialogOpen: String { return self._s[2440]! } + public var TwoFactorSetup_Hint_Title: String { return self._s[2441]! } + public var VoiceOver_Chat_PollNoVotes: String { return self._s[2442]! } + public var Settings_Username: String { return self._s[2444]! } + public var Conversation_Block: String { return self._s[2446]! } + public var Wallpaper_Wallpaper: String { return self._s[2447]! } + public var SocksProxySetup_UseProxy: String { return self._s[2449]! } + public var Wallet_Send_Confirmation: String { return self._s[2450]! } + public var EditTheme_UploadEditedTheme: String { return self._s[2451]! } + public var UserInfo_ShareMyContactInfo: String { return self._s[2452]! } + public var MessageTimer_Forever: String { return self._s[2453]! } + public var Privacy_Calls_WhoCanCallMe: String { return self._s[2454]! } + public var PhotoEditor_DiscardChanges: String { return self._s[2455]! } + public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[2456]! } + public var Passport_Language_da: String { return self._s[2457]! } + public var SocksProxySetup_PortPlaceholder: String { return self._s[2459]! } public func SecretGIF_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2461]!, self._r[2461]!, [_0]) + return formatWithArgumentRanges(self._s[2460]!, self._r[2460]!, [_0]) } - public var Passport_Address_EditPassportRegistration: String { return self._s[2462]! } + public var Passport_Address_EditPassportRegistration: String { return self._s[2461]! } public func Channel_AdminLog_MessageChangedGroupAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2464]!, self._r[2464]!, [_0]) + return formatWithArgumentRanges(self._s[2463]!, self._r[2463]!, [_0]) } - public var Settings_AddDevice: String { return self._s[2465]! } - public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[2467]! } - public var AuthSessions_AddDeviceIntro_Text1: String { return self._s[2468]! } - public var Conversation_SearchByName_Prefix: String { return self._s[2469]! } - public var Conversation_PinnedPoll: String { return self._s[2470]! } - public var AuthSessions_AddDeviceIntro_Text2: String { return self._s[2471]! } - public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[2472]! } - public var AuthSessions_AddDeviceIntro_Text3: String { return self._s[2473]! } + public var Settings_AddDevice: String { return self._s[2464]! } + public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[2466]! } + public var AuthSessions_AddDeviceIntro_Text1: String { return self._s[2467]! } + public var Conversation_SearchByName_Prefix: String { return self._s[2468]! } + public var Conversation_PinnedPoll: String { return self._s[2469]! } + public var AuthSessions_AddDeviceIntro_Text2: String { return self._s[2470]! } + public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[2471]! } + public var AuthSessions_AddDeviceIntro_Text3: String { return self._s[2472]! } public func PUSH_ENCRYPTION_ACCEPT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2474]!, self._r[2474]!, [_1]) + return formatWithArgumentRanges(self._s[2473]!, self._r[2473]!, [_1]) } - public var WallpaperSearch_ColorPurple: String { return self._s[2475]! } - public var Cache_ByPeerHeader: String { return self._s[2476]! } + public var WallpaperSearch_ColorPurple: String { return self._s[2474]! } + public var Cache_ByPeerHeader: String { return self._s[2475]! } public func Conversation_EncryptedPlaceholderTitleIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2477]!, self._r[2477]!, [_0]) + return formatWithArgumentRanges(self._s[2476]!, self._r[2476]!, [_0]) } - public var ChatSettings_AutoDownloadDocuments: String { return self._s[2478]! } - public var Appearance_ThemePreview_Chat_3_Text: String { return self._s[2481]! } - public var Wallet_Completed_Title: String { return self._s[2482]! } - public var Notification_PinnedMessage: String { return self._s[2483]! } - public var TwoFactorSetup_EmailVerification_Placeholder: String { return self._s[2484]! } - public var VoiceOver_Chat_RecordModeVideoMessage: String { return self._s[2486]! } - public var Contacts_SortBy: String { return self._s[2487]! } + public var ChatSettings_AutoDownloadDocuments: String { return self._s[2477]! } + public var Appearance_ThemePreview_Chat_3_Text: String { return self._s[2480]! } + public var Wallet_Completed_Title: String { return self._s[2481]! } + public var Notification_PinnedMessage: String { return self._s[2482]! } + public var TwoFactorSetup_EmailVerification_Placeholder: String { return self._s[2483]! } + public var VoiceOver_Chat_RecordModeVideoMessage: String { return self._s[2485]! } + public var Contacts_SortBy: String { return self._s[2486]! } public func PUSH_CHANNEL_MESSAGE_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2488]!, self._r[2488]!, [_1]) + return formatWithArgumentRanges(self._s[2487]!, self._r[2487]!, [_1]) } - public var Appearance_ColorThemeNight: String { return self._s[2490]! } + public var Appearance_ColorThemeNight: String { return self._s[2489]! } public func PUSH_MESSAGE_GAME(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2491]!, self._r[2491]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2490]!, self._r[2490]!, [_1, _2]) } - public var Call_EncryptionKey_Title: String { return self._s[2492]! } - public var Watch_UserInfo_Service: String { return self._s[2493]! } - public var SettingsSearch_Synonyms_Data_SaveEditedPhotos: String { return self._s[2495]! } - public var Conversation_Unpin: String { return self._s[2497]! } - public var CancelResetAccount_Title: String { return self._s[2498]! } - public var Map_LiveLocationFor15Minutes: String { return self._s[2499]! } + public var Call_EncryptionKey_Title: String { return self._s[2491]! } + public var Watch_UserInfo_Service: String { return self._s[2492]! } + public var SettingsSearch_Synonyms_Data_SaveEditedPhotos: String { return self._s[2494]! } + public var Conversation_Unpin: String { return self._s[2496]! } + public var CancelResetAccount_Title: String { return self._s[2497]! } + public var Map_LiveLocationFor15Minutes: String { return self._s[2498]! } public func Time_PreciseDate_m8(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2501]!, self._r[2501]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2500]!, self._r[2500]!, [_1, _2, _3]) } - public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[2502]! } - public var Appearance_BubbleCorners_Title: String { return self._s[2503]! } - public var CallSettings_Title: String { return self._s[2504]! } - public var SettingsSearch_Synonyms_Appearance_ChatBackground: String { return self._s[2505]! } - public var PasscodeSettings_EncryptDataHelp: String { return self._s[2507]! } - public var AutoDownloadSettings_Contacts: String { return self._s[2508]! } + public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[2501]! } + public var Appearance_BubbleCorners_Title: String { return self._s[2502]! } + public var CallSettings_Title: String { return self._s[2503]! } + public var SettingsSearch_Synonyms_Appearance_ChatBackground: String { return self._s[2504]! } + public var PasscodeSettings_EncryptDataHelp: String { return self._s[2506]! } + public var AutoDownloadSettings_Contacts: String { return self._s[2507]! } public func Channel_AdminLog_MessageRankName(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2509]!, self._r[2509]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2508]!, self._r[2508]!, [_1, _2]) } - public var ChatList_Tabs_AllChats: String { return self._s[2510]! } - public var Passport_Identity_DocumentDetails: String { return self._s[2511]! } - public var LoginPassword_PasswordHelp: String { return self._s[2512]! } - public var ChatListFolderSettings_Info: String { return self._s[2513]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadUsingWifi: String { return self._s[2514]! } - public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[2515]! } - public var ChatContextMenu_TextSelectionTip: String { return self._s[2516]! } - public var ChatListFolder_CategoryGroups: String { return self._s[2517]! } - public var Checkout_TotalPaidAmount: String { return self._s[2518]! } + public var ChatList_Tabs_AllChats: String { return self._s[2509]! } + public var Passport_Identity_DocumentDetails: String { return self._s[2510]! } + public var LoginPassword_PasswordHelp: String { return self._s[2511]! } + public var ChatListFolderSettings_Info: String { return self._s[2512]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadUsingWifi: String { return self._s[2513]! } + public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[2514]! } + public var ChatContextMenu_TextSelectionTip: String { return self._s[2515]! } + public var ChatListFolder_CategoryGroups: String { return self._s[2516]! } + public var Checkout_TotalPaidAmount: String { return self._s[2517]! } public func FileSize_KB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2519]!, self._r[2519]!, [_0]) + return formatWithArgumentRanges(self._s[2518]!, self._r[2518]!, [_0]) } - public var ChatState_Updating: String { return self._s[2520]! } - public var PasscodeSettings_ChangePasscode: String { return self._s[2521]! } - public var ChatListFolder_ExcludedSectionHeader: String { return self._s[2522]! } - public var Conversation_SecretLinkPreviewAlert: String { return self._s[2524]! } - public var Privacy_SecretChatsLinkPreviews: String { return self._s[2525]! } + public var ChatState_Updating: String { return self._s[2519]! } + public var PasscodeSettings_ChangePasscode: String { return self._s[2520]! } + public var ChatListFolder_ExcludedSectionHeader: String { return self._s[2521]! } + public var Conversation_SecretLinkPreviewAlert: String { return self._s[2523]! } + public var Privacy_SecretChatsLinkPreviews: String { return self._s[2524]! } public func PUSH_CHANNEL_MESSAGE_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2526]!, self._r[2526]!, [_1]) + return formatWithArgumentRanges(self._s[2525]!, self._r[2525]!, [_1]) } - public var VoiceOver_Chat_ReplyToYourMessage: String { return self._s[2527]! } - public var Contacts_InviteFriends: String { return self._s[2529]! } - public var Map_ChooseLocationTitle: String { return self._s[2530]! } - public var Conversation_StopPoll: String { return self._s[2532]! } + public var VoiceOver_Chat_ReplyToYourMessage: String { return self._s[2526]! } + public var Contacts_InviteFriends: String { return self._s[2528]! } + public var Map_ChooseLocationTitle: String { return self._s[2529]! } + public var Conversation_StopPoll: String { return self._s[2531]! } public func WebSearch_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2533]!, self._r[2533]!, [_0]) + return formatWithArgumentRanges(self._s[2532]!, self._r[2532]!, [_0]) } - public var Call_Camera: String { return self._s[2534]! } - public var LogoutOptions_ChangePhoneNumberTitle: String { return self._s[2535]! } - public var AppWallet_Intro_Text: String { return self._s[2536]! } - public var Appearance_BubbleCornersSetting: String { return self._s[2537]! } - public var Calls_RatingFeedback: String { return self._s[2538]! } - public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[2540]! } - public var Wallet_Alert_OK: String { return self._s[2541]! } - public var NotificationsSound_Pulse: String { return self._s[2542]! } - public var Watch_LastSeen_Lately: String { return self._s[2543]! } - public var ReportGroupLocation_Report: String { return self._s[2546]! } - public var Widget_NoUsers: String { return self._s[2547]! } - public var Conversation_UnvotePoll: String { return self._s[2548]! } - public var SettingsSearch_Synonyms_Privacy_ProfilePhoto: String { return self._s[2550]! } - public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[2551]! } - public var NotificationsSound_Circles: String { return self._s[2552]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[2555]! } - public var Wallet_Settings_DeleteWallet: String { return self._s[2556]! } - public var ChatListFolder_CategoryBots: String { return self._s[2557]! } - public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[2558]! } - public var Proxy_TooltipUnavailable: String { return self._s[2559]! } - public var Passport_Identity_CountryPlaceholder: String { return self._s[2561]! } - public var GroupInfo_Permissions_SlowmodeInfo: String { return self._s[2563]! } - public var Conversation_FileDropbox: String { return self._s[2564]! } - public var Notifications_ExceptionsUnmuted: String { return self._s[2565]! } - public var Tour_Text3: String { return self._s[2567]! } - public var Login_ResetAccountProtected_Title: String { return self._s[2570]! } - public var ChatListFolder_NamePlaceholder: String { return self._s[2571]! } - public var GroupPermission_NoSendMessages: String { return self._s[2572]! } - public var WallpaperSearch_ColorTitle: String { return self._s[2573]! } - public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[2574]! } + public var Call_Camera: String { return self._s[2533]! } + public var LogoutOptions_ChangePhoneNumberTitle: String { return self._s[2534]! } + public var AppWallet_Intro_Text: String { return self._s[2535]! } + public var Appearance_BubbleCornersSetting: String { return self._s[2536]! } + public var Calls_RatingFeedback: String { return self._s[2537]! } + public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[2539]! } + public var Wallet_Alert_OK: String { return self._s[2540]! } + public var NotificationsSound_Pulse: String { return self._s[2541]! } + public var Watch_LastSeen_Lately: String { return self._s[2542]! } + public var ReportGroupLocation_Report: String { return self._s[2545]! } + public var Widget_NoUsers: String { return self._s[2546]! } + public var Conversation_UnvotePoll: String { return self._s[2547]! } + public var SettingsSearch_Synonyms_Privacy_ProfilePhoto: String { return self._s[2549]! } + public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[2550]! } + public var NotificationsSound_Circles: String { return self._s[2551]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[2554]! } + public var Wallet_Settings_DeleteWallet: String { return self._s[2555]! } + public var ChatListFolder_CategoryBots: String { return self._s[2556]! } + public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[2557]! } + public var Proxy_TooltipUnavailable: String { return self._s[2558]! } + public var Passport_Identity_CountryPlaceholder: String { return self._s[2560]! } + public var GroupInfo_Permissions_SlowmodeInfo: String { return self._s[2562]! } + public var Conversation_FileDropbox: String { return self._s[2563]! } + public var Notifications_ExceptionsUnmuted: String { return self._s[2564]! } + public var Tour_Text3: String { return self._s[2566]! } + public var Login_ResetAccountProtected_Title: String { return self._s[2569]! } + public var ChatListFolder_NamePlaceholder: String { return self._s[2570]! } + public var GroupPermission_NoSendMessages: String { return self._s[2571]! } + public var WallpaperSearch_ColorTitle: String { return self._s[2572]! } + public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[2573]! } public func Conversation_LiveLocationYouAnd(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2576]!, self._r[2576]!, [_0]) + return formatWithArgumentRanges(self._s[2575]!, self._r[2575]!, [_0]) } - public var GroupInfo_AddParticipantTitle: String { return self._s[2577]! } - public var Checkout_ShippingOption_Title: String { return self._s[2578]! } - public var ChatSettings_AutoDownloadTitle: String { return self._s[2579]! } + public var GroupInfo_AddParticipantTitle: String { return self._s[2576]! } + public var Checkout_ShippingOption_Title: String { return self._s[2577]! } + public var ChatSettings_AutoDownloadTitle: String { return self._s[2578]! } public func DialogList_SingleTypingSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2580]!, self._r[2580]!, [_0]) + return formatWithArgumentRanges(self._s[2579]!, self._r[2579]!, [_0]) } public func ChatSettings_AutoDownloadSettings_TypeVideo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2581]!, self._r[2581]!, [_0]) + return formatWithArgumentRanges(self._s[2580]!, self._r[2580]!, [_0]) } - public var Channel_Management_LabelAdministrator: String { return self._s[2582]! } - public var EditTheme_FileReadError: String { return self._s[2583]! } - public var OwnershipTransfer_ComeBackLater: String { return self._s[2584]! } - public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[2585]! } - public var AutoDownloadSettings_Photos: String { return self._s[2587]! } - public var Appearance_PreviewIncomingText: String { return self._s[2588]! } - public var ChatList_Context_MarkAllAsRead: String { return self._s[2589]! } - public var ChannelInfo_ConfirmLeave: String { return self._s[2590]! } - public var ChatListFolder_ExcludeSectionInfo: String { return self._s[2591]! } - public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[2592]! } - public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[2593]! } - public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[2594]! } - public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[2595]! } - public var GroupInfo_SetGroupPhotoStop: String { return self._s[2596]! } - public var Notification_SecretChatScreenshot: String { return self._s[2597]! } - public var AccessDenied_Wallpapers: String { return self._s[2598]! } - public var ChatList_Context_Mute: String { return self._s[2600]! } - public var Passport_Address_City: String { return self._s[2601]! } - public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[2602]! } - public var Appearance_ThemeCarouselClassic: String { return self._s[2603]! } - public var SocksProxySetup_SecretPlaceholder: String { return self._s[2604]! } - public var AccessDenied_LocationDisabled: String { return self._s[2605]! } - public var Group_Location_Title: String { return self._s[2606]! } - public var SocksProxySetup_HostnamePlaceholder: String { return self._s[2608]! } - public var GroupInfo_Sound: String { return self._s[2609]! } - public var SettingsSearch_Synonyms_ChatSettings_OpenLinksIn: String { return self._s[2610]! } - public var ChannelInfo_ScamChannelWarning: String { return self._s[2611]! } - public var Stickers_RemoveFromFavorites: String { return self._s[2612]! } - public var Contacts_Title: String { return self._s[2613]! } - public var EditTheme_ThemeTemplateAlertText: String { return self._s[2614]! } - public var Passport_Language_fr: String { return self._s[2615]! } - public var TwoFactorSetup_EmailVerification_Action: String { return self._s[2616]! } - public var Notifications_ResetAllNotifications: String { return self._s[2617]! } - public var IntentsSettings_SuggestedChats: String { return self._s[2619]! } - public var PrivacySettings_SecurityTitle: String { return self._s[2621]! } - public var Checkout_NewCard_Title: String { return self._s[2622]! } - public var Login_HaveNotReceivedCodeInternal: String { return self._s[2623]! } - public var Conversation_ForwardChats: String { return self._s[2624]! } - public var Wallet_SecureStorageReset_PasscodeText: String { return self._s[2626]! } - public var PasscodeSettings_4DigitCode: String { return self._s[2627]! } - public var Settings_FAQ: String { return self._s[2629]! } - public var AutoDownloadSettings_DocumentsTitle: String { return self._s[2630]! } - public var Conversation_ContextMenuForward: String { return self._s[2631]! } - public var VoiceOver_Chat_YourPhoto: String { return self._s[2634]! } - public var PrivacyPolicy_Title: String { return self._s[2637]! } - public var Notifications_TextTone: String { return self._s[2638]! } - public var Profile_CreateNewContact: String { return self._s[2639]! } - public var PrivacyPhoneNumberSettings_WhoCanSeeMyPhoneNumber: String { return self._s[2640]! } - public var TwoFactorSetup_EmailVerification_Title: String { return self._s[2642]! } - public var Call_Speaker: String { return self._s[2643]! } - public var AutoNightTheme_AutomaticSection: String { return self._s[2644]! } - public var Channel_OwnershipTransfer_EnterPassword: String { return self._s[2646]! } - public var Channel_Username_InvalidCharacters: String { return self._s[2647]! } + public var Channel_Management_LabelAdministrator: String { return self._s[2581]! } + public var EditTheme_FileReadError: String { return self._s[2582]! } + public var OwnershipTransfer_ComeBackLater: String { return self._s[2583]! } + public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[2584]! } + public var AutoDownloadSettings_Photos: String { return self._s[2586]! } + public var Appearance_PreviewIncomingText: String { return self._s[2587]! } + public var ChatList_Context_MarkAllAsRead: String { return self._s[2588]! } + public var ChannelInfo_ConfirmLeave: String { return self._s[2589]! } + public var ChatListFolder_ExcludeSectionInfo: String { return self._s[2590]! } + public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[2591]! } + public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[2592]! } + public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[2593]! } + public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[2594]! } + public var GroupInfo_SetGroupPhotoStop: String { return self._s[2595]! } + public var Notification_SecretChatScreenshot: String { return self._s[2596]! } + public var AccessDenied_Wallpapers: String { return self._s[2597]! } + public var ChatList_Context_Mute: String { return self._s[2599]! } + public var Passport_Address_City: String { return self._s[2600]! } + public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[2601]! } + public var Appearance_ThemeCarouselClassic: String { return self._s[2602]! } + public var SocksProxySetup_SecretPlaceholder: String { return self._s[2603]! } + public var AccessDenied_LocationDisabled: String { return self._s[2604]! } + public var Group_Location_Title: String { return self._s[2605]! } + public var SocksProxySetup_HostnamePlaceholder: String { return self._s[2607]! } + public var GroupInfo_Sound: String { return self._s[2608]! } + public var SettingsSearch_Synonyms_ChatSettings_OpenLinksIn: String { return self._s[2609]! } + public var ChannelInfo_ScamChannelWarning: String { return self._s[2610]! } + public var Stickers_RemoveFromFavorites: String { return self._s[2611]! } + public var Contacts_Title: String { return self._s[2612]! } + public var EditTheme_ThemeTemplateAlertText: String { return self._s[2613]! } + public var Passport_Language_fr: String { return self._s[2614]! } + public var TwoFactorSetup_EmailVerification_Action: String { return self._s[2615]! } + public var Notifications_ResetAllNotifications: String { return self._s[2616]! } + public var IntentsSettings_SuggestedChats: String { return self._s[2618]! } + public var PrivacySettings_SecurityTitle: String { return self._s[2620]! } + public var Checkout_NewCard_Title: String { return self._s[2621]! } + public var Login_HaveNotReceivedCodeInternal: String { return self._s[2622]! } + public var Conversation_ForwardChats: String { return self._s[2623]! } + public var Wallet_SecureStorageReset_PasscodeText: String { return self._s[2625]! } + public var PasscodeSettings_4DigitCode: String { return self._s[2626]! } + public var Settings_FAQ: String { return self._s[2628]! } + public var AutoDownloadSettings_DocumentsTitle: String { return self._s[2629]! } + public var Conversation_ContextMenuForward: String { return self._s[2630]! } + public var VoiceOver_Chat_YourPhoto: String { return self._s[2633]! } + public var PrivacyPolicy_Title: String { return self._s[2636]! } + public var Notifications_TextTone: String { return self._s[2637]! } + public var Profile_CreateNewContact: String { return self._s[2638]! } + public var PrivacyPhoneNumberSettings_WhoCanSeeMyPhoneNumber: String { return self._s[2639]! } + public var TwoFactorSetup_EmailVerification_Title: String { return self._s[2641]! } + public var Call_Speaker: String { return self._s[2642]! } + public var AutoNightTheme_AutomaticSection: String { return self._s[2643]! } + public var Channel_OwnershipTransfer_EnterPassword: String { return self._s[2645]! } + public var Channel_Username_InvalidCharacters: String { return self._s[2646]! } public func Channel_AdminLog_MessageChangedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2648]!, self._r[2648]!, [_0]) + return formatWithArgumentRanges(self._s[2647]!, self._r[2647]!, [_0]) } - public var AutoDownloadSettings_AutodownloadFiles: String { return self._s[2649]! } - public var PrivacySettings_LastSeenTitle: String { return self._s[2650]! } - public var Channel_AdminLog_CanInviteUsers: String { return self._s[2651]! } - public var SettingsSearch_Synonyms_Privacy_Data_ClearPaymentsInfo: String { return self._s[2652]! } - public var OwnershipTransfer_SecurityCheck: String { return self._s[2653]! } - public var Conversation_MessageDeliveryFailed: String { return self._s[2654]! } - public var Watch_ChatList_NoConversationsText: String { return self._s[2655]! } - public var Bot_Unblock: String { return self._s[2656]! } - public var TextFormat_Italic: String { return self._s[2657]! } - public var WallpaperSearch_ColorPink: String { return self._s[2658]! } - public var Settings_About_Help: String { return self._s[2660]! } - public var SearchImages_Title: String { return self._s[2661]! } - public var Weekday_Wednesday: String { return self._s[2662]! } - public var Conversation_ClousStorageInfo_Description1: String { return self._s[2663]! } - public var ExplicitContent_AlertTitle: String { return self._s[2664]! } + public var AutoDownloadSettings_AutodownloadFiles: String { return self._s[2648]! } + public var PrivacySettings_LastSeenTitle: String { return self._s[2649]! } + public var Channel_AdminLog_CanInviteUsers: String { return self._s[2650]! } + public var SettingsSearch_Synonyms_Privacy_Data_ClearPaymentsInfo: String { return self._s[2651]! } + public var OwnershipTransfer_SecurityCheck: String { return self._s[2652]! } + public var Conversation_MessageDeliveryFailed: String { return self._s[2653]! } + public var Watch_ChatList_NoConversationsText: String { return self._s[2654]! } + public var Bot_Unblock: String { return self._s[2655]! } + public var TextFormat_Italic: String { return self._s[2656]! } + public var WallpaperSearch_ColorPink: String { return self._s[2657]! } + public var Settings_About_Help: String { return self._s[2659]! } + public var SearchImages_Title: String { return self._s[2660]! } + public var Weekday_Wednesday: String { return self._s[2661]! } + public var Conversation_ClousStorageInfo_Description1: String { return self._s[2662]! } + public var ExplicitContent_AlertTitle: String { return self._s[2663]! } public func Time_PreciseDate_m5(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2665]!, self._r[2665]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2664]!, self._r[2664]!, [_1, _2, _3]) } - public var Channel_DiscussionGroup_Create: String { return self._s[2666]! } - public var Weekday_Thursday: String { return self._s[2667]! } - public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[2668]! } - public var Channel_Members_AddMembersHelp: String { return self._s[2669]! } + public var Channel_DiscussionGroup_Create: String { return self._s[2665]! } + public var Weekday_Thursday: String { return self._s[2666]! } + public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[2667]! } + public var Channel_Members_AddMembersHelp: String { return self._s[2668]! } public func Checkout_SavePasswordTimeout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2670]!, self._r[2670]!, [_0]) + return formatWithArgumentRanges(self._s[2669]!, self._r[2669]!, [_0]) } - public var Channel_DiscussionGroup_LinkGroup: String { return self._s[2671]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsVibrate: String { return self._s[2672]! } - public var Passport_RequestedInformation: String { return self._s[2673]! } - public var Login_PhoneAndCountryHelp: String { return self._s[2674]! } - public var Conversation_EncryptionProcessing: String { return self._s[2676]! } - public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[2677]! } - public var PhotoEditor_EnhanceTool: String { return self._s[2679]! } - public var Channel_Setup_Title: String { return self._s[2680]! } + public var Channel_DiscussionGroup_LinkGroup: String { return self._s[2670]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsVibrate: String { return self._s[2671]! } + public var Passport_RequestedInformation: String { return self._s[2672]! } + public var Login_PhoneAndCountryHelp: String { return self._s[2673]! } + public var Conversation_EncryptionProcessing: String { return self._s[2675]! } + public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[2676]! } + public var PhotoEditor_EnhanceTool: String { return self._s[2678]! } + public var Channel_Setup_Title: String { return self._s[2679]! } + public var PeerInfo_PaneVoiceAndVideo: String { return self._s[2680]! } public var Conversation_SearchPlaceholder: String { return self._s[2681]! } public var OldChannels_GroupEmptyFormat: String { return self._s[2682]! } public var AccessDenied_LocationAlwaysDenied: String { return self._s[2683]! } @@ -4851,116 +4851,114 @@ public final class PresentationStrings: Equatable { public var Channel_Setup_TypePublicHelp: String { return self._s[4334]! } public var Passport_Identity_EditInternalPassport: String { return self._s[4335]! } public var PhotoEditor_Skip: String { return self._s[4336]! } - public func ForwardedStickers(_ value: Int32) -> String { + public func Conversation_StatusSubscribers(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedPhotos(_ value: Int32) -> String { + public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, stringValue) } - public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_Days(_ value: Int32) -> String { + public func SharedMedia_Link(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, stringValue) } - public func MuteFor_Hours(_ value: Int32) -> String { + public func MuteExpires_Days(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue) } - public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, _1, _2) } - public func ChatList_SelectedChats(_ value: Int32) -> String { + public func OldChannels_InactiveWeek(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, stringValue) } - public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { + public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue) } - public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String { + public func GroupInfo_ShowMoreMembers(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, stringValue) } - public func Invitation_Members(_ value: Int32) -> String { + public func MuteFor_Hours(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, stringValue) } - public func PollResults_ShowMore(_ value: Int32) -> String { + public func InstantPage_Views(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue) } - public func Notification_GameScoreExtended(_ value: Int32) -> String { + public func ForwardedContacts(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, _1, _2) + public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_StatusMembers(_ value: Int32) -> String { + public func Notifications_Exceptions(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue) } - public func Media_SharePhoto(_ value: Int32) -> String { + public func GroupInfo_ParticipantCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_Generic(_ value: Int32) -> String { + public func MessageTimer_Minutes(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue) } - public func LastSeen_HoursAgo(_ value: Int32) -> String { + public func MessageTimer_ShortMinutes(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, stringValue) } - public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, _1, _2) } - public func MessageTimer_Months(_ value: Int32) -> String { + public func OldChannels_InactiveYear(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, stringValue) } - public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessagePoll_QuizCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, _1, _2) } - public func GroupInfo_ParticipantCount(_ value: Int32) -> String { + public func UserCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue) } - public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { + public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue) @@ -4970,116 +4968,118 @@ public final class PresentationStrings: Equatable { let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue) } - public func Stats_MessageForwards(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, _2, _1, _3) } - public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String { + public func Conversation_StatusOnline(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue) } - public func Media_ShareItem(_ value: Int32) -> String { + public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue) } - public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { + public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, _2, _1, _3) + public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, _2, _1, _3) + public func ForwardedPhotos(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + public func MessagePoll_VotedCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, stringValue) } - public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { + public func SharedMedia_Generic(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue) } - public func ChatList_DeleteConfirmation(_ value: Int32) -> String { + public func ChatList_SelectedChats(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, stringValue) } - public func MuteExpires_Hours(_ value: Int32) -> String { + public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue) } - public func Call_ShortMinutes(_ value: Int32) -> String { + public func Call_ShortSeconds(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedVideoMessages(_ value: Int32) -> String { + public func Stats_MessageViews(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, stringValue) } - public func QuickSend_Photos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, _1, _2) } - public func ForwardedGifs(_ value: Int32) -> String { + public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, _1, _2) + public func SharedMedia_Video(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedVideos(_ value: Int32) -> String { + public func Call_ShortMinutes(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedMessages(_ value: Int32) -> String { + public func StickerPack_AddStickerCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue) } - public func MuteExpires_Minutes(_ value: Int32) -> String { + public func Notification_GameScoreExtended(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_Seconds(_ value: Int32) -> String { + public func AttachmentMenu_SendGif(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedAudios(_ value: Int32) -> String { + public func StickerPack_StickerCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue) } - public func MuteFor_Days(_ value: Int32) -> String { + public func Map_ETAMinutes(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_Photo(_ value: Int32) -> String { + public func ChatList_DeleteConfirmation(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, _1, _2) + public func MessageTimer_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue) } public func OldChannels_GroupFormat(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) @@ -5090,402 +5090,402 @@ public final class PresentationStrings: Equatable { let form = getPluralizationForm(self.lc, selector) return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, _0, _1) } - public func StickerPack_StickerCount(_ value: Int32) -> String { + public func ForwardedLocations(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue) } - public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, _1, _2) } - public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { + public func MuteExpires_Hours(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue) } - public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { + public func MessageTimer_Months(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedPolls(_ value: Int32) -> String { + public func LastSeen_HoursAgo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue) } - public func StickerPack_AddMaskCount(_ value: Int32) -> String { + public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, _1, _2) + public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { + public func PollResults_ShowMore(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_SelectedMessages(_ value: Int32) -> String { + public func Theme_UsersCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue) } - public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + public func ForwardedVideoMessages(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue) } - public func Contacts_InviteContacts(_ value: Int32) -> String { + public func QuickSend_Photos(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue) } - public func InstantPage_Views(_ value: Int32) -> String { + public func MessageTimer_Weeks(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue) } - public func Map_ETAHours(_ value: Int32) -> String { + public func ChatListFilter_ShowMoreChats(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue) } - public func Call_ShortSeconds(_ value: Int32) -> String { + public func ForwardedAudios(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue) } - public func PeopleNearby_ShowMorePeople(_ value: Int32) -> String { + public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue) } - public func UserCount(_ value: Int32) -> String { + public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_Years(_ value: Int32) -> String { + public func ForwardedVideos(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, stringValue) } - public func Passport_Scans(_ value: Int32) -> String { + public func Media_ShareItem(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue) } - public func Notifications_Exceptions(_ value: Int32) -> String { + public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue) } - public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue) } - public func Media_ShareVideo(_ value: Int32) -> String { + public func LastSeen_MinutesAgo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_Video(_ value: Int32) -> String { + public func SharedMedia_Photo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue) } - public func StickerPack_AddStickerCount(_ value: Int32) -> String { + public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_ShortHours(_ value: Int32) -> String { + public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue) } - public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_MessageViews(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, _2, _1, _3) + return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, _1, _2) } - public func MessageTimer_ShortDays(_ value: Int32) -> String { + public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Contacts_InviteContacts(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func InviteText_ContactsCountText(_ value: Int32) -> String { + public func Invitation_Members(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedLocations(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_Seconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessagePoll_VotedCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue) - } - public func GroupInfo_ShowMoreMembers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func ChatListFilter_ShowMoreChats(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_StatusOnline(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue) - } - public func OldChannels_InactiveMonth(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Call_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Watch_UserInfo_Mute(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Link(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Theme_UsersCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_StatusSubscribers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_DeletedChats(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedFiles(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendGif(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendVideo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Map_ETAMinutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_File(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortMinutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, stringValue) } public func AttachmentMenu_SendItem(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue) } - public func OldChannels_InactiveWeek(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Weeks(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[115 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[116 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[117 * 6 + Int(form.rawValue)]!, _2, _1, _3) + return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, _2, _1, _3) } - public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[118 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[119 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func OldChannels_Leave(_ value: Int32) -> String { + public func Map_ETAHours(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[120 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedContacts(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[121 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[122 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortSeconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[123 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) } public func Contacts_ImportersCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[124 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[125 * 6 + Int(form.rawValue)]!, _1, _2) + public func Conversation_StatusMembers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Passport_Scans(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteFor_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue) } public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendVideo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func MessageTimer_Seconds(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_File(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_AddMaskCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func ForwardedStickers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortDays(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func MessageTimer_ShortHours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue) + } + public func InviteText_ContactsCountText(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessagePoll_QuizCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortSeconds(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_InactiveMonth(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedGifs(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_SelectedMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Years(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedPolls(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_DeletedChats(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_Leave(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[115 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedFiles(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[116 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[117 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[118 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func Media_SharePhoto(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[119 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_MessageForwards(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[120 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Call_Seconds(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[121 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Watch_UserInfo_Mute(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[122 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[123 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[124 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[125 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func Call_Minutes(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[126 * 6 + Int(form.rawValue)]!, stringValue) } - public func OldChannels_InactiveYear(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[127 * 6 + Int(form.rawValue)]!, stringValue) } - public func MuteExpires_Days(_ value: Int32) -> String { + public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[128 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func PeopleNearby_ShowMorePeople(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[128 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[129 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[129 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { + public func Media_ShareVideo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[130 * 6 + Int(form.rawValue)]!, stringValue) diff --git a/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesChat.swift b/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesChat.swift index 8bdda3052c..073d2c498f 100644 --- a/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesChat.swift +++ b/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesChat.swift @@ -577,19 +577,47 @@ public struct PresentationResourcesChat { public static func sharedMediaFileDownloadStartIcon(_ theme: PresentationTheme) -> UIImage? { return theme.image(PresentationResourceKey.sharedMediaFileDownloadStartIcon.rawValue, { theme in - return generateTintedImage(image: UIImage(bundleImageName: "List Menu/ListDownloadStartIcon"), color: theme.list.itemAccentColor) + return generateImage(CGSize(width: 12.0, height: 12.0), rotatedContext: { size, context in + context.clear(CGRect(origin: CGPoint(), size: size)) + + context.setStrokeColor(theme.list.itemAccentColor.cgColor) + context.setLineWidth(1.67) + context.setLineCap(.round) + context.setLineJoin(.round) + + context.translateBy(x: 2.0, y: 1.0) + + context.move(to: CGPoint(x: 4.0, y: 0.0)) + context.addLine(to: CGPoint(x: 4.0, y: 10.0)) + context.strokePath() + + context.move(to: CGPoint(x: 0.0, y: 6.0)) + context.addLine(to: CGPoint(x: 4.0, y: 10.0)) + context.addLine(to: CGPoint(x: 8.0, y: 6.0)) + context.strokePath() + }) }) } public static func sharedMediaFileDownloadPauseIcon(_ theme: PresentationTheme) -> UIImage? { return theme.image(PresentationResourceKey.sharedMediaFileDownloadPauseIcon.rawValue, { theme in - return generateImage(CGSize(width: 11.0, height: 11.0), contextGenerator: { size, context in + return generateImage(CGSize(width: 12.0, height: 12.0), rotatedContext: { size, context in context.clear(CGRect(origin: CGPoint(), size: size)) - context.setFillColor(theme.list.itemAccentColor.cgColor) + context.setStrokeColor(theme.list.itemAccentColor.cgColor) + context.setLineWidth(1.67) + context.setLineCap(.round) + context.setLineJoin(.round) - context.fill(CGRect(x: 2.0, y: 0.0, width: 2.0, height: 11.0 - 1.0)) - context.fill(CGRect(x: 2.0 + 2.0 + 2.0, y: 0.0, width: 2.0, height: 11.0 - 1.0)) + context.translateBy(x: 2.0, y: 2.0) + + context.move(to: CGPoint(x: 0.0, y: 0.0)) + context.addLine(to: CGPoint(x: 8.0, y: 8.0)) + context.strokePath() + + context.move(to: CGPoint(x: 8.0, y: 0.0)) + context.addLine(to: CGPoint(x: 0.0, y: 8.0)) + context.strokePath() }) }) } diff --git a/submodules/TelegramUI/Resources/PresentationStrings.mapping b/submodules/TelegramUI/Resources/PresentationStrings.mapping index b0f8ce14b8..7bb3049513 100644 Binary files a/submodules/TelegramUI/Resources/PresentationStrings.mapping and b/submodules/TelegramUI/Resources/PresentationStrings.mapping differ diff --git a/submodules/TelegramUI/Sources/ChatRecordingPreviewInputPanelNode.swift b/submodules/TelegramUI/Sources/ChatRecordingPreviewInputPanelNode.swift index b18c662663..b75f5e8468 100644 --- a/submodules/TelegramUI/Sources/ChatRecordingPreviewInputPanelNode.swift +++ b/submodules/TelegramUI/Sources/ChatRecordingPreviewInputPanelNode.swift @@ -19,6 +19,10 @@ private func generatePlayIcon(_ theme: PresentationTheme) -> UIImage? { return generateTintedImage(image: UIImage(bundleImageName: "GlobalMusicPlayer/MinimizedPlay"), color: theme.chat.inputPanel.actionControlForegroundColor) } +extension AudioWaveformNode: CustomMediaPlayerScrubbingForegroundNode { + +} + final class ChatRecordingPreviewInputPanelNode: ChatInputPanelNode { private let deleteButton: HighlightableButtonNode let sendButton: HighlightTrackingButtonNode diff --git a/submodules/TelegramUI/Sources/ListMessageDateHeader.swift b/submodules/TelegramUI/Sources/ListMessageDateHeader.swift index 58bc5edb35..67f3523968 100644 --- a/submodules/TelegramUI/Sources/ListMessageDateHeader.swift +++ b/submodules/TelegramUI/Sources/ListMessageDateHeader.swift @@ -6,6 +6,7 @@ import AsyncDisplayKit import TelegramPresentationData import TelegramUIPreferences import TelegramStringFormatting +import ListSectionHeaderNode private let timezoneOffset: Int32 = { let nowTimestamp = Int32(CFAbsoluteTimeGetCurrent() + NSTimeIntervalSince1970) @@ -16,7 +17,7 @@ private let timezoneOffset: Int32 = { }() func listMessageDateHeaderId(timestamp: Int32) -> Int64 { - var unclippedValue: Int64 = min(Int64(Int32.max), Int64(timestamp) + Int64(timezoneOffset)) + let unclippedValue: Int64 = min(Int64(Int32.max), Int64(timestamp) + Int64(timezoneOffset)) var time: time_t = time_t(Int32(clamping: unclippedValue)) var timeinfo: tm = tm() @@ -65,7 +66,7 @@ final class ListMessageDateHeader: ListViewItemHeader { let stickDirection: ListViewItemHeaderStickDirection = .top - let height: CGFloat = 36.0 + let height: CGFloat = 28.0 func node() -> ListViewItemHeaderNode { return ListMessageDateHeaderNode(theme: self.theme, strings: self.strings, fontSize: self.fontSize, roundedTimestamp: self.roundedTimestamp, month: self.month, year: self.year) @@ -78,51 +79,39 @@ final class ListMessageDateHeader: ListViewItemHeader { final class ListMessageDateHeaderNode: ListViewItemHeaderNode { var theme: PresentationTheme var strings: PresentationStrings - var fontSize: PresentationFontSize - let titleNode: ASTextNode - let backgroundNode: ASDisplayNode + let headerNode: ListSectionHeaderNode + + let month: Int32 + let year: Int32 init(theme: PresentationTheme, strings: PresentationStrings, fontSize: PresentationFontSize, roundedTimestamp: Int32, month: Int32, year: Int32) { self.theme = theme self.strings = strings - self.fontSize = fontSize + self.month = month + self.year = year - self.backgroundNode = ASDisplayNode() - self.backgroundNode.isLayerBacked = true - self.backgroundNode.backgroundColor = theme.list.plainBackgroundColor.withAlphaComponent(0.9) - - self.titleNode = ASTextNode() - self.titleNode.isUserInteractionEnabled = false + self.headerNode = ListSectionHeaderNode(theme: theme) super.init() - let dateText = stringForMonth(strings: strings, month: month, ofYear: year) + self.addSubnode(self.headerNode) - let sectionTitleFont = Font.regular(floor(fontSize.baseDisplaySize * 14.0 / 17.0)) - - self.addSubnode(self.backgroundNode) - self.addSubnode(self.titleNode) - self.titleNode.attributedText = NSAttributedString(string: dateText, font: sectionTitleFont, textColor: theme.list.itemPrimaryTextColor) - self.titleNode.maximumNumberOfLines = 1 - self.titleNode.truncationMode = .byTruncatingTail + self.headerNode.title = stringForMonth(strings: strings, month: month, ofYear: year).uppercased() } func updateThemeAndStrings(theme: PresentationTheme, strings: PresentationStrings) { self.theme = theme - if let attributedString = self.titleNode.attributedText?.mutableCopy() as? NSMutableAttributedString { - attributedString.addAttribute(NSAttributedString.Key.foregroundColor, value: theme.list.itemPrimaryTextColor, range: NSMakeRange(0, attributedString.length)) - self.titleNode.attributedText = attributedString - } + self.headerNode.updateTheme(theme: theme) self.strings = strings + self.headerNode.title = stringForMonth(strings: strings, month: self.month, ofYear: self.year).uppercased() - self.backgroundNode.backgroundColor = theme.list.plainBackgroundColor.withAlphaComponent(0.9) self.setNeedsLayout() } override func updateLayout(size: CGSize, leftInset: CGFloat, rightInset: CGFloat) { - let titleSize = self.titleNode.measure(CGSize(width: size.width - leftInset - rightInset - 24.0, height: CGFloat.greatestFiniteMagnitude)) - self.titleNode.frame = CGRect(origin: CGPoint(x: leftInset + 12.0, y: floor((size.height - titleSize.height) / 2.0)), size: titleSize) - self.backgroundNode.frame = CGRect(origin: CGPoint(), size: size) + let headerFrame = CGRect(origin: CGPoint(x: 0.0, y: -UIScreenPixel), size: CGSize(width: size.width, height: size.height + UIScreenPixel)) + self.headerNode.frame = headerFrame + self.headerNode.updateLayout(size: headerFrame.size, leftInset: leftInset, rightInset: rightInset) } } diff --git a/submodules/TelegramUI/Sources/ListMessageFileItemNode.swift b/submodules/TelegramUI/Sources/ListMessageFileItemNode.swift index db75aac27a..fd4ea3088e 100644 --- a/submodules/TelegramUI/Sources/ListMessageFileItemNode.swift +++ b/submodules/TelegramUI/Sources/ListMessageFileItemNode.swift @@ -13,9 +13,11 @@ import AccountContext import TelegramStringFormatting import AccountContext import RadialStatusNode +import SemanticStatusNode import PhotoResources import MusicAlbumArtResources import UniversalMediaPlayer +import ContextUI private let extensionImageCache = Atomic<[UInt32: UIImage]>(value: [:]) @@ -41,50 +43,19 @@ private let extensionColorsMap: [String: (UInt32, UInt32)] = [ ] private func generateExtensionImage(colors: (UInt32, UInt32)) -> UIImage? { - return generateImage(CGSize(width: 42.0, height: 42.0), contextGenerator: { size, context in + return generateImage(CGSize(width: 40.0, height: 40.0), rotatedContext: { size, context in context.clear(CGRect(origin: CGPoint(), size: size)) - context.translateBy(x: size.width / 2.0, y: size.height / 2.0) - context.scaleBy(x: 1.0, y: -1.0) - context.translateBy(x: -size.width / 2.0 + 1.0, y: -size.height / 2.0 + 1.0) - - let radius: CGFloat = 2.0 - let cornerSize: CGFloat = 10.0 - let size = CGSize(width: 42.0, height: 42.0) - context.setFillColor(UIColor(rgb: colors.0).cgColor) + let _ = try? drawSvgPath(context, path: "M6,0 L26.7573593,0 C27.5530088,-8.52837125e-16 28.3160705,0.316070521 28.8786797,0.878679656 L39.1213203,11.1213203 C39.6839295,11.6839295 40,12.4469912 40,13.2426407 L40,34 C40,37.3137085 37.3137085,40 34,40 L6,40 C2.6862915,40 4.05812251e-16,37.3137085 0,34 L0,6 C-4.05812251e-16,2.6862915 2.6862915,6.08718376e-16 6,0 Z ") + context.beginPath() - context.move(to: CGPoint(x: 0.0, y: radius)) - if !radius.isZero { - context.addArc(tangent1End: CGPoint(x: 0.0, y: 0.0), tangent2End: CGPoint(x: radius, y: 0.0), radius: radius) - } - context.addLine(to: CGPoint(x: size.width - cornerSize, y: 0.0)) - context.addLine(to: CGPoint(x: size.width - cornerSize + cornerSize / 4.0, y: cornerSize - cornerSize / 4.0)) - context.addLine(to: CGPoint(x: size.width, y: cornerSize)) - context.addLine(to: CGPoint(x: size.width, y: size.height - radius)) - if !radius.isZero { - context.addArc(tangent1End: CGPoint(x: size.width, y: size.height), tangent2End: CGPoint(x: size.width - radius, y: size.height), radius: radius) - } - context.addLine(to: CGPoint(x: radius, y: size.height)) + let _ = try? drawSvgPath(context, path: "M6,0 L26.7573593,0 C27.5530088,-8.52837125e-16 28.3160705,0.316070521 28.8786797,0.878679656 L39.1213203,11.1213203 C39.6839295,11.6839295 40,12.4469912 40,13.2426407 L40,34 C40,37.3137085 37.3137085,40 34,40 L6,40 C2.6862915,40 4.05812251e-16,37.3137085 0,34 L0,6 C-4.05812251e-16,2.6862915 2.6862915,6.08718376e-16 6,0 ") + context.clip() - if !radius.isZero { - context.addArc(tangent1End: CGPoint(x: 0.0, y: size.height), tangent2End: CGPoint(x: 0.0, y: size.height - radius), radius: radius) - } - context.closePath() - context.fillPath() - - context.setFillColor(UIColor(rgb: colors.1).cgColor) - context.beginPath() - context.move(to: CGPoint(x: size.width - cornerSize, y: 0.0)) - context.addLine(to: CGPoint(x: size.width, y: cornerSize)) - context.addLine(to: CGPoint(x: size.width - cornerSize + radius, y: cornerSize)) - - if !radius.isZero { - context.addArc(tangent1End: CGPoint(x: size.width - cornerSize, y: cornerSize), tangent2End: CGPoint(x: size.width - cornerSize, y: cornerSize - radius), radius: radius) - } - - context.closePath() - context.fillPath() + context.setFillColor(UIColor(rgb: colors.0).withMultipliedBrightnessBy(0.85).cgColor) + context.translateBy(x: 40.0 - 14.0, y: 0.0) + let _ = try? drawSvgPath(context, path: "M-1,0 L14,0 L14,15 L14,14 C14,12.8954305 13.1045695,12 12,12 L4,12 C2.8954305,12 2,11.1045695 2,10 L2,2 C2,0.8954305 1.1045695,-2.02906125e-16 0,0 L-1,0 L-1,0 Z ") }) } @@ -115,7 +86,7 @@ private func extensionImage(fileExtension: String?) -> UIImage? { return nil } } -private let extensionFont = Font.medium(13.0) +private let extensionFont = Font.with(size: 15.0, design: .round, traits: [.bold]) private struct FetchControls { let fetch: () -> Void @@ -151,11 +122,16 @@ private enum FileIconImage: Equatable { } } -extension AudioWaveformNode: CustomMediaPlayerScrubbingForegroundNode { - -} - final class ListMessageFileItemNode: ListMessageNode { + private let contextSourceNode: ContextExtractedContentContainingNode + private let containerNode: ContextControllerSourceNode + private let extractedBackgroundImageNode: ASImageNode + + private var extractedRect: CGRect? + private var nonExtractedRect: CGRect? + + private let offsetContainerNode: ASDisplayNode + private let highlightedBackgroundNode: ASDisplayNode private let separatorNode: ASDisplayNode @@ -168,12 +144,7 @@ final class ListMessageFileItemNode: ListMessageNode { private let extensionIconNode: ASImageNode private let extensionIconText: TextNode private let iconImageNode: TransformImageNode - private let statusButtonNode: HighlightTrackingButtonNode - private let statusNode: RadialStatusNode - - private var waveformNode: AudioWaveformNode? - private var waveformForegroundNode: AudioWaveformNode? - private var waveformScrubbingNode: MediaPlayerScrubbingNode? + private let iconStatusNode: SemanticStatusNode private var currentIconImage: FileIconImage? private var currentMedia: Media? @@ -187,10 +158,7 @@ final class ListMessageFileItemNode: ListMessageNode { private let playbackStatus = Promise() private var downloadStatusIconNode: ASImageNode - private var linearProgressNode: ASDisplayNode - - private let progressNode: RadialProgressNode - private var playbackOverlayNode: ListMessagePlaybackOverlayNode? + private var linearProgressNode: LinearProgressNode? private var context: AccountContext? private (set) var message: Message? @@ -200,15 +168,20 @@ final class ListMessageFileItemNode: ListMessageNode { private var contentSizeValue: CGSize? private var currentLeftOffset: CGFloat = 0.0 - override var canBeLongTapped: Bool { - return true - } - public required init() { + self.contextSourceNode = ContextExtractedContentContainingNode() + self.containerNode = ContextControllerSourceNode() + self.separatorNode = ASDisplayNode() self.separatorNode.displaysAsynchronously = false self.separatorNode.isLayerBacked = true + self.extractedBackgroundImageNode = ASImageNode() + self.extractedBackgroundImageNode.displaysAsynchronously = false + self.extractedBackgroundImageNode.alpha = 0.0 + + self.offsetContainerNode = ASDisplayNode() + self.highlightedBackgroundNode = ASDisplayNode() self.highlightedBackgroundNode.isLayerBacked = true @@ -234,45 +207,60 @@ final class ListMessageFileItemNode: ListMessageNode { self.iconImageNode.displaysAsynchronously = false self.iconImageNode.contentAnimations = .subsequentUpdates - self.statusButtonNode = HighlightTrackingButtonNode() - self.statusNode = RadialStatusNode(backgroundNodeColor: .clear) - self.statusNode.isUserInteractionEnabled = false + self.iconStatusNode = SemanticStatusNode(backgroundNodeColor: .clear, foregroundNodeColor: .white) + self.iconStatusNode.isUserInteractionEnabled = false self.downloadStatusIconNode = ASImageNode() self.downloadStatusIconNode.isLayerBacked = true self.downloadStatusIconNode.displaysAsynchronously = false self.downloadStatusIconNode.displayWithoutProcessing = true - self.progressNode = RadialProgressNode(theme: RadialProgressTheme(backgroundColor: .black, foregroundColor: .white, icon: nil)) - //self.progressNode.isLayerBacked = true - - self.linearProgressNode = ASDisplayNode() - self.linearProgressNode.isLayerBacked = true - super.init() self.addSubnode(self.separatorNode) - self.addSubnode(self.titleNode) - self.addSubnode(self.progressNode) - self.addSubnode(self.descriptionNode) - self.addSubnode(self.descriptionProgressNode) - self.addSubnode(self.extensionIconNode) - self.addSubnode(self.extensionIconText) - self.addSubnode(self.statusNode) - self.addSubnode(self.statusButtonNode) - self.statusButtonNode.highligthedChanged = { [weak self] highlighted in - if let strongSelf = self { - if highlighted { - strongSelf.statusNode.layer.removeAnimation(forKey: "opacity") - strongSelf.statusNode.alpha = 0.4 - } else { - strongSelf.statusNode.alpha = 1.0 - strongSelf.statusNode.layer.animateAlpha(from: 0.4, to: 1.0, duration: 0.2) - } + self.containerNode.addSubnode(self.contextSourceNode) + self.containerNode.targetNodeForActivationProgress = self.contextSourceNode.contentNode + self.addSubnode(self.containerNode) + + self.contextSourceNode.contentNode.addSubnode(self.extractedBackgroundImageNode) + self.contextSourceNode.contentNode.addSubnode(self.offsetContainerNode) + self.offsetContainerNode.addSubnode(self.titleNode) + self.offsetContainerNode.addSubnode(self.descriptionNode) + self.offsetContainerNode.addSubnode(self.descriptionProgressNode) + self.offsetContainerNode.addSubnode(self.extensionIconNode) + self.offsetContainerNode.addSubnode(self.extensionIconText) + self.offsetContainerNode.addSubnode(self.iconStatusNode) + + self.containerNode.activated = { [weak self] gesture, _ in + guard let strongSelf = self, let item = strongSelf.item else { + return } + + item.controllerInteraction.openMessageContextMenu(item.message, false, strongSelf.contextSourceNode, strongSelf.contextSourceNode.bounds, gesture) + } + + self.contextSourceNode.willUpdateIsExtractedToContextPreview = { [weak self] isExtracted, transition in + guard let strongSelf = self, let item = strongSelf.item else { + return + } + + if isExtracted { + strongSelf.extractedBackgroundImageNode.image = generateStretchableFilledCircleImage(diameter: 28.0, color: item.theme.list.plainBackgroundColor) + } + + if let extractedRect = strongSelf.extractedRect, let nonExtractedRect = strongSelf.nonExtractedRect { + let rect = isExtracted ? extractedRect : nonExtractedRect + transition.updateFrame(node: strongSelf.extractedBackgroundImageNode, frame: rect) + } + + transition.updateSublayerTransformOffset(layer: strongSelf.offsetContainerNode.layer, offset: CGPoint(x: isExtracted ? 12.0 : 0.0, y: 0.0)) + transition.updateAlpha(node: strongSelf.extractedBackgroundImageNode, alpha: isExtracted ? 1.0 : 0.0, completion: { _ in + if !isExtracted { + self?.extractedBackgroundImageNode.image = nil + } + }) } - self.statusButtonNode.addTarget(self, action: #selector(self.statusPressed), forControlEvents: .touchUpInside) } deinit { @@ -331,9 +319,9 @@ final class ListMessageFileItemNode: ListMessageNode { updatedTheme = item.theme } - let titleFont = Font.medium(floor(item.fontSize.baseDisplaySize * 16.0 / 17.0)) - let audioTitleFont = Font.regular(floor(item.fontSize.baseDisplaySize * 16.0 / 17.0)) - let descriptionFont = Font.regular(floor(item.fontSize.baseDisplaySize * 13.0 / 17.0)) + let titleFont = Font.semibold(floor(item.fontSize.baseDisplaySize * 16.0 / 17.0)) + let audioTitleFont = Font.semibold(floor(item.fontSize.baseDisplaySize * 16.0 / 17.0)) + let descriptionFont = Font.regular(floor(item.fontSize.baseDisplaySize * 14.0 / 17.0)) var leftInset: CGFloat = 65.0 + params.leftInset let rightInset: CGFloat = 8.0 + params.rightInset @@ -356,7 +344,6 @@ final class ListMessageFileItemNode: ListMessageNode { var updatedStatusSignal: Signal? var updatedPlaybackStatusSignal: Signal? var updatedFetchControls: FetchControls? - var waveform: AudioWaveform? var isAudio = false var isVoice = false @@ -372,7 +359,7 @@ final class ListMessageFileItemNode: ListMessageNode { isInstantVideo = file.isInstantVideo for attribute in file.attributes { - if case let .Audio(voice, _, title, performer, waveformValue) = attribute { + if case let .Audio(voice, duration, title, performer, _) = attribute { isAudio = true isVoice = voice @@ -380,7 +367,7 @@ final class ListMessageFileItemNode: ListMessageNode { let descriptionString: String if let performer = performer { - descriptionString = performer + descriptionString = "\(stringForDuration(Int32(duration))) • \(performer)" } else if let size = file.size { descriptionString = dataSizeString(size, decimalSeparator: item.dateTimeFormat.decimalSeparator) } else { @@ -394,16 +381,39 @@ final class ListMessageFileItemNode: ListMessageNode { } else { titleText = NSAttributedString(string: " ", font: audioTitleFont, textColor: item.theme.list.itemPrimaryTextColor) descriptionText = NSAttributedString(string: item.message.author?.displayTitle(strings: item.strings, displayOrder: .firstLast) ?? " ", font: descriptionFont, textColor: item.theme.list.itemSecondaryTextColor) - waveformValue?.withDataNoCopy { data in - waveform = AudioWaveform(bitstream: data, bitsPerSample: 5) - } } } } - if isInstantVideo { - titleText = NSAttributedString(string: item.strings.Message_VideoMessage, font: audioTitleFont, textColor: item.theme.list.itemPrimaryTextColor) - descriptionText = NSAttributedString(string: item.message.author?.displayTitle(strings: item.strings, displayOrder: .firstLast) ?? " ", font: descriptionFont, textColor: item.theme.list.itemSecondaryTextColor) + if isInstantVideo || isVoice { + let authorName: String + if let author = message.forwardInfo?.author { + if author.id == item.context.account.peerId { + authorName = item.strings.DialogList_You + } else { + authorName = author.displayTitle(strings: item.strings, displayOrder: .firstLast) + } + } else if let signature = message.forwardInfo?.authorSignature { + authorName = signature + } else if let author = message.author { + if author.id == item.context.account.peerId { + authorName = item.strings.DialogList_You + } else { + authorName = author.displayTitle(strings: item.strings, displayOrder: .firstLast) + } + } else { + authorName = " " + } + titleText = NSAttributedString(string: authorName, font: audioTitleFont, textColor: item.theme.list.itemPrimaryTextColor) + let dateString = stringForFullDate(timestamp: item.message.timestamp, strings: item.strings, dateTimeFormat: item.dateTimeFormat) + let descriptionString: String + if let duration = file.duration { + descriptionString = "\(stringForDuration(Int32(duration))) • \(dateString)" + } else { + descriptionString = dateString + } + + descriptionText = NSAttributedString(string: descriptionString, font: descriptionFont, textColor: item.theme.list.itemSecondaryTextColor) iconImage = .roundVideo(file) } else if !isAudio { let fileName: String = file.fileName ?? "" @@ -437,10 +447,7 @@ final class ListMessageFileItemNode: ListMessageNode { break } } - - if isAudio && !isVoice { - leftInset += 14.0 - } + var mediaUpdated = false if let currentMedia = currentMedia { @@ -492,7 +499,7 @@ final class ListMessageFileItemNode: ListMessageNode { } } - let (titleNodeLayout, titleNodeApply) = titleNodeMakeLayout(TextNodeLayoutArguments(attributedString: titleText, backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .middle, constrainedSize: CGSize(width: params.width - leftInset - rightInset - 40.0, height: CGFloat.infinity), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) + let (titleNodeLayout, titleNodeApply) = titleNodeMakeLayout(TextNodeLayoutArguments(attributedString: titleText, backgroundColor: nil, maximumNumberOfLines: 2, truncationType: .middle, constrainedSize: CGSize(width: params.width - leftInset - rightInset - 40.0, height: CGFloat.infinity), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) let (descriptionNodeLayout, descriptionNodeApply) = descriptionNodeMakeLayout(TextNodeLayoutArguments(attributedString: descriptionText, backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: params.width - leftInset - rightInset - 12.0 - 40.0, height: CGFloat.infinity), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) @@ -502,18 +509,18 @@ final class ListMessageFileItemNode: ListMessageNode { if let iconImage = iconImage { switch iconImage { case let .imageRepresentation(_, representation): - let iconSize = CGSize(width: 42.0, height: 42.0) - let imageCorners = ImageCorners(topLeft: .Corner(4.0), topRight: .Corner(4.0), bottomLeft: .Corner(4.0), bottomRight: .Corner(4.0)) + let iconSize = CGSize(width: 40.0, height: 40.0) + let imageCorners = ImageCorners(radius: 6.0) let arguments = TransformImageArguments(corners: imageCorners, imageSize: representation.dimensions.cgSize.aspectFilled(iconSize), boundingSize: iconSize, intrinsicInsets: UIEdgeInsets(), emptyColor: item.theme.list.mediaPlaceholderColor) iconImageApply = iconImageLayout(arguments) case .albumArt: - let iconSize = CGSize(width: 46.0, height: 46.0) - let imageCorners = ImageCorners(topLeft: .Corner(4.0), topRight: .Corner(4.0), bottomLeft: .Corner(4.0), bottomRight: .Corner(4.0)) + let iconSize = CGSize(width: 40.0, height: 40.0) + let imageCorners = ImageCorners(radius: iconSize.width / 2.0) let arguments = TransformImageArguments(corners: imageCorners, imageSize: iconSize, boundingSize: iconSize, intrinsicInsets: UIEdgeInsets(), emptyColor: item.theme.list.mediaPlaceholderColor) iconImageApply = iconImageLayout(arguments) case let .roundVideo(file): - let iconSize = CGSize(width: 42.0, height: 42.0) - let imageCorners = ImageCorners(topLeft: .Corner(iconSize.width / 2.0), topRight: .Corner(iconSize.width / 2.0), bottomLeft: .Corner(iconSize.width / 2.0), bottomRight: .Corner(iconSize.width / 2.0)) + let iconSize = CGSize(width: 40.0, height: 40.0) + let imageCorners = ImageCorners(radius: iconSize.width / 2.0) let arguments = TransformImageArguments(corners: imageCorners, imageSize: (file.dimensions ?? PixelDimensions(width: 320, height: 320)).cgSize.aspectFilled(iconSize), boundingSize: iconSize, intrinsicInsets: UIEdgeInsets(), emptyColor: item.theme.list.mediaPlaceholderColor) iconImageApply = iconImageLayout(arguments) } @@ -525,9 +532,9 @@ final class ListMessageFileItemNode: ListMessageNode { case let .imageRepresentation(file, representation): updateIconImageSignal = chatWebpageSnippetFile(account: item.context.account, fileReference: .message(message: MessageReference(message), media: file), representation: representation) case let .albumArt(file, albumArt): - updateIconImageSignal = playerAlbumArt(postbox: item.context.account.postbox, fileReference: .message(message: MessageReference(message), media: file), albumArt: albumArt, thumbnail: true) + updateIconImageSignal = playerAlbumArt(postbox: item.context.account.postbox, fileReference: .message(message: MessageReference(message), media: file), albumArt: albumArt, thumbnail: true, overlayColor: UIColor(white: 0.0, alpha: 0.3), emptyColor: item.theme.list.itemAccentColor) case let .roundVideo(file): - updateIconImageSignal = mediaGridMessageVideo(postbox: item.context.account.postbox, videoReference: FileMediaReference.message(message: MessageReference(message), media: file), autoFetchFullSizeThumbnail: true) + updateIconImageSignal = mediaGridMessageVideo(postbox: item.context.account.postbox, videoReference: FileMediaReference.message(message: MessageReference(message), media: file), autoFetchFullSizeThumbnail: true, overlayColor: UIColor(white: 0.0, alpha: 0.3)) } } else { updateIconImageSignal = .complete() @@ -550,6 +557,23 @@ final class ListMessageFileItemNode: ListMessageNode { transition = .immediate } + strongSelf.containerNode.frame = CGRect(origin: CGPoint(), size: nodeLayout.contentSize) + strongSelf.contextSourceNode.frame = CGRect(origin: CGPoint(), size: nodeLayout.contentSize) + strongSelf.offsetContainerNode.frame = CGRect(origin: CGPoint(), size: nodeLayout.contentSize) + strongSelf.contextSourceNode.contentNode.frame = CGRect(origin: CGPoint(), size: nodeLayout.contentSize) + + let nonExtractedRect = CGRect(origin: CGPoint(), size: CGSize(width: nodeLayout.contentSize.width - 16.0, height: nodeLayout.contentSize.height)) + let extractedRect = CGRect(origin: CGPoint(), size: nodeLayout.contentSize).insetBy(dx: 16.0, dy: 0.0) + strongSelf.extractedRect = extractedRect + strongSelf.nonExtractedRect = nonExtractedRect + + if strongSelf.contextSourceNode.isExtractedToContextPreview { + strongSelf.extractedBackgroundImageNode.frame = extractedRect + } else { + strongSelf.extractedBackgroundImageNode.frame = nonExtractedRect + } + strongSelf.contextSourceNode.contentRect = extractedRect + strongSelf.currentMedia = selectedMedia strongSelf.message = message strongSelf.context = item.context @@ -561,9 +585,7 @@ final class ListMessageFileItemNode: ListMessageNode { if let _ = updatedTheme { strongSelf.separatorNode.backgroundColor = item.theme.list.itemPlainSeparatorColor strongSelf.highlightedBackgroundNode.backgroundColor = item.theme.list.itemHighlightedBackgroundColor - - strongSelf.progressNode.updateTheme(RadialProgressTheme(backgroundColor: item.theme.list.itemAccentColor, foregroundColor: item.theme.list.plainBackgroundColor, icon: nil)) - strongSelf.linearProgressNode.backgroundColor = item.theme.list.itemAccentColor + strongSelf.linearProgressNode?.updateTheme(theme: item.theme) } if let (selectionWidth, selectionApply) = selectionNodeWidthAndApply { @@ -572,7 +594,7 @@ final class ListMessageFileItemNode: ListMessageNode { if selectionNode !== strongSelf.selectionNode { strongSelf.selectionNode?.removeFromSupernode() strongSelf.selectionNode = selectionNode - strongSelf.addSubnode(selectionNode) + strongSelf.contextSourceNode.contentNode.addSubnode(selectionNode) selectionNode.frame = selectionFrame transition.animatePosition(node: selectionNode, from: CGPoint(x: -selectionFrame.size.width / 2.0, y: selectionFrame.midY)) } else { @@ -589,7 +611,7 @@ final class ListMessageFileItemNode: ListMessageNode { transition.updateFrame(node: strongSelf.separatorNode, frame: CGRect(origin: CGPoint(x: leftInset + leftOffset, y: nodeLayout.contentSize.height - UIScreenPixel), size: CGSize(width: params.width - leftInset - leftOffset, height: UIScreenPixel))) strongSelf.highlightedBackgroundNode.frame = CGRect(origin: CGPoint(x: 0.0, y: -UIScreenPixel - nodeLayout.insets.top), size: CGSize(width: params.width, height: nodeLayout.size.height + UIScreenPixel)) - transition.updateFrame(node: strongSelf.titleNode, frame: CGRect(origin: CGPoint(x: leftOffset + leftInset, y: 8.0), size: titleNodeLayout.size)) + transition.updateFrame(node: strongSelf.titleNode, frame: CGRect(origin: CGPoint(x: leftOffset + leftInset, y: 9.0), size: titleNodeLayout.size)) let _ = titleNodeApply() var descriptionOffset: CGFloat = 0.0 @@ -607,67 +629,27 @@ final class ListMessageFileItemNode: ListMessageNode { } } - transition.updateFrame(node: strongSelf.descriptionNode, frame: CGRect(origin: CGPoint(x: leftOffset + leftInset + descriptionOffset, y: strongSelf.titleNode.frame.maxY + 3.0), size: descriptionNodeLayout.size)) + transition.updateFrame(node: strongSelf.descriptionNode, frame: CGRect(origin: CGPoint(x: leftOffset + leftInset + descriptionOffset, y: strongSelf.titleNode.frame.maxY + 1.0), size: descriptionNodeLayout.size)) let _ = descriptionNodeApply() let iconFrame: CGRect if isAudio { - let iconSize = CGSize(width: 48.0, height: 48.0) - iconFrame = CGRect(origin: CGPoint(x: params.leftInset + leftOffset + 12.0, y: 5.0), size: iconSize) + let iconSize = CGSize(width: 40.0, height: 40.0) + iconFrame = CGRect(origin: CGPoint(x: params.leftInset + leftOffset + 12.0, y: 8.0), size: iconSize) } else { - let iconSize = CGSize(width: 42.0, height: 42.0) + let iconSize = CGSize(width: 40.0, height: 40.0) iconFrame = CGRect(origin: CGPoint(x: params.leftInset + leftOffset + 12.0, y: 8.0), size: iconSize) } transition.updateFrame(node: strongSelf.extensionIconNode, frame: iconFrame) strongSelf.extensionIconNode.image = extensionIconImage - transition.updateFrame(node: strongSelf.extensionIconText, frame: CGRect(origin: CGPoint(x: leftOffset + 12.0 + floor((42.0 - extensionTextLayout.size.width) / 2.0), y: 8.0 + floor((42.0 - extensionTextLayout.size.height) / 2.0)), size: extensionTextLayout.size)) + transition.updateFrame(node: strongSelf.extensionIconText, frame: CGRect(origin: CGPoint(x: iconFrame.minX + floor((iconFrame.width - extensionTextLayout.size.width) / 2.0), y: iconFrame.minY + 2.0 + floor((iconFrame.height - extensionTextLayout.size.height) / 2.0)), size: extensionTextLayout.size)) + + transition.updateFrame(node: strongSelf.iconStatusNode, frame: iconFrame) let _ = extensionTextApply() strongSelf.currentIconImage = iconImage - if isVoice { - let waveformNode: AudioWaveformNode - let waveformForegroundNode: AudioWaveformNode - let waveformScrubbingNode: MediaPlayerScrubbingNode - if let current = strongSelf.waveformNode { - waveformNode = current - } else { - waveformNode = AudioWaveformNode() - waveformNode.isLayerBacked = true - strongSelf.waveformNode = waveformNode - strongSelf.addSubnode(waveformNode) - } - if let current = strongSelf.waveformForegroundNode { - waveformForegroundNode = current - } else { - waveformForegroundNode = AudioWaveformNode() - waveformForegroundNode.isLayerBacked = true - strongSelf.waveformForegroundNode = waveformForegroundNode - strongSelf.addSubnode(waveformForegroundNode) - } - if let current = strongSelf.waveformScrubbingNode { - waveformScrubbingNode = current - } else { - waveformScrubbingNode = MediaPlayerScrubbingNode(content: .custom(backgroundNode: waveformNode, foregroundContentNode: waveformForegroundNode)) - waveformScrubbingNode.hitTestSlop = UIEdgeInsets(top: -10.0, left: 0.0, bottom: -10.0, right: 0.0) - waveformScrubbingNode.seek = { timestamp in - if let strongSelf = self, let context = strongSelf.context, let message = strongSelf.message, let type = peerMessageMediaPlayerType(message) { - context.sharedContext.mediaManager.playlistControl(.seek(timestamp), type: type) - } - } - waveformScrubbingNode.enableScrubbing = false - waveformScrubbingNode.status = strongSelf.playbackStatus.get() - strongSelf.waveformScrubbingNode = waveformScrubbingNode - strongSelf.addSubnode(waveformScrubbingNode) - } - - transition.updateFrame(node: waveformScrubbingNode, frame: CGRect(origin: CGPoint(x: leftOffset + leftInset, y: 10.0), size: CGSize(width: params.width - leftInset - 16.0, height: 12.0))) - - waveformNode.setup(color: item.theme.list.controlSecondaryColor, waveform: waveform) - waveformForegroundNode.setup(color: item.theme.list.itemAccentColor, waveform: waveform) - } - if let iconImageApply = iconImageApply { if let updateImageSignal = updateIconImageSignal { strongSelf.iconImageNode.setSignal(updateImageSignal) @@ -675,7 +657,7 @@ final class ListMessageFileItemNode: ListMessageNode { transition.updateFrame(node: strongSelf.iconImageNode, frame: iconFrame) if strongSelf.iconImageNode.supernode == nil { - strongSelf.addSubnode(strongSelf.iconImageNode) + strongSelf.offsetContainerNode.insertSubnode(strongSelf.iconImageNode, belowSubnode: strongSelf.iconStatusNode) } iconImageApply() @@ -690,22 +672,13 @@ final class ListMessageFileItemNode: ListMessageNode { strongSelf.iconImageNode.removeFromSupernode() if strongSelf.extensionIconNode.supernode == nil { - strongSelf.addSubnode(strongSelf.extensionIconNode) + strongSelf.offsetContainerNode.insertSubnode(strongSelf.extensionIconNode, belowSubnode: strongSelf.iconStatusNode) } if strongSelf.extensionIconText.supernode == nil { - strongSelf.addSubnode(strongSelf.extensionIconText) + strongSelf.offsetContainerNode.insertSubnode(strongSelf.extensionIconText, belowSubnode: strongSelf.iconStatusNode) } } - if let playbackOverlayNode = strongSelf.playbackOverlayNode { - transition.updateFrame(node: playbackOverlayNode, frame: iconFrame) - } - - let statusSize = CGSize(width: 28.0, height: 28.0) - transition.updateFrame(node: strongSelf.statusNode, frame: CGRect(origin: CGPoint(x: params.width - params.rightInset - rightInset - statusSize.width + leftOffset, y: floor((nodeLayout.contentSize.height - statusSize.height) / 2.0)), size: statusSize)) - - strongSelf.statusButtonNode.frame = CGRect(origin: CGPoint(x: params.width - params.rightInset - rightInset - 40.0 + leftOffset, y: 0.0), size: CGSize(width: 40.0, height: nodeLayout.contentSize.height)) - if let updatedStatusSignal = updatedStatusSignal { strongSelf.statusDisposable.set((updatedStatusSignal |> deliverOnMainQueue).start(next: { [weak strongSelf] fileStatus in @@ -717,10 +690,7 @@ final class ListMessageFileItemNode: ListMessageNode { })) } - transition.updateFrame(node: strongSelf.downloadStatusIconNode, frame: CGRect(origin: CGPoint(x: leftOffset + leftInset, y: strongSelf.descriptionNode.frame.minY + floor((strongSelf.descriptionNode.frame.height - 11.0) / 2.0)), size: CGSize(width: 11.0, height: 11.0))) - - let progressSize: CGFloat = 40.0 - transition.updateFrame(node: strongSelf.progressNode, frame: CGRect(origin: CGPoint(x: leftOffset + params.leftInset + floor((leftInset - params.leftInset - progressSize) / 2.0), y: floor((nodeLayout.contentSize.height - progressSize) / 2.0)), size: CGSize(width: progressSize, height: progressSize))) + transition.updateFrame(node: strongSelf.downloadStatusIconNode, frame: CGRect(origin: CGPoint(x: leftOffset + leftInset, y: strongSelf.descriptionNode.frame.minY + floor((strongSelf.descriptionNode.frame.height - 12.0) / 2.0)), size: CGSize(width: 12.0, height: 12.0))) if let updatedFetchControls = updatedFetchControls { let _ = strongSelf.fetchControls.swap(updatedFetchControls) @@ -757,74 +727,44 @@ final class ListMessageFileItemNode: ListMessageNode { isInstantVideo = file.isInstantVideo } - self.progressNode.isHidden = !isVoice + var iconStatusState: SemanticStatusNodeState = .none + var iconStatusBackgroundColor: UIColor = .clear + var iconStatusForegroundColor: UIColor = .white + + if isVoice { + iconStatusBackgroundColor = item.theme.list.itemAccentColor + iconStatusForegroundColor = item.theme.list.itemCheckColors.foregroundColor + } - var enableScrubbing = false - var musicIsPlaying: Bool? - var statusState: RadialStatusNodeState = .none if !isAudio && !isInstantVideo { self.updateProgressFrame(size: contentSize, leftInset: layoutParams.leftInset, rightInset: layoutParams.rightInset, transition: .immediate) } else { - if !isVoice && !isInstantVideo { - switch fetchStatus { - case let .Fetching(_, progress): - let adjustedProgress = max(progress, 0.027) - statusState = .cloudProgress(color: item.theme.list.itemAccentColor, strokeBackgroundColor: item.theme.list.itemAccentColor.withAlphaComponent(0.5), lineWidth: 2.0, value: CGFloat(adjustedProgress)) - case .Local: - break - case .Remote: - if let image = PresentationResourcesItemList.cloudFetchIcon(item.theme) { - statusState = .customIcon(image) - } - } - } - self.statusNode.transitionToState(statusState, completion: {}) - self.statusButtonNode.isUserInteractionEnabled = statusState != .none - switch status { case let .fetchStatus(fetchStatus): switch fetchStatus { - case let .Fetching(_, progress): - let adjustedProgress = max(progress, 0.027) - self.progressNode.state = .Fetching(progress: adjustedProgress) + case .Fetching: + break case .Local: - if isAudio { - self.progressNode.state = .Play - } else { - self.progressNode.state = .Icon + if isAudio || isInstantVideo { + iconStatusState = .play } case .Remote: - if isAudio { - self.progressNode.state = .Play - } else { - self.progressNode.state = .Remote + if isAudio || isInstantVideo { + iconStatusState = .play } } case let .playbackStatus(playbackStatus): - enableScrubbing = true switch playbackStatus { - case .playing: - musicIsPlaying = true - self.progressNode.state = .Pause - case .paused: - musicIsPlaying = false - self.progressNode.state = .Play + case .playing: + iconStatusState = .pause + case .paused: + iconStatusState = .play } } } - self.waveformScrubbingNode?.enableScrubbing = enableScrubbing - if let musicIsPlaying = musicIsPlaying, !isVoice, !isInstantVideo { - if self.playbackOverlayNode == nil { - let playbackOverlayNode = ListMessagePlaybackOverlayNode() - playbackOverlayNode.frame = self.iconImageNode.frame - self.playbackOverlayNode = playbackOverlayNode - self.addSubnode(playbackOverlayNode) - } - self.playbackOverlayNode?.isPlaying = musicIsPlaying - } else if let playbackOverlayNode = self.playbackOverlayNode { - self.playbackOverlayNode = nil - playbackOverlayNode.removeFromSupernode() - } + self.iconStatusNode.backgroundNodeColor = iconStatusBackgroundColor + self.iconStatusNode.foregroundNodeColor = iconStatusForegroundColor + self.iconStatusNode.transitionToState(iconStatusState) } override func setHighlighted(_ highlighted: Bool, at point: CGPoint, animated: Bool) { @@ -903,35 +843,54 @@ final class ListMessageFileItemNode: ListMessageNode { switch maybeFetchStatus { case let .Fetching(_, progress): - let progressFrame = CGRect(x: self.currentLeftOffset + leftInset + 65.0, y: size.height - 2.0, width: floor((size.width - 65.0 - leftInset - rightInset) * CGFloat(progress)), height: 2.0) - if self.linearProgressNode.supernode == nil { - self.addSubnode(self.linearProgressNode) + let progressFrame = CGRect(x: self.currentLeftOffset + leftInset + 65.0, y: size.height - 2.0, width: floor((size.width - 65.0 - leftInset - rightInset)), height: 3.0) + let linearProgressNode: LinearProgressNode + if let current = self.linearProgressNode { + linearProgressNode = current + } else { + linearProgressNode = LinearProgressNode() + linearProgressNode.updateTheme(theme: item.theme) + self.linearProgressNode = linearProgressNode + self.addSubnode(linearProgressNode) } - transition.updateFrame(node: self.linearProgressNode, frame: progressFrame) + transition.updateFrame(node: linearProgressNode, frame: progressFrame) + linearProgressNode.updateProgress(value: CGFloat(progress), completion: {}) + if self.downloadStatusIconNode.supernode == nil { - self.addSubnode(self.downloadStatusIconNode) + self.offsetContainerNode.addSubnode(self.downloadStatusIconNode) } self.downloadStatusIconNode.image = PresentationResourcesChat.sharedMediaFileDownloadPauseIcon(item.theme) case .Local: - if self.linearProgressNode.supernode != nil { - self.linearProgressNode.removeFromSupernode() + if let linearProgressNode = self.linearProgressNode { + self.linearProgressNode = nil + linearProgressNode.updateProgress(value: 1.0, completion: { [weak linearProgressNode] in + linearProgressNode?.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.15, removeOnCompletion: false, completion: { _ in + linearProgressNode?.removeFromSupernode() + }) + }) } if self.downloadStatusIconNode.supernode != nil { self.downloadStatusIconNode.removeFromSupernode() } self.downloadStatusIconNode.image = nil case .Remote: - if self.linearProgressNode.supernode != nil { - self.linearProgressNode.removeFromSupernode() + if let linearProgressNode = self.linearProgressNode { + self.linearProgressNode = nil + linearProgressNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.15, removeOnCompletion: false, completion: { [weak linearProgressNode] _ in + linearProgressNode?.removeFromSupernode() + }) } if self.downloadStatusIconNode.supernode == nil { - self.addSubnode(self.downloadStatusIconNode) + self.offsetContainerNode.addSubnode(self.downloadStatusIconNode) } self.downloadStatusIconNode.image = PresentationResourcesChat.sharedMediaFileDownloadStartIcon(item.theme) } } else { - if self.linearProgressNode.supernode != nil { - self.linearProgressNode.removeFromSupernode() + if let linearProgressNode = self.linearProgressNode { + self.linearProgressNode = nil + linearProgressNode.layer.animateAlpha(from: 1.0, to: 1.0, duration: 0.2, removeOnCompletion: false, completion: { [weak linearProgressNode] _ in + linearProgressNode?.removeFromSupernode() + }) } if self.downloadStatusIconNode.supernode != nil { self.downloadStatusIconNode.removeFromSupernode() @@ -1002,12 +961,6 @@ final class ListMessageFileItemNode: ListMessageNode { return super.hitTest(point, with: event) } - override func longTapped() { - if let item = self.item { - item.controllerInteraction.openMessageContextMenu(item.message, false, self, self.bounds, nil) - } - } - @objc private func statusPressed() { guard let _ = self.item, let fetchStatus = self.fetchStatus else { return @@ -1027,3 +980,129 @@ final class ListMessageFileItemNode: ListMessageNode { } } } + +private final class LinearProgressNode: ASDisplayNode { + private let trackingNode: HierarchyTrackingNode + private let barNode: ASImageNode + private let shimmerNode: ASImageNode + private let shimmerClippingNode: ASDisplayNode + + private var currentProgress: CGFloat = 0.0 + private var currentProgressAnimation: (from: CGFloat, to: CGFloat, startTime: Double, completion: () -> Void)? + + private var shimmerPhase: CGFloat = 0.0 + + private var inHierarchyValue: Bool = false + private var shouldAnimate: Bool = false + + private let animator: ConstantDisplayLinkAnimator + + override init() { + var updateInHierarchy: ((Bool) -> Void)? + self.trackingNode = HierarchyTrackingNode { value in + updateInHierarchy?(value) + } + + var animationStep: (() -> Void)? + self.animator = ConstantDisplayLinkAnimator { + animationStep?() + } + + + self.barNode = ASImageNode() + self.barNode.isLayerBacked = true + + self.shimmerNode = ASImageNode() + self.shimmerNode.contentMode = .scaleToFill + self.shimmerClippingNode = ASDisplayNode() + self.shimmerClippingNode.clipsToBounds = true + + super.init() + + self.addSubnode(trackingNode) + self.addSubnode(self.barNode) + + self.shimmerClippingNode.addSubnode(self.shimmerNode) + self.addSubnode(self.shimmerClippingNode) + + updateInHierarchy = { [weak self] value in + guard let strongSelf = self else { + return + } + if strongSelf.inHierarchyValue != value { + strongSelf.inHierarchyValue = value + strongSelf.updateAnimations() + } + } + + animationStep = { [weak self] in + self?.update() + } + } + + func updateTheme(theme: PresentationTheme) { + self.barNode.image = generateStretchableFilledCircleImage(diameter: 3.0, color: theme.list.itemAccentColor) + self.shimmerNode.image = generateImage(CGSize(width: 100.0, height: 3.0), opaque: false, rotatedContext: { size, context in + context.clear(CGRect(origin: CGPoint(), size: size)) + + let foregroundColor = theme.list.plainBackgroundColor.withAlphaComponent(0.4) + + let transparentColor = foregroundColor.withAlphaComponent(0.0).cgColor + let peakColor = foregroundColor.cgColor + + var locations: [CGFloat] = [0.0, 0.5, 1.0] + let colors: [CGColor] = [transparentColor, peakColor, transparentColor] + + let colorSpace = CGColorSpaceCreateDeviceRGB() + let gradient = CGGradient(colorsSpace: colorSpace, colors: colors as CFArray, locations: &locations)! + + context.drawLinearGradient(gradient, start: CGPoint(x: 0.0, y: 0.0), end: CGPoint(x: size.width, y: 0.0), options: CGGradientDrawingOptions()) + }) + } + + func updateProgress(value: CGFloat, completion: @escaping () -> Void = {}) { + if self.currentProgress.isEqual(to: value) { + self.currentProgressAnimation = nil + completion() + } else { + self.currentProgressAnimation = (self.currentProgress, value, CACurrentMediaTime(), completion) + } + } + + private func updateAnimations() { + let shouldAnimate = self.inHierarchyValue + if shouldAnimate != self.shouldAnimate { + self.shouldAnimate = shouldAnimate + self.animator.isPaused = !shouldAnimate + } + } + + private func update() { + if let (fromValue, toValue, startTime, completion) = self.currentProgressAnimation { + let duration: Double = 0.15 + let timestamp = CACurrentMediaTime() + let t = CGFloat((timestamp - startTime) / duration) + if t >= 1.0 { + self.currentProgress = toValue + self.currentProgressAnimation = nil + completion() + } else { + let clippedT = max(0.0, t) + self.currentProgress = (1.0 - clippedT) * fromValue + clippedT * toValue + } + + var progressWidth: CGFloat = self.bounds.width * self.currentProgress + if progressWidth < 6.0 { + progressWidth = 0.0 + } + let progressFrame = CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: progressWidth, height: 3.0)) + self.barNode.frame = progressFrame + self.shimmerClippingNode.frame = progressFrame + } + + self.shimmerPhase += 3.5 + let shimmerWidth: CGFloat = 160.0 + let shimmerOffset = self.shimmerPhase.remainder(dividingBy: self.bounds.width + shimmerWidth / 2.0) + self.shimmerNode.frame = CGRect(origin: CGPoint(x: shimmerOffset - shimmerWidth / 2.0, y: 0.0), size: CGSize(width: shimmerWidth, height: 3.0)) + } +} diff --git a/submodules/TelegramUI/Sources/ListMessageSnippetItemNode.swift b/submodules/TelegramUI/Sources/ListMessageSnippetItemNode.swift index d5154e082a..304b8b7c01 100644 --- a/submodules/TelegramUI/Sources/ListMessageSnippetItemNode.swift +++ b/submodules/TelegramUI/Sources/ListMessageSnippetItemNode.swift @@ -14,11 +14,19 @@ import PhotoResources import WebsiteType import UrlHandling -private let iconFont = Font.medium(22.0) +private let iconFont = Font.with(size: 30.0, design: .round, traits: [.bold]) -private let iconTextBackgroundImage = generateStretchableFilledCircleImage(radius: 2.0, color: UIColor(rgb: 0xdfdfdf)) +private let iconTextBackgroundImage = generateStretchableFilledCircleImage(radius: 6.0, color: UIColor(rgb: 0xFF9500)) final class ListMessageSnippetItemNode: ListMessageNode { + private let contextSourceNode: ContextExtractedContentContainingNode + private let containerNode: ContextControllerSourceNode + private let extractedBackgroundImageNode: ASImageNode + private let offsetContainerNode: ASDisplayNode + + private var extractedRect: CGRect? + private var nonExtractedRect: CGRect? + private let highlightedBackgroundNode: ASDisplayNode private let separatorNode: ASDisplayNode @@ -36,20 +44,25 @@ final class ListMessageSnippetItemNode: ListMessageNode { private var currentIconImageRepresentation: TelegramMediaImageRepresentation? private var currentMedia: Media? - private var currentPrimaryUrl: String? + var currentPrimaryUrl: String? private var currentIsInstantView: Bool? private var appliedItem: ListMessageItem? - override var canBeLongTapped: Bool { - return true - } - public required init() { + self.contextSourceNode = ContextExtractedContentContainingNode() + self.containerNode = ContextControllerSourceNode() + self.separatorNode = ASDisplayNode() self.separatorNode.displaysAsynchronously = false self.separatorNode.isLayerBacked = true + self.extractedBackgroundImageNode = ASImageNode() + self.extractedBackgroundImageNode.displaysAsynchronously = false + self.extractedBackgroundImageNode.alpha = 0.0 + + self.offsetContainerNode = ASDisplayNode() + self.highlightedBackgroundNode = ASDisplayNode() self.highlightedBackgroundNode.isLayerBacked = true @@ -80,11 +93,49 @@ final class ListMessageSnippetItemNode: ListMessageNode { super.init() self.addSubnode(self.separatorNode) - self.addSubnode(self.titleNode) - self.addSubnode(self.descriptionNode) - self.addSubnode(self.linkNode) - self.addSubnode(self.instantViewIconNode) - self.addSubnode(self.iconImageNode) + + self.containerNode.addSubnode(self.contextSourceNode) + self.containerNode.targetNodeForActivationProgress = self.contextSourceNode.contentNode + self.addSubnode(self.containerNode) + + self.contextSourceNode.contentNode.addSubnode(self.extractedBackgroundImageNode) + self.contextSourceNode.contentNode.addSubnode(self.offsetContainerNode) + self.offsetContainerNode.addSubnode(self.titleNode) + self.offsetContainerNode.addSubnode(self.descriptionNode) + self.offsetContainerNode.addSubnode(self.linkNode) + self.offsetContainerNode.addSubnode(self.instantViewIconNode) + self.offsetContainerNode.addSubnode(self.iconImageNode) + + self.containerNode.activated = { [weak self] gesture, _ in + guard let strongSelf = self, let item = strongSelf.item else { + return + } + + item.controllerInteraction.openMessageContextMenu(item.message, false, strongSelf.contextSourceNode, strongSelf.contextSourceNode.bounds, gesture) + } + + self.contextSourceNode.willUpdateIsExtractedToContextPreview = { [weak self] isExtracted, transition in + guard let strongSelf = self, let item = strongSelf.item else { + return + } + + if isExtracted { + strongSelf.extractedBackgroundImageNode.image = generateStretchableFilledCircleImage(diameter: 28.0, color: item.theme.list.plainBackgroundColor) + } + + if let extractedRect = strongSelf.extractedRect, let nonExtractedRect = strongSelf.nonExtractedRect { + let rect = isExtracted ? extractedRect : nonExtractedRect + transition.updateFrame(node: strongSelf.extractedBackgroundImageNode, frame: rect) + } + + transition.updateSublayerTransformOffset(layer: strongSelf.offsetContainerNode.layer, offset: CGPoint(x: isExtracted ? 12.0 : 0.0, y: 0.0)) + + transition.updateAlpha(node: strongSelf.extractedBackgroundImageNode, alpha: isExtracted ? 1.0 : 0.0, completion: { _ in + if !isExtracted { + self?.extractedBackgroundImageNode.image = nil + } + }) + } } required public init?(coder aDecoder: NSCoder) { @@ -155,7 +206,7 @@ final class ListMessageSnippetItemNode: ListMessageNode { updatedTheme = item.theme } - let titleFont = Font.medium(floor(item.fontSize.baseDisplaySize * 16.0 / 17.0)) + let titleFont = Font.semibold(floor(item.fontSize.baseDisplaySize * 16.0 / 17.0)) let descriptionFont = Font.regular(floor(item.fontSize.baseDisplaySize * 14.0 / 17.0)) let leftInset: CGFloat = 65.0 + params.leftInset @@ -216,7 +267,7 @@ final class ListMessageSnippetItemNode: ListMessageNode { let mutableDescriptionText = NSMutableAttributedString() if let text = content.text { - mutableDescriptionText.append(NSAttributedString(string: text + "\n", font: descriptionFont, textColor: item.theme.list.itemPrimaryTextColor)) + mutableDescriptionText.append(NSAttributedString(string: text + "\n", font: descriptionFont, textColor: item.theme.list.itemSecondaryTextColor)) } let plainUrlString = NSAttributedString(string: content.displayUrl, font: descriptionFont, textColor: item.theme.list.itemAccentColor) @@ -262,6 +313,7 @@ final class ListMessageSnippetItemNode: ListMessageNode { range.length = nsString.length - range.location } var urlString = nsString.substring(with: range) + let rawUrlString = urlString var parsedUrl = URL(string: urlString) if parsedUrl == nil || parsedUrl!.host == nil || parsedUrl!.host!.isEmpty { urlString = "http://" + urlString @@ -269,13 +321,18 @@ final class ListMessageSnippetItemNode: ListMessageNode { } if let url = parsedUrl, let host = url.host { primaryUrl = urlString - - iconText = NSAttributedString(string: host[.. Void)? if let iconImageReferenceAndRepresentation = iconImageReferenceAndRepresentation { - let iconSize = CGSize(width: 42.0, height: 42.0) - let imageCorners = ImageCorners(topLeft: .Corner(2.0), topRight: .Corner(2.0), bottomLeft: .Corner(2.0), bottomRight: .Corner(2.0)) + let iconSize = CGSize(width: 40.0, height: 40.0) + let imageCorners = ImageCorners(radius: 6.0) let arguments = TransformImageArguments(corners: imageCorners, imageSize: iconImageReferenceAndRepresentation.1.dimensions.cgSize.aspectFilled(iconSize), boundingSize: iconSize, intrinsicInsets: UIEdgeInsets(), emptyColor: item.theme.list.mediaPlaceholderColor) iconImageApply = iconImageLayout(arguments) } @@ -335,7 +392,8 @@ final class ListMessageSnippetItemNode: ListMessageNode { insets.top += header.height } - return (ListViewItemNodeLayout(contentSize: CGSize(width: params.width, height: contentHeight), insets: insets), { animation in + let nodeLayout = ListViewItemNodeLayout(contentSize: CGSize(width: params.width, height: contentHeight), insets: insets) + return (nodeLayout, { animation in if let strongSelf = self { let transition: ContainedViewLayoutTransition if animation.isAnimated { @@ -344,6 +402,23 @@ final class ListMessageSnippetItemNode: ListMessageNode { transition = .immediate } + strongSelf.containerNode.frame = CGRect(origin: CGPoint(), size: nodeLayout.contentSize) + strongSelf.contextSourceNode.frame = CGRect(origin: CGPoint(), size: nodeLayout.contentSize) + strongSelf.contextSourceNode.contentNode.frame = CGRect(origin: CGPoint(), size: nodeLayout.contentSize) + strongSelf.offsetContainerNode.frame = CGRect(origin: CGPoint(), size: nodeLayout.contentSize) + + let nonExtractedRect = CGRect(origin: CGPoint(), size: CGSize(width: nodeLayout.contentSize.width - 16.0, height: nodeLayout.contentSize.height)) + let extractedRect = CGRect(origin: CGPoint(), size: nodeLayout.contentSize).insetBy(dx: 16.0, dy: 0.0) + strongSelf.extractedRect = extractedRect + strongSelf.nonExtractedRect = nonExtractedRect + + if strongSelf.contextSourceNode.isExtractedToContextPreview { + strongSelf.extractedBackgroundImageNode.frame = extractedRect + } else { + strongSelf.extractedBackgroundImageNode.frame = nonExtractedRect + } + strongSelf.contextSourceNode.contentRect = extractedRect + strongSelf.appliedItem = item strongSelf.currentMedia = selectedMedia strongSelf.currentPrimaryUrl = primaryUrl @@ -380,7 +455,7 @@ final class ListMessageSnippetItemNode: ListMessageNode { transition.updateFrame(node: strongSelf.titleNode, frame: CGRect(origin: CGPoint(x: leftOffset + leftInset, y: 9.0), size: titleNodeLayout.size)) let _ = titleNodeApply() - let descriptionFrame = CGRect(origin: CGPoint(x: leftOffset + leftInset - 1.0, y: strongSelf.titleNode.frame.maxY + 3.0), size: descriptionNodeLayout.size) + let descriptionFrame = CGRect(origin: CGPoint(x: leftOffset + leftInset, y: strongSelf.titleNode.frame.maxY + 1.0), size: descriptionNodeLayout.size) transition.updateFrame(node: strongSelf.descriptionNode, frame: descriptionFrame) let _ = descriptionNodeApply() @@ -393,8 +468,8 @@ final class ListMessageSnippetItemNode: ListMessageNode { transition.updateFrame(node: strongSelf.instantViewIconNode, frame: CGRect(origin: linkFrame.origin.offsetBy(dx: 0.0, dy: 4.0), size: image.size)) } - let iconFrame = CGRect(origin: CGPoint(x: params.leftInset + leftOffset + 9.0, y: 12.0), size: CGSize(width: 42.0, height: 42.0)) - transition.updateFrame(node: strongSelf.iconTextNode, frame: CGRect(origin: CGPoint(x: iconFrame.minX + floor((42.0 - iconTextLayout.size.width) / 2.0), y: iconFrame.minY + floor((42.0 - iconTextLayout.size.height) / 2.0) + 3.0), size: iconTextLayout.size)) + let iconFrame = CGRect(origin: CGPoint(x: params.leftInset + leftOffset + 12.0, y: 12.0), size: CGSize(width: 40.0, height: 40.0)) + transition.updateFrame(node: strongSelf.iconTextNode, frame: CGRect(origin: CGPoint(x: iconFrame.minX + floorToScreenPixels((iconFrame.width - iconTextLayout.size.width) / 2.0), y: iconFrame.minY + floorToScreenPixels((iconFrame.height - iconTextLayout.size.height) / 2.0) + 2.0), size: iconTextLayout.size)) let _ = iconTextApply() @@ -406,7 +481,7 @@ final class ListMessageSnippetItemNode: ListMessageNode { } if strongSelf.iconImageNode.supernode == nil { - strongSelf.addSubnode(strongSelf.iconImageNode) + strongSelf.offsetContainerNode.addSubnode(strongSelf.iconImageNode) strongSelf.iconImageNode.frame = iconFrame } else { transition.updateFrame(node: strongSelf.iconImageNode, frame: iconFrame) @@ -427,15 +502,18 @@ final class ListMessageSnippetItemNode: ListMessageNode { if strongSelf.iconTextBackgroundNode.supernode == nil { strongSelf.iconTextBackgroundNode.image = applyIconTextBackgroundImage - strongSelf.addSubnode(strongSelf.iconTextBackgroundNode) + strongSelf.offsetContainerNode.addSubnode(strongSelf.iconTextBackgroundNode) strongSelf.iconTextBackgroundNode.frame = iconFrame } else { transition.updateFrame(node: strongSelf.iconTextBackgroundNode, frame: iconFrame) } if strongSelf.iconTextNode.supernode == nil { - strongSelf.addSubnode(strongSelf.iconTextNode) + strongSelf.offsetContainerNode.addSubnode(strongSelf.iconTextNode) } } + + strongSelf.iconTextBackgroundNode.isHidden = iconText == nil + strongSelf.iconTextNode.isHidden = iconText == nil } }) } @@ -598,7 +676,7 @@ final class ListMessageSnippetItemNode: ListMessageNode { } else { linkHighlightingNode = LinkHighlightingNode(color: item.message.effectivelyIncoming(item.context.account.peerId) ? item.theme.chat.message.incoming.linkHighlightColor : item.theme.chat.message.outgoing.linkHighlightColor) self.linkHighlightingNode = linkHighlightingNode - self.insertSubnode(linkHighlightingNode, belowSubnode: self.linkNode) + self.offsetContainerNode.insertSubnode(linkHighlightingNode, belowSubnode: self.linkNode) } linkHighlightingNode.frame = self.linkNode.frame.offsetBy(dx: 0.0, dy: 0.0) linkHighlightingNode.updateRects(rects.map { $0.insetBy(dx: -1.0, dy: -1.0) }) @@ -610,10 +688,4 @@ final class ListMessageSnippetItemNode: ListMessageNode { } } } - - override func longTapped() { - if let item = self.item { - item.controllerInteraction.openMessageContextMenu(item.message, false, self, self.bounds, nil) - } - } } diff --git a/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoGroupsInCommonPaneNode.swift b/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoGroupsInCommonPaneNode.swift index c0408f0821..79489ea9a3 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoGroupsInCommonPaneNode.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoGroupsInCommonPaneNode.swift @@ -77,6 +77,8 @@ final class PeerInfoGroupsInCommonPaneNode: ASDisplayNode, PeerInfoPaneNode { return self.ready.get() } + let shouldReceiveExpandProgressUpdates: Bool = false + private var disposable: Disposable? init(context: AccountContext, peerId: PeerId, chatControllerInteraction: ChatControllerInteraction, openPeerContextAction: @escaping (Peer, ASDisplayNode, ContextGesture?) -> Void, groupsInCommonContext: GroupsInCommonContext) { @@ -127,7 +129,7 @@ final class PeerInfoGroupsInCommonPaneNode: ASDisplayNode, PeerInfoPaneNode { } } - func update(size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, presentationData: PresentationData, synchronous: Bool, transition: ContainedViewLayoutTransition) { + func update(size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, expandProgress: CGFloat, presentationData: PresentationData, synchronous: Bool, transition: ContainedViewLayoutTransition) { let isFirstLayout = self.currentParams == nil self.currentParams = (size, isScrollingLockedAtTop, presentationData) diff --git a/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoListPaneNode.swift b/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoListPaneNode.swift index 2a2e4d2a76..b4dab234ff 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoListPaneNode.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoListPaneNode.swift @@ -5,10 +5,27 @@ import SyncCore import SwiftSignalKit import Postbox import TelegramPresentationData +import PresentationDataUtils import AccountContext import ContextUI import PhotoResources import TelegramUIPreferences +import UniversalMediaPlayer +import TelegramBaseController +import OverlayStatusController + +private final class PassthroughContainerNode: ASDisplayNode { + override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { + if let subnodes = self.subnodes { + for subnode in subnodes { + if let result = subnode.view.hitTest(self.view.convert(point, to: subnode.view), with: event) { + return result + } + } + } + return nil + } +} final class PeerInfoListPaneNode: ASDisplayNode, PeerInfoPaneNode { private let context: AccountContext @@ -17,7 +34,7 @@ final class PeerInfoListPaneNode: ASDisplayNode, PeerInfoPaneNode { private let listNode: ChatHistoryListNode - private var currentParams: (size: CGSize, isScrollingLockedAtTop: Bool, presentationData: PresentationData)? + private var currentParams: (size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, expandProgress: CGFloat, presentationData: PresentationData)? private let ready = Promise() private var didSetReady: Bool = false @@ -25,6 +42,8 @@ final class PeerInfoListPaneNode: ASDisplayNode, PeerInfoPaneNode { return self.ready.get() } + let shouldReceiveExpandProgressUpdates: Bool + private let selectedMessagesPromise = Promise?>(nil) private var selectedMessages: Set? { didSet { @@ -35,6 +54,13 @@ final class PeerInfoListPaneNode: ASDisplayNode, PeerInfoPaneNode { } private var hiddenMediaDisposable: Disposable? + private var mediaStatusDisposable: Disposable? + private var playlistPreloadDisposable: Disposable? + + private var playlistStateAndType: (SharedMediaPlaylistItem, SharedMediaPlaylistItem?, SharedMediaPlaylistItem?, MusicPlaybackSettingsOrder, MediaManagerPlayerType, Account)? + private var mediaAccessoryPanelContainer: PassthroughContainerNode + private var mediaAccessoryPanel: (MediaNavigationAccessoryPanel, MediaManagerPlayerType)? + private var dismissingPanel: ASDisplayNode? init(context: AccountContext, chatControllerInteraction: ChatControllerInteraction, peerId: PeerId, tagMask: MessageTags) { self.context = context @@ -45,19 +71,82 @@ final class PeerInfoListPaneNode: ASDisplayNode, PeerInfoPaneNode { self.selectedMessagesPromise.set(.single(self.selectedMessages)) self.listNode = ChatHistoryListNode(context: context, chatLocation: .peer(peerId), tagMask: tagMask, subject: nil, controllerInteraction: chatControllerInteraction, selectedMessages: self.selectedMessagesPromise.get(), mode: .list(search: false, reversed: false, displayHeaders: .allButLast)) + self.listNode.defaultToSynchronousTransactionWhileScrolling = true + + if tagMask == .music { + self.shouldReceiveExpandProgressUpdates = true + } else { + self.shouldReceiveExpandProgressUpdates = false + } + + self.mediaAccessoryPanelContainer = PassthroughContainerNode() + self.mediaAccessoryPanelContainer.clipsToBounds = true super.init() self.listNode.preloadPages = true self.addSubnode(self.listNode) + self.addSubnode(self.mediaAccessoryPanelContainer) self.ready.set(self.listNode.historyState.get() |> take(1) |> map { _ -> Bool in true }) + + if tagMask == .music || tagMask == .voiceOrInstantVideo { + self.mediaStatusDisposable = (context.sharedContext.mediaManager.globalMediaPlayerState + |> mapToSignal { playlistStateAndType -> Signal<(Account, SharedMediaPlayerItemPlaybackState, MediaManagerPlayerType)?, NoError> in + if let (account, state, type) = playlistStateAndType { + switch state { + case let .state(state): + if let playlistId = state.playlistId as? PeerMessagesMediaPlaylistId, case .peer(peerId) = playlistId { + switch type { + case .voice: + if tagMask != .voiceOrInstantVideo { + return .single(nil) |> delay(0.2, queue: .mainQueue()) + } + case .music: + if tagMask != .music { + return .single(nil) |> delay(0.2, queue: .mainQueue()) + } + } + return .single((account, state, type)) + } else { + return .single(nil) |> delay(0.2, queue: .mainQueue()) + } + case .loading: + return .single(nil) |> delay(0.2, queue: .mainQueue()) + } + } else { + return .single(nil) + } + } + |> deliverOnMainQueue).start(next: { [weak self] playlistStateAndType in + guard let strongSelf = self else { + return + } + if !arePlaylistItemsEqual(strongSelf.playlistStateAndType?.0, playlistStateAndType?.1.item) || + !arePlaylistItemsEqual(strongSelf.playlistStateAndType?.1, playlistStateAndType?.1.previousItem) || + !arePlaylistItemsEqual(strongSelf.playlistStateAndType?.2, playlistStateAndType?.1.nextItem) || + strongSelf.playlistStateAndType?.3 != playlistStateAndType?.1.order || strongSelf.playlistStateAndType?.4 != playlistStateAndType?.2 { + + if let playlistStateAndType = playlistStateAndType { + strongSelf.playlistStateAndType = (playlistStateAndType.1.item, playlistStateAndType.1.previousItem, playlistStateAndType.1.nextItem, playlistStateAndType.1.order, playlistStateAndType.2, playlistStateAndType.0) + } else { + strongSelf.playlistStateAndType = nil + } + + if let (size, sideInset, bottomInset, visibleHeight, isScrollingLockedAtTop, expandProgress, presentationData) = strongSelf.currentParams { + strongSelf.update(size: size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, isScrollingLockedAtTop: isScrollingLockedAtTop, expandProgress: expandProgress, presentationData: presentationData, synchronous: true, transition: .animated(duration: 0.4, curve: .spring)) + } + } + }) + } } deinit { self.hiddenMediaDisposable?.dispose() + self.mediaStatusDisposable?.dispose() + self.playlistPreloadDisposable?.dispose() } func scrollToTop() -> Bool { @@ -71,12 +160,211 @@ final class PeerInfoListPaneNode: ASDisplayNode, PeerInfoPaneNode { } } - func update(size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, presentationData: PresentationData, synchronous: Bool, transition: ContainedViewLayoutTransition) { - self.currentParams = (size, isScrollingLockedAtTop, presentationData) + func update(size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, expandProgress: CGFloat, presentationData: PresentationData, synchronous: Bool, transition: ContainedViewLayoutTransition) { + self.currentParams = (size, sideInset, bottomInset, visibleHeight, isScrollingLockedAtTop, expandProgress, presentationData) + + var topPanelHeight: CGFloat = 0.0 + if let (item, previousItem, nextItem, order, type, _) = self.playlistStateAndType { + let panelHeight = MediaNavigationAccessoryHeaderNode.minimizedHeight + topPanelHeight = floor(panelHeight * expandProgress) + let panelFrame = CGRect(origin: CGPoint(x: 0.0, y: topPanelHeight - panelHeight), size: CGSize(width: size.width, height: panelHeight)) + if let (mediaAccessoryPanel, mediaType) = self.mediaAccessoryPanel, mediaType == type { + transition.updateFrame(layer: mediaAccessoryPanel.layer, frame: panelFrame) + mediaAccessoryPanel.updateLayout(size: panelFrame.size, leftInset: sideInset, rightInset: sideInset, transition: transition) + switch order { + case .regular: + mediaAccessoryPanel.containerNode.headerNode.playbackItems = (item, previousItem, nextItem) + case .reversed: + mediaAccessoryPanel.containerNode.headerNode.playbackItems = (item, nextItem, previousItem) + case .random: + mediaAccessoryPanel.containerNode.headerNode.playbackItems = (item, nil, nil) + } + let delayedStatus = self.context.sharedContext.mediaManager.globalMediaPlayerState + |> mapToSignal { value -> Signal<(Account, SharedMediaPlayerItemPlaybackStateOrLoading, MediaManagerPlayerType)?, NoError> in + guard let value = value else { + return .single(nil) + } + switch value.1 { + case .state: + return .single(value) + case .loading: + return .single(value) |> delay(0.1, queue: .mainQueue()) + } + } + + mediaAccessoryPanel.containerNode.headerNode.playbackStatus = delayedStatus + |> map { state -> MediaPlayerStatus in + if let stateOrLoading = state?.1, case let .state(state) = stateOrLoading { + return state.status + } else { + return MediaPlayerStatus(generationTimestamp: 0.0, duration: 0.0, dimensions: CGSize(), timestamp: 0.0, baseRate: 1.0, seekId: 0, status: .paused, soundEnabled: true) + } + } + } else { + if let (mediaAccessoryPanel, _) = self.mediaAccessoryPanel { + self.mediaAccessoryPanel = nil + self.dismissingPanel = mediaAccessoryPanel + mediaAccessoryPanel.animateOut(transition: transition, completion: { [weak self, weak mediaAccessoryPanel] in + mediaAccessoryPanel?.removeFromSupernode() + if let strongSelf = self, strongSelf.dismissingPanel === mediaAccessoryPanel { + strongSelf.dismissingPanel = nil + } + }) + } + + let mediaAccessoryPanel = MediaNavigationAccessoryPanel(context: self.context) + mediaAccessoryPanel.containerNode.headerNode.displayScrubber = type != .voice + mediaAccessoryPanel.close = { [weak self] in + if let strongSelf = self, let (_, _, _, _, type, _) = strongSelf.playlistStateAndType { + strongSelf.context.sharedContext.mediaManager.setPlaylist(nil, type: type, control: SharedMediaPlayerControlAction.playback(.pause)) + } + } + mediaAccessoryPanel.toggleRate = { + [weak self] in + guard let strongSelf = self else { + return + } + let _ = (strongSelf.context.sharedContext.accountManager.transaction { transaction -> AudioPlaybackRate in + let settings = transaction.getSharedData(ApplicationSpecificSharedDataKeys.musicPlaybackSettings) as? MusicPlaybackSettings ?? MusicPlaybackSettings.defaultSettings + + let nextRate: AudioPlaybackRate + switch settings.voicePlaybackRate { + case .x1: + nextRate = .x2 + case .x2: + nextRate = .x1 + } + transaction.updateSharedData(ApplicationSpecificSharedDataKeys.musicPlaybackSettings, { _ in + return settings.withUpdatedVoicePlaybackRate(nextRate) + }) + return nextRate + } + |> deliverOnMainQueue).start(next: { baseRate in + guard let strongSelf = self, let (_, _, _, _, type, _) = strongSelf.playlistStateAndType else { + return + } + strongSelf.context.sharedContext.mediaManager.playlistControl(.setBaseRate(baseRate), type: type) + }) + } + mediaAccessoryPanel.togglePlayPause = { [weak self] in + if let strongSelf = self, let (_, _, _, _, type, _) = strongSelf.playlistStateAndType { + strongSelf.context.sharedContext.mediaManager.playlistControl(.playback(.togglePlayPause), type: type) + } + } + mediaAccessoryPanel.playPrevious = { [weak self] in + if let strongSelf = self, let (_, _, _, _, type, _) = strongSelf.playlistStateAndType { + strongSelf.context.sharedContext.mediaManager.playlistControl(.next, type: type) + } + } + mediaAccessoryPanel.playNext = { [weak self] in + if let strongSelf = self, let (_, _, _, _, type, _) = strongSelf.playlistStateAndType { + strongSelf.context.sharedContext.mediaManager.playlistControl(.previous, type: type) + } + } + mediaAccessoryPanel.tapAction = { [weak self] in + guard let strongSelf = self, let _ = strongSelf.chatControllerInteraction.navigationController(), let (state, _, _, order, type, account) = strongSelf.playlistStateAndType else { + return + } + if let id = state.id as? PeerMessagesMediaPlaylistItemId { + if type == .music { + let signal = strongSelf.context.sharedContext.messageFromPreloadedChatHistoryViewForLocation(id: id.messageId, location: ChatHistoryLocationInput(content: .InitialSearch(location: .id(id.messageId), count: 60), id: 0), account: account, chatLocation: .peer(id.messageId.peerId), tagMask: MessageTags.music) + + var cancelImpl: (() -> Void)? + let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 } + let progressSignal = Signal { subscriber in + let controller = OverlayStatusController(theme: presentationData.theme, type: .loading(cancelled: { + cancelImpl?() + })) + self?.chatControllerInteraction.presentController(controller, nil) + return ActionDisposable { [weak controller] in + Queue.mainQueue().async() { + controller?.dismiss() + } + } + } + |> runOn(Queue.mainQueue()) + |> delay(0.15, queue: Queue.mainQueue()) + let progressDisposable = MetaDisposable() + var progressStarted = false + strongSelf.playlistPreloadDisposable?.dispose() + strongSelf.playlistPreloadDisposable = (signal + |> afterDisposed { + Queue.mainQueue().async { + progressDisposable.dispose() + } + } + |> deliverOnMainQueue).start(next: { index in + guard let strongSelf = self else { + return + } + if let _ = index.0 { + let controllerContext: AccountContext + if account.id == strongSelf.context.account.id { + controllerContext = strongSelf.context + } else { + controllerContext = strongSelf.context.sharedContext.makeTempAccountContext(account: account) + } + let controller = strongSelf.context.sharedContext.makeOverlayAudioPlayerController(context: controllerContext, peerId: id.messageId.peerId, type: type, initialMessageId: id.messageId, initialOrder: order, parentNavigationController: strongSelf.chatControllerInteraction.navigationController()) + strongSelf.view.window?.endEditing(true) + strongSelf.chatControllerInteraction.presentController(controller, nil) + } else if index.1 { + if !progressStarted { + progressStarted = true + progressDisposable.set(progressSignal.start()) + } + } + }, completed: { + }) + cancelImpl = { + self?.playlistPreloadDisposable?.dispose() + } + } else { + strongSelf.context.sharedContext.navigateToChat(accountId: strongSelf.context.account.id, peerId: id.messageId.peerId, messageId: id.messageId) + } + } + } + mediaAccessoryPanel.frame = panelFrame + if let dismissingPanel = self.dismissingPanel { + self.mediaAccessoryPanelContainer.insertSubnode(mediaAccessoryPanel, aboveSubnode: dismissingPanel) + } else { + self.mediaAccessoryPanelContainer.addSubnode(mediaAccessoryPanel) + } + self.mediaAccessoryPanel = (mediaAccessoryPanel, type) + mediaAccessoryPanel.updateLayout(size: panelFrame.size, leftInset: sideInset, rightInset: sideInset, transition: .immediate) + switch order { + case .regular: + mediaAccessoryPanel.containerNode.headerNode.playbackItems = (item, previousItem, nextItem) + case .reversed: + mediaAccessoryPanel.containerNode.headerNode.playbackItems = (item, nextItem, previousItem) + case .random: + mediaAccessoryPanel.containerNode.headerNode.playbackItems = (item, nil, nil) + } + mediaAccessoryPanel.containerNode.headerNode.playbackStatus = self.context.sharedContext.mediaManager.globalMediaPlayerState + |> map { state -> MediaPlayerStatus in + if let stateOrLoading = state?.1, case let .state(state) = stateOrLoading { + return state.status + } else { + return MediaPlayerStatus(generationTimestamp: 0.0, duration: 0.0, dimensions: CGSize(), timestamp: 0.0, baseRate: 1.0, seekId: 0, status: .paused, soundEnabled: true) + } + } + mediaAccessoryPanel.animateIn(transition: transition) + } + } else if let (mediaAccessoryPanel, _) = self.mediaAccessoryPanel { + self.mediaAccessoryPanel = nil + self.dismissingPanel = mediaAccessoryPanel + mediaAccessoryPanel.animateOut(transition: transition, completion: { [weak self, weak mediaAccessoryPanel] in + mediaAccessoryPanel?.removeFromSupernode() + if let strongSelf = self, strongSelf.dismissingPanel === mediaAccessoryPanel { + strongSelf.dismissingPanel = nil + } + }) + } + + transition.updateFrame(node: self.mediaAccessoryPanelContainer, frame: CGRect(origin: CGPoint(), size: CGSize(width: size.width, height: MediaNavigationAccessoryHeaderNode.minimizedHeight))) transition.updateFrame(node: self.listNode, frame: CGRect(origin: CGPoint(), size: size)) let (duration, curve) = listViewAnimationDurationAndCurve(transition: transition) - self.listNode.updateLayout(transition: transition, updateSizeAndInsets: ListViewUpdateSizeAndInsets(size: size, insets: UIEdgeInsets(top: 0.0, left: sideInset, bottom: bottomInset, right: sideInset), duration: duration, curve: curve)) + self.listNode.updateLayout(transition: transition, updateSizeAndInsets: ListViewUpdateSizeAndInsets(size: size, insets: UIEdgeInsets(top: topPanelHeight, left: sideInset, bottom: bottomInset, right: sideInset), duration: duration, curve: curve)) if isScrollingLockedAtTop { switch self.listNode.visibleContentOffset() { case .known(0.0), .none: diff --git a/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoMembersPane.swift b/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoMembersPane.swift index 4b0cfc6748..c84ffdf10a 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoMembersPane.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoMembersPane.swift @@ -118,6 +118,8 @@ final class PeerInfoMembersPaneNode: ASDisplayNode, PeerInfoPaneNode { return self.ready.get() } + let shouldReceiveExpandProgressUpdates: Bool = false + private var disposable: Disposable? init(context: AccountContext, peerId: PeerId, membersContext: PeerInfoMembersContext, action: @escaping (PeerInfoMember, PeerMembersListAction) -> Void) { @@ -170,7 +172,7 @@ final class PeerInfoMembersPaneNode: ASDisplayNode, PeerInfoPaneNode { } } - func update(size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, presentationData: PresentationData, synchronous: Bool, transition: ContainedViewLayoutTransition) { + func update(size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, expandProgress: CGFloat, presentationData: PresentationData, synchronous: Bool, transition: ContainedViewLayoutTransition) { let isFirstLayout = self.currentParams == nil self.currentParams = (size, isScrollingLockedAtTop, presentationData) diff --git a/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoVisualMediaPaneNode.swift b/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoVisualMediaPaneNode.swift index ac2f72c1d6..fe94282e37 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoVisualMediaPaneNode.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoVisualMediaPaneNode.swift @@ -449,7 +449,7 @@ final class PeerInfoVisualMediaPaneNode: ASDisplayNode, PeerInfoPaneNode, UIScro return self._itemInteraction! } - private var currentParams: (size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, presentationData: PresentationData)? + private var currentParams: (size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, expandProgress: CGFloat, presentationData: PresentationData)? private let ready = Promise() private var didSetReady: Bool = false @@ -457,6 +457,8 @@ final class PeerInfoVisualMediaPaneNode: ASDisplayNode, PeerInfoPaneNode, UIScro return self.ready.get() } + let shouldReceiveExpandProgressUpdates: Bool = false + private let listDisposable = MetaDisposable() private var hiddenMediaDisposable: Disposable? private var mediaItems: [VisualMediaItem] = [] @@ -482,7 +484,7 @@ final class PeerInfoVisualMediaPaneNode: ASDisplayNode, PeerInfoPaneNode, UIScro self._itemInteraction = VisualMediaItemInteraction( openMessage: { [weak self] message in - self?.chatControllerInteraction.openMessage(message, .default) + let _ = self?.chatControllerInteraction.openMessage(message, .default) }, openMessageContextActions: { [weak self] message, sourceNode, sourceRect, gesture in self?.chatControllerInteraction.openMessageContextActions(message, sourceNode, sourceRect, gesture) @@ -559,8 +561,8 @@ final class PeerInfoVisualMediaPaneNode: ASDisplayNode, PeerInfoPaneNode, UIScro let wasFirstHistoryView = self.isFirstHistoryView self.isFirstHistoryView = false - if let (size, sideInset, bottomInset, visibleHeight, isScrollingLockedAtTop, presentationData) = self.currentParams { - self.update(size: size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, isScrollingLockedAtTop: isScrollingLockedAtTop, presentationData: presentationData, synchronous: wasFirstHistoryView, transition: .immediate) + if let (size, sideInset, bottomInset, visibleHeight, isScrollingLockedAtTop, expandProgress, presentationData) = self.currentParams { + self.update(size: size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, isScrollingLockedAtTop: isScrollingLockedAtTop, expandProgress: expandProgress, presentationData: presentationData, synchronous: wasFirstHistoryView, transition: .immediate) if !self.didSetReady { self.didSetReady = true self.ready.set(.single(true)) @@ -666,8 +668,8 @@ final class PeerInfoVisualMediaPaneNode: ASDisplayNode, PeerInfoPaneNode, UIScro } } - func update(size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, presentationData: PresentationData, synchronous: Bool, transition: ContainedViewLayoutTransition) { - self.currentParams = (size, sideInset, bottomInset, visibleHeight, isScrollingLockedAtTop, presentationData) + func update(size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, expandProgress: CGFloat, presentationData: PresentationData, synchronous: Bool, transition: ContainedViewLayoutTransition) { + self.currentParams = (size, sideInset, bottomInset, visibleHeight, isScrollingLockedAtTop, expandProgress, presentationData) transition.updateFrame(node: self.scrollNode, frame: CGRect(origin: CGPoint(), size: size)) @@ -704,7 +706,7 @@ final class PeerInfoVisualMediaPaneNode: ASDisplayNode, PeerInfoPaneNode, UIScro } func scrollViewDidScroll(_ scrollView: UIScrollView) { - if let (size, sideInset, bottomInset, visibleHeight, _, presentationData) = self.currentParams { + if let (size, sideInset, bottomInset, visibleHeight, _, _, presentationData) = self.currentParams { self.updateVisibleItems(size: size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, theme: presentationData.theme, strings: presentationData.strings, synchronousLoad: false) if scrollView.contentOffset.y >= scrollView.contentSize.height - scrollView.bounds.height * 2.0, let currentView = self.currentView, currentView.earlierId != nil { diff --git a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoData.swift b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoData.swift index f0f67b96c0..225bbc2f68 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoData.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoData.swift @@ -113,7 +113,7 @@ private func peerInfoAvailableMediaPanes(context: AccountContext, peerId: PeerId (.photoOrVideo, .media), (.file, .files), (.music, .music), - //(.voiceOrInstantVideo, .voice), + (.voiceOrInstantVideo, .voice), (.webPage, .links) ] enum PaneState { diff --git a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoPaneContainerNode.swift b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoPaneContainerNode.swift index 644e098093..f77c723c41 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoPaneContainerNode.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoPaneContainerNode.swift @@ -12,8 +12,9 @@ import ContextUI protocol PeerInfoPaneNode: ASDisplayNode { var isReady: Signal { get } + var shouldReceiveExpandProgressUpdates: Bool { get } - func update(size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, presentationData: PresentationData, synchronous: Bool, transition: ContainedViewLayoutTransition) + func update(size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, expandProgress: CGFloat, presentationData: PresentationData, synchronous: Bool, transition: ContainedViewLayoutTransition) func scrollToTop() -> Bool func transferVelocity(_ velocity: CGFloat) func cancelPreviewGestures() @@ -28,21 +29,21 @@ final class PeerInfoPaneWrapper { let key: PeerInfoPaneKey let node: PeerInfoPaneNode var isAnimatingOut: Bool = false - private var appliedParams: (CGSize, CGFloat, CGFloat, CGFloat, Bool, PresentationData)? + private var appliedParams: (CGSize, CGFloat, CGFloat, CGFloat, Bool, CGFloat, PresentationData)? init(key: PeerInfoPaneKey, node: PeerInfoPaneNode) { self.key = key self.node = node } - func update(size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, presentationData: PresentationData, synchronous: Bool, transition: ContainedViewLayoutTransition) { - if let (currentSize, currentSideInset, currentBottomInset, visibleHeight, currentIsScrollingLockedAtTop, currentPresentationData) = self.appliedParams { - if currentSize == size && currentSideInset == sideInset && currentBottomInset == bottomInset, currentIsScrollingLockedAtTop == isScrollingLockedAtTop && currentPresentationData === presentationData { + func update(size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, expandProgress: CGFloat, presentationData: PresentationData, synchronous: Bool, transition: ContainedViewLayoutTransition) { + if let (currentSize, currentSideInset, currentBottomInset, visibleHeight, currentIsScrollingLockedAtTop, currentExpandProgress, currentPresentationData) = self.appliedParams { + if currentSize == size && currentSideInset == sideInset && currentBottomInset == bottomInset, currentIsScrollingLockedAtTop == isScrollingLockedAtTop && currentExpandProgress == expandProgress && currentPresentationData === presentationData { return } } - self.appliedParams = (size, sideInset, bottomInset, visibleHeight, isScrollingLockedAtTop, presentationData) - self.node.update(size: size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, isScrollingLockedAtTop: isScrollingLockedAtTop, presentationData: presentationData, synchronous: synchronous, transition: transition) + self.appliedParams = (size, sideInset, bottomInset, visibleHeight, isScrollingLockedAtTop, expandProgress, presentationData) + self.node.update(size: size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, isScrollingLockedAtTop: isScrollingLockedAtTop, expandProgress: expandProgress, presentationData: presentationData, synchronous: synchronous, transition: transition) } } @@ -734,14 +735,14 @@ final class PeerInfoPaneContainerNode: ASDisplayNode, UIGestureRecognizerDelegat ) self.pendingPanes[key] = pane pane.pane.node.frame = paneFrame - pane.pane.update(size: paneFrame.size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, isScrollingLockedAtTop: expansionFraction < 1.0 - CGFloat.ulpOfOne, presentationData: presentationData, synchronous: true, transition: .immediate) + pane.pane.update(size: paneFrame.size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, isScrollingLockedAtTop: expansionFraction < 1.0 - CGFloat.ulpOfOne, expandProgress: expansionFraction, presentationData: presentationData, synchronous: true, transition: .immediate) leftScope = true } } for (key, pane) in self.pendingPanes { pane.pane.node.frame = paneFrame - pane.pane.update(size: paneFrame.size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, isScrollingLockedAtTop: expansionFraction < 1.0 - CGFloat.ulpOfOne, presentationData: presentationData, synchronous: self.currentPaneKey == nil, transition: .immediate) + pane.pane.update(size: paneFrame.size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, isScrollingLockedAtTop: expansionFraction < 1.0 - CGFloat.ulpOfOne, expandProgress: expansionFraction, presentationData: presentationData, synchronous: self.currentPaneKey == nil, transition: .immediate) if pane.isReady { self.pendingPanes.removeValue(forKey: key) @@ -819,7 +820,7 @@ final class PeerInfoPaneContainerNode: ASDisplayNode, UIGestureRecognizerDelegat paneCompletion() }) } - pane.update(size: paneFrame.size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, isScrollingLockedAtTop: expansionFraction < 1.0 - CGFloat.ulpOfOne, presentationData: presentationData, synchronous: paneWasAdded, transition: paneTransition) + pane.update(size: paneFrame.size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, isScrollingLockedAtTop: expansionFraction < 1.0 - CGFloat.ulpOfOne, expandProgress: expansionFraction, presentationData: presentationData, synchronous: paneWasAdded, transition: paneTransition) } } @@ -836,7 +837,7 @@ final class PeerInfoPaneContainerNode: ASDisplayNode, UIGestureRecognizerDelegat case .links: title = presentationData.strings.PeerInfo_PaneLinks case .voice: - title = presentationData.strings.PeerInfo_PaneVoice + title = presentationData.strings.PeerInfo_PaneVoiceAndVideo case .music: title = presentationData.strings.PeerInfo_PaneAudio case .groupsInCommon: @@ -850,7 +851,7 @@ final class PeerInfoPaneContainerNode: ASDisplayNode, UIGestureRecognizerDelegat for (_, pane) in self.pendingPanes { let paneTransition: ContainedViewLayoutTransition = .immediate paneTransition.updateFrame(node: pane.pane.node, frame: paneFrame) - pane.pane.update(size: paneFrame.size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, isScrollingLockedAtTop: expansionFraction < 1.0 - CGFloat.ulpOfOne, presentationData: presentationData, synchronous: true, transition: paneTransition) + pane.pane.update(size: paneFrame.size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, isScrollingLockedAtTop: expansionFraction < 1.0 - CGFloat.ulpOfOne, expandProgress: expansionFraction, presentationData: presentationData, synchronous: true, transition: paneTransition) } if !self.didSetIsReady && data != nil { if let currentPaneKey = self.currentPaneKey, let currentPane = self.currentPanes[currentPaneKey] { diff --git a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift index a3ec51e27e..e4c267cc2d 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift @@ -1205,59 +1205,131 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD self?.openPeer(peerId: id, navigation: navigation) } }, openPeerMention: { _ in - }, openMessageContextMenu: { [weak self] message, _, _, _, _ in - guard let strongSelf = self else { + }, openMessageContextMenu: { [weak self] message, _, node, frame, anyRecognizer in + guard let strongSelf = self, let node = node as? ContextExtractedContentContainingNode else { return } let _ = storedMessageFromSearch(account: strongSelf.context.account, message: message).start() + var linkForCopying: String? + var currentSupernode: ASDisplayNode? = node + while true { + if currentSupernode == nil { + break + } else if let currentSupernode = currentSupernode as? ListMessageSnippetItemNode { + linkForCopying = currentSupernode.currentPrimaryUrl + break + } else { + currentSupernode = currentSupernode?.supernode + } + } + + let gesture: ContextGesture? = anyRecognizer as? ContextGesture let _ = (chatAvailableMessageActionsImpl(postbox: strongSelf.context.account.postbox, accountPeerId: strongSelf.context.account.peerId, messageIds: [message.id]) |> deliverOnMainQueue).start(next: { actions in + guard let strongSelf = self else { + return + } - var messageIds = Set() - messageIds.insert(message.id) + var items: [ContextMenuItem] = [] - if let strongSelf = self { - let actionSheet = ActionSheetController(presentationData: strongSelf.presentationData) - var items: [ActionSheetButtonItem] = [] - - items.append(ActionSheetButtonItem(title: strongSelf.presentationData.strings.SharedMedia_ViewInChat, color: .accent, action: { [weak actionSheet] in - actionSheet?.dismissAnimated() + if let linkForCopying = linkForCopying { + items.append(.action(ContextMenuActionItem(text: strongSelf.presentationData.strings.Conversation_ContextMenuCopyLink, icon: { theme in generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Copy"), color: theme.contextMenu.primaryColor) }, action: { c, _ in + c.dismiss(completion: {}) + UIPasteboard.general.string = linkForCopying + }))) + } + + items.append(.action(ContextMenuActionItem(text: strongSelf.presentationData.strings.Conversation_ContextMenuForward, icon: { theme in generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Forward"), color: theme.contextMenu.primaryColor) }, action: { c, _ in + c.dismiss(completion: { + if let strongSelf = self { + strongSelf.forwardMessages(messageIds: Set([message.id])) + } + }) + }))) + items.append(.action(ContextMenuActionItem(text: strongSelf.presentationData.strings.SharedMedia_ViewInChat, icon: { theme in generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/GoToMessage"), color: theme.contextMenu.primaryColor) }, action: { c, _ in + c.dismiss(completion: { if let strongSelf = self, let navigationController = strongSelf.controller?.navigationController as? NavigationController { strongSelf.context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: strongSelf.context, chatLocation: .peer(strongSelf.peerId), subject: .message(message.id))) } - })) - items.append(ActionSheetButtonItem(title: strongSelf.presentationData.strings.Conversation_ContextMenuForward, color: .accent, action: { [weak actionSheet] in - actionSheet?.dismissAnimated() - if let strongSelf = self { - strongSelf.forwardMessages(messageIds: messageIds) - } - })) - if actions.options.contains(.deleteLocally) || actions.options.contains(.deleteGlobally) { - items.append( ActionSheetButtonItem(title: strongSelf.presentationData.strings.Conversation_ContextMenuDelete, color: .destructive, action: { [weak actionSheet] in - actionSheet?.dismissAnimated() - if let strongSelf = self { - strongSelf.deleteMessages(messageIds: Set(messageIds)) + }) + }))) + if actions.options.contains(.deleteLocally) || actions.options.contains(.deleteGlobally) { + let context = strongSelf.context + let presentationData = strongSelf.presentationData + let peerId = strongSelf.peerId + items.append(.action(ContextMenuActionItem(text: strongSelf.presentationData.strings.Conversation_ContextMenuDelete, textColor: .destructive, icon: { theme in generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Delete"), color: theme.contextMenu.destructiveColor) }, action: { c, _ in + c.setItems(context.account.postbox.transaction { transaction -> [ContextMenuItem] in + var items: [ContextMenuItem] = [] + let messageIds = [message.id] + + if let peer = transaction.getPeer(message.id.peerId) { + var personalPeerName: String? + var isChannel = false + if let user = peer as? TelegramUser { + personalPeerName = user.compactDisplayTitle + } else if let channel = peer as? TelegramChannel, case .broadcast = channel.info { + isChannel = true + } + + if actions.options.contains(.deleteGlobally) { + let globalTitle: String + if isChannel { + globalTitle = presentationData.strings.Conversation_DeleteMessagesForMe + } else if let personalPeerName = personalPeerName { + globalTitle = presentationData.strings.Conversation_DeleteMessagesFor(personalPeerName).0 + } else { + globalTitle = presentationData.strings.Conversation_DeleteMessagesForEveryone + } + items.append(.action(ContextMenuActionItem(text: globalTitle, textColor: .destructive, icon: { _ in nil }, action: { c, f in + c.dismiss(completion: { + if let strongSelf = self { + strongSelf.headerNode.navigationButtonContainer.performAction?(.selectionDone) + let _ = deleteMessagesInteractively(account: strongSelf.context.account, messageIds: Array(messageIds), type: .forEveryone).start() + } + }) + }))) + } + + if actions.options.contains(.deleteLocally) { + var localOptionText = presentationData.strings.Conversation_DeleteMessagesForMe + if context.account.peerId == peerId { + if messageIds.count == 1 { + localOptionText = presentationData.strings.Conversation_Moderate_Delete + } else { + localOptionText = presentationData.strings.Conversation_DeleteManyMessages + } + } + items.append(.action(ContextMenuActionItem(text: localOptionText, textColor: .destructive, icon: { _ in nil }, action: { c, f in + c.dismiss(completion: { + if let strongSelf = self { + strongSelf.headerNode.navigationButtonContainer.performAction?(.selectionDone) + let _ = deleteMessagesInteractively(account: strongSelf.context.account, messageIds: Array(messageIds), type: .forLocalPeer).start() + } + }) + }))) + } } - })) - } - if strongSelf.searchDisplayController == nil { - items.append(ActionSheetButtonItem(title: strongSelf.presentationData.strings.Conversation_ContextMenuMore, color: .accent, action: { [weak actionSheet] in - actionSheet?.dismissAnimated() + + return items + }) + }))) + } + if strongSelf.searchDisplayController == nil { + items.append(.separator) + + items.append(.action(ContextMenuActionItem(text: strongSelf.presentationData.strings.Conversation_ContextMenuMore, icon: { theme in generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/More"), color: theme.contextMenu.primaryColor) }, action: { c, _ in + c.dismiss(completion: { if let strongSelf = self { strongSelf.chatInterfaceInteraction.toggleMessagesSelection([message.id], true) strongSelf.expandTabs() } - })) - } - actionSheet.setItemGroups([ActionSheetItemGroup(items: items), ActionSheetItemGroup(items: [ - ActionSheetButtonItem(title: strongSelf.presentationData.strings.Common_Cancel, color: .accent, font: .bold, action: { [weak actionSheet] in - actionSheet?.dismissAnimated() }) - ])]) - strongSelf.view.endEditing(true) - strongSelf.controller?.present(actionSheet, in: .window(.root)) + }))) } + + let controller = ContextController(account: strongSelf.context.account, presentationData: strongSelf.presentationData, source: .extracted(MessageContextExtractedContentSource(sourceNode: node)), items: .single(items), reactionItems: [], recognizer: nil, gesture: gesture) + strongSelf.controller?.window?.presentInGlobalOverlay(controller) }) }, openMessageContextActions: { [weak self] message, node, rect, gesture in guard let strongSelf = self else { @@ -1446,9 +1518,10 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD }, updateInputState: { _ in }, updateInputMode: { _ in }, openMessageShareMenu: { _ in - }, presentController: { _, _ in - }, navigationController: { - return nil + }, presentController: { [weak self] c, a in + self?.controller?.present(c, in: .window(.root), with: a) + }, navigationController: { [weak self] in + return self?.controller?.navigationController as? NavigationController }, chatControllerNode: { return nil }, reactionContainerNode: { @@ -4537,3 +4610,22 @@ private final class ContextControllerContentSourceImpl: ContextControllerContent self.controller.didAppearInContextPreview() } } + +private final class MessageContextExtractedContentSource: ContextExtractedContentSource { + let keepInPlace: Bool = false + let ignoreContentTouches: Bool = true + + private let sourceNode: ContextExtractedContentContainingNode + + init(sourceNode: ContextExtractedContentContainingNode) { + self.sourceNode = sourceNode + } + + func takeView() -> ContextControllerTakeViewInfo? { + return ContextControllerTakeViewInfo(contentContainingNode: self.sourceNode, contentAreaInScreenSpace: UIScreen.main.bounds) + } + + func putBack() -> ContextControllerPutBackViewInfo? { + return ContextControllerPutBackViewInfo(contentAreaInScreenSpace: UIScreen.main.bounds) + } +}