diff --git a/Makefile b/Makefile
index 3b8bcbc4b8..efcd86c157 100644
--- a/Makefile
+++ b/Makefile
@@ -168,6 +168,28 @@ package_arm64:
PACKAGE_BUNDLE_ID="${BUNDLE_ID}" \
sh package_app.sh iphoneos-arm64 $(BUCK) $(BUCK_OPTIONS) ${BUCK_RELEASE_OPTIONS}
+package_debug_arm64:
+ PACKAGE_DEVELOPMENT_TEAM="${DEVELOPMENT_TEAM}" \
+ PACKAGE_CODE_SIGN_IDENTITY="${DEVELOPMENT_CODE_SIGN_IDENTITY}" \
+ PACKAGE_PROVISIONING_PROFILE_APP="${DEVELOPMENT_PROVISIONING_PROFILE_APP}" \
+ PACKAGE_ENTITLEMENTS_APP="${ENTITLEMENTS_APP}" \
+ PACKAGE_PROVISIONING_PROFILE_EXTENSION_Share="${DEVELOPMENT_PROVISIONING_PROFILE_EXTENSION_SHARE}" \
+ PACKAGE_ENTITLEMENTS_EXTENSION_Share="${ENTITLEMENTS_EXTENSION_SHARE}" \
+ PACKAGE_PROVISIONING_PROFILE_EXTENSION_Widget="${DEVELOPMENT_PROVISIONING_PROFILE_EXTENSION_WIDGET}" \
+ PACKAGE_ENTITLEMENTS_EXTENSION_Widget="${ENTITLEMENTS_EXTENSION_WIDGET}" \
+ PACKAGE_PROVISIONING_PROFILE_EXTENSION_NotificationService="${DEVELOPMENT_PROVISIONING_PROFILE_EXTENSION_NOTIFICATIONSERVICE}" \
+ PACKAGE_ENTITLEMENTS_EXTENSION_NotificationService="${ENTITLEMENTS_EXTENSION_NOTIFICATIONSERVICE}" \
+ PACKAGE_PROVISIONING_PROFILE_EXTENSION_NotificationContent="${DEVELOPMENT_PROVISIONING_PROFILE_EXTENSION_NOTIFICATIONCONTENT}" \
+ PACKAGE_ENTITLEMENTS_EXTENSION_NotificationContent="${ENTITLEMENTS_EXTENSION_NOTIFICATIONCONTENT}" \
+ PACKAGE_PROVISIONING_PROFILE_EXTENSION_Intents="${DEVELOPMENT_PROVISIONING_PROFILE_EXTENSION_INTENTS}" \
+ PACKAGE_ENTITLEMENTS_EXTENSION_Intents="${ENTITLEMENTS_EXTENSION_INTENTS}" \
+ PACKAGE_PROVISIONING_PROFILE_WATCH_APP="${DEVELOPMENT_PROVISIONING_PROFILE_WATCH_APP}" \
+ PACKAGE_PROVISIONING_PROFILE_WATCH_EXTENSION="${DISTRIBUTION_PROVISIONING_PROFILE_WATCH_EXTENSION}" \
+ PACKAGE_BUNDLE_ID="${BUNDLE_ID}" \
+ ENABLE_GET_TASK_ALLOW=1 \
+ CODESIGNING_PROFILES_VARIANT="development" \
+ sh package_app.sh iphoneos-arm64 $(BUCK) $(BUCK_OPTIONS) ${BUCK_RELEASE_OPTIONS}
+
package:
PACKAGE_DEVELOPMENT_TEAM="${DEVELOPMENT_TEAM}" \
PACKAGE_CODE_SIGN_IDENTITY="${DISTRIBUTION_CODE_SIGN_IDENTITY}" \
@@ -192,7 +214,7 @@ app: build package
app_arm64: build_arm64 package_arm64
-app_debug_arm64: build_debug_arm64 package_arm64
+app_debug_arm64: build_debug_arm64 package_debug_arm64
build_buckdebug: check_env
BUCK_DEBUG_MODE=1 $(BUCK) build \
diff --git a/Telegram-iOS/Info.plist b/Telegram-iOS/Info.plist
index 06a48d5776..d8ada8d0f8 100644
--- a/Telegram-iOS/Info.plist
+++ b/Telegram-iOS/Info.plist
@@ -302,6 +302,11 @@
remote-notification
voip
+ UIDeviceFamily
+
+ 1
+ 2
+
UIFileSharingEnabled
UILaunchStoryboardName
@@ -357,10 +362,5 @@
- UIDeviceFamily
-
- 1
- 2
-
diff --git a/Telegram-iOS/en.lproj/Localizable.strings b/Telegram-iOS/en.lproj/Localizable.strings
index daa13cd6e1..07e6592c5c 100644
--- a/Telegram-iOS/en.lproj/Localizable.strings
+++ b/Telegram-iOS/en.lproj/Localizable.strings
@@ -4780,6 +4780,7 @@ Any member of this group will be able to see messages in the channel.";
"Wallet.Info.Send" = "Send";
"Wallet.Info.RefreshErrorTitle" = "An Error Occurred";
"Wallet.Info.RefreshErrorText" = "The wallet state can not be retrieved at this time. Please try again later.";
+"Wallet.Info.RefreshErrorNetworkText" = "The wallet state can not be retrieved at this time. Please try again later.";
"Wallet.Info.UnknownTransaction" = "Empty Transaction";
"Wallet.Info.TransactionTo" = "to";
"Wallet.Info.TransactionFrom" = "from";
@@ -4880,12 +4881,15 @@ Any member of this group will be able to see messages in the channel.";
"Wallet.Words.NotDoneText" = "You didn't have enough time to write those words down.";
"Wallet.Words.NotDoneOk" = "OK, Sorry";
"Wallet.Words.NotDoneResponse" = "Apologies Accepted";
+"Wallet.Send.NetworkError" = "Network Error";
+"Wallet.Send.ErrorNotEnoughFunds" = "Not Enough Funds";
"Wallet.Send.ErrorInvalidAddress" = "Invalid wallet address. Please correct and try again.";
"Wallet.Send.ErrorDecryptionFailed" = "Please make sure that your device has a passcode set in iOS Settings and try again.";
+"Wallet.Send.UninitializedTitle" = "Warning";
+"Wallet.Send.UninitializedText" = "This address belongs to an empty wallet. Are you sure you want to transfer grams to it?";
"Wallet.Send.SendAnyway" = "Send Anyway";
"Wallet.Receive.CreateInvoice" = "Create Invoice";
"Wallet.Receive.CreateInvoiceInfo" = "You can specify amount and purpose of the payment to save the sender some time.";
-"Wallet.Send.SendingToYourself" = "Sending Grams from a wallet to the same wallet doesn't make sense, you will simply waste a portion of the value on blockchain fees.";
"Conversation.WalletRequiredTitle" = "Gram Wallet Required";
"Conversation.WalletRequiredText" = "This link can be used to send money on the TON Blockchain. To do this, you need to set up a Gram wallet first.";
"Conversation.WalletRequiredNotNow" = "Not Now";
diff --git a/package_app.sh b/package_app.sh
index 692198b722..c6b602e9d9 100644
--- a/package_app.sh
+++ b/package_app.sh
@@ -184,6 +184,12 @@ for ITEM in $APP_ITEMS_WITH_PROVISIONING_PROFILE; do
fi
done
+ if [ "$ENABLE_GET_TASK_ALLOW" == "1" ]; then
+ KEY="com.apple.security.get-task-allow"
+ PLUTIL_KEY=$(echo "$KEY" | sed 's/\./\\\./g')
+ plutil -insert "$PLUTIL_KEY" -xml "" "$PROFILE_ENTITLEMENTS_PATH"
+ fi
+
ENTITLEMENTS_VAR=PACKAGE_ENTITLEMENTS_$ITEM
if [ ! -z "${!ENTITLEMENTS_VAR}" ]; then
if [ ! -f "${!ENTITLEMENTS_VAR}" ]; then
diff --git a/submodules/BuildConfig/Sources/BuildConfig.h b/submodules/BuildConfig/Sources/BuildConfig.h
index 24a5cbe241..b57ccb7bf2 100644
--- a/submodules/BuildConfig/Sources/BuildConfig.h
+++ b/submodules/BuildConfig/Sources/BuildConfig.h
@@ -24,6 +24,6 @@
+ (void)getHardwareEncryptionAvailableWithBaseAppBundleId:(NSString * _Nonnull)baseAppBundleId completion:(void (^)(NSData * _Nullable))completion;
+ (void)encryptApplicationSecret:(NSData * _Nonnull)secret baseAppBundleId:(NSString * _Nonnull)baseAppBundleId completion:(void (^)(NSData * _Nullable, NSData * _Nullable))completion;
-+ (void)decryptApplicationSecret:(NSData * _Nonnull)secret publicKey:(NSData * _Nonnull)publicKey baseAppBundleId:(NSString * _Nonnull)baseAppBundleId completion:(void (^)(NSData * _Nullable))completion;
++ (void)decryptApplicationSecret:(NSData * _Nonnull)secret publicKey:(NSData * _Nonnull)publicKey baseAppBundleId:(NSString * _Nonnull)baseAppBundleId completion:(void (^)(NSData * _Nullable, bool))completion;
@end
diff --git a/submodules/BuildConfig/Sources/BuildConfig.m b/submodules/BuildConfig/Sources/BuildConfig.m
index 7805b19d4d..1472a4e45a 100644
--- a/submodules/BuildConfig/Sources/BuildConfig.m
+++ b/submodules/BuildConfig/Sources/BuildConfig.m
@@ -694,28 +694,29 @@ API_AVAILABLE(ios(10))
});
}
-+ (void)decryptApplicationSecret:(NSData * _Nonnull)secret publicKey:(NSData * _Nonnull)publicKey baseAppBundleId:(NSString * _Nonnull)baseAppBundleId completion:(void (^)(NSData * _Nullable))completion {
++ (void)decryptApplicationSecret:(NSData * _Nonnull)secret publicKey:(NSData * _Nonnull)publicKey baseAppBundleId:(NSString * _Nonnull)baseAppBundleId completion:(void (^)(NSData * _Nullable, bool))completion {
dispatch_async([self encryptionQueue], ^{
LocalPrivateKey *privateKey = [self getApplicationSecretKey:baseAppBundleId isCheckKey:false];
if (privateKey == nil) {
- completion(nil);
+ completion(nil, false);
return;
}
if (privateKey == nil) {
- completion(nil);
+ completion(nil, false);
return;
}
NSData *currentPublicKey = [privateKey getPublicKey];
if (currentPublicKey == nil) {
- completion(nil);
+ completion(nil, false);
return;
}
if (![publicKey isEqualToData:currentPublicKey]) {
- completion(nil);
+ completion(nil, false);
return;
}
- NSData *result = [privateKey decrypt:secret cancelled:nil];
- completion(result);
+ bool cancelled = false;
+ NSData *result = [privateKey decrypt:secret cancelled:&cancelled];
+ completion(result, cancelled);
});
}
diff --git a/submodules/CloudData/Sources/CloudData.swift b/submodules/CloudData/Sources/CloudData.swift
index e98a661241..28a79576ff 100644
--- a/submodules/CloudData/Sources/CloudData.swift
+++ b/submodules/CloudData/Sources/CloudData.swift
@@ -47,33 +47,47 @@ private func fetchRawData(prefix: String) -> Signal {
}
@available(iOS 10.0, *)
-public func cloudDataAdditionalAddressSource(phoneNumber: Signal) -> Signal {
- return phoneNumber
- |> take(1)
- |> mapToSignal { _ -> Signal in
- let phoneNumber: String? = "7950"
- var prefix = ""
- if let phoneNumber = phoneNumber, phoneNumber.count >= 1 {
- prefix = String(phoneNumber[phoneNumber.startIndex ..< phoneNumber.index(after: phoneNumber.startIndex)])
- }
- return fetchRawData(prefix: prefix)
- |> map { data -> MTBackupDatacenterData? in
- if let datacenterData = MTIPDataDecode(data, phoneNumber ?? "") {
- return datacenterData
- } else {
- return nil
+private final class CloudDataPrefixContext {
+ private let prefix: String
+ private let value = Promise()
+
+ private var lastRequestTimestamp: Double?
+
+ init(prefix: String) {
+ self.prefix = prefix
+ }
+
+ private func fetch() {
+ let fetchSignal = (
+ fetchRawData(prefix: self.prefix)
+ |> map(Optional.init)
+ |> `catch` { error -> Signal in
+ switch error {
+ case .networkUnavailable:
+ return .complete()
+ default:
+ return .single(nil)
+ }
}
+ |> restart
+ )
+ |> take(1)
+ self.value.set(fetchSignal)
+ }
+
+ func get() -> Signal {
+ var shouldFetch = false
+ let timestamp = CFAbsoluteTimeGetCurrent()
+ if let lastRequestTimestamp = self.lastRequestTimestamp {
+ shouldFetch = timestamp >= lastRequestTimestamp + 1.0 * 60.0
+ } else {
+ shouldFetch = true
}
- |> `catch` { error -> Signal in
- return .complete()
- }
- |> mapToSignal { data -> Signal in
- if let data = data {
- return .single(data)
- } else {
- return .complete()
- }
+ if shouldFetch {
+ self.lastRequestTimestamp = timestamp
+ self.fetch()
}
+ return self.value.get()
}
}
@@ -81,32 +95,25 @@ public func cloudDataAdditionalAddressSource(phoneNumber: Signal Signal {
+ let context: CloudDataPrefixContext
+ if let current = self.prefixContexts[prefix] {
+ context = current
+ } else {
+ context = CloudDataPrefixContext(prefix: prefix)
}
- changesOperation.recordZoneWithIDWasDeletedBlock = { _ in
-
- }
- changesOperation.changeTokenUpdatedBlock = { _ in
- print("changeTokenUpdatedBlock")
- }
- changesOperation.fetchDatabaseChangesCompletionBlock = { serverChangeToken, isMoreComing, error in
- print("done")
- }
- publicDatabase.add(changesOperation)*/
+ return context.get()
}
}
public protocol CloudDataContext {
-
+ func get(phoneNumber: Signal) -> Signal
}
@available(iOS 10.0, *)
@@ -120,4 +127,29 @@ public final class CloudDataContextImpl: CloudDataContext {
return CloudDataContextObject(queue: queue)
})
}
+
+ public func get(phoneNumber: Signal) -> Signal {
+ return phoneNumber
+ |> take(1)
+ |> mapToSignal { phoneNumber -> Signal in
+ var prefix = ""
+ if let phoneNumber = phoneNumber, phoneNumber.count >= 1 {
+ prefix = String(phoneNumber[phoneNumber.startIndex ..< phoneNumber.index(after: phoneNumber.startIndex)])
+ }
+ return Signal { subscriber in
+ let disposable = MetaDisposable()
+ self.impl.with { impl in
+ disposable.set(impl.get(prefix: prefix).start(next: { data in
+ if let data = data, let datacenterData = MTIPDataDecode(data, phoneNumber ?? "") {
+ subscriber.putNext(datacenterData)
+ subscriber.putCompletion()
+ } else {
+ subscriber.putCompletion()
+ }
+ }))
+ }
+ return disposable
+ }
+ }
+ }
}
diff --git a/submodules/ComposePollUI/Sources/CreatePollController.swift b/submodules/ComposePollUI/Sources/CreatePollController.swift
index 160152c04c..59df335199 100644
--- a/submodules/ComposePollUI/Sources/CreatePollController.swift
+++ b/submodules/ComposePollUI/Sources/CreatePollController.swift
@@ -392,7 +392,7 @@ public func createPollController(context: AccountContext, peerId: PeerId, comple
controller?.present(c, in: .window(.root), with: a)
}
dismissImpl = { [weak controller] in
- controller?.view.endEditing(true)
+ //controller?.view.endEditing(true)
controller?.dismiss()
}
ensureTextVisibleImpl = { [weak controller] in
diff --git a/submodules/ContextUI/Sources/ContextController.swift b/submodules/ContextUI/Sources/ContextController.swift
index 444aa04be6..3208dee1e5 100644
--- a/submodules/ContextUI/Sources/ContextController.swift
+++ b/submodules/ContextUI/Sources/ContextController.swift
@@ -1234,11 +1234,7 @@ private final class ContextControllerNode: ViewControllerTracingNode, UIScrollVi
case let .controller(controller):
let controllerPoint = self.view.convert(point, to: controller.controller.view)
if let result = controller.controller.view.hitTest(controllerPoint, with: event) {
- if result is UIScrollView {
- return result
- } else if result is ListViewBackingView {
- return result
- }
+ return result
}
}
}
diff --git a/submodules/ContextUI/Sources/ContextGesture.swift b/submodules/ContextUI/Sources/ContextGesture.swift
index 6450b1f77c..e415027bc6 100644
--- a/submodules/ContextUI/Sources/ContextGesture.swift
+++ b/submodules/ContextUI/Sources/ContextGesture.swift
@@ -57,6 +57,8 @@ public final class ContextGesture: UIGestureRecognizer, UIGestureRecognizerDeleg
override public func reset() {
super.reset()
+ self.endPressedAppearance()
+
self.currentProgress = 0.0
self.delayTimer?.invalidate()
self.delayTimer = nil
@@ -152,9 +154,8 @@ public final class ContextGesture: UIGestureRecognizer, UIGestureRecognizerDeleg
if let touch = touches.first {
if !self.currentProgress.isZero, self.isValidated {
- if #available(iOS 9.0, *) {
- self.activationProgress?(0.0, .ended(self.currentProgress))
- }
+ self.currentProgress = 0.0
+ self.activationProgress?(0.0, .ended(self.currentProgress))
}
self.externalEnded?((self.view, touch.location(in: self.view)))
@@ -170,9 +171,8 @@ public final class ContextGesture: UIGestureRecognizer, UIGestureRecognizerDeleg
super.touchesCancelled(touches, with: event)
if let touch = touches.first, !self.currentProgress.isZero, self.isValidated {
- if #available(iOS 9.0, *) {
- self.activationProgress?(0.0, .ended(self.currentProgress))
- }
+ self.currentProgress = 0.0
+ self.activationProgress?(0.0, .ended(self.currentProgress))
}
self.delayTimer?.invalidate()
@@ -183,6 +183,7 @@ public final class ContextGesture: UIGestureRecognizer, UIGestureRecognizerDeleg
public func cancel() {
if !self.currentProgress.isZero, self.isValidated {
+ self.currentProgress = 0.0
self.activationProgress?(0.0, .ended(self.currentProgress))
self.delayTimer?.invalidate()
diff --git a/submodules/CountrySelectionUI/Sources/AuthorizationSequenceCountrySelectionController.swift b/submodules/CountrySelectionUI/Sources/AuthorizationSequenceCountrySelectionController.swift
index e5a634f6de..0f40f80bb1 100644
--- a/submodules/CountrySelectionUI/Sources/AuthorizationSequenceCountrySelectionController.swift
+++ b/submodules/CountrySelectionUI/Sources/AuthorizationSequenceCountrySelectionController.swift
@@ -83,7 +83,7 @@ private final class AuthorizationSequenceCountrySelectionNavigationContentNode:
self.addSubnode(self.searchBar)
self.searchBar.cancel = { [weak self] in
- self?.searchBar.deactivate(clear: false)
+ //self?.searchBar.deactivate(clear: false)
self?.cancel()
}
@@ -159,6 +159,8 @@ public final class AuthorizationSequenceCountrySelectionController: ViewControll
super.init(navigationBarPresentationData: NavigationBarPresentationData(theme: NavigationBarTheme(rootControllerTheme: theme), strings: NavigationBarStrings(presentationStrings: strings)))
+ self.navigationPresentation = .modal
+
self.statusBar.statusBarStyle = theme.rootController.statusBarStyle.style
let navigationContentNode = AuthorizationSequenceCountrySelectionNavigationContentNode(theme: theme, strings: strings, cancel: { [weak self] in
@@ -191,7 +193,6 @@ public final class AuthorizationSequenceCountrySelectionController: ViewControll
override public func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
- self.controllerNode.animateIn()
self.navigationContentNode?.activate()
}
diff --git a/submodules/CountrySelectionUI/Sources/AuthorizationSequenceCountrySelectionControllerNode.swift b/submodules/CountrySelectionUI/Sources/AuthorizationSequenceCountrySelectionControllerNode.swift
index 02e1095c8d..6ef8c17e6c 100644
--- a/submodules/CountrySelectionUI/Sources/AuthorizationSequenceCountrySelectionControllerNode.swift
+++ b/submodules/CountrySelectionUI/Sources/AuthorizationSequenceCountrySelectionControllerNode.swift
@@ -111,7 +111,6 @@ final class AuthorizationSequenceCountrySelectionControllerNode: ASDisplayNode,
}
self.sections = sections
var sectionTitles = sections.map { $0.0 }
- sectionTitles.insert(UITableView.indexSearch, at: 0)
self.sectionTitles = sectionTitles
super.init()
diff --git a/submodules/Display/Display/ActionSheetController.swift b/submodules/Display/Display/ActionSheetController.swift
index 8fd76c318a..790465062a 100644
--- a/submodules/Display/Display/ActionSheetController.swift
+++ b/submodules/Display/Display/ActionSheetController.swift
@@ -25,6 +25,7 @@ open class ActionSheetController: ViewController, PresentableController, Standal
super.init(navigationBarPresentationData: nil)
+ self.statusBar.statusBarStyle = .Ignore
self.blocksBackgroundWhenInOverlay = true
}
diff --git a/submodules/Display/Display/ContextMenuController.swift b/submodules/Display/Display/ContextMenuController.swift
index 20e0b73e49..5e703f0f98 100644
--- a/submodules/Display/Display/ContextMenuController.swift
+++ b/submodules/Display/Display/ContextMenuController.swift
@@ -38,6 +38,8 @@ public final class ContextMenuController: ViewController, KeyShortcutResponder,
self.hasHapticFeedback = hasHapticFeedback
super.init(navigationBarPresentationData: nil)
+
+ self.statusBar.statusBarStyle = .Ignore
}
required public init(coder aDecoder: NSCoder) {
diff --git a/submodules/Display/Display/GlobalOverlayPresentationContext.swift b/submodules/Display/Display/GlobalOverlayPresentationContext.swift
index b0b89b2d24..9f99cb5a52 100644
--- a/submodules/Display/Display/GlobalOverlayPresentationContext.swift
+++ b/submodules/Display/Display/GlobalOverlayPresentationContext.swift
@@ -95,10 +95,8 @@ final class GlobalOverlayPresentationContext {
}
return keyboardWindow
} else {
- if underStatusBar, let view = self.parentView {
+ if let view = self.parentView {
return view
- } else {
- return statusBarHost.statusBarWindow
}
}
}
diff --git a/submodules/Display/Display/ListView.swift b/submodules/Display/Display/ListView.swift
index bd1d46609a..6b8a92d754 100644
--- a/submodules/Display/Display/ListView.swift
+++ b/submodules/Display/Display/ListView.swift
@@ -3313,6 +3313,10 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
indicatorFrame.origin.y = self.visibleSize.height - (self.scrollIndicatorInsets.bottom + indicatorBottomInset) - indicatorFrame.height
}
+ if indicatorFrame.origin.y.isNaN {
+ indicatorFrame.origin.y = indicatorTopInset
+ }
+
if indicatorHeight >= visibleHeightWithoutIndicatorInsets {
verticalScrollIndicator.isHidden = true
verticalScrollIndicator.frame = indicatorFrame
diff --git a/submodules/Display/Display/Navigation/NavigationContainer.swift b/submodules/Display/Display/Navigation/NavigationContainer.swift
index ed26d9a2e2..adfeb6129c 100644
--- a/submodules/Display/Display/Navigation/NavigationContainer.swift
+++ b/submodules/Display/Display/Navigation/NavigationContainer.swift
@@ -76,13 +76,22 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate {
private(set) var controllers: [ViewController] = []
private var state: State = State(layout: nil, canBeClosed: nil, top: nil, transition: nil, pending: nil)
+ private var ignoreInputHeight: Bool = false
+
private(set) var isReady: Bool = false
var isReadyUpdated: (() -> Void)?
var controllerRemoved: (ViewController) -> Void
var keyboardViewManager: KeyboardViewManager? {
didSet {
- if self.keyboardViewManager !== oldValue {
-
+ }
+ }
+ var canHaveKeyboardFocus: Bool = false {
+ didSet {
+ if self.canHaveKeyboardFocus != oldValue {
+ if !self.canHaveKeyboardFocus {
+ self.view.endEditing(true)
+ self.performUpdate(transition: .animated(duration: 0.5, curve: .spring))
+ }
}
}
}
@@ -147,6 +156,7 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate {
guard self.state.transition == nil else {
return
}
+
let beginGesture = self.controllers.count > 1
if beginGesture {
@@ -163,7 +173,11 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate {
topController.viewWillDisappear(true)
let topNode = topController.displayNode
- bottomController.containerLayoutUpdated(layout, transition: .immediate)
+ var bottomControllerLayout = layout
+ if bottomController.view.disableAutomaticKeyboardHandling.isEmpty {
+ bottomControllerLayout = bottomControllerLayout.withUpdatedInputHeight(nil)
+ }
+ bottomController.containerLayoutUpdated(bottomControllerLayout, transition: .immediate)
bottomController.viewWillAppear(true)
let bottomNode = bottomController.displayNode
@@ -195,11 +209,16 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate {
let topController = top.value
let bottomController = transition.previous.value
+
+ if viewTreeContainsFirstResponder(view: top.value.view) {
+ strongSelf.ignoreInputHeight = true
+ }
strongSelf.keyboardViewManager?.dismissEditingWithoutAnimation(view: topController.view)
strongSelf.state.transition = nil
strongSelf.controllerRemoved(top.value)
+ strongSelf.ignoreInputHeight = false
})
} else {
navigationTransitionCoordinator.animateCancel({ [weak self] in
@@ -259,7 +278,11 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate {
} else {
transitionType = .pop
}
- self.state.pending = PendingChild(value: self.makeChild(layout: layout.withUpdatedInputHeight(nil), value: last), transitionType: transitionType, transition: transition, update: { [weak self] pendingChild in
+ var updatedLayout = layout
+ if last.view.disableAutomaticKeyboardHandling.isEmpty {
+ updatedLayout = updatedLayout.withUpdatedInputHeight(nil)
+ }
+ self.state.pending = PendingChild(value: self.makeChild(layout: updatedLayout, value: last), transitionType: transitionType, transition: transition, update: { [weak self] pendingChild in
self?.pendingChildIsReady(pendingChild)
})
}
@@ -274,7 +297,11 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate {
self.state.pending = nil
let previous = self.state.top
self.state.top = pending.value
- self.topTransition(from: previous, to: pending.value, transitionType: pending.transitionType, layout: layout.withUpdatedInputHeight(nil), transition: pending.transition)
+ var updatedLayout = layout
+ if pending.value.value.view.disableAutomaticKeyboardHandling.isEmpty {
+ updatedLayout = updatedLayout.withUpdatedInputHeight(nil)
+ }
+ self.topTransition(from: previous, to: pending.value, transitionType: pending.transitionType, layout: updatedLayout, transition: pending.transition)
statusBarTransition = pending.transition
if !self.isReady {
self.isReady = true
@@ -291,7 +318,13 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate {
var updatedStatusBarStyle = self.statusBarStyle
if let top = self.state.top {
- self.applyLayout(layout: layout, to: top, isMaster: true, transition: transition)
+ var updatedLayout = layout
+ if let topTransition = self.state.transition, top.value.view.disableAutomaticKeyboardHandling.isEmpty {
+ if !viewTreeContainsFirstResponder(view: top.value.view) {
+ updatedLayout = updatedLayout.withUpdatedInputHeight(nil)
+ }
+ }
+ self.applyLayout(layout: updatedLayout, to: top, isMaster: true, transition: transition)
updatedStatusBarStyle = top.value.statusBar.statusBarStyle
} else {
updatedStatusBarStyle = .Ignore
@@ -349,6 +382,10 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate {
guard let strongSelf = self, let topTransition = topTransition, strongSelf.state.transition === topTransition else {
return
}
+
+ if viewTreeContainsFirstResponder(view: topTransition.previous.value.view) {
+ strongSelf.ignoreInputHeight = true
+ }
strongSelf.keyboardViewManager?.dismissEditingWithoutAnimation(view: topTransition.previous.value.view)
strongSelf.state.transition = nil
@@ -361,6 +398,8 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate {
strongSelf.applyLayout(layout: layout, to: toValue, isMaster: true, transition: .immediate)
toValue.value.viewDidAppear(true)
}
+
+ strongSelf.ignoreInputHeight = false
})
} else {
if let fromValue = fromValue {
@@ -383,12 +422,19 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate {
}
private func makeChild(layout: ContainerViewLayout, value: ViewController) -> Child {
- value.containerLayoutUpdated(layout, transition: .immediate)
- return Child(value: value, layout: layout)
+ var updatedLayout = layout
+ if value.view.disableAutomaticKeyboardHandling.isEmpty {
+ updatedLayout = updatedLayout.withUpdatedInputHeight(nil)
+ }
+ value.containerLayoutUpdated(updatedLayout, transition: .immediate)
+ return Child(value: value, layout: updatedLayout)
}
private func applyLayout(layout: ContainerViewLayout, to child: Child, isMaster: Bool, transition: ContainedViewLayoutTransition) {
var childFrame = CGRect(origin: CGPoint(), size: layout.size)
+
+ var updatedLayout = layout
+
var shouldSyncKeyboard = false
if let transition = self.state.transition {
childFrame.origin.x = child.value.displayNode.frame.origin.x
@@ -400,10 +446,21 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate {
case .push:
break
}
+ if updatedLayout.inputHeight != nil {
+ if !self.canHaveKeyboardFocus && child.value.view.disableAutomaticKeyboardHandling.isEmpty {
+ updatedLayout = updatedLayout.withUpdatedInputHeight(nil)
+ }
+ }
} else {
if isMaster {
shouldSyncKeyboard = true
}
+
+ if updatedLayout.inputHeight != nil && child.value.view.disableAutomaticKeyboardHandling.isEmpty {
+ if !self.canHaveKeyboardFocus || self.ignoreInputHeight {
+ updatedLayout = updatedLayout.withUpdatedInputHeight(nil)
+ }
+ }
}
if child.value.displayNode.frame != childFrame {
transition.updateFrame(node: child.value.displayNode, frame: childFrame)
@@ -411,9 +468,9 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate {
if shouldSyncKeyboard && isMaster {
self.syncKeyboard(leftEdge: childFrame.minX, transition: transition)
}
- if child.layout != layout {
- child.layout = layout
- child.value.containerLayoutUpdated(layout, transition: transition)
+ if child.layout != updatedLayout {
+ child.layout = updatedLayout
+ child.value.containerLayoutUpdated(updatedLayout, transition: transition)
}
}
@@ -430,13 +487,13 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate {
private func pendingChildIsReady(_ child: PendingChild) {
if let pending = self.state.pending, pending === child {
pending.isReady = true
- self.performUpdate()
+ self.performUpdate(transition: .immediate)
}
}
- private func performUpdate() {
+ private func performUpdate(transition: ContainedViewLayoutTransition) {
if let layout = self.state.layout, let canBeClosed = self.state.canBeClosed {
- self.update(layout: layout, canBeClosed: canBeClosed, controllers: self.controllers, transition: .immediate)
+ self.update(layout: layout, canBeClosed: canBeClosed, controllers: self.controllers, transition: transition)
}
}
diff --git a/submodules/Display/Display/Navigation/NavigationController.swift b/submodules/Display/Display/Navigation/NavigationController.swift
index 65ae04481e..429db1abae 100644
--- a/submodules/Display/Display/Navigation/NavigationController.swift
+++ b/submodules/Display/Display/Navigation/NavigationController.swift
@@ -118,12 +118,19 @@ open class NavigationController: UINavigationController, ContainableController,
return self.view as! NavigationControllerView
}
+ var inCallNavigate: (() -> Void)?
private var inCallStatusBar: StatusBar?
+ private var globalScrollToTopNode: ScrollToTopNode?
private var rootContainer: RootContainer?
private var rootModalFrame: NavigationModalFrame?
private var modalContainers: [NavigationModalContainer] = []
+ private var overlayContainers: [NavigationOverlayContainer] = []
private var validLayout: ContainerViewLayout?
private var validStatusBarStyle: NavigationStatusBarStyle?
+ private var validStatusBarHidden: Bool = false
+
+ private var ignoreInputHeight: Bool = false
+ private var currentStatusBarExternalHidden: Bool = false
private var scheduledLayoutTransitionRequestId: Int = 0
private var scheduledLayoutTransitionRequest: (Int, ContainedViewLayoutTransition)?
@@ -148,10 +155,20 @@ open class NavigationController: UINavigationController, ContainableController,
private var _displayNode: ASDisplayNode?
public var displayNode: ASDisplayNode {
+ if let value = self._displayNode {
+ return value
+ }
+ if !self.isViewLoaded {
+ self.loadView()
+ }
+
return self._displayNode!
}
- var statusBarHost: StatusBarHost?
+ var statusBarHost: StatusBarHost? {
+ didSet {
+ }
+ }
var keyboardViewManager: KeyboardViewManager?
public func updateMasterDetailsBlackout(_ blackout: MasterDetailLayoutBlackout?, transition: ContainedViewLayoutTransition) {
@@ -199,6 +216,9 @@ open class NavigationController: UINavigationController, ContainableController,
for modalContainer in self.modalContainers {
supportedOrientations = supportedOrientations.intersection(modalContainer.container.combinedSupportedOrientations(currentOrientationToLock: currentOrientationToLock))
}
+ for overlayContrainer in self.overlayContainers {
+ supportedOrientations = supportedOrientations.intersection(overlayContrainer.controller.combinedSupportedOrientations(currentOrientationToLock: currentOrientationToLock))
+ }
return supportedOrientations
}
@@ -214,18 +234,10 @@ open class NavigationController: UINavigationController, ContainableController,
}
}
if self.isViewLoaded {
- if statusBarStyleUpdated {
- self.validStatusBarStyle = self.theme.statusBar
- let normalStatusBarStyle: UIStatusBarStyle
- switch self.theme.statusBar {
- case .black:
- normalStatusBarStyle = .default
- case .white:
- normalStatusBarStyle = .lightContent
- }
- //self.statusBarHost?.setStatusBarStyle(normalStatusBarStyle, animated: false)
- }
self.controllerView.backgroundColor = theme.emptyAreaColor
+ if let layout = self.validLayout {
+ self.containerLayoutUpdated(layout, transition: .immediate)
+ }
}
}
@@ -239,16 +251,41 @@ open class NavigationController: UINavigationController, ContainableController,
}
self.validLayout = layout
self.updateContainers(layout: layout, transition: transition)
-
- self.inCallStatusBar?.frame = CGRect(origin: CGPoint(), size: CGSize(width: layout.size.width, height: max(40.0, layout.safeInsets.top)))
- self.inCallStatusBar?.updateState(statusBar: nil, withSafeInsets: false, inCallText: "In Call Text", animated: false)
}
- private func updateContainers(layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
+ private weak var currentTopVisibleOverlayContainerStatusBar: NavigationOverlayContainer? = nil
+
+ private func updateContainers(layout rawLayout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
+ var layout = rawLayout
+
+ if self.ignoreInputHeight {
+ if layout.inputHeight == nil {
+ self.ignoreInputHeight = false
+ } else {
+ layout = layout.withUpdatedInputHeight(nil)
+ }
+ }
+
+ if let globalScrollToTopNode = self.globalScrollToTopNode {
+ globalScrollToTopNode.frame = CGRect(origin: CGPoint(x: 0.0, y: -1.0), size: CGSize(width: layout.size.width, height: 1.0))
+ }
+
+ if let inCallStatusBar = self.inCallStatusBar {
+ let inCallStatusBarFrame = CGRect(origin: CGPoint(), size: CGSize(width: layout.size.width, height: max(40.0, layout.safeInsets.top)))
+ if inCallStatusBar.frame.isEmpty {
+ inCallStatusBar.frame = inCallStatusBarFrame
+ } else {
+ transition.updateFrame(node: inCallStatusBar, frame: inCallStatusBarFrame)
+ }
+ layout.statusBarHeight = inCallStatusBarFrame.height
+ self.inCallStatusBar?.frame = inCallStatusBarFrame
+ }
+
let navigationLayout = makeNavigationLayout(mode: self.mode, layout: layout, controllers: self._viewControllers)
var transition = transition
var statusBarStyle: StatusBarStyle = .Ignore
+ var statusBarHidden = false
var animateStatusBarStyleTransition = transition.isAnimated
var modalContainers: [NavigationModalContainer] = []
@@ -289,14 +326,16 @@ open class NavigationController: UINavigationController, ContainableController,
strongSelf.updateContainers(layout: layout, transition: transition)
}
}
- modalContainer.interactivelyDismissed = { [weak self, weak modalContainer] in
+ modalContainer.interactivelyDismissed = { [weak self, weak modalContainer] hadInputFocus in
guard let strongSelf = self, let modalContainer = modalContainer else {
return
}
let controllers = strongSelf._viewControllers.filter { controller in
return !modalContainer.container.controllers.contains(where: { $0 === controller })
}
+ strongSelf.ignoreInputHeight = hadInputFocus
strongSelf.setViewControllers(controllers, animated: false)
+ strongSelf.ignoreInputHeight = false
}
}
modalContainers.append(modalContainer)
@@ -304,13 +343,68 @@ open class NavigationController: UINavigationController, ContainableController,
for container in self.modalContainers {
if !modalContainers.contains(where: { $0 === container }) {
- transition = container.dismiss(transition: transition, completion: { [weak container] in
+ if viewTreeContainsFirstResponder(view: container.view) {
+ self.ignoreInputHeight = true
+ container.view.endEditing(true)
+ }
+
+ transition = container.dismiss(transition: transition, completion: { [weak self, weak container] in
container?.removeFromSupernode()
})
}
}
self.modalContainers = modalContainers
+ var previousOverlayContainer: NavigationOverlayContainer?
+ var topVisibleOverlayContainerWithStatusBar: NavigationOverlayContainer?
+ for i in (0 ..< self.overlayContainers.count).reversed() {
+ let overlayContainer = self.overlayContainers[i]
+
+ let containerTransition: ContainedViewLayoutTransition
+ if overlayContainer.supernode == nil {
+ containerTransition = .immediate
+ } else {
+ containerTransition = transition
+ }
+
+ containerTransition.updateFrame(node: overlayContainer, frame: CGRect(origin: CGPoint(), size: layout.size))
+ overlayContainer.update(layout: layout, transition: containerTransition)
+
+ if overlayContainer.supernode == nil && overlayContainer.isReady {
+ if let previousOverlayContainer = previousOverlayContainer {
+ self.displayNode.insertSubnode(overlayContainer, belowSubnode: previousOverlayContainer)
+ } else if let globalScrollToTopNode = self.globalScrollToTopNode {
+ self.displayNode.insertSubnode(overlayContainer, belowSubnode: globalScrollToTopNode)
+ } else {
+ self.displayNode.addSubnode(overlayContainer)
+ }
+ overlayContainer.transitionIn()
+ }
+
+ if overlayContainer.supernode != nil {
+ previousOverlayContainer = overlayContainer
+ let controllerStatusBarStyle = overlayContainer.controller.statusBar.statusBarStyle
+ switch controllerStatusBarStyle {
+ case .Black, .White, .Hide:
+ if topVisibleOverlayContainerWithStatusBar == nil {
+ topVisibleOverlayContainerWithStatusBar = overlayContainer
+ }
+ if case .Hide = controllerStatusBarStyle {
+ statusBarHidden = true
+ } else {
+ statusBarHidden = overlayContainer.controller.statusBar.alpha.isZero
+ }
+ case .Ignore:
+ break
+ }
+ }
+ }
+
+ if self.currentTopVisibleOverlayContainerStatusBar !== topVisibleOverlayContainerWithStatusBar {
+ animateStatusBarStyleTransition = true
+ self.currentTopVisibleOverlayContainerStatusBar = topVisibleOverlayContainerWithStatusBar
+ }
+
var previousModalContainer: NavigationModalContainer?
var visibleModalCount = 0
var topModalDismissProgress: CGFloat = 0.0
@@ -342,6 +436,10 @@ open class NavigationController: UINavigationController, ContainableController,
self.displayNode.insertSubnode(modalContainer, belowSubnode: previousModalContainer)
} else if let inCallStatusBar = self.inCallStatusBar {
self.displayNode.insertSubnode(modalContainer, belowSubnode: inCallStatusBar)
+ } else if let previousOverlayContainer = previousOverlayContainer {
+ self.displayNode.insertSubnode(modalContainer, belowSubnode: previousOverlayContainer)
+ } else if let globalScrollToTopNode = self.globalScrollToTopNode {
+ self.displayNode.insertSubnode(modalContainer, belowSubnode: globalScrollToTopNode)
} else {
self.displayNode.addSubnode(modalContainer)
}
@@ -354,11 +452,14 @@ open class NavigationController: UINavigationController, ContainableController,
topModalDismissProgress = modalContainer.dismissProgress
if case .compact = layout.metrics.widthClass {
modalContainer.keyboardViewManager = self.keyboardViewManager
+ modalContainer.canHaveKeyboardFocus = true
} else {
modalContainer.keyboardViewManager = nil
+ modalContainer.canHaveKeyboardFocus = true
}
} else {
modalContainer.keyboardViewManager = nil
+ modalContainer.canHaveKeyboardFocus = false
}
previousModalContainer = modalContainer
}
@@ -371,8 +472,10 @@ open class NavigationController: UINavigationController, ContainableController,
case let .flat(flatContainer):
if previousModalContainer == nil {
flatContainer.keyboardViewManager = self.keyboardViewManager
+ flatContainer.canHaveKeyboardFocus = true
} else {
flatContainer.keyboardViewManager = nil
+ flatContainer.canHaveKeyboardFocus = false
}
transition.updateFrame(node: flatContainer, frame: CGRect(origin: CGPoint(), size: layout.size))
flatContainer.update(layout: layout, canBeClosed: false, controllers: controllers, transition: transition)
@@ -386,6 +489,13 @@ open class NavigationController: UINavigationController, ContainableController,
}
strongSelf.updateContainers(layout: layout, transition: transition)
}
+ if previousModalContainer == nil {
+ flatContainer.keyboardViewManager = self.keyboardViewManager
+ flatContainer.canHaveKeyboardFocus = true
+ } else {
+ flatContainer.keyboardViewManager = nil
+ flatContainer.canHaveKeyboardFocus = false
+ }
self.displayNode.insertSubnode(flatContainer, at: 0)
self.rootContainer = .flat(flatContainer)
flatContainer.frame = CGRect(origin: CGPoint(), size: layout.size)
@@ -402,6 +512,13 @@ open class NavigationController: UINavigationController, ContainableController,
}
strongSelf.updateContainers(layout: layout, transition: transition)
}
+ if previousModalContainer == nil {
+ flatContainer.keyboardViewManager = self.keyboardViewManager
+ flatContainer.canHaveKeyboardFocus = true
+ } else {
+ flatContainer.keyboardViewManager = nil
+ flatContainer.canHaveKeyboardFocus = false
+ }
self.displayNode.insertSubnode(flatContainer, at: 0)
self.rootContainer = .flat(flatContainer)
flatContainer.frame = CGRect(origin: CGPoint(), size: layout.size)
@@ -413,23 +530,42 @@ open class NavigationController: UINavigationController, ContainableController,
case let .flat(flatContainer):
let splitContainer = NavigationSplitContainer(theme: self.theme, controllerRemoved: { [weak self] controller in
self?.controllerRemoved(controller)
+ }, scrollToTop: { [weak self] subject in
+ self?.scrollToTop(subject)
})
self.displayNode.insertSubnode(splitContainer, at: 0)
self.rootContainer = .split(splitContainer)
+ if previousModalContainer == nil {
+ splitContainer.canHaveKeyboardFocus = true
+ } else {
+ splitContainer.canHaveKeyboardFocus = false
+ }
splitContainer.frame = CGRect(origin: CGPoint(), size: layout.size)
splitContainer.update(layout: layout, masterControllers: masterControllers, detailControllers: detailControllers, transition: .immediate)
flatContainer.statusBarStyleUpdated = nil
flatContainer.removeFromSupernode()
case let .split(splitContainer):
+ if previousModalContainer == nil {
+ splitContainer.canHaveKeyboardFocus = true
+ } else {
+ splitContainer.canHaveKeyboardFocus = false
+ }
transition.updateFrame(node: splitContainer, frame: CGRect(origin: CGPoint(), size: layout.size))
splitContainer.update(layout: layout, masterControllers: masterControllers, detailControllers: detailControllers, transition: transition)
}
} else {
let splitContainer = NavigationSplitContainer(theme: self.theme, controllerRemoved: { [weak self] controller in
self?.controllerRemoved(controller)
+ }, scrollToTop: { [weak self] subject in
+ self?.scrollToTop(subject)
})
self.displayNode.insertSubnode(splitContainer, at: 0)
self.rootContainer = .split(splitContainer)
+ if previousModalContainer == nil {
+ splitContainer.canHaveKeyboardFocus = true
+ } else {
+ splitContainer.canHaveKeyboardFocus = false
+ }
splitContainer.frame = CGRect(origin: CGPoint(), size: layout.size)
splitContainer.update(layout: layout, masterControllers: masterControllers, detailControllers: detailControllers, transition: .immediate)
}
@@ -439,8 +575,9 @@ open class NavigationController: UINavigationController, ContainableController,
switch rootContainer {
case let .flat(container):
statusBarStyle = container.statusBarStyle
+ self.globalScrollToTopNode?.isHidden = false
case .split:
- break
+ self.globalScrollToTopNode?.isHidden = true
}
}
@@ -559,6 +696,18 @@ open class NavigationController: UINavigationController, ContainableController,
}
}
+ if self.inCallStatusBar != nil {
+ statusBarStyle = .White
+ }
+
+ if let topVisibleOverlayContainerWithStatusBar = topVisibleOverlayContainerWithStatusBar {
+ statusBarStyle = topVisibleOverlayContainerWithStatusBar.controller.statusBar.statusBarStyle
+ }
+
+ if self.currentStatusBarExternalHidden {
+ statusBarHidden = true
+ }
+
let resolvedStatusBarStyle: NavigationStatusBarStyle
switch statusBarStyle {
case .Ignore, .Hide:
@@ -580,6 +729,11 @@ open class NavigationController: UINavigationController, ContainableController,
}
self.statusBarHost?.setStatusBarStyle(normalStatusBarStyle, animated: animateStatusBarStyleTransition)
}
+
+ if self.validStatusBarHidden != statusBarHidden {
+ self.validStatusBarHidden = statusBarHidden
+ self.statusBarHost?.setStatusBarHidden(statusBarHidden, animated: animateStatusBarStyleTransition)
+ }
}
private func controllerRemoved(_ controller: ViewController) {
@@ -589,6 +743,28 @@ open class NavigationController: UINavigationController, ContainableController,
public func updateModalTransition(_ value: CGFloat, transition: ContainedViewLayoutTransition) {
}
+ private func scrollToTop(_ subject: NavigationSplitContainerScrollToTop) {
+ if let _ = self.inCallStatusBar {
+ self.inCallNavigate?()
+ } else if let rootContainer = self.rootContainer {
+ if let modalContainer = self.modalContainers.last {
+ modalContainer.container.controllers.last?.scrollToTop?()
+ } else {
+ switch rootContainer {
+ case let .flat(container):
+ container.controllers.last?.scrollToTop?()
+ case let .split(container):
+ switch subject {
+ case .master:
+ container.masterControllers.last?.scrollToTop?()
+ case .detail:
+ container.detailControllers.last?.scrollToTop?()
+ }
+ }
+ }
+ }
+ }
+
public func updateToInterfaceOrientation(_ orientation: UIInterfaceOrientation) {
/*for record in self._viewControllers {
if let controller = record.controller as? ContainableController {
@@ -613,9 +789,11 @@ open class NavigationController: UINavigationController, ContainableController,
}
self.navigationBar.removeFromSuperview()
- /*let inCallStatusBar = StatusBar()
- self.displayNode.addSubnode(inCallStatusBar)
- self.inCallStatusBar = inCallStatusBar*/
+ let globalScrollToTopNode = ScrollToTopNode(action: { [weak self] in
+ self?.scrollToTop(.master)
+ })
+ self.displayNode.addSubnode(globalScrollToTopNode)
+ self.globalScrollToTopNode = globalScrollToTopNode
}
public func pushViewController(_ controller: ViewController) {
@@ -663,7 +841,11 @@ open class NavigationController: UINavigationController, ContainableController,
public func filterController(_ controller: ViewController, animated: Bool) {
let controllers = self.viewControllers.filter({ $0 !== controller })
if controllers.count != self.viewControllers.count {
+ if controller.isViewLoaded && viewTreeContainsFirstResponder(view: controller.view) {
+ self.ignoreInputHeight = true
+ }
self.setViewControllers(controllers, animated: animated)
+ self.ignoreInputHeight = false
}
}
@@ -750,6 +932,53 @@ open class NavigationController: UINavigationController, ContainableController,
}
}
+ public func presentOverlay(controller: ViewController, inGlobal: Bool = false) {
+ let container = NavigationOverlayContainer(controller: controller, controllerRemoved: { [weak self] controller in
+ guard let strongSelf = self else {
+ return
+ }
+ for i in 0 ..< strongSelf.overlayContainers.count {
+ let overlayContainer = strongSelf.overlayContainers[i]
+ if overlayContainer.controller === controller {
+ overlayContainer.removeFromSupernode()
+ strongSelf.overlayContainers.remove(at: i)
+ break
+ }
+ }
+ if let layout = strongSelf.validLayout {
+ strongSelf.updateContainers(layout: layout, transition: .immediate)
+ }
+ }, statusBarUpdated: { [weak self] transition in
+ guard let strongSelf = self else {
+ return
+ }
+ if let layout = strongSelf.validLayout {
+ strongSelf.updateContainers(layout: layout, transition: transition)
+ }
+ })
+ self.overlayContainers.append(container)
+ container.isReadyUpdated = { [weak self, weak container] in
+ guard let strongSelf = self, let container = container else {
+ return
+ }
+ if let layout = strongSelf.validLayout {
+ strongSelf.updateContainers(layout: layout, transition: .immediate)
+ }
+ }
+ if let layout = self.validLayout {
+ self.updateContainers(layout: layout, transition: .immediate)
+ }
+ }
+
+ func updateExternalStatusBarHidden(_ value: Bool, transition: ContainedViewLayoutTransition) {
+ if self.currentStatusBarExternalHidden != value {
+ self.currentStatusBarExternalHidden = value
+ if let layout = self.validLayout {
+ self.updateContainers(layout: layout, transition: transition)
+ }
+ }
+ }
+
override open func present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)? = nil) {
preconditionFailure()
}
@@ -816,4 +1045,49 @@ open class NavigationController: UINavigationController, ContainableController,
self.containerLayoutUpdated(validLayout, transition: transition)
}
}
+
+ public func setForceInCallStatusBar(_ forceInCallStatusBarText: String?, transition: ContainedViewLayoutTransition = .animated(duration: 0.3, curve: .easeInOut)) {
+ if let forceInCallStatusBarText = forceInCallStatusBarText {
+ let inCallStatusBar: StatusBar
+ if let current = self.inCallStatusBar {
+ inCallStatusBar = current
+ } else {
+ inCallStatusBar = StatusBar()
+ inCallStatusBar.inCallNavigate = { [weak self] in
+ self?.scrollToTop(.master)
+ }
+ inCallStatusBar.alpha = 0.0
+ self.inCallStatusBar = inCallStatusBar
+
+ var bottomOverlayContainer: NavigationOverlayContainer?
+ for overlayContainer in self.overlayContainers {
+ if overlayContainer.supernode != nil {
+ bottomOverlayContainer = overlayContainer
+ break
+ }
+ }
+
+ if let bottomOverlayContainer = bottomOverlayContainer {
+ self.displayNode.insertSubnode(inCallStatusBar, belowSubnode: bottomOverlayContainer)
+ } else if let globalScrollToTopNode = self.globalScrollToTopNode {
+ self.displayNode.insertSubnode(inCallStatusBar, belowSubnode: globalScrollToTopNode)
+ } else {
+ self.displayNode.addSubnode(inCallStatusBar)
+ }
+ transition.updateAlpha(node: inCallStatusBar, alpha: 1.0)
+ }
+ if let layout = self.validLayout {
+ self.containerLayoutUpdated(layout, transition: transition)
+ inCallStatusBar.updateState(statusBar: nil, withSafeInsets: !layout.safeInsets.top.isZero, inCallText: forceInCallStatusBarText, animated: false)
+ }
+ } else if let inCallStatusBar = self.inCallStatusBar {
+ self.inCallStatusBar = nil
+ transition.updateAlpha(node: inCallStatusBar, alpha: 0.0, completion: { [weak inCallStatusBar] _ in
+ inCallStatusBar?.removeFromSupernode()
+ })
+ if let layout = self.validLayout {
+ self.containerLayoutUpdated(layout, transition: transition)
+ }
+ }
+ }
}
diff --git a/submodules/Display/Display/Navigation/NavigationModalContainer.swift b/submodules/Display/Display/Navigation/NavigationModalContainer.swift
index dd1141c9d9..ab2e1567b4 100644
--- a/submodules/Display/Display/Navigation/NavigationModalContainer.swift
+++ b/submodules/Display/Display/Navigation/NavigationModalContainer.swift
@@ -16,8 +16,9 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate, UIGes
private(set) var dismissProgress: CGFloat = 0.0
var isReadyUpdated: (() -> Void)?
var updateDismissProgress: ((CGFloat, ContainedViewLayoutTransition) -> Void)?
- var interactivelyDismissed: (() -> Void)?
+ var interactivelyDismissed: ((Bool) -> Void)?
+ private var isUpdatingState = false
private var ignoreScrolling = false
private var isDismissed = false
private var isInteractiveDimissEnabled = true
@@ -33,6 +34,12 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate, UIGes
}
}
+ var canHaveKeyboardFocus: Bool = false {
+ didSet {
+ self.container.canHaveKeyboardFocus = self.canHaveKeyboardFocus
+ }
+ }
+
init(theme: NavigationControllerTheme, controllerRemoved: @escaping (ViewController) -> Void) {
self.theme = theme
@@ -57,7 +64,9 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate, UIGes
}
if !strongSelf.isReady {
strongSelf.isReady = true
- strongSelf.isReadyUpdated?()
+ if !strongSelf.isUpdatingState {
+ strongSelf.isReadyUpdated?()
+ }
}
}
@@ -146,8 +155,9 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate, UIGes
guard let strongSelf = self else {
return
}
+ let hadInputFocus = viewTreeContainsFirstResponder(view: strongSelf.view)
strongSelf.keyboardViewManager?.dismissEditingWithoutAnimation(view: strongSelf.view)
- strongSelf.interactivelyDismissed?()
+ strongSelf.interactivelyDismissed?(hadInputFocus)
})
} else {
self.horizontalDismissOffset = nil
@@ -188,13 +198,15 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate, UIGes
return
}
if targetOffset == 0.0 {
- strongSelf.interactivelyDismissed?()
+ strongSelf.interactivelyDismissed?(false)
}
})
self.ignoreScrolling = false
self.dismissProgress = dismissProgress
self.applyDismissProgress(transition: transition, completion: {})
+
+ self.view.endEditing(true)
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
@@ -247,7 +259,7 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate, UIGes
return
}
if targetOffset == 0.0 {
- strongSelf.interactivelyDismissed?()
+ strongSelf.interactivelyDismissed?(false)
}
})
self.ignoreScrolling = false
@@ -273,6 +285,8 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate, UIGes
return
}
+ self.isUpdatingState = true
+
self.validLayout = layout
transition.updateFrame(node: self.dim, frame: CGRect(origin: CGPoint(), size: layout.size))
@@ -338,6 +352,8 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate, UIGes
transition.updateFrameAsPositionAndBounds(node: self.container, frame: containerFrame.offsetBy(dx: 0.0, dy: layout.size.height))
transition.updateTransformScale(node: self.container, scale: containerScale)
self.container.update(layout: containerLayout, canBeClosed: true, controllers: controllers, transition: transition)
+
+ self.isUpdatingState = false
}
func animateIn(transition: ContainedViewLayoutTransition) {
diff --git a/submodules/Display/Display/Navigation/NavigationOverlayContainer.swift b/submodules/Display/Display/Navigation/NavigationOverlayContainer.swift
new file mode 100644
index 0000000000..4689df4688
--- /dev/null
+++ b/submodules/Display/Display/Navigation/NavigationOverlayContainer.swift
@@ -0,0 +1,86 @@
+import Foundation
+import UIKit
+import AsyncDisplayKit
+import SwiftSignalKit
+
+final class NavigationOverlayContainer: ASDisplayNode {
+ let controller: ViewController
+
+ private(set) var isReady: Bool = false
+ var isReadyUpdated: (() -> Void)?
+ private var isReadyDisposable: Disposable?
+
+ private var validLayout: ContainerViewLayout?
+
+ private var isUpdatingState: Bool = false
+
+ var keyboardViewManager: KeyboardViewManager? {
+ didSet {
+ if self.keyboardViewManager !== oldValue {
+ }
+ }
+ }
+
+ init(controller: ViewController, controllerRemoved: @escaping (ViewController) -> Void, statusBarUpdated: @escaping (ContainedViewLayoutTransition) -> Void) {
+ self.controller = controller
+
+ super.init()
+
+ self.controller.navigation_setDismiss({ [weak self] in
+ guard let strongSelf = self else {
+ return
+ }
+ controllerRemoved(strongSelf.controller)
+ }, rootController: nil)
+
+ self.controller.statusBar.alphaUpdated = { transition in
+ statusBarUpdated(transition)
+ }
+
+ self.isReadyDisposable = (self.controller.ready.get()
+ |> filter { $0 }
+ |> take(1)
+ |> deliverOnMainQueue).start(next: { [weak self] _ in
+ guard let strongSelf = self else {
+ return
+ }
+ if !strongSelf.isReady {
+ strongSelf.isReady = true
+ if !strongSelf.isUpdatingState {
+ strongSelf.isReadyUpdated?()
+ }
+ }
+ })
+ }
+
+ deinit {
+ self.isReadyDisposable?.dispose()
+ }
+
+ override func didLoad() {
+ super.didLoad()
+ }
+
+ func update(layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
+ self.isUpdatingState = true
+
+ let updateLayout = self.validLayout != layout
+
+ self.validLayout = layout
+
+ if updateLayout {
+ transition.updateFrame(node: self.controller.displayNode, frame: CGRect(origin: CGPoint(), size: layout.size))
+ self.controller.containerLayoutUpdated(layout, transition: transition)
+ }
+
+ self.isUpdatingState = false
+ }
+
+ func transitionIn() {
+ self.controller.viewWillAppear(false)
+ self.controller.setIgnoreAppearanceMethodInvocations(true)
+ self.addSubnode(self.controller.displayNode)
+ self.controller.setIgnoreAppearanceMethodInvocations(false)
+ self.controller.viewDidAppear(false)
+ }
+}
diff --git a/submodules/Display/Display/Navigation/NavigationSplitContainer.swift b/submodules/Display/Display/Navigation/NavigationSplitContainer.swift
index d47a47c6ab..155fd2a186 100644
--- a/submodules/Display/Display/Navigation/NavigationSplitContainer.swift
+++ b/submodules/Display/Display/Navigation/NavigationSplitContainer.swift
@@ -3,19 +3,42 @@ import UIKit
import AsyncDisplayKit
import SwiftSignalKit
+enum NavigationSplitContainerScrollToTop {
+ case master
+ case detail
+}
+
final class NavigationSplitContainer: ASDisplayNode {
private var theme: NavigationControllerTheme
+ private let masterScrollToTopView: ScrollToTopView
+ private let detailScrollToTopView: ScrollToTopView
private let masterContainer: NavigationContainer
private let detailContainer: NavigationContainer
private let separator: ASDisplayNode
- private var masterControllers: [ViewController] = []
- private var detailControllers: [ViewController] = []
+ private(set) var masterControllers: [ViewController] = []
+ private(set) var detailControllers: [ViewController] = []
- init(theme: NavigationControllerTheme, controllerRemoved: @escaping (ViewController) -> Void) {
+ var canHaveKeyboardFocus: Bool = false {
+ didSet {
+ self.masterContainer.canHaveKeyboardFocus = self.canHaveKeyboardFocus
+ self.detailContainer.canHaveKeyboardFocus = self.canHaveKeyboardFocus
+ }
+ }
+
+ init(theme: NavigationControllerTheme, controllerRemoved: @escaping (ViewController) -> Void, scrollToTop: @escaping (NavigationSplitContainerScrollToTop) -> Void) {
self.theme = theme
+ self.masterScrollToTopView = ScrollToTopView(frame: CGRect())
+ self.masterScrollToTopView.action = {
+ scrollToTop(.master)
+ }
+ self.detailScrollToTopView = ScrollToTopView(frame: CGRect())
+ self.detailScrollToTopView.action = {
+ scrollToTop(.detail)
+ }
+
self.masterContainer = NavigationContainer(controllerRemoved: controllerRemoved)
self.masterContainer.clipsToBounds = true
@@ -30,6 +53,8 @@ final class NavigationSplitContainer: ASDisplayNode {
self.addSubnode(self.masterContainer)
self.addSubnode(self.detailContainer)
self.addSubnode(self.separator)
+ self.view.addSubview(self.masterScrollToTopView)
+ self.view.addSubview(self.detailScrollToTopView)
}
func updateTheme(theme: NavigationControllerTheme) {
@@ -40,6 +65,9 @@ final class NavigationSplitContainer: ASDisplayNode {
let masterWidth = min(max(320.0, floor(layout.size.width / 3.0)), floor(layout.size.width / 2.0))
let detailWidth = layout.size.width - masterWidth
+ self.masterScrollToTopView.frame = CGRect(origin: CGPoint(x: 0.0, y: -1.0), size: CGSize(width: masterWidth, height: 1.0))
+ self.detailScrollToTopView.frame = CGRect(origin: CGPoint(x: masterWidth, y: -1.0), size: CGSize(width: detailWidth, height: 1.0))
+
transition.updateFrame(node: self.masterContainer, frame: CGRect(origin: CGPoint(), size: CGSize(width: masterWidth, height: layout.size.height)))
transition.updateFrame(node: self.detailContainer, frame: CGRect(origin: CGPoint(x: masterWidth, y: 0.0), size: CGSize(width: detailWidth, height: layout.size.height)))
transition.updateFrame(node: self.separator, frame: CGRect(origin: CGPoint(x: masterWidth, y: 0.0), size: CGSize(width: UIScreenPixel, height: layout.size.height)))
diff --git a/submodules/Display/Display/ScrollToTopProxyView.swift b/submodules/Display/Display/ScrollToTopProxyView.swift
index 3e6f76a24a..d0e8eb459e 100644
--- a/submodules/Display/Display/ScrollToTopProxyView.swift
+++ b/submodules/Display/Display/ScrollToTopProxyView.swift
@@ -35,3 +35,15 @@ class ScrollToTopView: UIScrollView, UIScrollViewDelegate {
return false
}
}
+
+class ScrollToTopNode: ASDisplayNode {
+ init(action: @escaping () -> Void) {
+ super.init()
+
+ self.setViewBlock({
+ let view = ScrollToTopView(frame: CGRect())
+ view.action = action
+ return view
+ })
+ }
+}
diff --git a/submodules/Display/Display/StatusBar.swift b/submodules/Display/Display/StatusBar.swift
index f0e1ae3462..5f6fa9ee22 100644
--- a/submodules/Display/Display/StatusBar.swift
+++ b/submodules/Display/Display/StatusBar.swift
@@ -68,6 +68,7 @@ public final class StatusBar: ASDisplayNode {
didSet {
if self.statusBarStyle != oldValue {
self.layer.invalidateUpTheTree()
+ self.alphaUpdated?(.immediate)
}
}
}
@@ -94,6 +95,13 @@ public final class StatusBar: ASDisplayNode {
}
}
+ var alphaUpdated: ((ContainedViewLayoutTransition) -> Void)?
+
+ public func updateAlpha(_ alpha: CGFloat, transition: ContainedViewLayoutTransition) {
+ self.alpha = alpha
+ self.alphaUpdated?(transition)
+ }
+
public override init() {
self.inCallLabel = StatusBarLabelNode()
self.inCallLabel.isUserInteractionEnabled = false
diff --git a/submodules/Display/Display/StatusBarHost.swift b/submodules/Display/Display/StatusBarHost.swift
index 58f24fcb20..9514657bd7 100644
--- a/submodules/Display/Display/StatusBarHost.swift
+++ b/submodules/Display/Display/StatusBarHost.swift
@@ -12,5 +12,8 @@ public protocol StatusBarHost {
var handleVolumeControl: Signal { get }
+ var isApplicationInForeground: Bool { get }
+
func setStatusBarStyle(_ style: UIStatusBarStyle, animated: Bool)
+ func setStatusBarHidden(_ value: Bool, animated: Bool)
}
diff --git a/submodules/Display/Display/TabBarController.swift b/submodules/Display/Display/TabBarController.swift
index 9bf049704a..5c16bda583 100644
--- a/submodules/Display/Display/TabBarController.swift
+++ b/submodules/Display/Display/TabBarController.swift
@@ -127,6 +127,15 @@ open class TabBarController: ViewController {
self.theme = theme
super.init(navigationBarPresentationData: navigationBarPresentationData)
+
+ self.scrollToTop = { [weak self] in
+ guard let strongSelf = self else {
+ return
+ }
+ if let controller = strongSelf.currentController {
+ controller.scrollToTop?()
+ }
+ }
}
required public init(coder aDecoder: NSCoder) {
diff --git a/submodules/Display/Display/ViewController.swift b/submodules/Display/Display/ViewController.swift
index 2ca9484f03..37ddae07ec 100644
--- a/submodules/Display/Display/ViewController.swift
+++ b/submodules/Display/Display/ViewController.swift
@@ -246,7 +246,7 @@ public enum ViewControllerNavigationPresentation {
}
private func updateScrollToTopView() {
- if self.scrollToTop != nil {
+ /*if self.scrollToTop != nil {
if let displayNode = self._displayNode , self.scrollToTopView == nil {
let scrollToTopView = ScrollToTopView(frame: CGRect(x: 0.0, y: -1.0, width: displayNode.bounds.size.width, height: 1.0))
scrollToTopView.action = { [weak self] in
@@ -257,7 +257,7 @@ public enum ViewControllerNavigationPresentation {
self.scrollToTopView = scrollToTopView
self.view.addSubview(scrollToTopView)
}
- } else if let scrollToTopView = self.scrollToTopView {
+ } else*/ if let scrollToTopView = self.scrollToTopView {
scrollToTopView.removeFromSuperview()
self.scrollToTopView = nil
}
diff --git a/submodules/Display/Display/WindowContent.swift b/submodules/Display/Display/WindowContent.swift
index 795f086366..92985f27db 100644
--- a/submodules/Display/Display/WindowContent.swift
+++ b/submodules/Display/Display/WindowContent.swift
@@ -280,7 +280,7 @@ public class Window1 {
private var deviceMetrics: DeviceMetrics
private let statusBarHost: StatusBarHost?
- private let statusBarManager: StatusBarManager?
+ //private let statusBarManager: StatusBarManager?
private let keyboardManager: KeyboardManager?
private let keyboardViewManager: KeyboardViewManager?
private var statusBarChangeObserver: AnyObject?
@@ -312,7 +312,7 @@ public class Window1 {
public private(set) var forceInCallStatusBarText: String? = nil
public var inCallNavigate: (() -> Void)? {
didSet {
- self.statusBarManager?.inCallNavigate = self.inCallNavigate
+ //self.statusBarManager?.inCallNavigate = self.inCallNavigate
}
}
@@ -323,21 +323,17 @@ public class Window1 {
private var keyboardTypeChangeTimer: SwiftSignalKit.Timer?
- private let volumeControlStatusBar: VolumeControlStatusBar
- private let volumeControlStatusBarNode: VolumeControlStatusBarNode
+ //private let volumeControlStatusBar: VolumeControlStatusBar
+ //private let volumeControlStatusBarNode: VolumeControlStatusBarNode
private var isInteractionBlocked = false
- /*private var accessibilityElements: [Any]? {
- return self.viewController?.view.accessibilityElements
- }*/
-
public init(hostView: WindowHostView, statusBarHost: StatusBarHost?) {
self.hostView = hostView
- self.volumeControlStatusBar = VolumeControlStatusBar(frame: CGRect(origin: CGPoint(x: 0.0, y: -20.0), size: CGSize(width: 100.0, height: 20.0)), shouldBeVisible: statusBarHost?.handleVolumeControl ?? .single(false))
- self.volumeControlStatusBarNode = VolumeControlStatusBarNode()
- self.volumeControlStatusBarNode.isHidden = true
+ //self.volumeControlStatusBar = VolumeControlStatusBar(frame: CGRect(origin: CGPoint(x: 0.0, y: -20.0), size: CGSize(width: 100.0, height: 20.0)), shouldBeVisible: statusBarHost?.handleVolumeControl ?? .single(false))
+ //self.volumeControlStatusBarNode = VolumeControlStatusBarNode()
+ //self.volumeControlStatusBarNode.isHidden = true
let boundsSize = self.hostView.eventView.bounds.size
self.deviceMetrics = DeviceMetrics(screenSize: UIScreen.main.bounds.size, statusBarHeight: statusBarHost?.statusBarFrame.height ?? defaultStatusBarHeight, onScreenNavigationHeight: self.hostView.onScreenNavigationHeight)
@@ -346,12 +342,12 @@ public class Window1 {
let statusBarHeight: CGFloat
if let statusBarHost = statusBarHost {
statusBarHeight = statusBarHost.statusBarFrame.size.height
- self.statusBarManager = StatusBarManager(host: statusBarHost, volumeControlStatusBar: self.volumeControlStatusBar, volumeControlStatusBarNode: self.volumeControlStatusBarNode)
+ //self.statusBarManager = StatusBarManager(host: statusBarHost, volumeControlStatusBar: self.volumeControlStatusBar, volumeControlStatusBarNode: self.volumeControlStatusBarNode)
self.keyboardManager = KeyboardManager(host: statusBarHost)
self.keyboardViewManager = KeyboardViewManager(host: statusBarHost)
} else {
statusBarHeight = self.deviceMetrics.statusBarHeight
- self.statusBarManager = nil
+ //self.statusBarManager = nil
self.keyboardManager = nil
self.keyboardViewManager = nil
}
@@ -394,7 +390,7 @@ public class Window1 {
}
self.hostView.layoutSubviews = { [weak self] in
- self?.layoutSubviews()
+ self?.layoutSubviews(force: false)
}
self.hostView.updateToInterfaceOrientation = { [weak self] orientation in
@@ -433,7 +429,7 @@ public class Window1 {
}*/
self.presentationContext.view = self.hostView.containerView
- self.presentationContext.volumeControlStatusBarNodeView = self.volumeControlStatusBarNode.view
+ //self.presentationContext.volumeControlStatusBarNodeView = self.volumeControlStatusBarNode.view
self.presentationContext.containerLayoutUpdated(containedLayoutForWindowLayout(self.windowLayout, deviceMetrics: self.deviceMetrics), transition: .immediate)
self.overlayPresentationContext.containerLayoutUpdated(containedLayoutForWindowLayout(self.windowLayout, deviceMetrics: self.deviceMetrics), transition: .immediate)
@@ -455,7 +451,7 @@ public class Window1 {
keyboardHeight = max(0.0, keyboardHeight - 24.0)
}
- print("keyboardHeight: \(keyboardHeight)")
+ //print("rotation keyboardHeight: \(keyboardHeight)")
var duration: Double = (notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0.0
if duration > Double.ulpOfOne {
@@ -483,12 +479,33 @@ public class Window1 {
}
}
+ var popoverDelta: CGFloat = 0.0
+
let screenHeight: CGFloat
var inPopover = false
if keyboardFrame.width.isEqual(to: UIScreen.main.bounds.width) {
+ var portraitScreenSize = UIScreen.main.bounds.size
+ if portraitScreenSize.width > portraitScreenSize.height {
+ portraitScreenSize = CGSize(width: portraitScreenSize.height, height: portraitScreenSize.width)
+ }
+ var portraitLayoutSize = strongSelf.windowLayout.size
+ if portraitLayoutSize.width > portraitLayoutSize.height {
+ portraitLayoutSize = CGSize(width: portraitLayoutSize.height, height: portraitLayoutSize.width)
+ }
if abs(strongSelf.windowLayout.size.height - UIScreen.main.bounds.height) > 41.0 {
+ if abs(portraitLayoutSize.height - portraitScreenSize.height) > 41.0 || abs(portraitLayoutSize.width - portraitScreenSize.width) > 41.0 {
+ popoverDelta = 48.0
+ inPopover = true
+ screenHeight = strongSelf.windowLayout.size.height
+ } else {
+ screenHeight = UIScreen.main.bounds.height
+ }
+ } else if abs(strongSelf.windowLayout.size.height - UIScreen.main.bounds.height) > 39.0 {
screenHeight = UIScreen.main.bounds.height
- inPopover = true
+ if abs(portraitLayoutSize.height - portraitScreenSize.height) > 39.0 || abs(portraitLayoutSize.width - portraitScreenSize.width) > 39.0 {
+ popoverDelta = 40.0
+ inPopover = true
+ }
} else {
screenHeight = strongSelf.windowLayout.size.height
}
@@ -503,14 +520,16 @@ public class Window1 {
keyboardHeight = max(0.0, screenHeight - keyboardFrame.minY)
if inPopover {
if strongSelf.windowLayout.onScreenNavigationHeight != nil {
- keyboardHeight = max(0.0, keyboardHeight - 24.0)
+ if !keyboardHeight.isZero {
+ keyboardHeight = max(0.0, keyboardHeight + popoverDelta / 2.0)
+ }
} else {
- keyboardHeight = max(0.0, keyboardHeight - 48.0)
+ keyboardHeight = max(0.0, keyboardHeight - popoverDelta)
}
}
}
- print("keyboardHeight: \(keyboardHeight)")
+ print("keyboardHeight: \(keyboardHeight) (raw: \(keyboardFrame))")
var duration: Double = (notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0.0
if duration > Double.ulpOfOne {
@@ -586,8 +605,8 @@ public class Window1 {
self.windowPanRecognizer = recognizer
self.hostView.containerView.addGestureRecognizer(recognizer)
- self.hostView.containerView.addSubview(self.volumeControlStatusBar)
- self.hostView.containerView.addSubview(self.volumeControlStatusBarNode.view)
+ //self.hostView.containerView.addSubview(self.volumeControlStatusBar)
+ //self.hostView.containerView.addSubview(self.volumeControlStatusBarNode.view)
}
public required init(coder aDecoder: NSCoder) {
@@ -613,7 +632,7 @@ public class Window1 {
}
public func setupVolumeControlStatusBarGraphics(_ graphics: (UIImage, UIImage, UIImage)) {
- self.volumeControlStatusBarNode.graphics = graphics
+ //self.volumeControlStatusBarNode.graphics = graphics
}
public func setForceInCallStatusBar(_ forceInCallStatusBarText: String?, transition: ContainedViewLayoutTransition = .animated(duration: 0.3, curve: .easeInOut)) {
@@ -701,6 +720,9 @@ public class Window1 {
transition = .immediate
}
self.updateLayout { $0.update(size: value, metrics: layoutMetricsForScreenSize(value), safeInsets: self.deviceMetrics.safeInsets(inLandscape: value.width > value.height), forceInCallStatusBarText: self.forceInCallStatusBarText, transition: transition, overrideTransition: true) }
+ if let statusBarHost = self.statusBarHost, !statusBarHost.isApplicationInForeground {
+ self.layoutSubviews(force: true)
+ }
}
private var _rootController: ContainableController?
@@ -718,6 +740,9 @@ public class Window1 {
if let rootController = rootController as? NavigationController {
rootController.statusBarHost = self.statusBarHost
rootController.keyboardViewManager = self.keyboardViewManager
+ rootController.inCallNavigate = { [weak self] in
+ self?.inCallNavigate?()
+ }
}
if !self.windowLayout.size.width.isZero && !self.windowLayout.size.height.isZero {
rootController.displayNode.frame = CGRect(origin: CGPoint(), size: self.windowLayout.size)
@@ -738,6 +763,9 @@ public class Window1 {
}
set(value) {
for controller in self._topLevelOverlayControllers {
+ if let controller = controller as? ViewController {
+ controller.statusBar.alphaUpdated = nil
+ }
controller.view.removeFromSuperview()
}
self._topLevelOverlayControllers = value
@@ -750,7 +778,25 @@ public class Window1 {
if let coveringView = self.coveringView {
self.hostView.containerView.insertSubview(controller.view, belowSubview: coveringView)
} else {
- self.hostView.containerView.insertSubview(controller.view, belowSubview: self.volumeControlStatusBarNode.view)
+ self.hostView.containerView.addSubview(controller.view)
+ }
+
+ if let controller = controller as? ViewController {
+ controller.statusBar.alphaUpdated = { [weak self] transition in
+ guard let strongSelf = self, let navigationController = strongSelf._rootController as? NavigationController else {
+ return
+ }
+ var isStatusBarHidden: Bool = false
+ for controller in strongSelf._topLevelOverlayControllers {
+ if let controller = controller as? ViewController {
+ if case .Hide = controller.statusBar.statusBarStyle {
+ isStatusBarHidden = true
+ }
+ }
+ }
+
+ navigationController.updateExternalStatusBarHidden(isStatusBarHidden, transition: .animated(duration: 0.3, curve: .easeInOut))
+ }
}
}
@@ -771,7 +817,7 @@ public class Window1 {
coveringView.layer.removeAnimation(forKey: "opacity")
coveringView.layer.allowsGroupOpacity = false
coveringView.alpha = 1.0
- self.hostView.containerView.insertSubview(coveringView, belowSubview: self.volumeControlStatusBarNode.view)
+ self.hostView.containerView.addSubview(coveringView)
if !self.windowLayout.size.width.isZero {
coveringView.frame = CGRect(origin: CGPoint(), size: self.windowLayout.size)
coveringView.updateLayout(self.windowLayout.size)
@@ -781,7 +827,7 @@ public class Window1 {
}
}
- private func layoutSubviews() {
+ private func layoutSubviews(force: Bool) {
var hasPreview = false
var updatedHasPreview = false
for subview in self.hostView.eventView.subviews {
@@ -796,7 +842,7 @@ public class Window1 {
updatedHasPreview = true
}
- if self.tracingStatusBarsInvalidated || updatedHasPreview, let statusBarManager = statusBarManager, let keyboardManager = keyboardManager {
+ if self.tracingStatusBarsInvalidated || updatedHasPreview, let keyboardManager = keyboardManager {
self.tracingStatusBarsInvalidated = false
/*if self.statusBarHidden {
@@ -902,7 +948,9 @@ public class Window1 {
}
}
- if !UIWindow.isDeviceRotating() {
+ if force {
+ self.commitUpdatingLayout()
+ } else if !UIWindow.isDeviceRotating() {
if !self.hostView.isUpdatingOrientationLayout {
self.commitUpdatingLayout()
} else {
@@ -967,6 +1015,9 @@ public class Window1 {
let boundsSize = updatingLayout.layout.size
let isLandscape = boundsSize.width > boundsSize.height
var statusBarHeight: CGFloat? = self.deviceMetrics.statusBarHeight(for: boundsSize)
+ if let statusBarHeightValue = statusBarHeight, let statusBarHost = self.statusBarHost {
+ statusBarHeight = max(statusBarHeightValue, statusBarHost.statusBarFrame.size.height)
+ }
if self.deviceMetrics.type == .tablet, let onScreenNavigationHeight = self.hostView.onScreenNavigationHeight, onScreenNavigationHeight != self.deviceMetrics.onScreenNavigationHeight(inLandscape: false) {
self.deviceMetrics = DeviceMetrics(screenSize: UIScreen.main.bounds.size, statusBarHeight: statusBarHeight ?? defaultStatusBarHeight, onScreenNavigationHeight: onScreenNavigationHeight)
@@ -1023,8 +1074,8 @@ public class Window1 {
})
}
- self.volumeControlStatusBarNode.frame = CGRect(origin: CGPoint(), size: self.windowLayout.size)
- self.volumeControlStatusBarNode.updateLayout(layout: childLayout, transition: updatingLayout.transition)
+ //self.volumeControlStatusBarNode.frame = CGRect(origin: CGPoint(), size: self.windowLayout.size)
+ //self.volumeControlStatusBarNode.updateLayout(layout: childLayout, transition: updatingLayout.transition)
if let coveringView = self.coveringView {
coveringView.frame = CGRect(origin: CGPoint(), size: self.windowLayout.size)
@@ -1035,7 +1086,11 @@ public class Window1 {
}
public func present(_ controller: ContainableController, on level: PresentationSurfaceLevel, blockInteraction: Bool = false, completion: @escaping () -> Void = {}) {
- self.presentationContext.present(controller, on: level, blockInteraction: blockInteraction, completion: completion)
+ if level.rawValue <= 3, let navigationController = self._rootController as? NavigationController, let controller = controller as? ViewController {
+ navigationController.presentOverlay(controller: controller, inGlobal: false)
+ } else {
+ self.presentationContext.present(controller, on: level, blockInteraction: blockInteraction, completion: completion)
+ }
}
public func presentInGlobalOverlay(_ controller: ContainableController) {
diff --git a/submodules/GalleryUI/Sources/GalleryControllerNode.swift b/submodules/GalleryUI/Sources/GalleryControllerNode.swift
index 92d0f0f082..31a920962c 100644
--- a/submodules/GalleryUI/Sources/GalleryControllerNode.swift
+++ b/submodules/GalleryUI/Sources/GalleryControllerNode.swift
@@ -275,14 +275,14 @@ open class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGesture
UIView.animate(withDuration: 0.3, animations: {
let alpha: CGFloat = self.areControlsHidden ? 0.0 : 1.0
self.navigationBar?.alpha = alpha
- self.statusBar?.alpha = alpha
+ self.statusBar?.updateAlpha(alpha, transition: .animated(duration: 0.3, curve: .easeInOut))
self.footerNode.alpha = alpha
self.updateThumbnailContainerNodeAlpha(.immediate)
})
} else {
let alpha: CGFloat = self.areControlsHidden ? 0.0 : 1.0
self.navigationBar?.alpha = alpha
- self.statusBar?.alpha = alpha
+ self.statusBar?.updateAlpha(alpha, transition: .immediate)
self.footerNode.alpha = alpha
self.updateThumbnailContainerNodeAlpha(.immediate)
}
@@ -374,7 +374,11 @@ open class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGesture
self.updateThumbnailContainerNodeAlpha(.immediate)
if !self.areControlsHidden {
- self.statusBar?.alpha = transition
+ if transition < 0.5 {
+ self.statusBar?.statusBarStyle = .Ignore
+ } else {
+ self.statusBar?.statusBarStyle = .White
+ }
self.navigationBar?.alpha = transition
self.footerNode.alpha = transition
diff --git a/submodules/InstantPageUI/Sources/InstantPageReferenceController.swift b/submodules/InstantPageUI/Sources/InstantPageReferenceController.swift
index 2f89939908..02ef3e2080 100644
--- a/submodules/InstantPageUI/Sources/InstantPageReferenceController.swift
+++ b/submodules/InstantPageUI/Sources/InstantPageReferenceController.swift
@@ -52,8 +52,6 @@ final class InstantPageReferenceController: ViewController {
override public func loadView() {
super.loadView()
-
- self.statusBar.removeFromSupernode()
}
override public func viewDidAppear(_ animated: Bool) {
diff --git a/submodules/JoinLinkPreviewUI/Sources/JoinLinkPreviewController.swift b/submodules/JoinLinkPreviewUI/Sources/JoinLinkPreviewController.swift
index 692cf1e83f..7332e5b9ac 100644
--- a/submodules/JoinLinkPreviewUI/Sources/JoinLinkPreviewController.swift
+++ b/submodules/JoinLinkPreviewUI/Sources/JoinLinkPreviewController.swift
@@ -31,6 +31,8 @@ public final class JoinLinkPreviewController: ViewController {
self.presentationData = context.sharedContext.currentPresentationData.with { $0 }
super.init(navigationBarPresentationData: nil)
+
+ self.statusBar.statusBarStyle = .Ignore
}
required public init(coder aDecoder: NSCoder) {
@@ -76,8 +78,6 @@ public final class JoinLinkPreviewController: ViewController {
override public func loadView() {
super.loadView()
-
- self.statusBar.removeFromSupernode()
}
override public func viewDidAppear(_ animated: Bool) {
diff --git a/submodules/LanguageLinkPreviewUI/Sources/LanguageLinkPreviewController.swift b/submodules/LanguageLinkPreviewUI/Sources/LanguageLinkPreviewController.swift
index ad210a0ce0..1d604ca476 100644
--- a/submodules/LanguageLinkPreviewUI/Sources/LanguageLinkPreviewController.swift
+++ b/submodules/LanguageLinkPreviewUI/Sources/LanguageLinkPreviewController.swift
@@ -30,6 +30,8 @@ public final class LanguageLinkPreviewController: ViewController {
self.presentationData = context.sharedContext.currentPresentationData.with { $0 }
super.init(navigationBarPresentationData: nil)
+
+ self.statusBar.statusBarStyle = .Ignore
}
required public init(coder aDecoder: NSCoder) {
@@ -85,8 +87,6 @@ public final class LanguageLinkPreviewController: ViewController {
override public func loadView() {
super.loadView()
-
- self.statusBar.removeFromSupernode()
}
override public func viewDidAppear(_ animated: Bool) {
diff --git a/submodules/LegacyComponents/LegacyComponents/TGCameraController.m b/submodules/LegacyComponents/LegacyComponents/TGCameraController.m
index 6c104bdb28..37b5a2b97b 100644
--- a/submodules/LegacyComponents/LegacyComponents/TGCameraController.m
+++ b/submodules/LegacyComponents/LegacyComponents/TGCameraController.m
@@ -739,7 +739,7 @@ static CGPoint TGCameraControllerClampPointToScreenSize(__unused id self, __unus
[UIView animateWithDuration:0.3f animations:^
{
- [_context setApplicationStatusBarAlpha:1.0f];
+ //[_context setApplicationStatusBarAlpha:1.0f];
}];
}
@@ -1816,7 +1816,7 @@ static CGPoint TGCameraControllerClampPointToScreenSize(__unused id self, __unus
[UIView animateWithDuration:0.3f animations:^
{
- [_context setApplicationStatusBarAlpha:1.0f];
+ //[_context setApplicationStatusBarAlpha:1.0f];
}];
[self setInterfaceHidden:true animated:true];
@@ -1892,7 +1892,7 @@ static CGPoint TGCameraControllerClampPointToScreenSize(__unused id self, __unus
{
_finishedWithResult = true;
- [_context setApplicationStatusBarAlpha:1.0f];
+ //[_context setApplicationStatusBarAlpha:1.0f];
self.view.hidden = true;
diff --git a/submodules/LegacyComponents/LegacyComponents/TGModernGalleryController.m b/submodules/LegacyComponents/LegacyComponents/TGModernGalleryController.m
index 6dd12ae19d..ec597512c5 100644
--- a/submodules/LegacyComponents/LegacyComponents/TGModernGalleryController.m
+++ b/submodules/LegacyComponents/LegacyComponents/TGModernGalleryController.m
@@ -93,13 +93,15 @@
- (BOOL)prefersStatusBarHidden
{
- if (!TGIsPad() && iosMajorVersion() >= 11 && UIInterfaceOrientationIsLandscape([[LegacyComponentsGlobals provider] applicationStatusBarOrientation]))
+ return true;
+
+ /*if (!TGIsPad() && iosMajorVersion() >= 11 && UIInterfaceOrientationIsLandscape([[LegacyComponentsGlobals provider] applicationStatusBarOrientation]))
return true;
if (self.childViewControllers.count > 0)
return [self.childViewControllers.lastObject prefersStatusBarHidden];
- return [super prefersStatusBarHidden];
+ return [super prefersStatusBarHidden];*/
}
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
@@ -262,7 +264,7 @@
{
[UIView animateWithDuration:0.2 animations:^
{
- [strongSelf->_context setApplicationStatusBarAlpha:1.0f];
+ //[strongSelf->_context setApplicationStatusBarAlpha:1.0f];
}];
}
@@ -533,7 +535,7 @@
{
[UIView animateWithDuration:0.2 animations:^
{
- [strongSelf->_context setApplicationStatusBarAlpha:1.0f];
+ //[strongSelf->_context setApplicationStatusBarAlpha:1.0f];
}];
}
@@ -1155,7 +1157,7 @@ static CGFloat transformRotation(CGAffineTransform transform)
{
[UIView animateWithDuration:0.2 animations:^
{
- [_context setApplicationStatusBarAlpha:1.0f];
+ //[_context setApplicationStatusBarAlpha:1.0f];
}];
}
}
@@ -1228,7 +1230,7 @@ static CGFloat transformRotation(CGAffineTransform transform)
if (self.adjustsStatusBarVisibility)
{
- [_context setApplicationStatusBarAlpha:1.0f];
+ //[_context setApplicationStatusBarAlpha:1.0f];
}
}
diff --git a/submodules/LegacyComponents/LegacyComponents/TGPhotoEditorController.m b/submodules/LegacyComponents/LegacyComponents/TGPhotoEditorController.m
index ba3da96b98..ecab32e66d 100644
--- a/submodules/LegacyComponents/LegacyComponents/TGPhotoEditorController.m
+++ b/submodules/LegacyComponents/LegacyComponents/TGPhotoEditorController.m
@@ -475,12 +475,12 @@
{
[UIView animateWithDuration:0.3 animations:^
{
- [_context setApplicationStatusBarAlpha:1.0f];
+ //[_context setApplicationStatusBarAlpha:1.0f];
}];
}
else
{
- [_context setApplicationStatusBarAlpha:1.0f];
+ //[_context setApplicationStatusBarAlpha:1.0f];
}
}
diff --git a/submodules/LegacyUI/Sources/LegacyController.swift b/submodules/LegacyUI/Sources/LegacyController.swift
index 1a617c6021..406f5e5581 100644
--- a/submodules/LegacyUI/Sources/LegacyController.swift
+++ b/submodules/LegacyUI/Sources/LegacyController.swift
@@ -247,7 +247,7 @@ public final class LegacyControllerContext: NSObject, LegacyComponentsContext {
public func setApplicationStatusBarAlpha(_ alpha: CGFloat) {
if let controller = self.controller {
- controller.statusBar.alpha = alpha
+ controller.statusBar.updateAlpha(alpha, transition: .immediate)
self.updateDeferScreenEdgeGestures()
}
}
diff --git a/submodules/LocalizedPeerData/Sources/PeerTitle.swift b/submodules/LocalizedPeerData/Sources/PeerTitle.swift
index 6f4fdd0d0b..6230f7a2c5 100644
--- a/submodules/LocalizedPeerData/Sources/PeerTitle.swift
+++ b/submodules/LocalizedPeerData/Sources/PeerTitle.swift
@@ -21,6 +21,8 @@ public extension Peer {
}
} else if let lastName = user.lastName {
return lastName
+ } else if let phone = user.phone {
+ return "+\(phone)"
} else {
return strings.User_DeletedAccount
}
diff --git a/submodules/MtProtoKit/MTBackupAddressSignals.m b/submodules/MtProtoKit/MTBackupAddressSignals.m
index db3a478091..e61432f0c0 100644
--- a/submodules/MtProtoKit/MTBackupAddressSignals.m
+++ b/submodules/MtProtoKit/MTBackupAddressSignals.m
@@ -71,19 +71,23 @@ static NSData *base64_decode(NSString *str) {
+ (MTSignal *)fetchBackupIpsResolveGoogle:(bool)isTesting phoneNumber:(NSString *)phoneNumber currentContext:(MTContext *)currentContext addressOverride:(NSString *)addressOverride {
NSArray *hosts = @[
- @"google.com",
- @"www.google.com",
- @"google.ru"
+ @[@"dns.google.com", @""],
+ @[@"www.google.com", @"dns.google.com"],
];
- NSDictionary *headers = @{@"Host": @"dns.google.com"};
NSMutableArray *signals = [[NSMutableArray alloc] init];
- for (NSString *host in hosts) {
+ for (NSArray *hostAndHostname in hosts) {
+ NSString *host = hostAndHostname[0];
+ NSString *hostName = hostAndHostname[1];
+ NSMutableDictionary *headers = [[NSMutableDictionary alloc] init];
+ if ([hostName length] != 0) {
+ headers[@"Host"] = hostName;
+ }
NSString *apvHost = @"apv3.stel.com";
if (addressOverride != nil) {
apvHost = addressOverride;
}
- MTSignal *signal = [[[MTHttpRequestOperation dataForHttpUrl:[NSURL URLWithString:[NSString stringWithFormat:@"https://%@/resolve?name=%@&type=16", host, isTesting ? @"tapv3.stel.com" : apvHost]] headers:headers] mapToSignal:^MTSignal *(NSData *data) {
+ MTSignal *signal = [[[MTHttpRequestOperation dataForHttpUrl:[NSURL URLWithString:[NSString stringWithFormat:@"https://%@/resolve?name=%@&type=16&random_padding=%@", host, isTesting ? @"tapv3.stel.com" : apvHost, makeRandomPadding()]] headers:headers] mapToSignal:^MTSignal *(NSData *data) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
if ([dict respondsToSelector:@selector(objectForKey:)]) {
NSArray *answer = dict[@"Answer"];
@@ -132,6 +136,90 @@ static NSData *base64_decode(NSString *str) {
return [[MTSignal mergeSignals:signals] take:1];
}
+static NSString *makeRandomPadding() {
+ char validCharacters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+ int maxIndex = sizeof(validCharacters) - 1;
+
+ int minPadding = 13;
+ int maxPadding = 128;
+ int padding = minPadding + arc4random_uniform(maxPadding - minPadding);
+ NSMutableData *result = [[NSMutableData alloc] initWithLength:padding];
+ for (NSUInteger i = 0; i < result.length; i++) {
+ int index = arc4random_uniform(maxIndex);
+ assert(index >= 0 && index < maxIndex);
+ ((uint8_t *)(result.mutableBytes))[i] = validCharacters[index];
+ }
+ NSString *string = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
+ return string;
+}
+
++ (MTSignal *)fetchBackupIpsResolveCloudflare:(bool)isTesting phoneNumber:(NSString *)phoneNumber currentContext:(MTContext *)currentContext addressOverride:(NSString *)addressOverride {
+ NSArray *hosts = @[
+ @[@"mozilla.cloudflare-dns.com", @""],
+ ];
+
+ NSMutableArray *signals = [[NSMutableArray alloc] init];
+ for (NSArray *hostAndHostname in hosts) {
+ NSString *host = hostAndHostname[0];
+ NSString *hostName = hostAndHostname[1];
+ NSMutableDictionary *headers = [[NSMutableDictionary alloc] init];
+ headers[@"accept"] = @"application/dns-json";
+ if ([hostName length] != 0) {
+ headers[@"Host"] = hostName;
+ }
+ NSString *apvHost = @"apv3.stel.com";
+ if (addressOverride != nil) {
+ apvHost = addressOverride;
+ }
+ MTSignal *signal = [[[MTHttpRequestOperation dataForHttpUrl:[NSURL URLWithString:[NSString stringWithFormat:@"https://%@/dns-query?name=%@&type=16&random_padding=%@", host, isTesting ? @"tapv3.stel.com" : apvHost, makeRandomPadding()]] headers:headers] mapToSignal:^MTSignal *(NSData *data) {
+ NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
+ if ([dict respondsToSelector:@selector(objectForKey:)]) {
+ NSArray *answer = dict[@"Answer"];
+ NSMutableArray *strings = [[NSMutableArray alloc] init];
+ if ([answer respondsToSelector:@selector(objectAtIndex:)]) {
+ for (NSDictionary *value in answer) {
+ if ([value respondsToSelector:@selector(objectForKey:)]) {
+ NSString *part = value[@"data"];
+ if ([part respondsToSelector:@selector(characterAtIndex:)]) {
+ [strings addObject:part];
+ }
+ }
+ }
+ [strings sortUsingComparator:^NSComparisonResult(NSString *lhs, NSString *rhs) {
+ if (lhs.length > rhs.length) {
+ return NSOrderedAscending;
+ } else {
+ return NSOrderedDescending;
+ }
+ }];
+
+ NSString *finalString = @"";
+ for (NSString *string in strings) {
+ finalString = [finalString stringByAppendingString:[string stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"="]]];
+ }
+
+ NSData *result = base64_decode(finalString);
+ NSMutableData *finalData = [[NSMutableData alloc] initWithData:result];
+ [finalData setLength:256];
+ MTBackupDatacenterData *datacenterData = MTIPDataDecode(finalData, phoneNumber);
+ if (datacenterData != nil && [self checkIpData:datacenterData timestamp:(int32_t)[currentContext globalTime] source:@"resolveCloudflare"]) {
+ return [MTSignal single:datacenterData];
+ }
+ }
+ }
+ return [MTSignal complete];
+ }] catch:^MTSignal *(__unused id error) {
+ return [MTSignal complete];
+ }];
+ if (signals.count != 0) {
+ signal = [signal delay:signals.count onQueue:[[MTQueue alloc] init]];
+ }
+ [signals addObject:signal];
+ }
+
+ return [[MTSignal mergeSignals:signals] take:1];
+}
+
+ (MTSignal *)fetchConfigFromAddress:(MTBackupDatacenterAddress *)address currentContext:(MTContext *)currentContext {
MTApiEnvironment *apiEnvironment = [currentContext.apiEnvironment copy];
@@ -210,11 +298,18 @@ static NSData *base64_decode(NSString *str) {
+ (MTSignal * _Nonnull)fetchBackupIps:(bool)isTestingEnvironment currentContext:(MTContext * _Nonnull)currentContext additionalSource:(MTSignal * _Nullable)additionalSource phoneNumber:(NSString * _Nullable)phoneNumber {
NSMutableArray *signals = [[NSMutableArray alloc] init];
[signals addObject:[self fetchBackupIpsResolveGoogle:isTestingEnvironment phoneNumber:phoneNumber currentContext:currentContext addressOverride:currentContext.apiEnvironment.accessHostOverride]];
+ [signals addObject:[self fetchBackupIpsResolveCloudflare:isTestingEnvironment phoneNumber:phoneNumber currentContext:currentContext addressOverride:currentContext.apiEnvironment.accessHostOverride]];
if (additionalSource != nil) {
-/*#if DEBUG
- [signals removeAllObjects];
-#endif*/
- [signals addObject:additionalSource];
+ [signals addObject:[additionalSource mapToSignal:^MTSignal *(MTBackupDatacenterData *datacenterData) {
+ if (![datacenterData isKindOfClass:[MTBackupDatacenterData class]]) {
+ return [MTSignal complete];
+ }
+ if (datacenterData != nil && [self checkIpData:datacenterData timestamp:(int32_t)[currentContext globalTime] source:@"resolveExternal"]) {
+ return [MTSignal single:datacenterData];
+ } else {
+ return [MTSignal complete];
+ }
+ }]];
}
return [[[MTSignal mergeSignals:signals] take:1] mapToSignal:^MTSignal *(MTBackupDatacenterData *data) {
diff --git a/submodules/MtProtoKit/MTProtoKit/MTEncryption.m b/submodules/MtProtoKit/MTProtoKit/MTEncryption.m
index 4e778873f9..0d8e1ff568 100644
--- a/submodules/MtProtoKit/MTProtoKit/MTEncryption.m
+++ b/submodules/MtProtoKit/MTProtoKit/MTEncryption.m
@@ -964,6 +964,9 @@ static NSData *decrypt_TL_data(unsigned char buffer[256]) {
@end
MTBackupDatacenterData *MTIPDataDecode(NSData *data, NSString *phoneNumber) {
+ if (data.length < 256) {
+ return nil;
+ }
unsigned char buffer[256];
memcpy(buffer, data.bytes, 256);
NSData *result = decrypt_TL_data(buffer);
diff --git a/submodules/MtProtoKit/MTProtoKit/MTHttpRequestOperation.m b/submodules/MtProtoKit/MTProtoKit/MTHttpRequestOperation.m
index 82ddcb0f82..0e1a47f41b 100644
--- a/submodules/MtProtoKit/MTProtoKit/MTHttpRequestOperation.m
+++ b/submodules/MtProtoKit/MTProtoKit/MTHttpRequestOperation.m
@@ -36,7 +36,7 @@
[subscriber putCompletion];
} failure:^(__unused NSOperation *operation, __unused NSError *error)
{
- [subscriber putError:nil];
+ [subscriber putError:error];
}];
[operation start];
diff --git a/submodules/MtProtoKit/TON/TON.h b/submodules/MtProtoKit/TON/TON.h
index 5a53464b47..e385edf3d3 100644
--- a/submodules/MtProtoKit/TON/TON.h
+++ b/submodules/MtProtoKit/TON/TON.h
@@ -92,6 +92,7 @@ NS_ASSUME_NONNULL_BEGIN
- (MTSignal *)exportKey:(TONKey *)key localPassword:(NSData *)localPassword;
- (MTSignal *)importKeyWithLocalPassword:(NSData *)localPassword mnemonicPassword:(NSData *)mnemonicPassword wordList:(NSArray *)wordList;
- (MTSignal *)deleteKey:(TONKey *)key;
+- (MTSignal *)deleteAllKeys;
- (MTSignal *)getTransactionListWithAddress:(NSString * _Nonnull)address lt:(int64_t)lt hash:(NSData * _Nonnull)hash;
@end
diff --git a/submodules/MtProtoKit/TON/TON.mm b/submodules/MtProtoKit/TON/TON.mm
index 4624a00048..0936366688 100644
--- a/submodules/MtProtoKit/TON/TON.mm
+++ b/submodules/MtProtoKit/TON/TON.mm
@@ -325,10 +325,12 @@ typedef enum {
make_object(
configString.UTF8String,
blockchainName.UTF8String,
- false,
+ true,
false
),
- keystoreDirectory.UTF8String
+ make_object(
+ keystoreDirectory.UTF8String
+ )
));
_client->send({ requestId, std::move(query) });
@@ -636,6 +638,28 @@ typedef enum {
}] startOn:[MTQueue mainQueue]] deliverOn:[MTQueue mainQueue]];
}
+- (MTSignal *)deleteAllKeys {
+ return [[[[MTSignal alloc] initWithGenerator:^id(MTSubscriber *subscriber) {
+ uint64_t requestId = _nextRequestId;
+ _nextRequestId += 1;
+
+ _requestHandlers[@(requestId)] = [[TONRequestHandler alloc] initWithCompletion:^(tonlib_api::object_ptr &object) {
+ if (object->get_id() == tonlib_api::error::ID) {
+ auto error = tonlib_api::move_object_as(object);
+ [subscriber putError:[[TONError alloc] initWithText:[[NSString alloc] initWithUTF8String:error->message_.c_str()]]];
+ } else {
+ [subscriber putCompletion];
+ }
+ }];
+
+ auto query = make_object();
+ _client->send({ requestId, std::move(query) });
+
+ return [[MTBlockDisposable alloc] initWithBlock:^{
+ }];
+ }] startOn:[MTQueue mainQueue]] deliverOn:[MTQueue mainQueue]];
+}
+
- (MTSignal *)getTransactionListWithAddress:(NSString * _Nonnull)address lt:(int64_t)lt hash:(NSData * _Nonnull)hash {
return [[[[MTSignal alloc] initWithGenerator:^id(MTSubscriber *subscriber) {
NSData *addressData = [address dataUsingEncoding:NSUTF8StringEncoding];
diff --git a/submodules/SSignalKit/SwiftSignalKit/Signal_Catch.swift b/submodules/SSignalKit/SwiftSignalKit/Signal_Catch.swift
index 896b41b5ac..077c97d7ef 100644
--- a/submodules/SSignalKit/SwiftSignalKit/Signal_Catch.swift
+++ b/submodules/SSignalKit/SwiftSignalKit/Signal_Catch.swift
@@ -135,6 +135,55 @@ public func retry(_ delayIncrement: Double, maxDelay: Double, onQueue queu
}
}
+public func retry(retryOnError: @escaping (E) -> Bool, delayIncrement: Double, maxDelay: Double, maxRetries: Int, onQueue queue: Queue) -> (_ signal: Signal) -> Signal {
+ return { signal in
+ return Signal { subscriber in
+ let shouldRetry = Atomic(value: true)
+ let currentDelay = Atomic<(Double, Int)>(value: (0.0, 0))
+ let currentDisposable = MetaDisposable()
+
+ let start = recursiveFunction { recurse in
+ let currentShouldRetry = shouldRetry.with { value in
+ return value
+ }
+ if currentShouldRetry {
+ let disposable = signal.start(next: { next in
+ subscriber.putNext(next)
+ }, error: { error in
+ if !retryOnError(error) {
+ subscriber.putError(error)
+ } else {
+ let (delay, count) = currentDelay.modify { value, count in
+ return (min(maxDelay, value + delayIncrement), count + 1)
+ }
+
+ if count >= maxRetries {
+ subscriber.putError(error)
+ } else {
+ let time: DispatchTime = DispatchTime.now() + Double(delay)
+ queue.queue.asyncAfter(deadline: time, execute: {
+ recurse()
+ })
+ }
+ }
+ }, completed: {
+ let _ = shouldRetry.swap(false)
+ subscriber.putCompletion()
+ })
+ currentDisposable.set(disposable)
+ }
+ }
+
+ start()
+
+ return ActionDisposable {
+ currentDisposable.dispose()
+ let _ = shouldRetry.swap(false)
+ }
+ }
+ }
+}
+
public func restartIfError(_ signal: Signal) -> Signal {
return Signal { subscriber in
let shouldRetry = Atomic(value: true)
diff --git a/submodules/SettingsUI/Sources/EditSettingsController.swift b/submodules/SettingsUI/Sources/EditSettingsController.swift
index ee04356ba7..05cecda448 100644
--- a/submodules/SettingsUI/Sources/EditSettingsController.swift
+++ b/submodules/SettingsUI/Sources/EditSettingsController.swift
@@ -447,7 +447,7 @@ func editSettingsController(context: AccountContext, currentName: ItemListAvatar
(controller?.navigationController as? NavigationController)?.pushViewController(value)
}
presentControllerImpl = { [weak controller] value, arguments in
- controller?.present(value, in: .window(.root), with: arguments ?? ViewControllerPresentationArguments(presentationAnimation: .modalSheet))
+ controller?.present(value, in: .window(.root), with: arguments)
}
dismissImpl = { [weak controller] in
let _ = (controller?.navigationController as? NavigationController)?.popViewController(animated: true)
diff --git a/submodules/SettingsUI/Sources/SettingsController.swift b/submodules/SettingsUI/Sources/SettingsController.swift
index ef41ce122f..7069234fa9 100644
--- a/submodules/SettingsUI/Sources/SettingsController.swift
+++ b/submodules/SettingsUI/Sources/SettingsController.swift
@@ -1102,9 +1102,13 @@ public func settingsController(context: AccountContext, accountManager: AccountM
|> mapToSignal { context in
return context.account.postbox.preferencesView(keys: [PreferencesKeys.appConfiguration])
|> map { view -> Bool in
- let appConfiguration = view.values[PreferencesKeys.appConfiguration] as? AppConfiguration ?? .defaultValue
- let configuration = WalletConfiguration.with(appConfiguration: appConfiguration)
- return configuration.config != nil
+ if #available(iOSApplicationExtension 10.3, iOS 10.3, *) {
+ let appConfiguration = view.values[PreferencesKeys.appConfiguration] as? AppConfiguration ?? .defaultValue
+ let configuration = WalletConfiguration.with(appConfiguration: appConfiguration)
+ return configuration.config != nil
+ } else {
+ return false
+ }
}
}
@@ -1375,7 +1379,7 @@ public func settingsController(context: AccountContext, accountManager: AccountM
(controller?.navigationController as? NavigationController)?.replaceAllButRootController(value, animated: true, animationOptions: [.removeOnMasterDetails])
}
presentControllerImpl = { [weak controller] value, arguments in
- controller?.present(value, in: .window(.root), with: arguments ?? ViewControllerPresentationArguments(presentationAnimation: .modalSheet), blockInteraction: true)
+ controller?.present(value, in: .window(.root), with: arguments, blockInteraction: true)
}
presentInGlobalOverlayImpl = { [weak controller] value, arguments in
controller?.presentInGlobalOverlay(value, with: arguments)
diff --git a/submodules/SettingsUI/Sources/TabBarAccountSwitchController.swift b/submodules/SettingsUI/Sources/TabBarAccountSwitchController.swift
index ead8fcfb44..6c3beaa573 100644
--- a/submodules/SettingsUI/Sources/TabBarAccountSwitchController.swift
+++ b/submodules/SettingsUI/Sources/TabBarAccountSwitchController.swift
@@ -43,7 +43,7 @@ public final class TabBarAccountSwitchController: ViewController {
super.init(navigationBarPresentationData: nil)
- self.statusBar.statusBarStyle = .Hide
+ self.statusBar.statusBarStyle = .Ignore
self.statusBar.ignoreInCall = true
self.lockOrientation = true
diff --git a/submodules/SettingsUI/Sources/Terms of Service/TermsOfServiceController.swift b/submodules/SettingsUI/Sources/Terms of Service/TermsOfServiceController.swift
index 2beff53b73..bcddf5ae69 100644
--- a/submodules/SettingsUI/Sources/Terms of Service/TermsOfServiceController.swift
+++ b/submodules/SettingsUI/Sources/Terms of Service/TermsOfServiceController.swift
@@ -54,7 +54,7 @@ public extension TermsOfServiceControllerTheme {
}
}
-public class TermsOfServiceController: ViewController {
+public class TermsOfServiceController: ViewController, StandalonePresentableController {
private var controllerNode: TermsOfServiceControllerNode {
return self.displayNode as! TermsOfServiceControllerNode
}
diff --git a/submodules/SettingsUI/Sources/Themes/ThemePreviewControllerNode.swift b/submodules/SettingsUI/Sources/Themes/ThemePreviewControllerNode.swift
index bc518970b3..a58d47df20 100644
--- a/submodules/SettingsUI/Sources/Themes/ThemePreviewControllerNode.swift
+++ b/submodules/SettingsUI/Sources/Themes/ThemePreviewControllerNode.swift
@@ -271,6 +271,7 @@ final class ThemePreviewControllerNode: ASDisplayNode, UIScrollViewDelegate {
override func didLoad() {
super.didLoad()
+ self.scrollNode.view.disablesInteractiveTransitionGestureRecognizer = true
self.scrollNode.view.showsHorizontalScrollIndicator = false
self.scrollNode.view.isPagingEnabled = true
self.scrollNode.view.delegate = self
diff --git a/submodules/ShareController/Sources/ShareController.swift b/submodules/ShareController/Sources/ShareController.swift
index cfffee6998..e0b0f89941 100644
--- a/submodules/ShareController/Sources/ShareController.swift
+++ b/submodules/ShareController/Sources/ShareController.swift
@@ -228,6 +228,11 @@ public final class ShareController: ViewController {
return self.displayNode as! ShareControllerNode
}
+ private let _ready = Promise()
+ override public var ready: Promise {
+ return self._ready
+ }
+
private var animatedIn = false
private let sharedContext: SharedAccountContext
@@ -267,6 +272,8 @@ public final class ShareController: ViewController {
super.init(navigationBarPresentationData: nil)
+ self.statusBar.statusBarStyle = .Ignore
+
switch subject {
case let .url(text):
self.defaultAction = ShareControllerAction(title: self.presentationData.strings.ShareMenu_CopyShareLink, action: { [weak self] in
@@ -598,7 +605,7 @@ public final class ShareController: ViewController {
return .preparing
case let .done(items):
if let strongSelf = self, !items.isEmpty {
- strongSelf.ready.set(.single(true))
+ strongSelf._ready.set(.single(true))
var activityItems: [Any] = []
for item in items {
switch item {
@@ -663,13 +670,11 @@ public final class ShareController: ViewController {
strongSelf.controllerNode.updatePeers(account: strongSelf.currentAccount, switchableAccounts: strongSelf.switchableAccounts, peers: next.0, accountPeer: next.1, defaultAction: strongSelf.defaultAction)
}
}))
- self.ready.set(self.controllerNode.ready.get())
+ self._ready.set(self.controllerNode.ready.get())
}
override public func loadView() {
super.loadView()
-
- self.statusBar.removeFromSupernode()
}
override public func viewDidAppear(_ animated: Bool) {
diff --git a/submodules/TelegramCore/TelegramCore/ActiveSessionsContext.swift b/submodules/TelegramCore/TelegramCore/ActiveSessionsContext.swift
index 3efaf2cfe0..b71f867c9b 100644
--- a/submodules/TelegramCore/TelegramCore/ActiveSessionsContext.swift
+++ b/submodules/TelegramCore/TelegramCore/ActiveSessionsContext.swift
@@ -100,13 +100,7 @@ public final class ActiveSessionsContext {
return .complete()
}
- var mergedSessions = strongSelf._state.sessions
- for i in (0 ..< mergedSessions.count).reversed() {
- if mergedSessions[i].hash != 0 {
- mergedSessions.remove(at: i)
- break
- }
- }
+ let mergedSessions = strongSelf._state.sessions.filter({ $0.hash == 0 })
strongSelf._state = ActiveSessionsContextState(isLoadingMore: strongSelf._state.isLoadingMore, sessions: mergedSessions)
return .complete()
diff --git a/submodules/TelegramCore/TelegramCore/Network.swift b/submodules/TelegramCore/TelegramCore/Network.swift
index 29c8b45d51..e4626eb5b5 100644
--- a/submodules/TelegramCore/TelegramCore/Network.swift
+++ b/submodules/TelegramCore/TelegramCore/Network.swift
@@ -417,6 +417,8 @@ public struct NetworkInitializationArguments {
}
}
+private let cloudDataContext = makeCloudDataContext()
+
func initializedNetwork(arguments: NetworkInitializationArguments, supplementary: Bool, datacenterId: Int, keychain: Keychain, basePath: String, testingEnvironment: Bool, languageCode: String?, proxySettings: ProxySettings?, networkSettings: NetworkSettings?, phoneNumber: String?) -> Signal {
return Signal { subscriber in
let queue = Queue()
@@ -484,17 +486,18 @@ func initializedNetwork(arguments: NetworkInitializationArguments, supplementary
var wrappedAdditionalSource: MTSignal?
if #available(iOS 10.0, *) {
- let additionalSource = cloudDataAdditionalAddressSource(phoneNumber: .single(phoneNumber ?? ""))
- wrappedAdditionalSource = MTSignal(generator: { subscriber in
- let disposable = additionalSource.start(next: { value in
- subscriber?.putNext(value)
- }, completed: {
- subscriber?.putCompletion()
+ if let cloudDataContext = cloudDataContext {
+ wrappedAdditionalSource = MTSignal(generator: { subscriber in
+ let disposable = cloudDataContext.get(phoneNumber: .single(phoneNumber)).start(next: { value in
+ subscriber?.putNext(value)
+ }, completed: {
+ subscriber?.putCompletion()
+ })
+ return MTBlockDisposable(block: {
+ disposable.dispose()
+ })
})
- return MTBlockDisposable(block: {
- disposable.dispose()
- })
- })
+ }
}
context.setDiscoverBackupAddressListSignal(MTBackupAddressSignals.fetchBackupIps(testingEnvironment, currentContext: context, additionalSource: wrappedAdditionalSource, phoneNumber: phoneNumber))
@@ -1010,7 +1013,8 @@ public final class Network: NSObject, MTRequestMessageServiceDelegate {
}
public func retryRequest(signal: Signal) -> Signal {
- return signal |> retry(0.2, maxDelay: 5.0, onQueue: Queue.concurrentDefaultQueue())
+ return signal
+ |> retry(0.2, maxDelay: 5.0, onQueue: Queue.concurrentDefaultQueue())
}
class Keychain: NSObject, MTKeychain {
@@ -1045,7 +1049,7 @@ class Keychain: NSObject, MTKeychain {
}
}
-public func makeCloudDataContext() -> Any? {
+func makeCloudDataContext() -> CloudDataContext? {
if #available(iOS 10.0, *) {
return CloudDataContextImpl()
} else {
diff --git a/submodules/TelegramCore/TelegramCore/PeerUtils.swift b/submodules/TelegramCore/TelegramCore/PeerUtils.swift
index 20a7762670..6e3f3d50ba 100644
--- a/submodules/TelegramCore/TelegramCore/PeerUtils.swift
+++ b/submodules/TelegramCore/TelegramCore/PeerUtils.swift
@@ -129,7 +129,7 @@ public extension Peer {
var isDeleted: Bool {
switch self {
case let user as TelegramUser:
- return user.firstName == nil && user.lastName == nil
+ return user.firstName == nil && user.lastName == nil && user.phone == nil
default:
return false
}
diff --git a/submodules/TelegramCore/TelegramCore/Wallets.swift b/submodules/TelegramCore/TelegramCore/Wallets.swift
index f633d02d5d..d5cbeaad88 100644
--- a/submodules/TelegramCore/TelegramCore/Wallets.swift
+++ b/submodules/TelegramCore/TelegramCore/Wallets.swift
@@ -28,6 +28,7 @@ public enum TonKeychainEncryptDataError {
public enum TonKeychainDecryptDataError {
case generic
case publicKeyMismatch
+ case cancelled
}
public struct TonKeychain {
@@ -65,7 +66,10 @@ private final class TonInstanceImpl {
} else {
let network = self.network
instance = TON(keystoreDirectory: self.basePath + "/ton-keystore", config: self.config, blockchainName: self.blockchainName, performExternalRequest: { request in
- let _ = (network.request(Api.functions.wallet.sendLiteRequest(body: Buffer(data: request.data)))).start(next: { result in
+ let _ = (
+ network.request(Api.functions.wallet.sendLiteRequest(body: Buffer(data: request.data)))
+ |> timeout(10.0, queue: .concurrentDefaultQueue(), alternate: .fail(MTRpcError(errorCode: 500, errorDescription: "NETWORK_ERROR")))
+ ).start(next: { result in
switch result {
case let .liteResponse(response):
request.onResult(response.makeData(), nil)
@@ -92,13 +96,13 @@ public final class TonInstance {
})
}
- fileprivate func exportKey(key: TONKey, serverSalt: Data) -> Signal<[String], NoError> {
+ fileprivate func exportKey(key: TONKey, localPassword: Data) -> Signal<[String], NoError> {
return Signal { subscriber in
let disposable = MetaDisposable()
self.impl.with { impl in
impl.withInstance { ton in
- let cancel = ton.export(key, localPassword: serverSalt).start(next: { wordList in
+ let cancel = ton.export(key, localPassword: localPassword).start(next: { wordList in
guard let wordList = wordList as? [String] else {
assertionFailure()
return
@@ -116,18 +120,18 @@ public final class TonInstance {
}
}
- fileprivate func createWallet(keychain: TonKeychain, serverSalt: Data) -> Signal<(WalletInfo, [String]), CreateWalletError> {
+ fileprivate func createWallet(keychain: TonKeychain, localPassword: Data) -> Signal<(WalletInfo, [String]), CreateWalletError> {
return Signal { subscriber in
let disposable = MetaDisposable()
self.impl.with { impl in
impl.withInstance { ton in
- let cancel = ton.createKey(withLocalPassword: serverSalt, mnemonicPassword: Data()).start(next: { key in
+ let cancel = ton.createKey(withLocalPassword: localPassword, mnemonicPassword: Data()).start(next: { key in
guard let key = key as? TONKey else {
assertionFailure()
return
}
let cancel = keychain.encrypt(key.secret).start(next: { encryptedSecretData in
- let _ = self.exportKey(key: key, serverSalt: serverSalt).start(next: { wordList in
+ let _ = self.exportKey(key: key, localPassword: localPassword).start(next: { wordList in
subscriber.putNext((WalletInfo(publicKey: WalletPublicKey(rawValue: key.publicKey), encryptedSecret: encryptedSecretData), wordList))
subscriber.putCompletion()
}, error: { error in
@@ -150,13 +154,13 @@ public final class TonInstance {
}
}
- fileprivate func importWallet(keychain: TonKeychain, wordList: [String], serverSalt: Data) -> Signal {
+ fileprivate func importWallet(keychain: TonKeychain, wordList: [String], localPassword: Data) -> Signal {
return Signal { subscriber in
let disposable = MetaDisposable()
self.impl.with { impl in
impl.withInstance { ton in
- let cancel = ton.importKey(withLocalPassword: serverSalt, mnemonicPassword: Data(), wordList: wordList).start(next: { key in
+ let cancel = ton.importKey(withLocalPassword: localPassword, mnemonicPassword: Data(), wordList: wordList).start(next: { key in
guard let key = key as? TONKey else {
subscriber.putError(.generic)
return
@@ -218,8 +222,16 @@ public final class TonInstance {
return
}
subscriber.putNext(state)
- }, error: { _ in
- subscriber.putError(.generic)
+ }, error: { error in
+ if let error = error as? TONError {
+ if error.text.hasPrefix("LITE_SERVER_") {
+ subscriber.putError(.network)
+ } else {
+ subscriber.putError(.generic)
+ }
+ } else {
+ subscriber.putError(.generic)
+ }
}, completed: {
subscriber.putCompletion()
})
@@ -240,7 +252,7 @@ public final class TonInstance {
}
}
- fileprivate func walletLastTransactionId(address: String) -> Signal {
+ fileprivate func walletLastTransactionId(address: String) -> Signal {
return Signal { subscriber in
let disposable = MetaDisposable()
@@ -252,7 +264,16 @@ public final class TonInstance {
return
}
subscriber.putNext(state.lastTransactionId.flatMap(WalletTransactionId.init(tonTransactionId:)))
- }, error: { _ in
+ }, error: { error in
+ if let error = error as? TONError {
+ if error.text.hasPrefix("ДITE_SERVER_") {
+ subscriber.putError(.network)
+ } else {
+ subscriber.putError(.generic)
+ }
+ } else {
+ subscriber.putError(.generic)
+ }
}, completed: {
subscriber.putCompletion()
})
@@ -278,39 +299,10 @@ public final class TonInstance {
return
}
subscriber.putNext(transactions.map(WalletTransaction.init(tonTransaction:)))
- }, error: { _ in
- }, completed: {
- subscriber.putCompletion()
- })
- disposable.set(ActionDisposable {
- cancel?.dispose()
- })
- }
- }
-
- return disposable
- }
- }
-
- fileprivate func sendGramsFromWallet(decryptedSecret: Data, serverSalt: Data, walletInfo: WalletInfo, fromAddress: String, toAddress: String, amount: Int64, textMessage: String, forceIfDestinationNotInitialized: Bool, timeout: Int32, randomId: Int64) -> Signal {
- let key = TONKey(publicKey: walletInfo.publicKey.rawValue, secret: decryptedSecret)
- return Signal { subscriber in
- let disposable = MetaDisposable()
-
- self.impl.with { impl in
- impl.withInstance { ton in
- let cancel = ton.sendGrams(from: key, localPassword: serverSalt, fromAddress: fromAddress, toAddress: toAddress, amount: amount, textMessage: textMessage, forceIfDestinationNotInitialized: forceIfDestinationNotInitialized, timeout: timeout, randomId: randomId).start(next: { result in
- guard let result = result as? TONSendGramsResult else {
- subscriber.putError(.generic)
- return
- }
- subscriber.putCompletion()
}, error: { error in
if let error = error as? TONError {
- if error.text == "Failed to parse account address" {
- subscriber.putError(.invalidAddress)
- } else if error.text.hasPrefix("DANGEROUS_TRANSACTION") {
- subscriber.putError(.destinationIsNotInitialized)
+ if error.text.hasPrefix("LITE_SERVER_") {
+ subscriber.putError(.network)
} else {
subscriber.putError(.generic)
}
@@ -330,65 +322,97 @@ public final class TonInstance {
}
}
- fileprivate func walletRestoreWords(walletInfo: WalletInfo, keychain: TonKeychain, serverSalt: Data) -> Signal<[String], WalletRestoreWordsError> {
- return keychain.decrypt(walletInfo.encryptedSecret)
- |> mapError { _ -> WalletRestoreWordsError in
- return .secretDecryptionFailed
- }
- |> mapToSignal { decryptedSecret -> Signal<[String], WalletRestoreWordsError> in
- return Signal { subscriber in
- let disposable = MetaDisposable()
-
- self.impl.with { impl in
- impl.withInstance { ton in
- let cancel = ton.export(TONKey(publicKey: walletInfo.publicKey.rawValue, secret: decryptedSecret), localPassword: serverSalt).start(next: { wordList in
- guard let wordList = wordList as? [String] else {
- subscriber.putError(.generic)
- return
- }
- subscriber.putNext(wordList)
- }, error: { _ in
+ fileprivate func sendGramsFromWallet(decryptedSecret: Data, localPassword: Data, walletInfo: WalletInfo, fromAddress: String, toAddress: String, amount: Int64, textMessage: String, forceIfDestinationNotInitialized: Bool, timeout: Int32, randomId: Int64) -> Signal {
+ let key = TONKey(publicKey: walletInfo.publicKey.rawValue, secret: decryptedSecret)
+ return Signal { subscriber in
+ let disposable = MetaDisposable()
+
+ self.impl.with { impl in
+ impl.withInstance { ton in
+ let cancel = ton.sendGrams(from: key, localPassword: localPassword, fromAddress: fromAddress, toAddress: toAddress, amount: amount, textMessage: textMessage, forceIfDestinationNotInitialized: forceIfDestinationNotInitialized, timeout: timeout, randomId: randomId).start(next: { result in
+ guard let result = result as? TONSendGramsResult else {
subscriber.putError(.generic)
- }, completed: {
- subscriber.putCompletion()
- })
- disposable.set(ActionDisposable {
- cancel?.dispose()
- })
- }
+ return
+ }
+ subscriber.putCompletion()
+ }, error: { error in
+ if let error = error as? TONError {
+ if error.text.hasPrefix("INVALID_ACCOUNT_ADDRESS") {
+ subscriber.putError(.invalidAddress)
+ } else if error.text.hasPrefix("DANGEROUS_TRANSACTION") {
+ subscriber.putError(.destinationIsNotInitialized)
+ } else if error.text.hasPrefix("MESSAGE_TOO_LONG") {
+ subscriber.putError(.messageTooLong)
+ } else if error.text.hasPrefix("NOT_ENOUGH_FUNDS") {
+ subscriber.putError(.notEnoughFunds)
+ } else if error.text.hasPrefix("LITE_SERVER_") {
+ subscriber.putError(.network)
+ } else {
+ subscriber.putError(.generic)
+ }
+ } else {
+ subscriber.putError(.generic)
+ }
+ }, completed: {
+ subscriber.putCompletion()
+ })
+ disposable.set(ActionDisposable {
+ cancel?.dispose()
+ })
}
-
- return disposable
}
+
+ return disposable
}
}
- fileprivate func deleteLocalWalletData(walletInfo: WalletInfo, keychain: TonKeychain, serverSalt: Data) -> Signal {
- return keychain.decrypt(walletInfo.encryptedSecret)
- |> mapError { _ -> DeleteLocalWalletDataError in
- return .secretDecryptionFailed
- }
- |> mapToSignal { decryptedSecret -> Signal in
- return Signal { subscriber in
- let disposable = MetaDisposable()
-
- self.impl.with { impl in
- impl.withInstance { ton in
- let cancel = ton.delete(TONKey(publicKey: walletInfo.publicKey.rawValue, secret: decryptedSecret)).start(next: { _ in
- assertionFailure()
- }, error: { _ in
+ fileprivate func walletRestoreWords(publicKey: WalletPublicKey, decryptedSecret: Data, localPassword: Data) -> Signal<[String], WalletRestoreWordsError> {
+ return Signal { subscriber in
+ let disposable = MetaDisposable()
+
+ self.impl.with { impl in
+ impl.withInstance { ton in
+ let cancel = ton.export(TONKey(publicKey: publicKey.rawValue, secret: decryptedSecret), localPassword: localPassword).start(next: { wordList in
+ guard let wordList = wordList as? [String] else {
subscriber.putError(.generic)
- }, completed: {
- subscriber.putCompletion()
- })
- disposable.set(ActionDisposable {
- cancel?.dispose()
- })
- }
+ return
+ }
+ subscriber.putNext(wordList)
+ }, error: { _ in
+ subscriber.putError(.generic)
+ }, completed: {
+ subscriber.putCompletion()
+ })
+ disposable.set(ActionDisposable {
+ cancel?.dispose()
+ })
}
-
- return disposable
}
+
+ return disposable
+ }
+ }
+
+ fileprivate func deleteAllLocalWalletsData() -> Signal {
+ return Signal { subscriber in
+ let disposable = MetaDisposable()
+
+ self.impl.with { impl in
+ impl.withInstance { ton in
+ let cancel = ton.deleteAllKeys().start(next: { _ in
+ assertionFailure()
+ }, error: { _ in
+ subscriber.putError(.generic)
+ }, completed: {
+ subscriber.putCompletion()
+ })
+ disposable.set(ActionDisposable {
+ cancel?.dispose()
+ })
+ }
+ }
+
+ return disposable
}
}
}
@@ -508,24 +532,18 @@ public enum CreateWalletError {
case generic
}
-public func createWallet(postbox: Postbox, network: Network, tonInstance: TonInstance, keychain: TonKeychain) -> Signal<(WalletInfo, [String]), CreateWalletError> {
- return getServerWalletSalt(network: network)
- |> mapError { _ -> CreateWalletError in
- return .generic
- }
- |> mapToSignal { serverSalt -> Signal<(WalletInfo, [String]), CreateWalletError> in
- return tonInstance.createWallet(keychain: keychain, serverSalt: serverSalt)
- |> mapToSignal { walletInfo, wordList -> Signal<(WalletInfo, [String]), CreateWalletError> in
- return postbox.transaction { transaction -> (WalletInfo, [String]) in
- transaction.updatePreferencesEntry(key: PreferencesKeys.walletCollection, { current in
- var walletCollection = (current as? WalletCollection) ?? WalletCollection(wallets: [])
- walletCollection.wallets = [WalletStateRecord(info: walletInfo, exportCompleted: false, state: nil)]
- return walletCollection
- })
- return (walletInfo, wordList)
- }
- |> castError(CreateWalletError.self)
+public func createWallet(postbox: Postbox, tonInstance: TonInstance, keychain: TonKeychain, localPassword: Data) -> Signal<(WalletInfo, [String]), CreateWalletError> {
+ return tonInstance.createWallet(keychain: keychain, localPassword: localPassword)
+ |> mapToSignal { walletInfo, wordList -> Signal<(WalletInfo, [String]), CreateWalletError> in
+ return postbox.transaction { transaction -> (WalletInfo, [String]) in
+ transaction.updatePreferencesEntry(key: PreferencesKeys.walletCollection, { current in
+ var walletCollection = (current as? WalletCollection) ?? WalletCollection(wallets: [])
+ walletCollection.wallets = [WalletStateRecord(info: walletInfo, exportCompleted: false, state: nil)]
+ return walletCollection
+ })
+ return (walletInfo, wordList)
}
+ |> castError(CreateWalletError.self)
}
}
@@ -552,77 +570,51 @@ public enum ImportWalletError {
case generic
}
-public func importWallet(postbox: Postbox, network: Network, tonInstance: TonInstance, keychain: TonKeychain, wordList: [String]) -> Signal {
- return getServerWalletSalt(network: network)
- |> mapError { _ -> ImportWalletError in
- return .generic
+public func importWallet(postbox: Postbox, tonInstance: TonInstance, keychain: TonKeychain, wordList: [String], localPassword: Data) -> Signal {
+ return tonInstance.importWallet(keychain: keychain, wordList: wordList, localPassword: localPassword)
+ |> `catch` { error -> Signal in
+ switch error {
+ case .generic:
+ return .fail(.generic)
+ }
}
- |> mapToSignal { serverSalt in
- return tonInstance.importWallet(keychain: keychain, wordList: wordList, serverSalt: serverSalt)
- |> `catch` { error -> Signal in
- switch error {
- case .generic:
- return .fail(.generic)
- }
- }
- |> mapToSignal { walletInfo -> Signal in
- return postbox.transaction { transaction -> WalletInfo in
- transaction.updatePreferencesEntry(key: PreferencesKeys.walletCollection, { current in
- var walletCollection = (current as? WalletCollection) ?? WalletCollection(wallets: [])
- walletCollection.wallets = [WalletStateRecord(info: walletInfo, exportCompleted: true, state: nil)]
- return walletCollection
- })
- return walletInfo
- }
- |> castError(ImportWalletError.self)
+ |> mapToSignal { walletInfo -> Signal in
+ return postbox.transaction { transaction -> WalletInfo in
+ transaction.updatePreferencesEntry(key: PreferencesKeys.walletCollection, { current in
+ var walletCollection = (current as? WalletCollection) ?? WalletCollection(wallets: [])
+ walletCollection.wallets = [WalletStateRecord(info: walletInfo, exportCompleted: true, state: nil)]
+ return walletCollection
+ })
+ return walletInfo
}
+ |> castError(ImportWalletError.self)
}
}
-public enum DeleteLocalWalletDataError {
+public enum DeleteAllLocalWalletsDataError {
case generic
- case secretDecryptionFailed
}
-public func deleteLocalWalletData(postbox: Postbox, network: Network, tonInstance: TonInstance, keychain: TonKeychain, walletInfo: WalletInfo) -> Signal {
- return getServerWalletSalt(network: network)
- |> mapError { _ -> DeleteLocalWalletDataError in
- return .generic
- }
- |> mapToSignal { serverSalt -> Signal in
- return tonInstance.deleteLocalWalletData(walletInfo: walletInfo, keychain: keychain, serverSalt: serverSalt)
- |> then(
- postbox.transaction { transaction -> Void in
- transaction.updatePreferencesEntry(key: PreferencesKeys.walletCollection, { current in
- var walletCollection = (current as? WalletCollection) ?? WalletCollection(wallets: [])
- for i in 0 ..< walletCollection.wallets.count {
- if walletCollection.wallets[i].info.publicKey == walletInfo.publicKey {
- walletCollection.wallets.remove(at: i)
- break
- }
- }
- return walletCollection
- })
- }
- |> castError(DeleteLocalWalletDataError.self)
- |> ignoreValues
- )
- }
+public func deleteAllLocalWalletsData(postbox: Postbox, network: Network, tonInstance: TonInstance) -> Signal {
+ return tonInstance.deleteAllLocalWalletsData()
+ |> then(
+ postbox.transaction { transaction -> Void in
+ transaction.updatePreferencesEntry(key: PreferencesKeys.walletCollection, { current in
+ let walletCollection = WalletCollection(wallets: [])
+ return walletCollection
+ })
+ }
+ |> castError(DeleteAllLocalWalletsDataError.self)
+ |> ignoreValues
+ )
}
public enum WalletRestoreWordsError {
case generic
- case secretDecryptionFailed
}
-public func walletRestoreWords(network: Network, walletInfo: WalletInfo, tonInstance: TonInstance, keychain: TonKeychain) -> Signal<[String], WalletRestoreWordsError> {
- return getServerWalletSalt(network: network)
- |> mapError { _ -> WalletRestoreWordsError in
- return .generic
- }
- |> mapToSignal { serverSalt in
- return tonInstance.walletRestoreWords(walletInfo: walletInfo, keychain: keychain, serverSalt: serverSalt)
- }
+public func walletRestoreWords(tonInstance: TonInstance, publicKey: WalletPublicKey, decryptedSecret: Data, localPassword: Data) -> Signal<[String], WalletRestoreWordsError> {
+ return tonInstance.walletRestoreWords(publicKey: publicKey, decryptedSecret: decryptedSecret, localPassword: localPassword)
}
public struct WalletState: Codable, Equatable {
@@ -641,6 +633,7 @@ public func walletAddress(publicKey: WalletPublicKey, tonInstance: TonInstance)
private enum GetWalletStateError {
case generic
+ case network
}
private func getWalletState(address: String, tonInstance: TonInstance) -> Signal<(WalletState, Int64), GetWalletStateError> {
@@ -649,6 +642,7 @@ private func getWalletState(address: String, tonInstance: TonInstance) -> Signal
public enum GetCombinedWalletStateError {
case generic
+ case network
}
public enum CombinedWalletStateResult {
@@ -681,8 +675,19 @@ public func getCombinedWalletState(postbox: Postbox, subject: CombinedWalletStat
|> castError(GetCombinedWalletStateError.self)
|> mapToSignal { address -> Signal in
return getWalletState(address: address, tonInstance: tonInstance)
- |> mapError { _ -> GetCombinedWalletStateError in
- return .generic
+ |> retryTonRequest(isNetworkError: { error in
+ if case .network = error {
+ return true
+ } else {
+ return false
+ }
+ })
+ |> mapError { error -> GetCombinedWalletStateError in
+ if case .network = error {
+ return .network
+ } else {
+ return .generic
+ }
}
|> mapToSignal { walletState, syncUtime -> Signal in
let topTransactions: Signal<[WalletTransaction], GetCombinedWalletStateError>
@@ -690,8 +695,12 @@ public func getCombinedWalletState(postbox: Postbox, subject: CombinedWalletStat
topTransactions = .single(cachedState?.topTransactions ?? [])
} else {
topTransactions = getWalletTransactions(address: address, previousId: nil, tonInstance: tonInstance)
- |> mapError { _ -> GetCombinedWalletStateError in
- return .generic
+ |> mapError { error -> GetCombinedWalletStateError in
+ if case .network = error {
+ return .network
+ } else {
+ return .generic
+ }
}
}
return topTransactions
@@ -743,13 +752,16 @@ public enum SendGramsFromWalletError {
case secretDecryptionFailed
case invalidAddress
case destinationIsNotInitialized
+ case messageTooLong
+ case notEnoughFunds
+ case network
}
-public func sendGramsFromWallet(network: Network, tonInstance: TonInstance, walletInfo: WalletInfo, decryptedSecret: Data, serverSalt: Data, toAddress: String, amount: Int64, textMessage: String, forceIfDestinationNotInitialized: Bool, timeout: Int32, randomId: Int64) -> Signal {
+public func sendGramsFromWallet(network: Network, tonInstance: TonInstance, walletInfo: WalletInfo, decryptedSecret: Data, localPassword: Data, toAddress: String, amount: Int64, textMessage: String, forceIfDestinationNotInitialized: Bool, timeout: Int32, randomId: Int64) -> Signal {
return walletAddress(publicKey: walletInfo.publicKey, tonInstance: tonInstance)
|> castError(SendGramsFromWalletError.self)
|> mapToSignal { fromAddress in
- return tonInstance.sendGramsFromWallet(decryptedSecret: decryptedSecret, serverSalt: serverSalt, walletInfo: walletInfo, fromAddress: fromAddress, toAddress: toAddress, amount: amount, textMessage: textMessage, forceIfDestinationNotInitialized: forceIfDestinationNotInitialized, timeout: timeout, randomId: randomId)
+ return tonInstance.sendGramsFromWallet(decryptedSecret: decryptedSecret, localPassword: localPassword, walletInfo: walletInfo, fromAddress: fromAddress, toAddress: toAddress, amount: amount, textMessage: textMessage, forceIfDestinationNotInitialized: forceIfDestinationNotInitialized, timeout: timeout, randomId: randomId)
}
}
@@ -861,6 +873,7 @@ private extension WalletTransaction {
public enum GetWalletTransactionsError {
case generic
+ case network
}
public func getWalletTransactions(address: String, previousId: WalletTransactionId?, tonInstance: TonInstance) -> Signal<[WalletTransaction], GetWalletTransactionsError> {
@@ -884,18 +897,50 @@ public func getWalletTransactions(address: String, previousId: WalletTransaction
}
}
+private func retryTonRequest(isNetworkError: @escaping (E) -> Bool) -> (Signal) -> Signal {
+ return { signal in
+ return signal
+ |> retry(retryOnError: isNetworkError, delayIncrement: 0.2, maxDelay: 5.0, maxRetries: 3, onQueue: Queue.concurrentDefaultQueue())
+ }
+}
+
+private enum WalletLastTransactionIdError {
+ case generic
+ case network
+}
+
private func getWalletTransactionsOnce(address: String, previousId: WalletTransactionId?, tonInstance: TonInstance) -> Signal<[WalletTransaction], GetWalletTransactionsError> {
let previousIdValue: Signal
if let previousId = previousId {
previousIdValue = .single(previousId)
} else {
previousIdValue = tonInstance.walletLastTransactionId(address: address)
- |> castError(GetWalletTransactionsError.self)
+ |> retryTonRequest(isNetworkError: { error in
+ if case .network = error {
+ return true
+ } else {
+ return false
+ }
+ })
+ |> mapError { error -> GetWalletTransactionsError in
+ if case .network = error {
+ return .network
+ } else {
+ return .generic
+ }
+ }
}
return previousIdValue
|> mapToSignal { previousId in
if let previousId = previousId {
return tonInstance.getWalletTransactions(address: address, previousId: previousId)
+ |> retryTonRequest(isNetworkError: { error in
+ if case .network = error {
+ return true
+ } else {
+ return false
+ }
+ })
} else {
return .single([])
}
diff --git a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift
index bd226d8292..fac31b3f86 100644
--- a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift
+++ b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift
@@ -1719,3202 +1719,3206 @@ public final class PresentationStrings {
return formatWithArgumentRanges(self._s[1429]!, self._r[1429]!, [_1, _2])
}
public var Passport_Phone_UseTelegramNumberHelp: String { return self._s[1430]! }
- public var SettingsSearch_Synonyms_Data_Title: String { return self._s[1433]! }
- public var Passport_DeletePassport: String { return self._s[1434]! }
- public var Appearance_AppIconFilled: String { return self._s[1435]! }
- public var Privacy_Calls_P2PAlways: String { return self._s[1436]! }
- public var Month_ShortDecember: String { return self._s[1437]! }
- public var Channel_AdminLog_CanEditMessages: String { return self._s[1439]! }
+ public var Wallet_Send_ErrorNotEnoughFunds: String { return self._s[1433]! }
+ public var SettingsSearch_Synonyms_Data_Title: String { return self._s[1434]! }
+ public var Passport_DeletePassport: String { return self._s[1435]! }
+ public var Appearance_AppIconFilled: String { return self._s[1436]! }
+ public var Privacy_Calls_P2PAlways: String { return self._s[1437]! }
+ public var Month_ShortDecember: String { return self._s[1438]! }
+ public var Channel_AdminLog_CanEditMessages: String { return self._s[1440]! }
public func Contacts_AccessDeniedHelpLandscape(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1440]!, self._r[1440]!, [_0])
+ return formatWithArgumentRanges(self._s[1441]!, self._r[1441]!, [_0])
}
- public var Channel_Stickers_Searching: String { return self._s[1441]! }
- public var Conversation_EncryptedDescription1: String { return self._s[1442]! }
- public var Conversation_EncryptedDescription2: String { return self._s[1443]! }
- public var PasscodeSettings_PasscodeOptions: String { return self._s[1444]! }
- public var Conversation_EncryptedDescription3: String { return self._s[1445]! }
- public var PhotoEditor_SharpenTool: String { return self._s[1446]! }
+ public var Channel_Stickers_Searching: String { return self._s[1442]! }
+ public var Conversation_EncryptedDescription1: String { return self._s[1443]! }
+ public var Conversation_EncryptedDescription2: String { return self._s[1444]! }
+ public var PasscodeSettings_PasscodeOptions: String { return self._s[1445]! }
+ public var Conversation_EncryptedDescription3: String { return self._s[1446]! }
+ public var PhotoEditor_SharpenTool: String { return self._s[1447]! }
public func Conversation_AddNameToContacts(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1447]!, self._r[1447]!, [_0])
+ return formatWithArgumentRanges(self._s[1448]!, self._r[1448]!, [_0])
}
- public var Conversation_EncryptedDescription4: String { return self._s[1449]! }
- public var Channel_Members_AddMembers: String { return self._s[1450]! }
- public var Wallpaper_Search: String { return self._s[1451]! }
- public var Weekday_Friday: String { return self._s[1452]! }
- public var Privacy_ContactsSync: String { return self._s[1453]! }
- public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[1454]! }
- public var ApplyLanguage_ChangeLanguageAction: String { return self._s[1455]! }
+ public var Conversation_EncryptedDescription4: String { return self._s[1450]! }
+ public var Channel_Members_AddMembers: String { return self._s[1451]! }
+ public var Wallpaper_Search: String { return self._s[1452]! }
+ public var Weekday_Friday: String { return self._s[1453]! }
+ public var Privacy_ContactsSync: String { return self._s[1454]! }
+ public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[1455]! }
+ public var ApplyLanguage_ChangeLanguageAction: String { return self._s[1456]! }
public func Channel_Management_RestrictedBy(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1456]!, self._r[1456]!, [_0])
+ return formatWithArgumentRanges(self._s[1457]!, self._r[1457]!, [_0])
}
- public var GroupInfo_Permissions_Removed: String { return self._s[1457]! }
- public var Passport_Identity_GenderMale: String { return self._s[1458]! }
+ public var GroupInfo_Permissions_Removed: String { return self._s[1458]! }
+ public var Passport_Identity_GenderMale: String { return self._s[1459]! }
public func Call_StatusBar(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1459]!, self._r[1459]!, [_0])
+ return formatWithArgumentRanges(self._s[1460]!, self._r[1460]!, [_0])
}
- public var Updated_JustNow: String { return self._s[1460]! }
- public var Notifications_PermissionsKeepDisabled: String { return self._s[1461]! }
- public var Conversation_JumpToDate: String { return self._s[1462]! }
- public var Contacts_GlobalSearch: String { return self._s[1463]! }
- public var AutoDownloadSettings_ResetHelp: String { return self._s[1464]! }
- public var SettingsSearch_Synonyms_FAQ: String { return self._s[1465]! }
- public var Profile_MessageLifetime1d: String { return self._s[1466]! }
+ public var Updated_JustNow: String { return self._s[1461]! }
+ public var Notifications_PermissionsKeepDisabled: String { return self._s[1462]! }
+ public var Conversation_JumpToDate: String { return self._s[1463]! }
+ public var Contacts_GlobalSearch: String { return self._s[1464]! }
+ public var AutoDownloadSettings_ResetHelp: String { return self._s[1465]! }
+ public var SettingsSearch_Synonyms_FAQ: String { return self._s[1466]! }
+ public var Profile_MessageLifetime1d: String { return self._s[1467]! }
public func MESSAGE_INVOICE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1467]!, self._r[1467]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[1468]!, self._r[1468]!, [_1, _2])
}
- public var StickerPack_BuiltinPackName: String { return self._s[1470]! }
+ public var StickerPack_BuiltinPackName: String { return self._s[1471]! }
public func PUSH_CHAT_MESSAGE_AUDIO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1471]!, self._r[1471]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[1472]!, self._r[1472]!, [_1, _2])
}
- public var VoiceOver_Chat_RecordModeVoiceMessageInfo: String { return self._s[1472]! }
- public var Passport_InfoTitle: String { return self._s[1474]! }
- public var Notifications_PermissionsUnreachableText: String { return self._s[1475]! }
+ public var VoiceOver_Chat_RecordModeVoiceMessageInfo: String { return self._s[1473]! }
+ public var Passport_InfoTitle: String { return self._s[1475]! }
+ public var Notifications_PermissionsUnreachableText: String { return self._s[1476]! }
public func NetworkUsageSettings_CellularUsageSince(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1479]!, self._r[1479]!, [_0])
+ return formatWithArgumentRanges(self._s[1480]!, self._r[1480]!, [_0])
}
public func PUSH_CHAT_MESSAGE_GEO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1480]!, self._r[1480]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[1481]!, self._r[1481]!, [_1, _2])
}
- public var Passport_Address_TypePassportRegistrationUploadScan: String { return self._s[1481]! }
- public var Profile_BotInfo: String { return self._s[1482]! }
- public var Watch_Compose_CreateMessage: String { return self._s[1483]! }
- public var AutoDownloadSettings_VoiceMessagesInfo: String { return self._s[1484]! }
- public var Month_ShortNovember: String { return self._s[1485]! }
- public var Conversation_ScamWarning: String { return self._s[1486]! }
- public var Wallpaper_SetCustomBackground: String { return self._s[1487]! }
- public var Passport_Identity_TranslationsHelp: String { return self._s[1488]! }
- public var NotificationsSound_Chime: String { return self._s[1489]! }
- public var Passport_Language_ko: String { return self._s[1491]! }
- public var InviteText_URL: String { return self._s[1492]! }
- public var TextFormat_Monospace: String { return self._s[1493]! }
+ public var Passport_Address_TypePassportRegistrationUploadScan: String { return self._s[1482]! }
+ public var Profile_BotInfo: String { return self._s[1483]! }
+ public var Watch_Compose_CreateMessage: String { return self._s[1484]! }
+ public var AutoDownloadSettings_VoiceMessagesInfo: String { return self._s[1485]! }
+ public var Month_ShortNovember: String { return self._s[1486]! }
+ public var Conversation_ScamWarning: String { return self._s[1487]! }
+ public var Wallpaper_SetCustomBackground: String { return self._s[1488]! }
+ public var Passport_Identity_TranslationsHelp: String { return self._s[1489]! }
+ public var NotificationsSound_Chime: String { return self._s[1490]! }
+ public var Passport_Language_ko: String { return self._s[1492]! }
+ public var InviteText_URL: String { return self._s[1493]! }
+ public var TextFormat_Monospace: String { return self._s[1494]! }
public func Time_PreciseDate_m11(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1494]!, self._r[1494]!, [_1, _2, _3])
+ return formatWithArgumentRanges(self._s[1495]!, self._r[1495]!, [_1, _2, _3])
}
- public var EditTheme_Edit_BottomInfo: String { return self._s[1495]! }
+ public var EditTheme_Edit_BottomInfo: String { return self._s[1496]! }
public func Login_WillSendSms(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1496]!, self._r[1496]!, [_0])
+ return formatWithArgumentRanges(self._s[1497]!, self._r[1497]!, [_0])
}
public func Watch_Time_ShortWeekdayAt(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1497]!, self._r[1497]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[1498]!, self._r[1498]!, [_1, _2])
}
- public var Wallet_Words_Title: String { return self._s[1499]! }
- public var EditTheme_CreateTitle: String { return self._s[1501]! }
- public var Passport_InfoLearnMore: String { return self._s[1502]! }
- public var TwoStepAuth_EmailPlaceholder: String { return self._s[1503]! }
- public var Passport_Identity_AddIdentityCard: String { return self._s[1504]! }
- public var Your_card_has_expired: String { return self._s[1505]! }
- public var StickerPacksSettings_StickerPacksSection: String { return self._s[1506]! }
- public var GroupInfo_InviteLink_Help: String { return self._s[1507]! }
- public var Conversation_Report: String { return self._s[1511]! }
- public var Notifications_MessageNotificationsSound: String { return self._s[1512]! }
- public var Notification_MessageLifetime1m: String { return self._s[1513]! }
- public var Privacy_ContactsTitle: String { return self._s[1514]! }
- public var Conversation_ShareMyContactInfo: String { return self._s[1515]! }
- public var Wallet_WordCheck_Title: String { return self._s[1516]! }
- public var ChannelMembers_WhoCanAddMembersAdminsHelp: String { return self._s[1517]! }
- public var Channel_Members_Title: String { return self._s[1518]! }
- public var Map_OpenInWaze: String { return self._s[1519]! }
- public var Login_PhoneBannedError: String { return self._s[1520]! }
+ public var Wallet_Words_Title: String { return self._s[1500]! }
+ public var EditTheme_CreateTitle: String { return self._s[1502]! }
+ public var Passport_InfoLearnMore: String { return self._s[1503]! }
+ public var TwoStepAuth_EmailPlaceholder: String { return self._s[1504]! }
+ public var Passport_Identity_AddIdentityCard: String { return self._s[1505]! }
+ public var Your_card_has_expired: String { return self._s[1506]! }
+ public var StickerPacksSettings_StickerPacksSection: String { return self._s[1507]! }
+ public var GroupInfo_InviteLink_Help: String { return self._s[1508]! }
+ public var Conversation_Report: String { return self._s[1512]! }
+ public var Notifications_MessageNotificationsSound: String { return self._s[1513]! }
+ public var Notification_MessageLifetime1m: String { return self._s[1514]! }
+ public var Privacy_ContactsTitle: String { return self._s[1515]! }
+ public var Conversation_ShareMyContactInfo: String { return self._s[1516]! }
+ public var Wallet_WordCheck_Title: String { return self._s[1517]! }
+ public var ChannelMembers_WhoCanAddMembersAdminsHelp: String { return self._s[1518]! }
+ public var Channel_Members_Title: String { return self._s[1519]! }
+ public var Map_OpenInWaze: String { return self._s[1520]! }
+ public var Login_PhoneBannedError: String { return self._s[1521]! }
public func LiveLocationUpdated_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1521]!, self._r[1521]!, [_0])
+ return formatWithArgumentRanges(self._s[1522]!, self._r[1522]!, [_0])
}
- public var Group_Management_AddModeratorHelp: String { return self._s[1522]! }
- public var AutoDownloadSettings_WifiTitle: String { return self._s[1523]! }
- public var Common_OK: String { return self._s[1524]! }
- public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[1525]! }
- public var Wallet_Words_NotDoneResponse: String { return self._s[1526]! }
- public var Cache_Music: String { return self._s[1527]! }
- public var SettingsSearch_Synonyms_EditProfile_PhoneNumber: String { return self._s[1528]! }
- public var PasscodeSettings_UnlockWithTouchId: String { return self._s[1529]! }
- public var TwoStepAuth_HintPlaceholder: String { return self._s[1530]! }
+ public var Group_Management_AddModeratorHelp: String { return self._s[1523]! }
+ public var AutoDownloadSettings_WifiTitle: String { return self._s[1524]! }
+ public var Common_OK: String { return self._s[1525]! }
+ public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[1526]! }
+ public var Wallet_Words_NotDoneResponse: String { return self._s[1527]! }
+ public var Cache_Music: String { return self._s[1528]! }
+ public var SettingsSearch_Synonyms_EditProfile_PhoneNumber: String { return self._s[1529]! }
+ public var PasscodeSettings_UnlockWithTouchId: String { return self._s[1530]! }
+ public var TwoStepAuth_HintPlaceholder: String { return self._s[1531]! }
public func PUSH_PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1531]!, self._r[1531]!, [_1])
+ return formatWithArgumentRanges(self._s[1532]!, self._r[1532]!, [_1])
}
public func Passport_RequestHeader(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1532]!, self._r[1532]!, [_0])
- }
- public func VoiceOver_Chat_ContactOrganization(_ _0: String) -> (String, [(Int, NSRange)]) {
return formatWithArgumentRanges(self._s[1533]!, self._r[1533]!, [_0])
}
- public var Watch_MessageView_ViewOnPhone: String { return self._s[1535]! }
- public var Privacy_Calls_CustomShareHelp: String { return self._s[1536]! }
- public var Wallet_Receive_CreateInvoiceInfo: String { return self._s[1538]! }
- public var ChangePhoneNumberNumber_Title: String { return self._s[1539]! }
- public var State_ConnectingToProxyInfo: String { return self._s[1540]! }
- public var Message_VideoMessage: String { return self._s[1542]! }
- public var ChannelInfo_DeleteChannel: String { return self._s[1543]! }
- public var ContactInfo_PhoneLabelOther: String { return self._s[1544]! }
- public var Channel_EditAdmin_CannotEdit: String { return self._s[1545]! }
- public var Passport_DeleteAddressConfirmation: String { return self._s[1546]! }
- public var WallpaperPreview_SwipeBottomText: String { return self._s[1547]! }
- public var Activity_RecordingAudio: String { return self._s[1548]! }
- public var SettingsSearch_Synonyms_Watch: String { return self._s[1549]! }
- public var PasscodeSettings_TryAgainIn1Minute: String { return self._s[1550]! }
- public var Wallet_Info_Address: String { return self._s[1551]! }
+ public func VoiceOver_Chat_ContactOrganization(_ _0: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[1534]!, self._r[1534]!, [_0])
+ }
+ public var Watch_MessageView_ViewOnPhone: String { return self._s[1536]! }
+ public var Privacy_Calls_CustomShareHelp: String { return self._s[1537]! }
+ public var Wallet_Receive_CreateInvoiceInfo: String { return self._s[1539]! }
+ public var ChangePhoneNumberNumber_Title: String { return self._s[1540]! }
+ public var State_ConnectingToProxyInfo: String { return self._s[1541]! }
+ public var Message_VideoMessage: String { return self._s[1543]! }
+ public var ChannelInfo_DeleteChannel: String { return self._s[1544]! }
+ public var ContactInfo_PhoneLabelOther: String { return self._s[1545]! }
+ public var Channel_EditAdmin_CannotEdit: String { return self._s[1546]! }
+ public var Passport_DeleteAddressConfirmation: String { return self._s[1547]! }
+ public var WallpaperPreview_SwipeBottomText: String { return self._s[1548]! }
+ public var Activity_RecordingAudio: String { return self._s[1549]! }
+ public var SettingsSearch_Synonyms_Watch: String { return self._s[1550]! }
+ public var PasscodeSettings_TryAgainIn1Minute: String { return self._s[1551]! }
+ public var Wallet_Info_Address: String { return self._s[1552]! }
public func Notification_ChangedGroupName(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1553]!, self._r[1553]!, [_0, _1])
+ return formatWithArgumentRanges(self._s[1554]!, self._r[1554]!, [_0, _1])
}
public func EmptyGroupInfo_Line1(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1557]!, self._r[1557]!, [_0])
+ return formatWithArgumentRanges(self._s[1558]!, self._r[1558]!, [_0])
}
- public var Conversation_ApplyLocalization: String { return self._s[1558]! }
- public var UserInfo_AddPhone: String { return self._s[1559]! }
- public var Map_ShareLiveLocationHelp: String { return self._s[1560]! }
+ public var Conversation_ApplyLocalization: String { return self._s[1559]! }
+ public var UserInfo_AddPhone: String { return self._s[1560]! }
+ public var Map_ShareLiveLocationHelp: String { return self._s[1561]! }
public func Passport_Identity_NativeNameGenericHelp(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1561]!, self._r[1561]!, [_0])
+ return formatWithArgumentRanges(self._s[1562]!, self._r[1562]!, [_0])
}
- public var Passport_Scans: String { return self._s[1563]! }
- public var BlockedUsers_Unblock: String { return self._s[1564]! }
+ public var Passport_Scans: String { return self._s[1564]! }
+ public var BlockedUsers_Unblock: String { return self._s[1565]! }
public func PUSH_ENCRYPTION_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1565]!, self._r[1565]!, [_1])
+ return formatWithArgumentRanges(self._s[1566]!, self._r[1566]!, [_1])
}
- public var Channel_Management_LabelCreator: String { return self._s[1566]! }
- public var Conversation_ReportSpamAndLeave: String { return self._s[1567]! }
- public var SettingsSearch_Synonyms_EditProfile_Bio: String { return self._s[1568]! }
- public var ChatList_UndoArchiveMultipleTitle: String { return self._s[1569]! }
- public var Passport_Identity_NativeNameGenericTitle: String { return self._s[1570]! }
+ public var Channel_Management_LabelCreator: String { return self._s[1567]! }
+ public var Conversation_ReportSpamAndLeave: String { return self._s[1568]! }
+ public var SettingsSearch_Synonyms_EditProfile_Bio: String { return self._s[1569]! }
+ public var ChatList_UndoArchiveMultipleTitle: String { return self._s[1570]! }
+ public var Passport_Identity_NativeNameGenericTitle: String { return self._s[1571]! }
public func Login_EmailPhoneBody(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1571]!, self._r[1571]!, [_0, _1, _2])
+ return formatWithArgumentRanges(self._s[1572]!, self._r[1572]!, [_0, _1, _2])
}
- public var Login_PhoneNumberHelp: String { return self._s[1572]! }
- public var LastSeen_ALongTimeAgo: String { return self._s[1573]! }
- public var Channel_AdminLog_CanPinMessages: String { return self._s[1574]! }
- public var ChannelIntro_CreateChannel: String { return self._s[1575]! }
- public var Conversation_UnreadMessages: String { return self._s[1576]! }
- public var SettingsSearch_Synonyms_Stickers_ArchivedPacks: String { return self._s[1577]! }
- public var Channel_AdminLog_EmptyText: String { return self._s[1578]! }
- public var Theme_Context_Apply: String { return self._s[1579]! }
- public var Notification_GroupActivated: String { return self._s[1580]! }
- public var NotificationSettings_ContactJoinedInfo: String { return self._s[1581]! }
- public var Wallet_Intro_CreateWallet: String { return self._s[1582]! }
+ public var Login_PhoneNumberHelp: String { return self._s[1573]! }
+ public var LastSeen_ALongTimeAgo: String { return self._s[1574]! }
+ public var Channel_AdminLog_CanPinMessages: String { return self._s[1575]! }
+ public var ChannelIntro_CreateChannel: String { return self._s[1576]! }
+ public var Conversation_UnreadMessages: String { return self._s[1577]! }
+ public var SettingsSearch_Synonyms_Stickers_ArchivedPacks: String { return self._s[1578]! }
+ public var Channel_AdminLog_EmptyText: String { return self._s[1579]! }
+ public var Theme_Context_Apply: String { return self._s[1580]! }
+ public var Notification_GroupActivated: String { return self._s[1581]! }
+ public var NotificationSettings_ContactJoinedInfo: String { return self._s[1582]! }
+ public var Wallet_Intro_CreateWallet: String { return self._s[1583]! }
public func Notification_PinnedContactMessage(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1583]!, self._r[1583]!, [_0])
+ return formatWithArgumentRanges(self._s[1584]!, self._r[1584]!, [_0])
}
public func DownloadingStatus(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1584]!, self._r[1584]!, [_0, _1])
+ return formatWithArgumentRanges(self._s[1585]!, self._r[1585]!, [_0, _1])
}
- public var GroupInfo_ConvertToSupergroup: String { return self._s[1586]! }
+ public var GroupInfo_ConvertToSupergroup: String { return self._s[1587]! }
public func PrivacyPolicy_AgeVerificationMessage(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1587]!, self._r[1587]!, [_0])
+ return formatWithArgumentRanges(self._s[1588]!, self._r[1588]!, [_0])
}
- public var Undo_DeletedChannel: String { return self._s[1588]! }
- public var CallFeedback_AddComment: String { return self._s[1589]! }
+ public var Undo_DeletedChannel: String { return self._s[1589]! }
+ public var CallFeedback_AddComment: String { return self._s[1590]! }
public func Conversation_OpenBotLinkAllowMessages(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1590]!, self._r[1590]!, [_0])
+ return formatWithArgumentRanges(self._s[1591]!, self._r[1591]!, [_0])
}
- public var Document_TargetConfirmationFormat: String { return self._s[1591]! }
+ public var Document_TargetConfirmationFormat: String { return self._s[1592]! }
public func Call_StatusOngoing(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1592]!, self._r[1592]!, [_0])
+ return formatWithArgumentRanges(self._s[1593]!, self._r[1593]!, [_0])
}
- public var LogoutOptions_SetPasscodeTitle: String { return self._s[1593]! }
+ public var LogoutOptions_SetPasscodeTitle: String { return self._s[1594]! }
public func PUSH_CHAT_MESSAGE_GAME_SCORE(_ _1: String, _ _2: String, _ _3: String, _ _4: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1594]!, self._r[1594]!, [_1, _2, _3, _4])
+ return formatWithArgumentRanges(self._s[1595]!, self._r[1595]!, [_1, _2, _3, _4])
}
- public var Wallet_SecureStorageChanged_PasscodeText: String { return self._s[1595]! }
- public var Theme_ErrorNotFound: String { return self._s[1596]! }
- public var Contacts_SortByName: String { return self._s[1597]! }
- public var SettingsSearch_Synonyms_Privacy_Forwards: String { return self._s[1598]! }
+ public var Wallet_SecureStorageChanged_PasscodeText: String { return self._s[1596]! }
+ public var Theme_ErrorNotFound: String { return self._s[1597]! }
+ public var Contacts_SortByName: String { return self._s[1598]! }
+ public var SettingsSearch_Synonyms_Privacy_Forwards: String { return self._s[1599]! }
public func CHAT_MESSAGE_INVOICE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1600]!, self._r[1600]!, [_1, _2, _3])
+ return formatWithArgumentRanges(self._s[1601]!, self._r[1601]!, [_1, _2, _3])
}
- public var Notification_Exceptions_RemoveFromExceptions: String { return self._s[1601]! }
- public var ScheduledMessages_EditTime: String { return self._s[1602]! }
- public var Conversation_ClearSelfHistory: String { return self._s[1603]! }
- public var Checkout_NewCard_PostcodePlaceholder: String { return self._s[1604]! }
- public var PasscodeSettings_DoNotMatch: String { return self._s[1605]! }
- public var Stickers_SuggestNone: String { return self._s[1606]! }
- public var ChatSettings_Cache: String { return self._s[1607]! }
- public var Settings_SaveIncomingPhotos: String { return self._s[1608]! }
- public var Media_ShareThisPhoto: String { return self._s[1609]! }
- public var Chat_SlowmodeTooltipPending: String { return self._s[1610]! }
- public var InfoPlist_NSContactsUsageDescription: String { return self._s[1611]! }
- public var Conversation_ContextMenuCopyLink: String { return self._s[1612]! }
- public var PrivacyPolicy_AgeVerificationTitle: String { return self._s[1613]! }
- public var SettingsSearch_Synonyms_Stickers_Masks: String { return self._s[1614]! }
- public var TwoStepAuth_SetupPasswordEnterPasswordNew: String { return self._s[1615]! }
+ public var Notification_Exceptions_RemoveFromExceptions: String { return self._s[1602]! }
+ public var ScheduledMessages_EditTime: String { return self._s[1603]! }
+ public var Conversation_ClearSelfHistory: String { return self._s[1604]! }
+ public var Checkout_NewCard_PostcodePlaceholder: String { return self._s[1605]! }
+ public var PasscodeSettings_DoNotMatch: String { return self._s[1606]! }
+ public var Stickers_SuggestNone: String { return self._s[1607]! }
+ public var ChatSettings_Cache: String { return self._s[1608]! }
+ public var Settings_SaveIncomingPhotos: String { return self._s[1609]! }
+ public var Media_ShareThisPhoto: String { return self._s[1610]! }
+ public var Chat_SlowmodeTooltipPending: String { return self._s[1611]! }
+ public var InfoPlist_NSContactsUsageDescription: String { return self._s[1612]! }
+ public var Conversation_ContextMenuCopyLink: String { return self._s[1613]! }
+ public var PrivacyPolicy_AgeVerificationTitle: String { return self._s[1614]! }
+ public var SettingsSearch_Synonyms_Stickers_Masks: String { return self._s[1615]! }
+ public var TwoStepAuth_SetupPasswordEnterPasswordNew: String { return self._s[1616]! }
public func Wallet_SecureStorageReset_BiometryText(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1616]!, self._r[1616]!, [_0])
+ return formatWithArgumentRanges(self._s[1617]!, self._r[1617]!, [_0])
}
- public var Permissions_CellularDataTitle_v0: String { return self._s[1617]! }
- public var WallpaperSearch_ColorWhite: String { return self._s[1619]! }
- public var Channel_AdminLog_DefaultRestrictionsUpdated: String { return self._s[1620]! }
- public var Conversation_ErrorInaccessibleMessage: String { return self._s[1621]! }
- public var Map_OpenIn: String { return self._s[1622]! }
+ public var Permissions_CellularDataTitle_v0: String { return self._s[1618]! }
+ public var WallpaperSearch_ColorWhite: String { return self._s[1620]! }
+ public var Channel_AdminLog_DefaultRestrictionsUpdated: String { return self._s[1621]! }
+ public var Conversation_ErrorInaccessibleMessage: String { return self._s[1622]! }
+ public var Map_OpenIn: String { return self._s[1623]! }
public func PUSH_PHONE_CALL_MISSED(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1625]!, self._r[1625]!, [_1])
+ return formatWithArgumentRanges(self._s[1626]!, self._r[1626]!, [_1])
}
public func ChannelInfo_AddParticipantConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1626]!, self._r[1626]!, [_0])
+ return formatWithArgumentRanges(self._s[1627]!, self._r[1627]!, [_0])
}
- public var GroupInfo_Permissions_SlowmodeHeader: String { return self._s[1627]! }
- public var MessagePoll_LabelClosed: String { return self._s[1628]! }
- public var GroupPermission_PermissionGloballyDisabled: String { return self._s[1630]! }
- public var Wallet_Send_SendAnyway: String { return self._s[1631]! }
- public var Passport_Identity_MiddleNamePlaceholder: String { return self._s[1632]! }
- public var UserInfo_FirstNamePlaceholder: String { return self._s[1633]! }
- public var PrivacyLastSeenSettings_WhoCanSeeMyTimestamp: String { return self._s[1634]! }
- public var Login_SelectCountry_Title: String { return self._s[1636]! }
- public var Channel_EditAdmin_PermissionBanUsers: String { return self._s[1637]! }
+ public var GroupInfo_Permissions_SlowmodeHeader: String { return self._s[1628]! }
+ public var MessagePoll_LabelClosed: String { return self._s[1629]! }
+ public var GroupPermission_PermissionGloballyDisabled: String { return self._s[1631]! }
+ public var Wallet_Send_SendAnyway: String { return self._s[1632]! }
+ public var Passport_Identity_MiddleNamePlaceholder: String { return self._s[1633]! }
+ public var UserInfo_FirstNamePlaceholder: String { return self._s[1634]! }
+ public var PrivacyLastSeenSettings_WhoCanSeeMyTimestamp: String { return self._s[1635]! }
+ public var Login_SelectCountry_Title: String { return self._s[1637]! }
+ public var Channel_EditAdmin_PermissionBanUsers: String { return self._s[1638]! }
public func Conversation_OpenBotLinkLogin(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1638]!, self._r[1638]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[1639]!, self._r[1639]!, [_1, _2])
}
- public var Channel_AdminLog_ChangeInfo: String { return self._s[1639]! }
- public var Watch_Suggestion_BRB: String { return self._s[1640]! }
- public var Passport_Identity_EditIdentityCard: String { return self._s[1641]! }
- public var Contacts_PermissionsTitle: String { return self._s[1642]! }
- public var Conversation_RestrictedInline: String { return self._s[1643]! }
- public var StickerPack_ViewPack: String { return self._s[1645]! }
+ public var Channel_AdminLog_ChangeInfo: String { return self._s[1640]! }
+ public var Watch_Suggestion_BRB: String { return self._s[1641]! }
+ public var Passport_Identity_EditIdentityCard: String { return self._s[1642]! }
+ public var Contacts_PermissionsTitle: String { return self._s[1643]! }
+ public var Conversation_RestrictedInline: String { return self._s[1644]! }
+ public var StickerPack_ViewPack: String { return self._s[1646]! }
public func Update_AppVersion(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1646]!, self._r[1646]!, [_0])
+ return formatWithArgumentRanges(self._s[1647]!, self._r[1647]!, [_0])
}
- public var Compose_NewChannel: String { return self._s[1648]! }
- public var ChatSettings_AutoDownloadSettings_TypePhoto: String { return self._s[1651]! }
- public var Conversation_ReportSpamGroupConfirmation: String { return self._s[1653]! }
- public var Channel_Info_Stickers: String { return self._s[1654]! }
- public var AutoNightTheme_PreferredTheme: String { return self._s[1655]! }
- public var PrivacyPolicy_AgeVerificationAgree: String { return self._s[1656]! }
- public var Passport_DeletePersonalDetails: String { return self._s[1657]! }
- public var LogoutOptions_AddAccountTitle: String { return self._s[1658]! }
- public var Channel_DiscussionGroupInfo: String { return self._s[1659]! }
- public var Group_EditAdmin_RankOwnerPlaceholder: String { return self._s[1660]! }
- public var Conversation_SearchNoResults: String { return self._s[1662]! }
- public var MessagePoll_LabelAnonymous: String { return self._s[1663]! }
- public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[1664]! }
- public var Login_Code: String { return self._s[1665]! }
- public var EditTheme_Create_BottomInfo: String { return self._s[1666]! }
- public var Watch_Suggestion_WhatsUp: String { return self._s[1667]! }
- public var Weekday_ShortThursday: String { return self._s[1668]! }
- public var Resolve_ErrorNotFound: String { return self._s[1670]! }
- public var LastSeen_Offline: String { return self._s[1672]! }
- public var PeopleNearby_NoMembers: String { return self._s[1673]! }
- public var GroupPermission_AddMembersNotAvailable: String { return self._s[1674]! }
- public var Privacy_Calls_AlwaysAllow_Title: String { return self._s[1675]! }
- public var GroupInfo_Title: String { return self._s[1677]! }
- public var NotificationsSound_Note: String { return self._s[1678]! }
- public var Conversation_EditingMessagePanelTitle: String { return self._s[1679]! }
- public var Watch_Message_Poll: String { return self._s[1681]! }
- public var Privacy_Calls: String { return self._s[1682]! }
+ public var Compose_NewChannel: String { return self._s[1649]! }
+ public var ChatSettings_AutoDownloadSettings_TypePhoto: String { return self._s[1652]! }
+ public var Conversation_ReportSpamGroupConfirmation: String { return self._s[1654]! }
+ public var Channel_Info_Stickers: String { return self._s[1655]! }
+ public var AutoNightTheme_PreferredTheme: String { return self._s[1656]! }
+ public var PrivacyPolicy_AgeVerificationAgree: String { return self._s[1657]! }
+ public var Passport_DeletePersonalDetails: String { return self._s[1658]! }
+ public var LogoutOptions_AddAccountTitle: String { return self._s[1659]! }
+ public var Channel_DiscussionGroupInfo: String { return self._s[1660]! }
+ public var Group_EditAdmin_RankOwnerPlaceholder: String { return self._s[1661]! }
+ public var Conversation_SearchNoResults: String { return self._s[1663]! }
+ public var MessagePoll_LabelAnonymous: String { return self._s[1664]! }
+ public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[1665]! }
+ public var Login_Code: String { return self._s[1666]! }
+ public var EditTheme_Create_BottomInfo: String { return self._s[1667]! }
+ public var Watch_Suggestion_WhatsUp: String { return self._s[1668]! }
+ public var Weekday_ShortThursday: String { return self._s[1669]! }
+ public var Resolve_ErrorNotFound: String { return self._s[1671]! }
+ public var LastSeen_Offline: String { return self._s[1673]! }
+ public var PeopleNearby_NoMembers: String { return self._s[1674]! }
+ public var GroupPermission_AddMembersNotAvailable: String { return self._s[1675]! }
+ public var Privacy_Calls_AlwaysAllow_Title: String { return self._s[1676]! }
+ public var GroupInfo_Title: String { return self._s[1678]! }
+ public var NotificationsSound_Note: String { return self._s[1679]! }
+ public var Conversation_EditingMessagePanelTitle: String { return self._s[1680]! }
+ public var Watch_Message_Poll: String { return self._s[1682]! }
+ public var Privacy_Calls: String { return self._s[1683]! }
public func Channel_AdminLog_MessageRankUsername(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1683]!, self._r[1683]!, [_1, _2, _3])
+ return formatWithArgumentRanges(self._s[1684]!, self._r[1684]!, [_1, _2, _3])
}
- public var Month_ShortAugust: String { return self._s[1684]! }
- public var TwoStepAuth_SetPasswordHelp: String { return self._s[1685]! }
- public var Notifications_Reset: String { return self._s[1686]! }
- public var Conversation_Pin: String { return self._s[1687]! }
- public var Passport_Language_lv: String { return self._s[1688]! }
- public var Permissions_PeopleNearbyAllowInSettings_v0: String { return self._s[1689]! }
- public var BlockedUsers_Info: String { return self._s[1690]! }
- public var SettingsSearch_Synonyms_Data_AutoplayVideos: String { return self._s[1692]! }
- public var Watch_Conversation_Unblock: String { return self._s[1694]! }
+ public var Month_ShortAugust: String { return self._s[1685]! }
+ public var TwoStepAuth_SetPasswordHelp: String { return self._s[1686]! }
+ public var Notifications_Reset: String { return self._s[1687]! }
+ public var Conversation_Pin: String { return self._s[1688]! }
+ public var Passport_Language_lv: String { return self._s[1689]! }
+ public var Permissions_PeopleNearbyAllowInSettings_v0: String { return self._s[1690]! }
+ public var BlockedUsers_Info: String { return self._s[1691]! }
+ public var SettingsSearch_Synonyms_Data_AutoplayVideos: String { return self._s[1693]! }
+ public var Watch_Conversation_Unblock: String { return self._s[1695]! }
public func Time_MonthOfYear_m9(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1695]!, self._r[1695]!, [_0])
+ return formatWithArgumentRanges(self._s[1696]!, self._r[1696]!, [_0])
}
- public var CloudStorage_Title: String { return self._s[1696]! }
- public var GroupInfo_DeleteAndExitConfirmation: String { return self._s[1697]! }
+ public var CloudStorage_Title: String { return self._s[1697]! }
+ public var GroupInfo_DeleteAndExitConfirmation: String { return self._s[1698]! }
public func NetworkUsageSettings_WifiUsageSince(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1698]!, self._r[1698]!, [_0])
+ return formatWithArgumentRanges(self._s[1699]!, self._r[1699]!, [_0])
}
- public var Channel_AdminLogFilter_AdminsTitle: String { return self._s[1699]! }
- public var Watch_Suggestion_OnMyWay: String { return self._s[1700]! }
- public var TwoStepAuth_RecoveryEmailTitle: String { return self._s[1701]! }
- public var Passport_Address_EditBankStatement: String { return self._s[1702]! }
+ public var Channel_AdminLogFilter_AdminsTitle: String { return self._s[1700]! }
+ public var Watch_Suggestion_OnMyWay: String { return self._s[1701]! }
+ public var TwoStepAuth_RecoveryEmailTitle: String { return self._s[1702]! }
+ public var Passport_Address_EditBankStatement: String { return self._s[1703]! }
public func Channel_AdminLog_MessageChangedUnlinkedGroup(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1703]!, self._r[1703]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[1704]!, self._r[1704]!, [_1, _2])
}
- public var ChatSettings_DownloadInBackgroundInfo: String { return self._s[1704]! }
- public var ShareMenu_Comment: String { return self._s[1705]! }
- public var Permissions_ContactsTitle_v0: String { return self._s[1706]! }
- public var Notifications_PermissionsTitle: String { return self._s[1707]! }
- public var GroupPermission_NoSendLinks: String { return self._s[1708]! }
- public var Privacy_Forwards_NeverAllow_Title: String { return self._s[1709]! }
- public var Wallet_SecureStorageChanged_ImportWallet: String { return self._s[1710]! }
- public var Settings_Support: String { return self._s[1711]! }
- public var Notifications_ChannelNotificationsSound: String { return self._s[1712]! }
- public var SettingsSearch_Synonyms_Data_AutoDownloadReset: String { return self._s[1713]! }
- public var Privacy_Forwards_Preview: String { return self._s[1714]! }
- public var GroupPermission_ApplyAlertAction: String { return self._s[1715]! }
- public var Watch_Stickers_StickerPacks: String { return self._s[1716]! }
- public var Common_Select: String { return self._s[1718]! }
- public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[1719]! }
- public var WallpaperSearch_ColorGray: String { return self._s[1721]! }
- public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[1722]! }
- public var PasscodeSettings_AutoLock_IfAwayFor_5hours: String { return self._s[1723]! }
- public var Appearance_PreviewReplyAuthor: String { return self._s[1724]! }
- public var TwoStepAuth_RecoveryTitle: String { return self._s[1725]! }
- public var Widget_AuthRequired: String { return self._s[1726]! }
- public var Camera_FlashOn: String { return self._s[1727]! }
- public var Conversation_ContextMenuLookUp: String { return self._s[1728]! }
- public var Channel_Stickers_NotFoundHelp: String { return self._s[1729]! }
- public var Watch_Suggestion_OK: String { return self._s[1730]! }
+ public var ChatSettings_DownloadInBackgroundInfo: String { return self._s[1705]! }
+ public var ShareMenu_Comment: String { return self._s[1706]! }
+ public var Permissions_ContactsTitle_v0: String { return self._s[1707]! }
+ public var Notifications_PermissionsTitle: String { return self._s[1708]! }
+ public var GroupPermission_NoSendLinks: String { return self._s[1709]! }
+ public var Privacy_Forwards_NeverAllow_Title: String { return self._s[1710]! }
+ public var Wallet_SecureStorageChanged_ImportWallet: String { return self._s[1711]! }
+ public var Settings_Support: String { return self._s[1712]! }
+ public var Notifications_ChannelNotificationsSound: String { return self._s[1713]! }
+ public var SettingsSearch_Synonyms_Data_AutoDownloadReset: String { return self._s[1714]! }
+ public var Privacy_Forwards_Preview: String { return self._s[1715]! }
+ public var GroupPermission_ApplyAlertAction: String { return self._s[1716]! }
+ public var Watch_Stickers_StickerPacks: String { return self._s[1717]! }
+ public var Common_Select: String { return self._s[1719]! }
+ public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[1720]! }
+ public var WallpaperSearch_ColorGray: String { return self._s[1722]! }
+ public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[1723]! }
+ public var PasscodeSettings_AutoLock_IfAwayFor_5hours: String { return self._s[1724]! }
+ public var Appearance_PreviewReplyAuthor: String { return self._s[1725]! }
+ public var TwoStepAuth_RecoveryTitle: String { return self._s[1726]! }
+ public var Widget_AuthRequired: String { return self._s[1727]! }
+ public var Camera_FlashOn: String { return self._s[1728]! }
+ public var Conversation_ContextMenuLookUp: String { return self._s[1729]! }
+ public var Channel_Stickers_NotFoundHelp: String { return self._s[1730]! }
+ public var Watch_Suggestion_OK: String { return self._s[1731]! }
public func Username_LinkHint(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1732]!, self._r[1732]!, [_0])
+ return formatWithArgumentRanges(self._s[1733]!, self._r[1733]!, [_0])
}
public func Notification_PinnedLiveLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1734]!, self._r[1734]!, [_0])
+ return formatWithArgumentRanges(self._s[1735]!, self._r[1735]!, [_0])
}
- public var TextFormat_Strikethrough: String { return self._s[1735]! }
- public var DialogList_AdLabel: String { return self._s[1736]! }
- public var WatchRemote_NotificationText: String { return self._s[1737]! }
- public var SettingsSearch_Synonyms_Notifications_MessageNotificationsAlert: String { return self._s[1738]! }
- public var Conversation_ReportSpam: String { return self._s[1739]! }
- public var SettingsSearch_Synonyms_Privacy_Data_TopPeers: String { return self._s[1740]! }
- public var Settings_LogoutConfirmationTitle: String { return self._s[1742]! }
- public var PhoneLabel_Title: String { return self._s[1743]! }
- public var Passport_Address_EditRentalAgreement: String { return self._s[1744]! }
- public var Settings_ChangePhoneNumber: String { return self._s[1745]! }
- public var Notifications_ExceptionsTitle: String { return self._s[1746]! }
- public var Notifications_AlertTones: String { return self._s[1747]! }
- public var Call_ReportIncludeLogDescription: String { return self._s[1748]! }
- public var SettingsSearch_Synonyms_Notifications_ResetAllNotifications: String { return self._s[1749]! }
- public var AutoDownloadSettings_PrivateChats: String { return self._s[1750]! }
- public var VoiceOver_Chat_Photo: String { return self._s[1752]! }
- public var TwoStepAuth_AddHintTitle: String { return self._s[1753]! }
- public var ReportPeer_ReasonOther: String { return self._s[1754]! }
- public var ChatList_Context_JoinChannel: String { return self._s[1755]! }
- public var KeyCommand_ScrollDown: String { return self._s[1757]! }
- public var Conversation_ScheduleMessage_Title: String { return self._s[1758]! }
+ public var TextFormat_Strikethrough: String { return self._s[1736]! }
+ public var DialogList_AdLabel: String { return self._s[1737]! }
+ public var WatchRemote_NotificationText: String { return self._s[1738]! }
+ public var SettingsSearch_Synonyms_Notifications_MessageNotificationsAlert: String { return self._s[1739]! }
+ public var Conversation_ReportSpam: String { return self._s[1740]! }
+ public var SettingsSearch_Synonyms_Privacy_Data_TopPeers: String { return self._s[1741]! }
+ public var Settings_LogoutConfirmationTitle: String { return self._s[1743]! }
+ public var PhoneLabel_Title: String { return self._s[1744]! }
+ public var Passport_Address_EditRentalAgreement: String { return self._s[1745]! }
+ public var Settings_ChangePhoneNumber: String { return self._s[1746]! }
+ public var Notifications_ExceptionsTitle: String { return self._s[1747]! }
+ public var Notifications_AlertTones: String { return self._s[1748]! }
+ public var Call_ReportIncludeLogDescription: String { return self._s[1749]! }
+ public var SettingsSearch_Synonyms_Notifications_ResetAllNotifications: String { return self._s[1750]! }
+ public var AutoDownloadSettings_PrivateChats: String { return self._s[1751]! }
+ public var VoiceOver_Chat_Photo: String { return self._s[1753]! }
+ public var TwoStepAuth_AddHintTitle: String { return self._s[1754]! }
+ public var ReportPeer_ReasonOther: String { return self._s[1755]! }
+ public var ChatList_Context_JoinChannel: String { return self._s[1756]! }
+ public var KeyCommand_ScrollDown: String { return self._s[1758]! }
+ public var Conversation_ScheduleMessage_Title: String { return self._s[1759]! }
public func Login_BannedPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1759]!, self._r[1759]!, [_0])
+ return formatWithArgumentRanges(self._s[1760]!, self._r[1760]!, [_0])
}
- public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[1760]! }
- public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[1761]! }
- public var AuthSessions_LogOut: String { return self._s[1762]! }
- public var Passport_Identity_TypeInternalPassport: String { return self._s[1763]! }
- public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[1764]! }
- public var Passport_Phone_Title: String { return self._s[1765]! }
- public var ContactList_Context_StartSecretChat: String { return self._s[1766]! }
- public var Settings_PhoneNumber: String { return self._s[1767]! }
+ public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[1761]! }
+ public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[1762]! }
+ public var AuthSessions_LogOut: String { return self._s[1763]! }
+ public var Passport_Identity_TypeInternalPassport: String { return self._s[1764]! }
+ public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[1765]! }
+ public var Passport_Phone_Title: String { return self._s[1766]! }
+ public var ContactList_Context_StartSecretChat: String { return self._s[1767]! }
+ public var Settings_PhoneNumber: String { return self._s[1768]! }
public func Conversation_ScheduleMessage_SendToday(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1768]!, self._r[1768]!, [_0])
+ return formatWithArgumentRanges(self._s[1769]!, self._r[1769]!, [_0])
}
- public var NotificationsSound_Alert: String { return self._s[1769]! }
- public var Wallet_SecureStorageChanged_CreateWallet: String { return self._s[1770]! }
- public var WebSearch_SearchNoResults: String { return self._s[1771]! }
- public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[1773]! }
- public var LogoutOptions_AlternativeOptionsSection: String { return self._s[1774]! }
- public var SettingsSearch_Synonyms_Passport: String { return self._s[1775]! }
- public var PhotoEditor_CurvesTool: String { return self._s[1776]! }
- public var Checkout_PaymentMethod: String { return self._s[1778]! }
+ public var NotificationsSound_Alert: String { return self._s[1770]! }
+ public var Wallet_SecureStorageChanged_CreateWallet: String { return self._s[1771]! }
+ public var WebSearch_SearchNoResults: String { return self._s[1772]! }
+ public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[1774]! }
+ public var LogoutOptions_AlternativeOptionsSection: String { return self._s[1775]! }
+ public var SettingsSearch_Synonyms_Passport: String { return self._s[1776]! }
+ public var PhotoEditor_CurvesTool: String { return self._s[1777]! }
+ public var Checkout_PaymentMethod: String { return self._s[1779]! }
public func PUSH_CHAT_ADD_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1779]!, self._r[1779]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[1780]!, self._r[1780]!, [_1, _2])
}
- public var Contacts_AccessDeniedError: String { return self._s[1780]! }
- public var Camera_PhotoMode: String { return self._s[1783]! }
- public var EditTheme_Expand_Preview_IncomingText: String { return self._s[1784]! }
+ public var Contacts_AccessDeniedError: String { return self._s[1781]! }
+ public var Camera_PhotoMode: String { return self._s[1784]! }
+ public var EditTheme_Expand_Preview_IncomingText: String { return self._s[1785]! }
public func Updated_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1785]!, self._r[1785]!, [_0])
+ return formatWithArgumentRanges(self._s[1786]!, self._r[1786]!, [_0])
}
- public var Passport_Address_AddUtilityBill: String { return self._s[1787]! }
- public var CallSettings_OnMobile: String { return self._s[1788]! }
- public var Tour_Text2: String { return self._s[1789]! }
+ public var Passport_Address_AddUtilityBill: String { return self._s[1788]! }
+ public var CallSettings_OnMobile: String { return self._s[1789]! }
+ public var Tour_Text2: String { return self._s[1790]! }
public func PUSH_CHAT_MESSAGE_ROUND(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1790]!, self._r[1790]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[1791]!, self._r[1791]!, [_1, _2])
}
- public var DialogList_EncryptionProcessing: String { return self._s[1792]! }
- public var Permissions_Skip: String { return self._s[1793]! }
- public var Wallet_Words_NotDoneOk: String { return self._s[1794]! }
- public var SecretImage_Title: String { return self._s[1795]! }
- public var Watch_MessageView_Title: String { return self._s[1796]! }
- public var Channel_DiscussionGroupAdd: String { return self._s[1797]! }
- public var AttachmentMenu_Poll: String { return self._s[1798]! }
+ public var DialogList_EncryptionProcessing: String { return self._s[1793]! }
+ public var Permissions_Skip: String { return self._s[1794]! }
+ public var Wallet_Words_NotDoneOk: String { return self._s[1795]! }
+ public var SecretImage_Title: String { return self._s[1796]! }
+ public var Watch_MessageView_Title: String { return self._s[1797]! }
+ public var Channel_DiscussionGroupAdd: String { return self._s[1798]! }
+ public var AttachmentMenu_Poll: String { return self._s[1799]! }
public func Notification_GroupInviter(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1799]!, self._r[1799]!, [_0])
+ return formatWithArgumentRanges(self._s[1800]!, self._r[1800]!, [_0])
}
public func Channel_DiscussionGroup_PrivateChannelLink(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1800]!, self._r[1800]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[1801]!, self._r[1801]!, [_1, _2])
}
- public var Notification_CallCanceled: String { return self._s[1801]! }
- public var WallpaperPreview_Title: String { return self._s[1802]! }
- public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[1803]! }
- public var Settings_ProxyConnecting: String { return self._s[1804]! }
- public var Settings_CheckPhoneNumberText: String { return self._s[1806]! }
- public var VoiceOver_Chat_YourVideo: String { return self._s[1807]! }
- public var Wallet_Intro_Title: String { return self._s[1808]! }
- public var Profile_MessageLifetime5s: String { return self._s[1809]! }
- public var Username_InvalidCharacters: String { return self._s[1810]! }
- public var VoiceOver_Media_PlaybackRateFast: String { return self._s[1811]! }
- public var ScheduledMessages_ClearAll: String { return self._s[1812]! }
- public var WallpaperPreview_CropBottomText: String { return self._s[1813]! }
- public var AutoDownloadSettings_LimitBySize: String { return self._s[1814]! }
- public var Settings_AddAccount: String { return self._s[1815]! }
- public var Notification_CreatedChannel: String { return self._s[1818]! }
+ public var Notification_CallCanceled: String { return self._s[1802]! }
+ public var WallpaperPreview_Title: String { return self._s[1803]! }
+ public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[1804]! }
+ public var Settings_ProxyConnecting: String { return self._s[1805]! }
+ public var Settings_CheckPhoneNumberText: String { return self._s[1807]! }
+ public var VoiceOver_Chat_YourVideo: String { return self._s[1808]! }
+ public var Wallet_Intro_Title: String { return self._s[1809]! }
+ public var Profile_MessageLifetime5s: String { return self._s[1810]! }
+ public var Username_InvalidCharacters: String { return self._s[1811]! }
+ public var VoiceOver_Media_PlaybackRateFast: String { return self._s[1812]! }
+ public var ScheduledMessages_ClearAll: String { return self._s[1813]! }
+ public var WallpaperPreview_CropBottomText: String { return self._s[1814]! }
+ public var AutoDownloadSettings_LimitBySize: String { return self._s[1815]! }
+ public var Settings_AddAccount: String { return self._s[1816]! }
+ public var Notification_CreatedChannel: String { return self._s[1819]! }
public func PUSH_CHAT_DELETE_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1819]!, self._r[1819]!, [_1, _2, _3])
+ return formatWithArgumentRanges(self._s[1820]!, self._r[1820]!, [_1, _2, _3])
}
- public var Passcode_AppLockedAlert: String { return self._s[1821]! }
- public var StickerPacksSettings_AnimatedStickersInfo: String { return self._s[1822]! }
- public var VoiceOver_Media_PlaybackStop: String { return self._s[1823]! }
- public var Contacts_TopSection: String { return self._s[1824]! }
+ public var Passcode_AppLockedAlert: String { return self._s[1822]! }
+ public var StickerPacksSettings_AnimatedStickersInfo: String { return self._s[1823]! }
+ public var VoiceOver_Media_PlaybackStop: String { return self._s[1824]! }
+ public var Contacts_TopSection: String { return self._s[1825]! }
public func Conversation_SetReminder_RemindOn(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1825]!, self._r[1825]!, [_0, _1])
+ return formatWithArgumentRanges(self._s[1826]!, self._r[1826]!, [_0, _1])
}
- public var Wallet_Info_Receive: String { return self._s[1826]! }
- public var Wallet_Completed_ViewWallet: String { return self._s[1827]! }
+ public var Wallet_Info_Receive: String { return self._s[1827]! }
+ public var Wallet_Completed_ViewWallet: String { return self._s[1828]! }
public func Time_MonthOfYear_m6(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1828]!, self._r[1828]!, [_0])
+ return formatWithArgumentRanges(self._s[1829]!, self._r[1829]!, [_0])
}
- public var ReportPeer_ReasonSpam: String { return self._s[1829]! }
- public var UserInfo_TapToCall: String { return self._s[1830]! }
- public var Conversation_ForwardAuthorHiddenTooltip: String { return self._s[1832]! }
- public var AutoDownloadSettings_DataUsageCustom: String { return self._s[1833]! }
- public var Common_Search: String { return self._s[1834]! }
- public var ScheduledMessages_EmptyPlaceholder: String { return self._s[1835]! }
+ public var ReportPeer_ReasonSpam: String { return self._s[1830]! }
+ public var UserInfo_TapToCall: String { return self._s[1831]! }
+ public var Conversation_ForwardAuthorHiddenTooltip: String { return self._s[1833]! }
+ public var AutoDownloadSettings_DataUsageCustom: String { return self._s[1834]! }
+ public var Common_Search: String { return self._s[1835]! }
+ public var ScheduledMessages_EmptyPlaceholder: String { return self._s[1836]! }
public func Channel_AdminLog_MessageChangedGroupGeoLocation(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1836]!, self._r[1836]!, [_0])
+ return formatWithArgumentRanges(self._s[1837]!, self._r[1837]!, [_0])
}
- public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[1837]! }
- public var Message_InvoiceLabel: String { return self._s[1838]! }
- public var Conversation_InputTextPlaceholder: String { return self._s[1839]! }
- public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[1840]! }
+ public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[1838]! }
+ public var Message_InvoiceLabel: String { return self._s[1839]! }
+ public var Conversation_InputTextPlaceholder: String { return self._s[1840]! }
+ public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[1841]! }
public func Passport_Address_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1841]!, self._r[1841]!, [_0])
+ return formatWithArgumentRanges(self._s[1842]!, self._r[1842]!, [_0])
}
- public var Conversation_Info: String { return self._s[1842]! }
- public var Login_InfoDeletePhoto: String { return self._s[1843]! }
- public var Passport_Language_vi: String { return self._s[1845]! }
- public var UserInfo_ScamUserWarning: String { return self._s[1846]! }
- public var Conversation_Search: String { return self._s[1847]! }
- public var DialogList_DeleteBotConversationConfirmation: String { return self._s[1849]! }
+ public var Conversation_Info: String { return self._s[1843]! }
+ public var Login_InfoDeletePhoto: String { return self._s[1844]! }
+ public var Passport_Language_vi: String { return self._s[1846]! }
+ public var UserInfo_ScamUserWarning: String { return self._s[1847]! }
+ public var Conversation_Search: String { return self._s[1848]! }
+ public var DialogList_DeleteBotConversationConfirmation: String { return self._s[1850]! }
public func Updated_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1850]!, self._r[1850]!, [_0])
+ return formatWithArgumentRanges(self._s[1851]!, self._r[1851]!, [_0])
}
- public var ReportPeer_ReasonPornography: String { return self._s[1851]! }
- public var AutoDownloadSettings_PhotosTitle: String { return self._s[1852]! }
- public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[1853]! }
- public var Map_LiveLocationGroupDescription: String { return self._s[1854]! }
- public var Channel_Setup_TypeHeader: String { return self._s[1855]! }
- public var AuthSessions_LoggedIn: String { return self._s[1856]! }
- public var Privacy_Forwards_AlwaysAllow_Title: String { return self._s[1857]! }
- public var Login_SmsRequestState3: String { return self._s[1858]! }
- public var Passport_Address_EditUtilityBill: String { return self._s[1859]! }
- public var Appearance_ReduceMotionInfo: String { return self._s[1860]! }
- public var Join_ChannelsTooMuch: String { return self._s[1861]! }
- public var Channel_Edit_LinkItem: String { return self._s[1862]! }
- public var Privacy_Calls_P2PNever: String { return self._s[1863]! }
- public var Conversation_AddToReadingList: String { return self._s[1865]! }
- public var Share_MultipleMessagesDisabled: String { return self._s[1866]! }
- public var Message_Animation: String { return self._s[1867]! }
- public var Conversation_DefaultRestrictedMedia: String { return self._s[1868]! }
- public var Map_Unknown: String { return self._s[1869]! }
- public var AutoDownloadSettings_LastDelimeter: String { return self._s[1870]! }
+ public var ReportPeer_ReasonPornography: String { return self._s[1852]! }
+ public var AutoDownloadSettings_PhotosTitle: String { return self._s[1853]! }
+ public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[1854]! }
+ public var Map_LiveLocationGroupDescription: String { return self._s[1855]! }
+ public var Channel_Setup_TypeHeader: String { return self._s[1856]! }
+ public var AuthSessions_LoggedIn: String { return self._s[1857]! }
+ public var Privacy_Forwards_AlwaysAllow_Title: String { return self._s[1858]! }
+ public var Login_SmsRequestState3: String { return self._s[1859]! }
+ public var Passport_Address_EditUtilityBill: String { return self._s[1860]! }
+ public var Appearance_ReduceMotionInfo: String { return self._s[1861]! }
+ public var Join_ChannelsTooMuch: String { return self._s[1862]! }
+ public var Channel_Edit_LinkItem: String { return self._s[1863]! }
+ public var Privacy_Calls_P2PNever: String { return self._s[1864]! }
+ public var Conversation_AddToReadingList: String { return self._s[1866]! }
+ public var Share_MultipleMessagesDisabled: String { return self._s[1867]! }
+ public var Message_Animation: String { return self._s[1868]! }
+ public var Conversation_DefaultRestrictedMedia: String { return self._s[1869]! }
+ public var Map_Unknown: String { return self._s[1870]! }
+ public var AutoDownloadSettings_LastDelimeter: String { return self._s[1871]! }
public func PUSH_PINNED_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1871]!, self._r[1871]!, [_1, _2])
- }
- public func Passport_FieldOneOf_Or(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
return formatWithArgumentRanges(self._s[1872]!, self._r[1872]!, [_1, _2])
}
- public var Call_StatusRequesting: String { return self._s[1873]! }
- public var Conversation_SecretChatContextBotAlert: String { return self._s[1874]! }
- public var SocksProxySetup_ProxyStatusChecking: String { return self._s[1875]! }
+ public func Passport_FieldOneOf_Or(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[1873]!, self._r[1873]!, [_1, _2])
+ }
+ public var Call_StatusRequesting: String { return self._s[1874]! }
+ public var Conversation_SecretChatContextBotAlert: String { return self._s[1875]! }
+ public var SocksProxySetup_ProxyStatusChecking: String { return self._s[1876]! }
public func PUSH_CHAT_MESSAGE_DOC(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1876]!, self._r[1876]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[1877]!, self._r[1877]!, [_1, _2])
}
public func Notification_PinnedLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1877]!, self._r[1877]!, [_0])
+ return formatWithArgumentRanges(self._s[1878]!, self._r[1878]!, [_0])
}
- public var Update_Skip: String { return self._s[1878]! }
- public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[1879]! }
- public var Message_PinnedPollMessage: String { return self._s[1880]! }
- public var BlockedUsers_Title: String { return self._s[1881]! }
+ public var Update_Skip: String { return self._s[1879]! }
+ public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[1880]! }
+ public var Message_PinnedPollMessage: String { return self._s[1881]! }
+ public var BlockedUsers_Title: String { return self._s[1882]! }
public func PUSH_CHANNEL_MESSAGE_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1882]!, self._r[1882]!, [_1])
+ return formatWithArgumentRanges(self._s[1883]!, self._r[1883]!, [_1])
}
- public var Username_CheckingUsername: String { return self._s[1883]! }
- public var NotificationsSound_Bell: String { return self._s[1884]! }
- public var Conversation_SendMessageErrorFlood: String { return self._s[1885]! }
- public var Weekday_Monday: String { return self._s[1886]! }
- public var SettingsSearch_Synonyms_Notifications_DisplayNamesOnLockScreen: String { return self._s[1887]! }
- public var ChannelMembers_ChannelAdminsTitle: String { return self._s[1888]! }
- public var ChatSettings_Groups: String { return self._s[1889]! }
+ public var Username_CheckingUsername: String { return self._s[1884]! }
+ public var NotificationsSound_Bell: String { return self._s[1885]! }
+ public var Conversation_SendMessageErrorFlood: String { return self._s[1886]! }
+ public var Weekday_Monday: String { return self._s[1887]! }
+ public var SettingsSearch_Synonyms_Notifications_DisplayNamesOnLockScreen: String { return self._s[1888]! }
+ public var ChannelMembers_ChannelAdminsTitle: String { return self._s[1889]! }
+ public var ChatSettings_Groups: String { return self._s[1890]! }
public func Conversation_SetReminder_RemindTomorrow(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1890]!, self._r[1890]!, [_0])
+ return formatWithArgumentRanges(self._s[1891]!, self._r[1891]!, [_0])
}
- public var Your_card_was_declined: String { return self._s[1891]! }
- public var TwoStepAuth_EnterPasswordHelp: String { return self._s[1893]! }
- public var ChatList_Unmute: String { return self._s[1894]! }
- public var PhotoEditor_CurvesAll: String { return self._s[1895]! }
- public var Weekday_ShortTuesday: String { return self._s[1896]! }
- public var DialogList_Read: String { return self._s[1897]! }
- public var Appearance_AppIconClassic: String { return self._s[1898]! }
- public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[1899]! }
- public var Passport_Identity_Gender: String { return self._s[1900]! }
+ public var Your_card_was_declined: String { return self._s[1892]! }
+ public var TwoStepAuth_EnterPasswordHelp: String { return self._s[1894]! }
+ public var ChatList_Unmute: String { return self._s[1895]! }
+ public var PhotoEditor_CurvesAll: String { return self._s[1896]! }
+ public var Weekday_ShortTuesday: String { return self._s[1897]! }
+ public var DialogList_Read: String { return self._s[1898]! }
+ public var Appearance_AppIconClassic: String { return self._s[1899]! }
+ public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[1900]! }
+ public var Passport_Identity_Gender: String { return self._s[1901]! }
public func Target_ShareGameConfirmationPrivate(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1901]!, self._r[1901]!, [_0])
+ return formatWithArgumentRanges(self._s[1902]!, self._r[1902]!, [_0])
}
- public var Target_SelectGroup: String { return self._s[1902]! }
+ public var Target_SelectGroup: String { return self._s[1903]! }
public func DialogList_EncryptedChatStartedIncoming(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1904]!, self._r[1904]!, [_0])
+ return formatWithArgumentRanges(self._s[1905]!, self._r[1905]!, [_0])
}
- public var Passport_Language_en: String { return self._s[1905]! }
- public var AutoDownloadSettings_AutodownloadPhotos: String { return self._s[1906]! }
- public var Channel_Username_CreatePublicLinkHelp: String { return self._s[1907]! }
- public var Login_CancelPhoneVerificationContinue: String { return self._s[1908]! }
- public var ScheduledMessages_SendNow: String { return self._s[1909]! }
- public var Checkout_NewCard_PaymentCard: String { return self._s[1911]! }
- public var Login_InfoHelp: String { return self._s[1912]! }
- public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[1913]! }
- public var SettingsSearch_Synonyms_Stickers_FeaturedPacks: String { return self._s[1914]! }
+ public var Passport_Language_en: String { return self._s[1906]! }
+ public var AutoDownloadSettings_AutodownloadPhotos: String { return self._s[1907]! }
+ public var Channel_Username_CreatePublicLinkHelp: String { return self._s[1908]! }
+ public var Login_CancelPhoneVerificationContinue: String { return self._s[1909]! }
+ public var ScheduledMessages_SendNow: String { return self._s[1910]! }
+ public var Checkout_NewCard_PaymentCard: String { return self._s[1912]! }
+ public var Login_InfoHelp: String { return self._s[1913]! }
+ public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[1914]! }
+ public var SettingsSearch_Synonyms_Stickers_FeaturedPacks: String { return self._s[1915]! }
public func Channel_AdminLog_MessageChangedLinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1915]!, self._r[1915]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[1916]!, self._r[1916]!, [_1, _2])
}
- public var SocksProxySetup_AddProxy: String { return self._s[1918]! }
- public var CreatePoll_Title: String { return self._s[1919]! }
- public var Conversation_ViewTheme: String { return self._s[1920]! }
- public var SettingsSearch_Synonyms_Privacy_Data_SecretChatLinkPreview: String { return self._s[1921]! }
- public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[1922]! }
- public var UserInfo_GroupsInCommon: String { return self._s[1923]! }
- public var Call_AudioRouteHide: String { return self._s[1924]! }
- public var ContactInfo_PhoneLabelMobile: String { return self._s[1926]! }
+ public var SocksProxySetup_AddProxy: String { return self._s[1919]! }
+ public var CreatePoll_Title: String { return self._s[1920]! }
+ public var Conversation_ViewTheme: String { return self._s[1921]! }
+ public var SettingsSearch_Synonyms_Privacy_Data_SecretChatLinkPreview: String { return self._s[1922]! }
+ public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[1923]! }
+ public var UserInfo_GroupsInCommon: String { return self._s[1924]! }
+ public var Call_AudioRouteHide: String { return self._s[1925]! }
+ public var ContactInfo_PhoneLabelMobile: String { return self._s[1927]! }
public func ChatList_LeaveGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1927]!, self._r[1927]!, [_0])
+ return formatWithArgumentRanges(self._s[1928]!, self._r[1928]!, [_0])
}
- public var TextFormat_Bold: String { return self._s[1928]! }
- public var FastTwoStepSetup_EmailSection: String { return self._s[1929]! }
- public var Notifications_Title: String { return self._s[1930]! }
- public var Group_Username_InvalidTooShort: String { return self._s[1931]! }
- public var Channel_ErrorAddTooMuch: String { return self._s[1932]! }
+ public var TextFormat_Bold: String { return self._s[1929]! }
+ public var FastTwoStepSetup_EmailSection: String { return self._s[1930]! }
+ public var Notifications_Title: String { return self._s[1931]! }
+ public var Group_Username_InvalidTooShort: String { return self._s[1932]! }
+ public var Channel_ErrorAddTooMuch: String { return self._s[1933]! }
public func DialogList_MultipleTypingSuffix(_ _0: Int) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1933]!, self._r[1933]!, ["\(_0)"])
+ return formatWithArgumentRanges(self._s[1934]!, self._r[1934]!, ["\(_0)"])
}
- public var VoiceOver_DiscardPreparedContent: String { return self._s[1935]! }
- public var Stickers_SuggestAdded: String { return self._s[1936]! }
- public var Login_CountryCode: String { return self._s[1937]! }
- public var ChatSettings_AutoPlayVideos: String { return self._s[1938]! }
- public var Map_GetDirections: String { return self._s[1939]! }
- public var Wallet_Receive_ShareInvoiceUrl: String { return self._s[1940]! }
- public var Login_PhoneFloodError: String { return self._s[1941]! }
+ public var VoiceOver_DiscardPreparedContent: String { return self._s[1936]! }
+ public var Stickers_SuggestAdded: String { return self._s[1937]! }
+ public var Login_CountryCode: String { return self._s[1938]! }
+ public var ChatSettings_AutoPlayVideos: String { return self._s[1939]! }
+ public var Map_GetDirections: String { return self._s[1940]! }
+ public var Wallet_Receive_ShareInvoiceUrl: String { return self._s[1941]! }
+ public var Login_PhoneFloodError: String { return self._s[1942]! }
public func Time_MonthOfYear_m3(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1942]!, self._r[1942]!, [_0])
+ return formatWithArgumentRanges(self._s[1943]!, self._r[1943]!, [_0])
}
- public var Settings_SetUsername: String { return self._s[1944]! }
- public var Group_Location_ChangeLocation: String { return self._s[1945]! }
- public var Notification_GroupInviterSelf: String { return self._s[1946]! }
- public var InstantPage_TapToOpenLink: String { return self._s[1947]! }
+ public var Settings_SetUsername: String { return self._s[1945]! }
+ public var Group_Location_ChangeLocation: String { return self._s[1946]! }
+ public var Notification_GroupInviterSelf: String { return self._s[1947]! }
+ public var InstantPage_TapToOpenLink: String { return self._s[1948]! }
public func Notification_ChannelInviter(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1948]!, self._r[1948]!, [_0])
+ return formatWithArgumentRanges(self._s[1949]!, self._r[1949]!, [_0])
}
- public var Watch_Suggestion_TalkLater: String { return self._s[1949]! }
- public var SecretChat_Title: String { return self._s[1950]! }
- public var Group_UpgradeNoticeText1: String { return self._s[1951]! }
- public var AuthSessions_Title: String { return self._s[1952]! }
+ public var Watch_Suggestion_TalkLater: String { return self._s[1950]! }
+ public var SecretChat_Title: String { return self._s[1951]! }
+ public var Group_UpgradeNoticeText1: String { return self._s[1952]! }
+ public var AuthSessions_Title: String { return self._s[1953]! }
public func TextFormat_AddLinkText(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1953]!, self._r[1953]!, [_0])
+ return formatWithArgumentRanges(self._s[1954]!, self._r[1954]!, [_0])
}
- public var PhotoEditor_CropAuto: String { return self._s[1954]! }
- public var Channel_About_Title: String { return self._s[1955]! }
- public var FastTwoStepSetup_EmailHelp: String { return self._s[1956]! }
+ public var PhotoEditor_CropAuto: String { return self._s[1955]! }
+ public var Channel_About_Title: String { return self._s[1956]! }
+ public var FastTwoStepSetup_EmailHelp: String { return self._s[1957]! }
public func Conversation_Bytes(_ _0: Int) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1958]!, self._r[1958]!, ["\(_0)"])
+ return formatWithArgumentRanges(self._s[1959]!, self._r[1959]!, ["\(_0)"])
}
- public var VoiceOver_MessageContextReport: String { return self._s[1959]! }
- public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[1961]! }
- public var Group_Setup_HistoryVisibleHelp: String { return self._s[1962]! }
+ public var VoiceOver_MessageContextReport: String { return self._s[1960]! }
+ public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[1962]! }
+ public var Group_Setup_HistoryVisibleHelp: String { return self._s[1963]! }
public func PUSH_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1963]!, self._r[1963]!, [_1])
+ return formatWithArgumentRanges(self._s[1964]!, self._r[1964]!, [_1])
}
public func SharedMedia_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1965]!, self._r[1965]!, [_0])
- }
- public func TwoStepAuth_RecoveryEmailUnavailable(_ _0: String) -> (String, [(Int, NSRange)]) {
return formatWithArgumentRanges(self._s[1966]!, self._r[1966]!, [_0])
}
- public var Privacy_PaymentsClearInfoHelp: String { return self._s[1967]! }
- public var Presence_online: String { return self._s[1969]! }
- public var PasscodeSettings_Title: String { return self._s[1970]! }
- public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[1971]! }
- public var Web_OpenExternal: String { return self._s[1972]! }
- public var AutoDownloadSettings_AutoDownload: String { return self._s[1974]! }
- public var Channel_OwnershipTransfer_EnterPasswordText: String { return self._s[1975]! }
- public var LocalGroup_Title: String { return self._s[1976]! }
+ public func TwoStepAuth_RecoveryEmailUnavailable(_ _0: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[1967]!, self._r[1967]!, [_0])
+ }
+ public var Privacy_PaymentsClearInfoHelp: String { return self._s[1968]! }
+ public var Presence_online: String { return self._s[1970]! }
+ public var PasscodeSettings_Title: String { return self._s[1971]! }
+ public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[1972]! }
+ public var Web_OpenExternal: String { return self._s[1973]! }
+ public var AutoDownloadSettings_AutoDownload: String { return self._s[1975]! }
+ public var Channel_OwnershipTransfer_EnterPasswordText: String { return self._s[1976]! }
+ public var LocalGroup_Title: String { return self._s[1977]! }
public func AutoNightTheme_AutomaticHelp(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1977]!, self._r[1977]!, [_0])
+ return formatWithArgumentRanges(self._s[1978]!, self._r[1978]!, [_0])
}
- public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[1978]! }
- public var Map_YouAreHere: String { return self._s[1979]! }
+ public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[1979]! }
+ public var Map_YouAreHere: String { return self._s[1980]! }
public func AuthSessions_Message(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1980]!, self._r[1980]!, [_0])
- }
- public func ChatList_DeleteChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) {
return formatWithArgumentRanges(self._s[1981]!, self._r[1981]!, [_0])
}
- public var PrivacyLastSeenSettings_AlwaysShareWith: String { return self._s[1982]! }
- public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[1983]! }
- public func AuthSessions_AppUnofficial(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1984]!, self._r[1984]!, [_0])
+ public func ChatList_DeleteChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[1982]!, self._r[1982]!, [_0])
}
- public func DialogList_LiveLocationSharingTo(_ _0: String) -> (String, [(Int, NSRange)]) {
+ public var PrivacyLastSeenSettings_AlwaysShareWith: String { return self._s[1983]! }
+ public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[1984]! }
+ public func AuthSessions_AppUnofficial(_ _0: String) -> (String, [(Int, NSRange)]) {
return formatWithArgumentRanges(self._s[1985]!, self._r[1985]!, [_0])
}
- public var SocksProxySetup_Username: String { return self._s[1986]! }
- public var Bot_Start: String { return self._s[1987]! }
- public func Channel_AdminLog_EmptyFilterQueryText(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1988]!, self._r[1988]!, [_0])
+ public func DialogList_LiveLocationSharingTo(_ _0: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[1986]!, self._r[1986]!, [_0])
}
- public func Channel_AdminLog_MessagePinned(_ _0: String) -> (String, [(Int, NSRange)]) {
+ public var SocksProxySetup_Username: String { return self._s[1987]! }
+ public var Bot_Start: String { return self._s[1988]! }
+ public func Channel_AdminLog_EmptyFilterQueryText(_ _0: String) -> (String, [(Int, NSRange)]) {
return formatWithArgumentRanges(self._s[1989]!, self._r[1989]!, [_0])
}
- public var Contacts_SortByPresence: String { return self._s[1990]! }
- public var AccentColor_Title: String { return self._s[1992]! }
- public var Conversation_DiscardVoiceMessageTitle: String { return self._s[1993]! }
+ public func Channel_AdminLog_MessagePinned(_ _0: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[1990]!, self._r[1990]!, [_0])
+ }
+ public var Contacts_SortByPresence: String { return self._s[1991]! }
+ public var AccentColor_Title: String { return self._s[1993]! }
+ public var Conversation_DiscardVoiceMessageTitle: String { return self._s[1994]! }
public func PUSH_CHAT_CREATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1994]!, self._r[1994]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[1995]!, self._r[1995]!, [_1, _2])
}
public func PrivacySettings_LastSeenContactsMinus(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1995]!, self._r[1995]!, [_0])
+ return formatWithArgumentRanges(self._s[1996]!, self._r[1996]!, [_0])
}
public func Channel_AdminLog_MessageChangedLinkedGroup(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[1996]!, self._r[1996]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[1997]!, self._r[1997]!, [_1, _2])
}
- public var Passport_Email_EnterOtherEmail: String { return self._s[1997]! }
- public var Login_InfoAvatarPhoto: String { return self._s[1998]! }
- public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[1999]! }
- public var Tour_Title4: String { return self._s[2000]! }
- public var Passport_Identity_Translation: String { return self._s[2001]! }
- public var SettingsSearch_Synonyms_Notifications_ContactJoined: String { return self._s[2002]! }
- public var Login_TermsOfServiceLabel: String { return self._s[2004]! }
- public var Passport_Language_it: String { return self._s[2005]! }
- public var KeyCommand_JumpToNextUnreadChat: String { return self._s[2006]! }
- public var Passport_Identity_SelfieHelp: String { return self._s[2007]! }
- public var Conversation_ClearAll: String { return self._s[2009]! }
- public var Channel_OwnershipTransfer_Title: String { return self._s[2011]! }
- public var TwoStepAuth_FloodError: String { return self._s[2012]! }
+ public var Passport_Email_EnterOtherEmail: String { return self._s[1998]! }
+ public var Login_InfoAvatarPhoto: String { return self._s[1999]! }
+ public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[2000]! }
+ public var Tour_Title4: String { return self._s[2001]! }
+ public var Passport_Identity_Translation: String { return self._s[2002]! }
+ public var SettingsSearch_Synonyms_Notifications_ContactJoined: String { return self._s[2003]! }
+ public var Login_TermsOfServiceLabel: String { return self._s[2005]! }
+ public var Passport_Language_it: String { return self._s[2006]! }
+ public var KeyCommand_JumpToNextUnreadChat: String { return self._s[2007]! }
+ public var Passport_Identity_SelfieHelp: String { return self._s[2008]! }
+ public var Conversation_ClearAll: String { return self._s[2010]! }
+ public var Wallet_Send_UninitializedText: String { return self._s[2012]! }
+ public var Channel_OwnershipTransfer_Title: String { return self._s[2013]! }
+ public var TwoStepAuth_FloodError: String { return self._s[2014]! }
public func PUSH_CHANNEL_MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2013]!, self._r[2013]!, [_1])
+ return formatWithArgumentRanges(self._s[2015]!, self._r[2015]!, [_1])
}
- public var Paint_Delete: String { return self._s[2014]! }
+ public var Paint_Delete: String { return self._s[2016]! }
public func Wallet_Sent_Text(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2015]!, self._r[2015]!, [_0])
+ return formatWithArgumentRanges(self._s[2017]!, self._r[2017]!, [_0])
}
- public var Privacy_AddNewPeer: String { return self._s[2016]! }
+ public var Privacy_AddNewPeer: String { return self._s[2018]! }
public func Channel_AdminLog_MessageRank(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2017]!, self._r[2017]!, [_1])
+ return formatWithArgumentRanges(self._s[2019]!, self._r[2019]!, [_1])
}
- public var LogoutOptions_SetPasscodeText: String { return self._s[2018]! }
+ public var LogoutOptions_SetPasscodeText: String { return self._s[2020]! }
public func Passport_AcceptHelp(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2019]!, self._r[2019]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[2021]!, self._r[2021]!, [_1, _2])
}
- public var Message_PinnedAudioMessage: String { return self._s[2020]! }
+ public var Message_PinnedAudioMessage: String { return self._s[2022]! }
public func Watch_Time_ShortTodayAt(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2021]!, self._r[2021]!, [_0])
+ return formatWithArgumentRanges(self._s[2023]!, self._r[2023]!, [_0])
}
- public var Notification_Mute1hMin: String { return self._s[2022]! }
- public var Notifications_GroupNotificationsSound: String { return self._s[2023]! }
- public var SocksProxySetup_ShareProxyList: String { return self._s[2024]! }
- public var Conversation_MessageEditedLabel: String { return self._s[2025]! }
- public var Notification_Exceptions_AlwaysOff: String { return self._s[2026]! }
- public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[2027]! }
+ public var Notification_Mute1hMin: String { return self._s[2024]! }
+ public var Notifications_GroupNotificationsSound: String { return self._s[2025]! }
+ public var SocksProxySetup_ShareProxyList: String { return self._s[2026]! }
+ public var Conversation_MessageEditedLabel: String { return self._s[2027]! }
+ public var Notification_Exceptions_AlwaysOff: String { return self._s[2028]! }
+ public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[2029]! }
public func Channel_AdminLog_MessageAdmin(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2028]!, self._r[2028]!, [_0, _1, _2])
+ return formatWithArgumentRanges(self._s[2030]!, self._r[2030]!, [_0, _1, _2])
}
- public var NetworkUsageSettings_ResetStats: String { return self._s[2029]! }
+ public var NetworkUsageSettings_ResetStats: String { return self._s[2031]! }
public func PUSH_MESSAGE_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2030]!, self._r[2030]!, [_1])
+ return formatWithArgumentRanges(self._s[2032]!, self._r[2032]!, [_1])
}
- public var AccessDenied_LocationTracking: String { return self._s[2031]! }
- public var Month_GenOctober: String { return self._s[2032]! }
- public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[2033]! }
- public var EnterPasscode_EnterPasscode: String { return self._s[2034]! }
- public var MediaPicker_TimerTooltip: String { return self._s[2036]! }
- public var SharedMedia_TitleAll: String { return self._s[2037]! }
- public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsExceptions: String { return self._s[2040]! }
- public var Conversation_RestrictedMedia: String { return self._s[2041]! }
- public var AccessDenied_PhotosRestricted: String { return self._s[2042]! }
- public var Privacy_Forwards_WhoCanForward: String { return self._s[2044]! }
- public var ChangePhoneNumberCode_Called: String { return self._s[2045]! }
+ public var AccessDenied_LocationTracking: String { return self._s[2033]! }
+ public var Month_GenOctober: String { return self._s[2034]! }
+ public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[2035]! }
+ public var EnterPasscode_EnterPasscode: String { return self._s[2036]! }
+ public var MediaPicker_TimerTooltip: String { return self._s[2038]! }
+ public var SharedMedia_TitleAll: String { return self._s[2039]! }
+ public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsExceptions: String { return self._s[2042]! }
+ public var Conversation_RestrictedMedia: String { return self._s[2043]! }
+ public var AccessDenied_PhotosRestricted: String { return self._s[2044]! }
+ public var Privacy_Forwards_WhoCanForward: String { return self._s[2046]! }
+ public var ChangePhoneNumberCode_Called: String { return self._s[2047]! }
public func Notification_PinnedDocumentMessage(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2046]!, self._r[2046]!, [_0])
+ return formatWithArgumentRanges(self._s[2048]!, self._r[2048]!, [_0])
}
- public var Conversation_SavedMessages: String { return self._s[2049]! }
- public var Your_cards_expiration_month_is_invalid: String { return self._s[2051]! }
- public var FastTwoStepSetup_PasswordPlaceholder: String { return self._s[2052]! }
+ public var Conversation_SavedMessages: String { return self._s[2051]! }
+ public var Your_cards_expiration_month_is_invalid: String { return self._s[2053]! }
+ public var FastTwoStepSetup_PasswordPlaceholder: String { return self._s[2054]! }
public func Target_ShareGameConfirmationGroup(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2054]!, self._r[2054]!, [_0])
- }
- public var VoiceOver_Chat_YourMessage: String { return self._s[2055]! }
- public func VoiceOver_Chat_Title(_ _0: String) -> (String, [(Int, NSRange)]) {
return formatWithArgumentRanges(self._s[2056]!, self._r[2056]!, [_0])
}
- public var ReportPeer_AlertSuccess: String { return self._s[2057]! }
- public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[2058]! }
+ public var VoiceOver_Chat_YourMessage: String { return self._s[2057]! }
+ public func VoiceOver_Chat_Title(_ _0: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[2058]!, self._r[2058]!, [_0])
+ }
+ public var ReportPeer_AlertSuccess: String { return self._s[2059]! }
+ public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[2060]! }
public func InstantPage_RelatedArticleAuthorAndDateTitle(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2059]!, self._r[2059]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[2061]!, self._r[2061]!, [_1, _2])
}
- public var Checkout_PasswordEntry_Title: String { return self._s[2060]! }
- public var PhotoEditor_FadeTool: String { return self._s[2061]! }
- public var Privacy_ContactsReset: String { return self._s[2062]! }
+ public var Checkout_PasswordEntry_Title: String { return self._s[2062]! }
+ public var PhotoEditor_FadeTool: String { return self._s[2063]! }
+ public var Privacy_ContactsReset: String { return self._s[2064]! }
public func Channel_AdminLog_MessageRestrictedUntil(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2064]!, self._r[2064]!, [_0])
+ return formatWithArgumentRanges(self._s[2066]!, self._r[2066]!, [_0])
}
- public var Message_PinnedVideoMessage: String { return self._s[2065]! }
- public var ChatList_Mute: String { return self._s[2066]! }
- public var Permissions_CellularDataText_v0: String { return self._s[2067]! }
- public var ShareMenu_SelectChats: String { return self._s[2070]! }
- public var ChatList_Context_Unarchive: String { return self._s[2071]! }
- public var MusicPlayer_VoiceNote: String { return self._s[2072]! }
- public var Conversation_RestrictedText: String { return self._s[2073]! }
- public var SettingsSearch_Synonyms_Privacy_Data_DeleteDrafts: String { return self._s[2074]! }
- public var TwoStepAuth_DisableSuccess: String { return self._s[2075]! }
- public var Cache_Videos: String { return self._s[2076]! }
- public var PrivacySettings_PhoneNumber: String { return self._s[2077]! }
- public var FeatureDisabled_Oops: String { return self._s[2079]! }
- public var Passport_Address_PostcodePlaceholder: String { return self._s[2080]! }
+ public var Message_PinnedVideoMessage: String { return self._s[2067]! }
+ public var ChatList_Mute: String { return self._s[2068]! }
+ public var Permissions_CellularDataText_v0: String { return self._s[2069]! }
+ public var ShareMenu_SelectChats: String { return self._s[2072]! }
+ public var ChatList_Context_Unarchive: String { return self._s[2073]! }
+ public var MusicPlayer_VoiceNote: String { return self._s[2074]! }
+ public var Conversation_RestrictedText: String { return self._s[2075]! }
+ public var SettingsSearch_Synonyms_Privacy_Data_DeleteDrafts: String { return self._s[2076]! }
+ public var TwoStepAuth_DisableSuccess: String { return self._s[2077]! }
+ public var Cache_Videos: String { return self._s[2078]! }
+ public var PrivacySettings_PhoneNumber: String { return self._s[2079]! }
+ public var FeatureDisabled_Oops: String { return self._s[2081]! }
+ public var Passport_Address_PostcodePlaceholder: String { return self._s[2082]! }
public func AddContact_StatusSuccess(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2081]!, self._r[2081]!, [_0])
+ return formatWithArgumentRanges(self._s[2083]!, self._r[2083]!, [_0])
}
- public var Stickers_GroupStickersHelp: String { return self._s[2082]! }
- public var GroupPermission_NoSendPolls: String { return self._s[2083]! }
- public var Wallet_Qr_ScanCode: String { return self._s[2084]! }
- public var Message_VideoExpired: String { return self._s[2086]! }
- public var Notifications_Badge: String { return self._s[2087]! }
- public var GroupInfo_GroupHistoryVisible: String { return self._s[2088]! }
- public var Wallet_Receive_AddressCopied: String { return self._s[2089]! }
- public var CreatePoll_OptionPlaceholder: String { return self._s[2090]! }
- public var Username_InvalidTooShort: String { return self._s[2091]! }
- public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[2092]! }
- public var Channel_AdminLog_PinMessages: String { return self._s[2093]! }
- public var ArchivedChats_IntroTitle3: String { return self._s[2094]! }
+ public var Stickers_GroupStickersHelp: String { return self._s[2084]! }
+ public var GroupPermission_NoSendPolls: String { return self._s[2085]! }
+ public var Wallet_Qr_ScanCode: String { return self._s[2086]! }
+ public var Message_VideoExpired: String { return self._s[2088]! }
+ public var Notifications_Badge: String { return self._s[2089]! }
+ public var GroupInfo_GroupHistoryVisible: String { return self._s[2090]! }
+ public var Wallet_Receive_AddressCopied: String { return self._s[2091]! }
+ public var CreatePoll_OptionPlaceholder: String { return self._s[2092]! }
+ public var Username_InvalidTooShort: String { return self._s[2093]! }
+ public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[2094]! }
+ public var Channel_AdminLog_PinMessages: String { return self._s[2095]! }
+ public var ArchivedChats_IntroTitle3: String { return self._s[2096]! }
public func Notification_MessageLifetimeRemoved(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2095]!, self._r[2095]!, [_1])
+ return formatWithArgumentRanges(self._s[2097]!, self._r[2097]!, [_1])
}
- public var Permissions_SiriAllowInSettings_v0: String { return self._s[2096]! }
- public var Conversation_DefaultRestrictedText: String { return self._s[2097]! }
- public var SharedMedia_CategoryDocs: String { return self._s[2100]! }
+ public var Permissions_SiriAllowInSettings_v0: String { return self._s[2098]! }
+ public var Conversation_DefaultRestrictedText: String { return self._s[2099]! }
+ public var SharedMedia_CategoryDocs: String { return self._s[2102]! }
public func PUSH_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2101]!, self._r[2101]!, [_1])
+ return formatWithArgumentRanges(self._s[2103]!, self._r[2103]!, [_1])
}
- public var Privacy_Forwards_NeverLink: String { return self._s[2103]! }
+ public var Wallet_Send_UninitializedTitle: String { return self._s[2104]! }
+ public var Privacy_Forwards_NeverLink: String { return self._s[2106]! }
public func Notification_MessageLifetimeChangedOutgoing(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2104]!, self._r[2104]!, [_1])
+ return formatWithArgumentRanges(self._s[2107]!, self._r[2107]!, [_1])
}
- public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[2105]! }
+ public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[2108]! }
public func Time_MonthOfYear_m12(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2106]!, self._r[2106]!, [_0])
+ return formatWithArgumentRanges(self._s[2109]!, self._r[2109]!, [_0])
}
- public var ChatSettings_PrivateChats: String { return self._s[2107]! }
- public var SettingsSearch_Synonyms_EditProfile_Logout: String { return self._s[2108]! }
- public var Conversation_PrivateMessageLinkCopied: String { return self._s[2109]! }
- public var Channel_UpdatePhotoItem: String { return self._s[2110]! }
- public var GroupInfo_LeftStatus: String { return self._s[2111]! }
- public var Watch_MessageView_Forward: String { return self._s[2113]! }
- public var ReportPeer_ReasonChildAbuse: String { return self._s[2114]! }
- public var Cache_ClearEmpty: String { return self._s[2116]! }
- public var Localization_LanguageName: String { return self._s[2117]! }
- public var WebSearch_GIFs: String { return self._s[2118]! }
- public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[2119]! }
- public var Username_InvalidStartsWithNumber: String { return self._s[2120]! }
- public var Common_Back: String { return self._s[2121]! }
- public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[2122]! }
- public var Wallet_Send_Send: String { return self._s[2123]! }
+ public var ChatSettings_PrivateChats: String { return self._s[2110]! }
+ public var SettingsSearch_Synonyms_EditProfile_Logout: String { return self._s[2111]! }
+ public var Conversation_PrivateMessageLinkCopied: String { return self._s[2112]! }
+ public var Channel_UpdatePhotoItem: String { return self._s[2113]! }
+ public var GroupInfo_LeftStatus: String { return self._s[2114]! }
+ public var Watch_MessageView_Forward: String { return self._s[2116]! }
+ public var ReportPeer_ReasonChildAbuse: String { return self._s[2117]! }
+ public var Cache_ClearEmpty: String { return self._s[2119]! }
+ public var Localization_LanguageName: String { return self._s[2120]! }
+ public var WebSearch_GIFs: String { return self._s[2121]! }
+ public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[2122]! }
+ public var Username_InvalidStartsWithNumber: String { return self._s[2123]! }
+ public var Common_Back: String { return self._s[2124]! }
+ public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[2125]! }
+ public var Wallet_Send_Send: String { return self._s[2126]! }
public func PUSH_CHANNEL_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2124]!, self._r[2124]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[2127]!, self._r[2127]!, [_1, _2])
}
- public var Wallet_Info_RefreshErrorTitle: String { return self._s[2125]! }
- public var Passport_Email_Help: String { return self._s[2126]! }
- public var Watch_Conversation_Reply: String { return self._s[2128]! }
- public var Conversation_EditingMessageMediaChange: String { return self._s[2130]! }
- public var Passport_Identity_IssueDatePlaceholder: String { return self._s[2131]! }
- public var Channel_BanUser_Unban: String { return self._s[2133]! }
- public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[2134]! }
- public var Group_Username_CreatePublicLinkHelp: String { return self._s[2135]! }
- public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[2137]! }
- public var Wallet_Send_AddressHeader: String { return self._s[2138]! }
- public var Passport_Identity_Name: String { return self._s[2139]! }
+ public var Wallet_Info_RefreshErrorTitle: String { return self._s[2128]! }
+ public var Passport_Email_Help: String { return self._s[2129]! }
+ public var Watch_Conversation_Reply: String { return self._s[2131]! }
+ public var Conversation_EditingMessageMediaChange: String { return self._s[2133]! }
+ public var Passport_Identity_IssueDatePlaceholder: String { return self._s[2134]! }
+ public var Channel_BanUser_Unban: String { return self._s[2136]! }
+ public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[2137]! }
+ public var Group_Username_CreatePublicLinkHelp: String { return self._s[2138]! }
+ public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[2140]! }
+ public var Wallet_Send_AddressHeader: String { return self._s[2141]! }
+ public var Passport_Identity_Name: String { return self._s[2142]! }
public func Channel_DiscussionGroup_HeaderGroupSet(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2140]!, self._r[2140]!, [_0])
+ return formatWithArgumentRanges(self._s[2143]!, self._r[2143]!, [_0])
}
- public var GroupRemoved_ViewUserInfo: String { return self._s[2141]! }
- public var Conversation_BlockUser: String { return self._s[2142]! }
- public var Month_GenJanuary: String { return self._s[2143]! }
- public var ChatSettings_TextSize: String { return self._s[2144]! }
- public var Notification_PassportValuePhone: String { return self._s[2145]! }
- public var Passport_Language_ne: String { return self._s[2146]! }
- public var Notification_CallBack: String { return self._s[2147]! }
- public var Wallet_SecureStorageReset_BiometryTouchId: String { return self._s[2148]! }
- public var TwoStepAuth_EmailHelp: String { return self._s[2149]! }
+ public var GroupRemoved_ViewUserInfo: String { return self._s[2144]! }
+ public var Conversation_BlockUser: String { return self._s[2145]! }
+ public var Month_GenJanuary: String { return self._s[2146]! }
+ public var ChatSettings_TextSize: String { return self._s[2147]! }
+ public var Notification_PassportValuePhone: String { return self._s[2148]! }
+ public var Passport_Language_ne: String { return self._s[2149]! }
+ public var Notification_CallBack: String { return self._s[2150]! }
+ public var Wallet_SecureStorageReset_BiometryTouchId: String { return self._s[2151]! }
+ public var TwoStepAuth_EmailHelp: String { return self._s[2152]! }
public func Time_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2150]!, self._r[2150]!, [_0])
+ return formatWithArgumentRanges(self._s[2153]!, self._r[2153]!, [_0])
}
- public var Channel_Info_Management: String { return self._s[2151]! }
- public var Passport_FieldIdentityUploadHelp: String { return self._s[2152]! }
- public var Stickers_FrequentlyUsed: String { return self._s[2153]! }
- public var Channel_BanUser_PermissionSendMessages: String { return self._s[2154]! }
- public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[2156]! }
+ public var Channel_Info_Management: String { return self._s[2154]! }
+ public var Passport_FieldIdentityUploadHelp: String { return self._s[2155]! }
+ public var Stickers_FrequentlyUsed: String { return self._s[2156]! }
+ public var Channel_BanUser_PermissionSendMessages: String { return self._s[2157]! }
+ public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[2159]! }
public func LOCAL_CHANNEL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2157]!, self._r[2157]!, [_1, "\(_2)"])
+ return formatWithArgumentRanges(self._s[2160]!, self._r[2160]!, [_1, "\(_2)"])
}
- public var Passport_Address_EditResidentialAddress: String { return self._s[2158]! }
- public var PrivacyPolicy_DeclineTitle: String { return self._s[2159]! }
- public var CreatePoll_TextHeader: String { return self._s[2160]! }
+ public var Passport_Address_EditResidentialAddress: String { return self._s[2161]! }
+ public var PrivacyPolicy_DeclineTitle: String { return self._s[2162]! }
+ public var CreatePoll_TextHeader: String { return self._s[2163]! }
public func Checkout_SavePasswordTimeoutAndTouchId(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2161]!, self._r[2161]!, [_0])
+ return formatWithArgumentRanges(self._s[2164]!, self._r[2164]!, [_0])
}
- public var PhotoEditor_QualityMedium: String { return self._s[2162]! }
- public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[2163]! }
- public var Conversation_StatusKickedFromChannel: String { return self._s[2165]! }
- public var CheckoutInfo_ReceiverInfoName: String { return self._s[2166]! }
- public var Group_ErrorSendRestrictedStickers: String { return self._s[2167]! }
+ public var PhotoEditor_QualityMedium: String { return self._s[2165]! }
+ public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[2166]! }
+ public var Conversation_StatusKickedFromChannel: String { return self._s[2168]! }
+ public var CheckoutInfo_ReceiverInfoName: String { return self._s[2169]! }
+ public var Group_ErrorSendRestrictedStickers: String { return self._s[2170]! }
public func Conversation_RestrictedInlineTimed(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2168]!, self._r[2168]!, [_0])
+ return formatWithArgumentRanges(self._s[2171]!, self._r[2171]!, [_0])
}
public func Channel_AdminLog_MessageTransferedName(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2169]!, self._r[2169]!, [_1])
+ return formatWithArgumentRanges(self._s[2172]!, self._r[2172]!, [_1])
}
- public var Conversation_LinkDialogOpen: String { return self._s[2171]! }
- public var VoiceOver_Chat_PollNoVotes: String { return self._s[2172]! }
- public var Settings_Username: String { return self._s[2174]! }
- public var Conversation_Block: String { return self._s[2176]! }
- public var Wallpaper_Wallpaper: String { return self._s[2177]! }
- public var SocksProxySetup_UseProxy: String { return self._s[2179]! }
- public var Wallet_Send_Confirmation: String { return self._s[2180]! }
- public var EditTheme_UploadEditedTheme: String { return self._s[2181]! }
- public var UserInfo_ShareMyContactInfo: String { return self._s[2182]! }
- public var MessageTimer_Forever: String { return self._s[2183]! }
- public var Privacy_Calls_WhoCanCallMe: String { return self._s[2184]! }
- public var PhotoEditor_DiscardChanges: String { return self._s[2185]! }
- public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[2186]! }
- public var Passport_Language_da: String { return self._s[2187]! }
- public var Wallet_Send_SendingToYourself: String { return self._s[2188]! }
- public var SocksProxySetup_PortPlaceholder: String { return self._s[2189]! }
+ public var Conversation_LinkDialogOpen: String { return self._s[2174]! }
+ public var VoiceOver_Chat_PollNoVotes: String { return self._s[2175]! }
+ public var Settings_Username: String { return self._s[2177]! }
+ public var Conversation_Block: String { return self._s[2179]! }
+ public var Wallpaper_Wallpaper: String { return self._s[2180]! }
+ public var SocksProxySetup_UseProxy: String { return self._s[2182]! }
+ public var Wallet_Send_Confirmation: String { return self._s[2183]! }
+ public var EditTheme_UploadEditedTheme: String { return self._s[2184]! }
+ public var UserInfo_ShareMyContactInfo: String { return self._s[2185]! }
+ public var MessageTimer_Forever: String { return self._s[2186]! }
+ public var Privacy_Calls_WhoCanCallMe: String { return self._s[2187]! }
+ public var PhotoEditor_DiscardChanges: String { return self._s[2188]! }
+ public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[2189]! }
+ public var Passport_Language_da: String { return self._s[2190]! }
+ public var SocksProxySetup_PortPlaceholder: String { return self._s[2191]! }
public func SecretGIF_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2190]!, self._r[2190]!, [_0])
+ return formatWithArgumentRanges(self._s[2192]!, self._r[2192]!, [_0])
}
- public var Passport_Address_EditPassportRegistration: String { return self._s[2191]! }
+ public var Passport_Address_EditPassportRegistration: String { return self._s[2193]! }
public func Channel_AdminLog_MessageChangedGroupAbout(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2193]!, self._r[2193]!, [_0])
+ return formatWithArgumentRanges(self._s[2195]!, self._r[2195]!, [_0])
}
- public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[2195]! }
- public var Conversation_SearchByName_Prefix: String { return self._s[2196]! }
- public var Conversation_PinnedPoll: String { return self._s[2197]! }
- public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[2198]! }
+ public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[2197]! }
+ public var Conversation_SearchByName_Prefix: String { return self._s[2198]! }
+ public var Conversation_PinnedPoll: String { return self._s[2199]! }
+ public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[2200]! }
public func PUSH_ENCRYPTION_ACCEPT(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2199]!, self._r[2199]!, [_1])
+ return formatWithArgumentRanges(self._s[2201]!, self._r[2201]!, [_1])
}
- public var WallpaperSearch_ColorPurple: String { return self._s[2200]! }
- public var Cache_ByPeerHeader: String { return self._s[2201]! }
+ public var WallpaperSearch_ColorPurple: String { return self._s[2202]! }
+ public var Cache_ByPeerHeader: String { return self._s[2203]! }
public func Conversation_EncryptedPlaceholderTitleIncoming(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2202]!, self._r[2202]!, [_0])
+ return formatWithArgumentRanges(self._s[2204]!, self._r[2204]!, [_0])
}
- public var ChatSettings_AutoDownloadDocuments: String { return self._s[2203]! }
- public var Appearance_ThemePreview_Chat_3_Text: String { return self._s[2206]! }
- public var Wallet_Completed_Title: String { return self._s[2207]! }
- public var Notification_PinnedMessage: String { return self._s[2208]! }
- public var VoiceOver_Chat_RecordModeVideoMessage: String { return self._s[2210]! }
- public var Contacts_SortBy: String { return self._s[2211]! }
+ public var ChatSettings_AutoDownloadDocuments: String { return self._s[2205]! }
+ public var Appearance_ThemePreview_Chat_3_Text: String { return self._s[2208]! }
+ public var Wallet_Completed_Title: String { return self._s[2209]! }
+ public var Notification_PinnedMessage: String { return self._s[2210]! }
+ public var VoiceOver_Chat_RecordModeVideoMessage: String { return self._s[2212]! }
+ public var Contacts_SortBy: String { return self._s[2213]! }
public func PUSH_CHANNEL_MESSAGE_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2212]!, self._r[2212]!, [_1])
+ return formatWithArgumentRanges(self._s[2214]!, self._r[2214]!, [_1])
}
public func PUSH_MESSAGE_GAME(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2214]!, self._r[2214]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[2216]!, self._r[2216]!, [_1, _2])
}
- public var Call_EncryptionKey_Title: String { return self._s[2215]! }
- public var Watch_UserInfo_Service: String { return self._s[2216]! }
- public var SettingsSearch_Synonyms_Data_SaveEditedPhotos: String { return self._s[2218]! }
- public var Conversation_Unpin: String { return self._s[2220]! }
- public var CancelResetAccount_Title: String { return self._s[2221]! }
- public var Map_LiveLocationFor15Minutes: String { return self._s[2222]! }
+ public var Call_EncryptionKey_Title: String { return self._s[2217]! }
+ public var Watch_UserInfo_Service: String { return self._s[2218]! }
+ public var SettingsSearch_Synonyms_Data_SaveEditedPhotos: String { return self._s[2220]! }
+ public var Conversation_Unpin: String { return self._s[2222]! }
+ public var CancelResetAccount_Title: String { return self._s[2223]! }
+ public var Map_LiveLocationFor15Minutes: String { return self._s[2224]! }
public func Time_PreciseDate_m8(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2224]!, self._r[2224]!, [_1, _2, _3])
+ return formatWithArgumentRanges(self._s[2226]!, self._r[2226]!, [_1, _2, _3])
}
- public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[2225]! }
- public var CallSettings_Title: String { return self._s[2226]! }
- public var SettingsSearch_Synonyms_Appearance_ChatBackground: String { return self._s[2227]! }
- public var PasscodeSettings_EncryptDataHelp: String { return self._s[2229]! }
- public var AutoDownloadSettings_Contacts: String { return self._s[2230]! }
+ public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[2227]! }
+ public var CallSettings_Title: String { return self._s[2228]! }
+ public var SettingsSearch_Synonyms_Appearance_ChatBackground: String { return self._s[2229]! }
+ public var PasscodeSettings_EncryptDataHelp: String { return self._s[2231]! }
+ public var AutoDownloadSettings_Contacts: String { return self._s[2232]! }
public func Channel_AdminLog_MessageRankName(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2231]!, self._r[2231]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[2233]!, self._r[2233]!, [_1, _2])
}
- public var Passport_Identity_DocumentDetails: String { return self._s[2232]! }
- public var LoginPassword_PasswordHelp: String { return self._s[2233]! }
- public var SettingsSearch_Synonyms_Data_AutoDownloadUsingWifi: String { return self._s[2234]! }
- public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[2235]! }
- public var Checkout_TotalPaidAmount: String { return self._s[2236]! }
+ public var Passport_Identity_DocumentDetails: String { return self._s[2234]! }
+ public var LoginPassword_PasswordHelp: String { return self._s[2235]! }
+ public var SettingsSearch_Synonyms_Data_AutoDownloadUsingWifi: String { return self._s[2236]! }
+ public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[2237]! }
+ public var Checkout_TotalPaidAmount: String { return self._s[2238]! }
public func FileSize_KB(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2237]!, self._r[2237]!, [_0])
+ return formatWithArgumentRanges(self._s[2239]!, self._r[2239]!, [_0])
}
- public var PasscodeSettings_ChangePasscode: String { return self._s[2238]! }
- public var Conversation_SecretLinkPreviewAlert: String { return self._s[2240]! }
- public var Privacy_SecretChatsLinkPreviews: String { return self._s[2241]! }
+ public var PasscodeSettings_ChangePasscode: String { return self._s[2240]! }
+ public var Conversation_SecretLinkPreviewAlert: String { return self._s[2242]! }
+ public var Privacy_SecretChatsLinkPreviews: String { return self._s[2243]! }
public func PUSH_CHANNEL_MESSAGE_DOC(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2242]!, self._r[2242]!, [_1])
+ return formatWithArgumentRanges(self._s[2244]!, self._r[2244]!, [_1])
}
- public var VoiceOver_Chat_ReplyToYourMessage: String { return self._s[2243]! }
- public var Contacts_InviteFriends: String { return self._s[2245]! }
- public var Map_ChooseLocationTitle: String { return self._s[2246]! }
- public var Conversation_StopPoll: String { return self._s[2248]! }
+ public var VoiceOver_Chat_ReplyToYourMessage: String { return self._s[2245]! }
+ public var Contacts_InviteFriends: String { return self._s[2247]! }
+ public var Map_ChooseLocationTitle: String { return self._s[2248]! }
+ public var Conversation_StopPoll: String { return self._s[2250]! }
public func WebSearch_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2249]!, self._r[2249]!, [_0])
+ return formatWithArgumentRanges(self._s[2251]!, self._r[2251]!, [_0])
}
- public var Call_Camera: String { return self._s[2250]! }
- public var LogoutOptions_ChangePhoneNumberTitle: String { return self._s[2251]! }
- public var Calls_RatingFeedback: String { return self._s[2252]! }
- public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[2253]! }
- public var NotificationsSound_Pulse: String { return self._s[2254]! }
- public var Watch_LastSeen_Lately: String { return self._s[2255]! }
- public var ReportGroupLocation_Report: String { return self._s[2258]! }
- public var Widget_NoUsers: String { return self._s[2259]! }
- public var Conversation_UnvotePoll: String { return self._s[2260]! }
- public var SettingsSearch_Synonyms_Privacy_ProfilePhoto: String { return self._s[2262]! }
- public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[2263]! }
- public var NotificationsSound_Circles: String { return self._s[2264]! }
- public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[2267]! }
- public var Wallet_Settings_DeleteWallet: String { return self._s[2268]! }
- public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[2269]! }
- public var Proxy_TooltipUnavailable: String { return self._s[2270]! }
- public var Passport_Identity_CountryPlaceholder: String { return self._s[2272]! }
- public var GroupInfo_Permissions_SlowmodeInfo: String { return self._s[2274]! }
- public var Conversation_FileDropbox: String { return self._s[2275]! }
- public var Notifications_ExceptionsUnmuted: String { return self._s[2276]! }
- public var Tour_Text3: String { return self._s[2278]! }
- public var Login_ResetAccountProtected_Title: String { return self._s[2280]! }
- public var GroupPermission_NoSendMessages: String { return self._s[2281]! }
- public var WallpaperSearch_ColorTitle: String { return self._s[2282]! }
- public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[2283]! }
+ public var Call_Camera: String { return self._s[2252]! }
+ public var LogoutOptions_ChangePhoneNumberTitle: String { return self._s[2253]! }
+ public var Calls_RatingFeedback: String { return self._s[2254]! }
+ public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[2255]! }
+ public var NotificationsSound_Pulse: String { return self._s[2256]! }
+ public var Watch_LastSeen_Lately: String { return self._s[2257]! }
+ public var ReportGroupLocation_Report: String { return self._s[2260]! }
+ public var Widget_NoUsers: String { return self._s[2261]! }
+ public var Conversation_UnvotePoll: String { return self._s[2262]! }
+ public var SettingsSearch_Synonyms_Privacy_ProfilePhoto: String { return self._s[2264]! }
+ public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[2265]! }
+ public var NotificationsSound_Circles: String { return self._s[2266]! }
+ public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[2269]! }
+ public var Wallet_Settings_DeleteWallet: String { return self._s[2270]! }
+ public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[2271]! }
+ public var Proxy_TooltipUnavailable: String { return self._s[2272]! }
+ public var Passport_Identity_CountryPlaceholder: String { return self._s[2274]! }
+ public var GroupInfo_Permissions_SlowmodeInfo: String { return self._s[2276]! }
+ public var Conversation_FileDropbox: String { return self._s[2277]! }
+ public var Notifications_ExceptionsUnmuted: String { return self._s[2278]! }
+ public var Tour_Text3: String { return self._s[2280]! }
+ public var Login_ResetAccountProtected_Title: String { return self._s[2282]! }
+ public var GroupPermission_NoSendMessages: String { return self._s[2283]! }
+ public var WallpaperSearch_ColorTitle: String { return self._s[2284]! }
+ public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[2285]! }
public func Conversation_LiveLocationYouAnd(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2285]!, self._r[2285]!, [_0])
+ return formatWithArgumentRanges(self._s[2287]!, self._r[2287]!, [_0])
}
- public var GroupInfo_AddParticipantTitle: String { return self._s[2286]! }
- public var Checkout_ShippingOption_Title: String { return self._s[2287]! }
- public var ChatSettings_AutoDownloadTitle: String { return self._s[2288]! }
+ public var GroupInfo_AddParticipantTitle: String { return self._s[2288]! }
+ public var Checkout_ShippingOption_Title: String { return self._s[2289]! }
+ public var ChatSettings_AutoDownloadTitle: String { return self._s[2290]! }
public func DialogList_SingleTypingSuffix(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2289]!, self._r[2289]!, [_0])
+ return formatWithArgumentRanges(self._s[2291]!, self._r[2291]!, [_0])
}
public func ChatSettings_AutoDownloadSettings_TypeVideo(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2290]!, self._r[2290]!, [_0])
+ return formatWithArgumentRanges(self._s[2292]!, self._r[2292]!, [_0])
}
- public var Channel_Management_LabelAdministrator: String { return self._s[2291]! }
- public var EditTheme_FileReadError: String { return self._s[2292]! }
- public var OwnershipTransfer_ComeBackLater: String { return self._s[2293]! }
- public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[2294]! }
- public var AutoDownloadSettings_Photos: String { return self._s[2296]! }
- public var Appearance_PreviewIncomingText: String { return self._s[2297]! }
- public var ChatList_Context_MarkAllAsRead: String { return self._s[2298]! }
- public var ChannelInfo_ConfirmLeave: String { return self._s[2299]! }
- public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[2300]! }
- public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[2301]! }
- public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[2302]! }
- public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[2303]! }
- public var GroupInfo_SetGroupPhotoStop: String { return self._s[2304]! }
- public var Notification_SecretChatScreenshot: String { return self._s[2305]! }
- public var AccessDenied_Wallpapers: String { return self._s[2306]! }
- public var ChatList_Context_Mute: String { return self._s[2308]! }
- public var Passport_Address_City: String { return self._s[2309]! }
- public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[2310]! }
- public var Appearance_ThemeCarouselClassic: String { return self._s[2311]! }
- public var SocksProxySetup_SecretPlaceholder: String { return self._s[2312]! }
- public var AccessDenied_LocationDisabled: String { return self._s[2313]! }
- public var Group_Location_Title: String { return self._s[2314]! }
- public var SocksProxySetup_HostnamePlaceholder: String { return self._s[2316]! }
- public var GroupInfo_Sound: String { return self._s[2317]! }
- public var ChannelInfo_ScamChannelWarning: String { return self._s[2318]! }
- public var Stickers_RemoveFromFavorites: String { return self._s[2319]! }
- public var Contacts_Title: String { return self._s[2320]! }
- public var EditTheme_ThemeTemplateAlertText: String { return self._s[2321]! }
- public var Passport_Language_fr: String { return self._s[2322]! }
- public var Notifications_ResetAllNotifications: String { return self._s[2323]! }
- public var PrivacySettings_SecurityTitle: String { return self._s[2326]! }
- public var Checkout_NewCard_Title: String { return self._s[2327]! }
- public var Login_HaveNotReceivedCodeInternal: String { return self._s[2328]! }
- public var Conversation_ForwardChats: String { return self._s[2329]! }
- public var Wallet_SecureStorageReset_PasscodeText: String { return self._s[2331]! }
- public var PasscodeSettings_4DigitCode: String { return self._s[2332]! }
- public var Settings_FAQ: String { return self._s[2334]! }
- public var AutoDownloadSettings_DocumentsTitle: String { return self._s[2335]! }
- public var Conversation_ContextMenuForward: String { return self._s[2336]! }
- public var VoiceOver_Chat_YourPhoto: String { return self._s[2339]! }
- public var PrivacyPolicy_Title: String { return self._s[2342]! }
- public var Notifications_TextTone: String { return self._s[2343]! }
- public var Profile_CreateNewContact: String { return self._s[2344]! }
- public var PrivacyPhoneNumberSettings_WhoCanSeeMyPhoneNumber: String { return self._s[2345]! }
- public var Call_Speaker: String { return self._s[2347]! }
- public var AutoNightTheme_AutomaticSection: String { return self._s[2348]! }
- public var Channel_OwnershipTransfer_EnterPassword: String { return self._s[2350]! }
- public var Channel_Username_InvalidCharacters: String { return self._s[2351]! }
+ public var Channel_Management_LabelAdministrator: String { return self._s[2293]! }
+ public var EditTheme_FileReadError: String { return self._s[2294]! }
+ public var OwnershipTransfer_ComeBackLater: String { return self._s[2295]! }
+ public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[2296]! }
+ public var AutoDownloadSettings_Photos: String { return self._s[2298]! }
+ public var Appearance_PreviewIncomingText: String { return self._s[2299]! }
+ public var ChatList_Context_MarkAllAsRead: String { return self._s[2300]! }
+ public var ChannelInfo_ConfirmLeave: String { return self._s[2301]! }
+ public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[2302]! }
+ public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[2303]! }
+ public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[2304]! }
+ public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[2305]! }
+ public var GroupInfo_SetGroupPhotoStop: String { return self._s[2306]! }
+ public var Notification_SecretChatScreenshot: String { return self._s[2307]! }
+ public var AccessDenied_Wallpapers: String { return self._s[2308]! }
+ public var ChatList_Context_Mute: String { return self._s[2310]! }
+ public var Passport_Address_City: String { return self._s[2311]! }
+ public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[2312]! }
+ public var Appearance_ThemeCarouselClassic: String { return self._s[2313]! }
+ public var SocksProxySetup_SecretPlaceholder: String { return self._s[2314]! }
+ public var AccessDenied_LocationDisabled: String { return self._s[2315]! }
+ public var Group_Location_Title: String { return self._s[2316]! }
+ public var SocksProxySetup_HostnamePlaceholder: String { return self._s[2318]! }
+ public var GroupInfo_Sound: String { return self._s[2319]! }
+ public var ChannelInfo_ScamChannelWarning: String { return self._s[2320]! }
+ public var Stickers_RemoveFromFavorites: String { return self._s[2321]! }
+ public var Contacts_Title: String { return self._s[2322]! }
+ public var EditTheme_ThemeTemplateAlertText: String { return self._s[2323]! }
+ public var Passport_Language_fr: String { return self._s[2324]! }
+ public var Notifications_ResetAllNotifications: String { return self._s[2325]! }
+ public var PrivacySettings_SecurityTitle: String { return self._s[2328]! }
+ public var Checkout_NewCard_Title: String { return self._s[2329]! }
+ public var Login_HaveNotReceivedCodeInternal: String { return self._s[2330]! }
+ public var Conversation_ForwardChats: String { return self._s[2331]! }
+ public var Wallet_SecureStorageReset_PasscodeText: String { return self._s[2333]! }
+ public var PasscodeSettings_4DigitCode: String { return self._s[2334]! }
+ public var Settings_FAQ: String { return self._s[2336]! }
+ public var AutoDownloadSettings_DocumentsTitle: String { return self._s[2337]! }
+ public var Conversation_ContextMenuForward: String { return self._s[2338]! }
+ public var VoiceOver_Chat_YourPhoto: String { return self._s[2341]! }
+ public var PrivacyPolicy_Title: String { return self._s[2344]! }
+ public var Notifications_TextTone: String { return self._s[2345]! }
+ public var Profile_CreateNewContact: String { return self._s[2346]! }
+ public var PrivacyPhoneNumberSettings_WhoCanSeeMyPhoneNumber: String { return self._s[2347]! }
+ public var Call_Speaker: String { return self._s[2349]! }
+ public var AutoNightTheme_AutomaticSection: String { return self._s[2350]! }
+ public var Channel_OwnershipTransfer_EnterPassword: String { return self._s[2352]! }
+ public var Channel_Username_InvalidCharacters: String { return self._s[2353]! }
public func Channel_AdminLog_MessageChangedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2352]!, self._r[2352]!, [_0])
+ return formatWithArgumentRanges(self._s[2354]!, self._r[2354]!, [_0])
}
- public var AutoDownloadSettings_AutodownloadFiles: String { return self._s[2353]! }
- public var PrivacySettings_LastSeenTitle: String { return self._s[2354]! }
- public var Channel_AdminLog_CanInviteUsers: String { return self._s[2355]! }
- public var SettingsSearch_Synonyms_Privacy_Data_ClearPaymentsInfo: String { return self._s[2356]! }
- public var OwnershipTransfer_SecurityCheck: String { return self._s[2357]! }
- public var Conversation_MessageDeliveryFailed: String { return self._s[2358]! }
- public var Watch_ChatList_NoConversationsText: String { return self._s[2359]! }
- public var Bot_Unblock: String { return self._s[2360]! }
- public var TextFormat_Italic: String { return self._s[2361]! }
- public var WallpaperSearch_ColorPink: String { return self._s[2362]! }
- public var Settings_About_Help: String { return self._s[2363]! }
- public var SearchImages_Title: String { return self._s[2364]! }
- public var Weekday_Wednesday: String { return self._s[2365]! }
- public var Conversation_ClousStorageInfo_Description1: String { return self._s[2366]! }
- public var ExplicitContent_AlertTitle: String { return self._s[2367]! }
+ public var AutoDownloadSettings_AutodownloadFiles: String { return self._s[2355]! }
+ public var PrivacySettings_LastSeenTitle: String { return self._s[2356]! }
+ public var Channel_AdminLog_CanInviteUsers: String { return self._s[2357]! }
+ public var SettingsSearch_Synonyms_Privacy_Data_ClearPaymentsInfo: String { return self._s[2358]! }
+ public var OwnershipTransfer_SecurityCheck: String { return self._s[2359]! }
+ public var Conversation_MessageDeliveryFailed: String { return self._s[2360]! }
+ public var Watch_ChatList_NoConversationsText: String { return self._s[2361]! }
+ public var Bot_Unblock: String { return self._s[2362]! }
+ public var TextFormat_Italic: String { return self._s[2363]! }
+ public var WallpaperSearch_ColorPink: String { return self._s[2364]! }
+ public var Settings_About_Help: String { return self._s[2365]! }
+ public var SearchImages_Title: String { return self._s[2366]! }
+ public var Weekday_Wednesday: String { return self._s[2367]! }
+ public var Conversation_ClousStorageInfo_Description1: String { return self._s[2368]! }
+ public var ExplicitContent_AlertTitle: String { return self._s[2369]! }
public func Time_PreciseDate_m5(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2368]!, self._r[2368]!, [_1, _2, _3])
+ return formatWithArgumentRanges(self._s[2370]!, self._r[2370]!, [_1, _2, _3])
}
- public var Channel_DiscussionGroup_Create: String { return self._s[2369]! }
- public var Weekday_Thursday: String { return self._s[2370]! }
- public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[2371]! }
- public var Channel_Members_AddMembersHelp: String { return self._s[2372]! }
+ public var Channel_DiscussionGroup_Create: String { return self._s[2371]! }
+ public var Weekday_Thursday: String { return self._s[2372]! }
+ public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[2373]! }
+ public var Channel_Members_AddMembersHelp: String { return self._s[2374]! }
public func Checkout_SavePasswordTimeout(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2373]!, self._r[2373]!, [_0])
+ return formatWithArgumentRanges(self._s[2375]!, self._r[2375]!, [_0])
}
- public var Channel_DiscussionGroup_LinkGroup: String { return self._s[2374]! }
- public var SettingsSearch_Synonyms_Notifications_InAppNotificationsVibrate: String { return self._s[2375]! }
- public var Passport_RequestedInformation: String { return self._s[2376]! }
- public var Login_PhoneAndCountryHelp: String { return self._s[2377]! }
- public var Conversation_EncryptionProcessing: String { return self._s[2379]! }
- public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[2380]! }
- public var PhotoEditor_EnhanceTool: String { return self._s[2382]! }
- public var Channel_Setup_Title: String { return self._s[2383]! }
- public var Conversation_SearchPlaceholder: String { return self._s[2384]! }
- public var AccessDenied_LocationAlwaysDenied: String { return self._s[2385]! }
- public var Checkout_ErrorGeneric: String { return self._s[2386]! }
- public var Passport_Language_hu: String { return self._s[2387]! }
+ public var Channel_DiscussionGroup_LinkGroup: String { return self._s[2376]! }
+ public var SettingsSearch_Synonyms_Notifications_InAppNotificationsVibrate: String { return self._s[2377]! }
+ public var Passport_RequestedInformation: String { return self._s[2378]! }
+ public var Login_PhoneAndCountryHelp: String { return self._s[2379]! }
+ public var Conversation_EncryptionProcessing: String { return self._s[2381]! }
+ public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[2382]! }
+ public var PhotoEditor_EnhanceTool: String { return self._s[2384]! }
+ public var Channel_Setup_Title: String { return self._s[2385]! }
+ public var Conversation_SearchPlaceholder: String { return self._s[2386]! }
+ public var AccessDenied_LocationAlwaysDenied: String { return self._s[2387]! }
+ public var Checkout_ErrorGeneric: String { return self._s[2388]! }
+ public var Passport_Language_hu: String { return self._s[2389]! }
public func Passport_Identity_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2389]!, self._r[2389]!, [_0])
+ return formatWithArgumentRanges(self._s[2391]!, self._r[2391]!, [_0])
}
public func PUSH_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2392]!, self._r[2392]!, [_1])
+ return formatWithArgumentRanges(self._s[2394]!, self._r[2394]!, [_1])
}
public func UserInfo_BlockConfirmationTitle(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2393]!, self._r[2393]!, [_0])
+ return formatWithArgumentRanges(self._s[2395]!, self._r[2395]!, [_0])
}
- public var Group_Location_Info: String { return self._s[2394]! }
- public var Conversation_CloudStorageInfo_Title: String { return self._s[2395]! }
- public var Permissions_PeopleNearbyAllow_v0: String { return self._s[2396]! }
- public var PhotoEditor_CropAspectRatioSquare: String { return self._s[2397]! }
+ public var Group_Location_Info: String { return self._s[2396]! }
+ public var Conversation_CloudStorageInfo_Title: String { return self._s[2397]! }
+ public var Permissions_PeopleNearbyAllow_v0: String { return self._s[2398]! }
+ public var PhotoEditor_CropAspectRatioSquare: String { return self._s[2399]! }
public func Notification_Exceptions_MutedUntil(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2398]!, self._r[2398]!, [_0])
+ return formatWithArgumentRanges(self._s[2400]!, self._r[2400]!, [_0])
}
- public var Conversation_ClearPrivateHistory: String { return self._s[2399]! }
- public var ContactInfo_PhoneLabelHome: String { return self._s[2400]! }
- public var Appearance_RemoveThemeConfirmation: String { return self._s[2401]! }
- public var PrivacySettings_LastSeenContacts: String { return self._s[2402]! }
+ public var Conversation_ClearPrivateHistory: String { return self._s[2401]! }
+ public var ContactInfo_PhoneLabelHome: String { return self._s[2402]! }
+ public var Appearance_RemoveThemeConfirmation: String { return self._s[2403]! }
+ public var PrivacySettings_LastSeenContacts: String { return self._s[2404]! }
public func ChangePhone_ErrorOccupied(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2403]!, self._r[2403]!, [_0])
+ return formatWithArgumentRanges(self._s[2405]!, self._r[2405]!, [_0])
}
- public var Passport_Language_cs: String { return self._s[2404]! }
- public var Message_PinnedAnimationMessage: String { return self._s[2406]! }
- public var Passport_Identity_ReverseSideHelp: String { return self._s[2408]! }
- public var SettingsSearch_Synonyms_Data_Storage_Title: String { return self._s[2409]! }
- public var Wallet_Info_TransactionTo: String { return self._s[2411]! }
- public var SettingsSearch_Synonyms_Privacy_PasscodeAndTouchId: String { return self._s[2412]! }
- public var Embed_PlayingInPIP: String { return self._s[2413]! }
- public var AutoNightTheme_ScheduleSection: String { return self._s[2414]! }
+ public var Passport_Language_cs: String { return self._s[2406]! }
+ public var Message_PinnedAnimationMessage: String { return self._s[2408]! }
+ public var Passport_Identity_ReverseSideHelp: String { return self._s[2410]! }
+ public var SettingsSearch_Synonyms_Data_Storage_Title: String { return self._s[2411]! }
+ public var Wallet_Info_TransactionTo: String { return self._s[2413]! }
+ public var SettingsSearch_Synonyms_Privacy_PasscodeAndTouchId: String { return self._s[2414]! }
+ public var Embed_PlayingInPIP: String { return self._s[2415]! }
+ public var AutoNightTheme_ScheduleSection: String { return self._s[2416]! }
public func Call_EmojiDescription(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2415]!, self._r[2415]!, [_0])
+ return formatWithArgumentRanges(self._s[2417]!, self._r[2417]!, [_0])
}
- public var MediaPicker_LivePhotoDescription: String { return self._s[2416]! }
+ public var MediaPicker_LivePhotoDescription: String { return self._s[2418]! }
public func Channel_AdminLog_MessageRestrictedName(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2417]!, self._r[2417]!, [_1])
+ return formatWithArgumentRanges(self._s[2419]!, self._r[2419]!, [_1])
}
- public var Notification_PaymentSent: String { return self._s[2418]! }
- public var PhotoEditor_CurvesGreen: String { return self._s[2419]! }
- public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[2420]! }
- public var SaveIncomingPhotosSettings_Title: String { return self._s[2421]! }
- public var NotificationSettings_ShowNotificationsAllAccounts: String { return self._s[2422]! }
- public var VoiceOver_Chat_PagePreview: String { return self._s[2423]! }
+ public var Notification_PaymentSent: String { return self._s[2420]! }
+ public var PhotoEditor_CurvesGreen: String { return self._s[2421]! }
+ public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[2422]! }
+ public var SaveIncomingPhotosSettings_Title: String { return self._s[2423]! }
+ public var NotificationSettings_ShowNotificationsAllAccounts: String { return self._s[2424]! }
+ public var VoiceOver_Chat_PagePreview: String { return self._s[2425]! }
public func PUSH_MESSAGE_SCREENSHOT(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2426]!, self._r[2426]!, [_1])
- }
- public func PUSH_MESSAGE_PHOTO_SECRET(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2427]!, self._r[2427]!, [_1])
- }
- public func ApplyLanguage_UnsufficientDataText(_ _1: String) -> (String, [(Int, NSRange)]) {
return formatWithArgumentRanges(self._s[2428]!, self._r[2428]!, [_1])
}
- public var NetworkUsageSettings_CallDataSection: String { return self._s[2430]! }
- public var PasscodeSettings_HelpTop: String { return self._s[2431]! }
- public var Conversation_WalletRequiredTitle: String { return self._s[2432]! }
- public var Group_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[2433]! }
- public var Passport_Address_TypeRentalAgreement: String { return self._s[2434]! }
- public var EditTheme_ShortLink: String { return self._s[2435]! }
- public var ProxyServer_VoiceOver_Active: String { return self._s[2436]! }
- public var ReportPeer_ReasonOther_Placeholder: String { return self._s[2437]! }
- public var CheckoutInfo_ErrorPhoneInvalid: String { return self._s[2438]! }
- public var Call_Accept: String { return self._s[2440]! }
- public var GroupRemoved_RemoveInfo: String { return self._s[2441]! }
- public var Month_GenMarch: String { return self._s[2443]! }
- public var PhotoEditor_ShadowsTool: String { return self._s[2444]! }
- public var LoginPassword_Title: String { return self._s[2445]! }
- public var Call_End: String { return self._s[2446]! }
- public var Watch_Conversation_GroupInfo: String { return self._s[2447]! }
- public var VoiceOver_Chat_Contact: String { return self._s[2448]! }
- public var EditTheme_Create_Preview_IncomingText: String { return self._s[2449]! }
- public var CallSettings_Always: String { return self._s[2450]! }
- public var CallFeedback_Success: String { return self._s[2451]! }
- public var TwoStepAuth_SetupHint: String { return self._s[2452]! }
+ public func PUSH_MESSAGE_PHOTO_SECRET(_ _1: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[2429]!, self._r[2429]!, [_1])
+ }
+ public func ApplyLanguage_UnsufficientDataText(_ _1: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[2430]!, self._r[2430]!, [_1])
+ }
+ public var NetworkUsageSettings_CallDataSection: String { return self._s[2432]! }
+ public var PasscodeSettings_HelpTop: String { return self._s[2433]! }
+ public var Conversation_WalletRequiredTitle: String { return self._s[2434]! }
+ public var Group_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[2435]! }
+ public var Passport_Address_TypeRentalAgreement: String { return self._s[2436]! }
+ public var EditTheme_ShortLink: String { return self._s[2437]! }
+ public var ProxyServer_VoiceOver_Active: String { return self._s[2438]! }
+ public var ReportPeer_ReasonOther_Placeholder: String { return self._s[2439]! }
+ public var CheckoutInfo_ErrorPhoneInvalid: String { return self._s[2440]! }
+ public var Call_Accept: String { return self._s[2442]! }
+ public var GroupRemoved_RemoveInfo: String { return self._s[2443]! }
+ public var Month_GenMarch: String { return self._s[2445]! }
+ public var PhotoEditor_ShadowsTool: String { return self._s[2446]! }
+ public var LoginPassword_Title: String { return self._s[2447]! }
+ public var Call_End: String { return self._s[2448]! }
+ public var Watch_Conversation_GroupInfo: String { return self._s[2449]! }
+ public var VoiceOver_Chat_Contact: String { return self._s[2450]! }
+ public var EditTheme_Create_Preview_IncomingText: String { return self._s[2451]! }
+ public var CallSettings_Always: String { return self._s[2452]! }
+ public var CallFeedback_Success: String { return self._s[2453]! }
+ public var TwoStepAuth_SetupHint: String { return self._s[2454]! }
public func AddContact_ContactWillBeSharedAfterMutual(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2453]!, self._r[2453]!, [_1])
+ return formatWithArgumentRanges(self._s[2455]!, self._r[2455]!, [_1])
}
- public var ConversationProfile_UsersTooMuchError: String { return self._s[2454]! }
- public var Login_PhoneTitle: String { return self._s[2455]! }
- public var Passport_FieldPhoneHelp: String { return self._s[2456]! }
- public var Weekday_ShortSunday: String { return self._s[2457]! }
- public var Passport_InfoFAQ_URL: String { return self._s[2458]! }
- public var ContactInfo_Job: String { return self._s[2460]! }
- public var UserInfo_InviteBotToGroup: String { return self._s[2461]! }
- public var Appearance_ThemeCarouselNightBlue: String { return self._s[2462]! }
- public var TwoStepAuth_PasswordRemovePassportConfirmation: String { return self._s[2463]! }
- public var Invite_ChannelsTooMuch: String { return self._s[2464]! }
- public var Wallet_Send_ConfirmationConfirm: String { return self._s[2465]! }
- public var SettingsSearch_Synonyms_Notifications_InAppNotificationsPreview: String { return self._s[2466]! }
- public var Wallet_Receive_AmountText: String { return self._s[2467]! }
- public var Passport_DeletePersonalDetailsConfirmation: String { return self._s[2468]! }
- public var CallFeedback_ReasonNoise: String { return self._s[2469]! }
- public var Appearance_AppIconDefault: String { return self._s[2471]! }
- public var Passport_Identity_AddInternalPassport: String { return self._s[2472]! }
- public var MediaPicker_AddCaption: String { return self._s[2473]! }
- public var CallSettings_TabIconDescription: String { return self._s[2474]! }
+ public var ConversationProfile_UsersTooMuchError: String { return self._s[2456]! }
+ public var Login_PhoneTitle: String { return self._s[2457]! }
+ public var Passport_FieldPhoneHelp: String { return self._s[2458]! }
+ public var Weekday_ShortSunday: String { return self._s[2459]! }
+ public var Passport_InfoFAQ_URL: String { return self._s[2460]! }
+ public var ContactInfo_Job: String { return self._s[2462]! }
+ public var UserInfo_InviteBotToGroup: String { return self._s[2463]! }
+ public var Appearance_ThemeCarouselNightBlue: String { return self._s[2464]! }
+ public var TwoStepAuth_PasswordRemovePassportConfirmation: String { return self._s[2465]! }
+ public var Invite_ChannelsTooMuch: String { return self._s[2466]! }
+ public var Wallet_Send_ConfirmationConfirm: String { return self._s[2467]! }
+ public var SettingsSearch_Synonyms_Notifications_InAppNotificationsPreview: String { return self._s[2468]! }
+ public var Wallet_Receive_AmountText: String { return self._s[2469]! }
+ public var Passport_DeletePersonalDetailsConfirmation: String { return self._s[2470]! }
+ public var CallFeedback_ReasonNoise: String { return self._s[2471]! }
+ public var Appearance_AppIconDefault: String { return self._s[2473]! }
+ public var Passport_Identity_AddInternalPassport: String { return self._s[2474]! }
+ public var MediaPicker_AddCaption: String { return self._s[2475]! }
+ public var CallSettings_TabIconDescription: String { return self._s[2476]! }
public func VoiceOver_Chat_Caption(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2475]!, self._r[2475]!, [_0])
+ return formatWithArgumentRanges(self._s[2477]!, self._r[2477]!, [_0])
}
- public var ChatList_UndoArchiveHiddenTitle: String { return self._s[2476]! }
- public var Privacy_GroupsAndChannels_AlwaysAllow: String { return self._s[2477]! }
- public var Passport_Identity_TypePersonalDetails: String { return self._s[2478]! }
- public var DialogList_SearchSectionRecent: String { return self._s[2479]! }
- public var PrivacyPolicy_DeclineMessage: String { return self._s[2480]! }
- public var LogoutOptions_ClearCacheText: String { return self._s[2483]! }
- public var LastSeen_WithinAWeek: String { return self._s[2484]! }
- public var ChannelMembers_GroupAdminsTitle: String { return self._s[2485]! }
- public var Conversation_CloudStorage_ChatStatus: String { return self._s[2487]! }
- public var VoiceOver_Media_PlaybackRateNormal: String { return self._s[2488]! }
+ public var ChatList_UndoArchiveHiddenTitle: String { return self._s[2478]! }
+ public var Privacy_GroupsAndChannels_AlwaysAllow: String { return self._s[2479]! }
+ public var Passport_Identity_TypePersonalDetails: String { return self._s[2480]! }
+ public var DialogList_SearchSectionRecent: String { return self._s[2481]! }
+ public var PrivacyPolicy_DeclineMessage: String { return self._s[2482]! }
+ public var LogoutOptions_ClearCacheText: String { return self._s[2485]! }
+ public var LastSeen_WithinAWeek: String { return self._s[2486]! }
+ public var ChannelMembers_GroupAdminsTitle: String { return self._s[2487]! }
+ public var Conversation_CloudStorage_ChatStatus: String { return self._s[2489]! }
+ public var VoiceOver_Media_PlaybackRateNormal: String { return self._s[2490]! }
public func AddContact_SharedContactExceptionInfo(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2489]!, self._r[2489]!, [_0])
+ return formatWithArgumentRanges(self._s[2491]!, self._r[2491]!, [_0])
}
- public var Passport_Address_TypeResidentialAddress: String { return self._s[2490]! }
- public var Conversation_StatusLeftGroup: String { return self._s[2491]! }
- public var SocksProxySetup_ProxyDetailsTitle: String { return self._s[2492]! }
- public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[2494]! }
- public var GroupPermission_AddSuccess: String { return self._s[2495]! }
- public var PhotoEditor_BlurToolRadial: String { return self._s[2497]! }
- public var Conversation_ContextMenuCopy: String { return self._s[2498]! }
- public var AccessDenied_CallMicrophone: String { return self._s[2499]! }
+ public var Passport_Address_TypeResidentialAddress: String { return self._s[2492]! }
+ public var Conversation_StatusLeftGroup: String { return self._s[2493]! }
+ public var SocksProxySetup_ProxyDetailsTitle: String { return self._s[2494]! }
+ public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[2496]! }
+ public var GroupPermission_AddSuccess: String { return self._s[2497]! }
+ public var PhotoEditor_BlurToolRadial: String { return self._s[2499]! }
+ public var Conversation_ContextMenuCopy: String { return self._s[2500]! }
+ public var AccessDenied_CallMicrophone: String { return self._s[2501]! }
public func Time_PreciseDate_m2(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2500]!, self._r[2500]!, [_1, _2, _3])
+ return formatWithArgumentRanges(self._s[2502]!, self._r[2502]!, [_1, _2, _3])
}
- public var Login_InvalidFirstNameError: String { return self._s[2501]! }
- public var Notifications_Badge_CountUnreadMessages_InfoOn: String { return self._s[2502]! }
- public var Checkout_PaymentMethod_New: String { return self._s[2503]! }
- public var ShareMenu_CopyShareLinkGame: String { return self._s[2504]! }
- public var PhotoEditor_QualityTool: String { return self._s[2505]! }
- public var Login_SendCodeViaSms: String { return self._s[2506]! }
- public var SettingsSearch_Synonyms_Privacy_DeleteAccountIfAwayFor: String { return self._s[2507]! }
- public var Chat_SlowmodeAttachmentLimitReached: String { return self._s[2508]! }
- public var Wallet_Receive_CopyAddress: String { return self._s[2509]! }
- public var Login_EmailNotConfiguredError: String { return self._s[2510]! }
- public var SocksProxySetup_Status: String { return self._s[2511]! }
- public var PrivacyPolicy_Accept: String { return self._s[2512]! }
- public var Notifications_ExceptionsMessagePlaceholder: String { return self._s[2513]! }
- public var Appearance_AppIconClassicX: String { return self._s[2514]! }
+ public var Login_InvalidFirstNameError: String { return self._s[2503]! }
+ public var Notifications_Badge_CountUnreadMessages_InfoOn: String { return self._s[2504]! }
+ public var Checkout_PaymentMethod_New: String { return self._s[2505]! }
+ public var ShareMenu_CopyShareLinkGame: String { return self._s[2506]! }
+ public var PhotoEditor_QualityTool: String { return self._s[2507]! }
+ public var Login_SendCodeViaSms: String { return self._s[2508]! }
+ public var SettingsSearch_Synonyms_Privacy_DeleteAccountIfAwayFor: String { return self._s[2509]! }
+ public var Chat_SlowmodeAttachmentLimitReached: String { return self._s[2510]! }
+ public var Wallet_Receive_CopyAddress: String { return self._s[2511]! }
+ public var Login_EmailNotConfiguredError: String { return self._s[2512]! }
+ public var SocksProxySetup_Status: String { return self._s[2513]! }
+ public var PrivacyPolicy_Accept: String { return self._s[2514]! }
+ public var Notifications_ExceptionsMessagePlaceholder: String { return self._s[2515]! }
+ public var Appearance_AppIconClassicX: String { return self._s[2516]! }
public func PUSH_CHAT_MESSAGE_TEXT(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2515]!, self._r[2515]!, [_1, _2, _3])
+ return formatWithArgumentRanges(self._s[2517]!, self._r[2517]!, [_1, _2, _3])
}
- public var OwnershipTransfer_SecurityRequirements: String { return self._s[2516]! }
- public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[2517]! }
- public var AutoNightTheme_Automatic: String { return self._s[2518]! }
- public var Channel_Username_InvalidStartsWithNumber: String { return self._s[2519]! }
- public var Privacy_ContactsSyncHelp: String { return self._s[2520]! }
- public var Cache_Help: String { return self._s[2521]! }
- public var Group_ErrorAccessDenied: String { return self._s[2522]! }
- public var Passport_Language_fa: String { return self._s[2523]! }
- public var Wallet_Intro_Text: String { return self._s[2524]! }
- public var Login_ResetAccountProtected_TimerTitle: String { return self._s[2525]! }
- public var VoiceOver_Chat_YourVideoMessage: String { return self._s[2526]! }
- public var PrivacySettings_LastSeen: String { return self._s[2527]! }
+ public var OwnershipTransfer_SecurityRequirements: String { return self._s[2518]! }
+ public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[2519]! }
+ public var AutoNightTheme_Automatic: String { return self._s[2520]! }
+ public var Channel_Username_InvalidStartsWithNumber: String { return self._s[2521]! }
+ public var Privacy_ContactsSyncHelp: String { return self._s[2522]! }
+ public var Cache_Help: String { return self._s[2523]! }
+ public var Group_ErrorAccessDenied: String { return self._s[2524]! }
+ public var Passport_Language_fa: String { return self._s[2525]! }
+ public var Wallet_Intro_Text: String { return self._s[2526]! }
+ public var Login_ResetAccountProtected_TimerTitle: String { return self._s[2527]! }
+ public var VoiceOver_Chat_YourVideoMessage: String { return self._s[2528]! }
+ public var PrivacySettings_LastSeen: String { return self._s[2529]! }
public func DialogList_MultipleTyping(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2528]!, self._r[2528]!, [_0, _1])
+ return formatWithArgumentRanges(self._s[2530]!, self._r[2530]!, [_0, _1])
}
- public var Preview_SaveGif: String { return self._s[2532]! }
- public var SettingsSearch_Synonyms_Privacy_TwoStepAuth: String { return self._s[2533]! }
- public var Profile_About: String { return self._s[2534]! }
- public var Channel_About_Placeholder: String { return self._s[2535]! }
- public var Login_InfoTitle: String { return self._s[2536]! }
+ public var Preview_SaveGif: String { return self._s[2534]! }
+ public var SettingsSearch_Synonyms_Privacy_TwoStepAuth: String { return self._s[2535]! }
+ public var Profile_About: String { return self._s[2536]! }
+ public var Channel_About_Placeholder: String { return self._s[2537]! }
+ public var Login_InfoTitle: String { return self._s[2538]! }
public func TwoStepAuth_SetupPendingEmail(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2537]!, self._r[2537]!, [_0])
+ return formatWithArgumentRanges(self._s[2539]!, self._r[2539]!, [_0])
}
- public var EditTheme_Expand_Preview_IncomingReplyText: String { return self._s[2538]! }
- public var Watch_Suggestion_CantTalk: String { return self._s[2540]! }
- public var ContactInfo_Title: String { return self._s[2541]! }
- public var Media_ShareThisVideo: String { return self._s[2542]! }
- public var Weekday_ShortFriday: String { return self._s[2543]! }
- public var AccessDenied_Contacts: String { return self._s[2545]! }
- public var Notification_CallIncomingShort: String { return self._s[2546]! }
- public var Group_Setup_TypePublic: String { return self._s[2547]! }
- public var Notifications_MessageNotificationsExceptions: String { return self._s[2548]! }
- public var Notifications_Badge_IncludeChannels: String { return self._s[2549]! }
- public var Notifications_MessageNotificationsPreview: String { return self._s[2552]! }
- public var ConversationProfile_ErrorCreatingConversation: String { return self._s[2553]! }
- public var Group_ErrorAddTooMuchBots: String { return self._s[2554]! }
- public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[2555]! }
- public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[2556]! }
+ public var EditTheme_Expand_Preview_IncomingReplyText: String { return self._s[2540]! }
+ public var Watch_Suggestion_CantTalk: String { return self._s[2542]! }
+ public var ContactInfo_Title: String { return self._s[2543]! }
+ public var Media_ShareThisVideo: String { return self._s[2544]! }
+ public var Weekday_ShortFriday: String { return self._s[2545]! }
+ public var AccessDenied_Contacts: String { return self._s[2547]! }
+ public var Notification_CallIncomingShort: String { return self._s[2548]! }
+ public var Group_Setup_TypePublic: String { return self._s[2549]! }
+ public var Notifications_MessageNotificationsExceptions: String { return self._s[2550]! }
+ public var Notifications_Badge_IncludeChannels: String { return self._s[2551]! }
+ public var Notifications_MessageNotificationsPreview: String { return self._s[2554]! }
+ public var ConversationProfile_ErrorCreatingConversation: String { return self._s[2555]! }
+ public var Group_ErrorAddTooMuchBots: String { return self._s[2556]! }
+ public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[2557]! }
+ public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[2558]! }
public func Wallet_SecureStorageChanged_BiometryText(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2557]!, self._r[2557]!, [_0])
+ return formatWithArgumentRanges(self._s[2559]!, self._r[2559]!, [_0])
}
- public var DialogList_Typing: String { return self._s[2558]! }
- public var CallFeedback_IncludeLogs: String { return self._s[2560]! }
- public var Checkout_Phone: String { return self._s[2562]! }
- public var Login_InfoFirstNamePlaceholder: String { return self._s[2565]! }
- public var Privacy_Calls_Integration: String { return self._s[2566]! }
- public var Notifications_PermissionsAllow: String { return self._s[2567]! }
- public var TwoStepAuth_AddHintDescription: String { return self._s[2571]! }
- public var Settings_ChatSettings: String { return self._s[2572]! }
+ public var DialogList_Typing: String { return self._s[2560]! }
+ public var CallFeedback_IncludeLogs: String { return self._s[2562]! }
+ public var Checkout_Phone: String { return self._s[2564]! }
+ public var Login_InfoFirstNamePlaceholder: String { return self._s[2567]! }
+ public var Privacy_Calls_Integration: String { return self._s[2568]! }
+ public var Notifications_PermissionsAllow: String { return self._s[2569]! }
+ public var TwoStepAuth_AddHintDescription: String { return self._s[2573]! }
+ public var Settings_ChatSettings: String { return self._s[2574]! }
public func Channel_AdminLog_MessageInvitedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2573]!, self._r[2573]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[2575]!, self._r[2575]!, [_1, _2])
}
- public var GroupRemoved_DeleteUser: String { return self._s[2575]! }
+ public var GroupRemoved_DeleteUser: String { return self._s[2577]! }
public func Channel_AdminLog_PollStopped(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2576]!, self._r[2576]!, [_0])
+ return formatWithArgumentRanges(self._s[2578]!, self._r[2578]!, [_0])
}
public func PUSH_MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2577]!, self._r[2577]!, [_1])
+ return formatWithArgumentRanges(self._s[2579]!, self._r[2579]!, [_1])
}
- public var Login_ContinueWithLocalization: String { return self._s[2578]! }
- public var Watch_Message_ForwardedFrom: String { return self._s[2579]! }
- public var TwoStepAuth_EnterEmailCode: String { return self._s[2581]! }
- public var Conversation_Unblock: String { return self._s[2582]! }
- public var PrivacySettings_DataSettings: String { return self._s[2583]! }
- public var Group_PublicLink_Info: String { return self._s[2584]! }
- public var Notifications_InAppNotificationsVibrate: String { return self._s[2585]! }
+ public var Login_ContinueWithLocalization: String { return self._s[2580]! }
+ public var Watch_Message_ForwardedFrom: String { return self._s[2581]! }
+ public var TwoStepAuth_EnterEmailCode: String { return self._s[2583]! }
+ public var Conversation_Unblock: String { return self._s[2584]! }
+ public var PrivacySettings_DataSettings: String { return self._s[2585]! }
+ public var Group_PublicLink_Info: String { return self._s[2586]! }
+ public var Notifications_InAppNotificationsVibrate: String { return self._s[2587]! }
public func Privacy_GroupsAndChannels_InviteToChannelError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2586]!, self._r[2586]!, [_0, _1])
+ return formatWithArgumentRanges(self._s[2588]!, self._r[2588]!, [_0, _1])
}
- public var Wallet_RestoreFailed_CreateWallet: String { return self._s[2588]! }
- public var PrivacySettings_Passcode: String { return self._s[2590]! }
- public var Call_Mute: String { return self._s[2591]! }
- public var Passport_Language_dz: String { return self._s[2592]! }
- public var Wallet_Receive_AmountHeader: String { return self._s[2593]! }
- public var Passport_Language_tk: String { return self._s[2594]! }
+ public var Wallet_RestoreFailed_CreateWallet: String { return self._s[2590]! }
+ public var PrivacySettings_Passcode: String { return self._s[2592]! }
+ public var Call_Mute: String { return self._s[2593]! }
+ public var Passport_Language_dz: String { return self._s[2594]! }
+ public var Wallet_Receive_AmountHeader: String { return self._s[2595]! }
+ public var Passport_Language_tk: String { return self._s[2596]! }
public func Login_EmailCodeSubject(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2595]!, self._r[2595]!, [_0])
+ return formatWithArgumentRanges(self._s[2597]!, self._r[2597]!, [_0])
}
- public var Settings_Search: String { return self._s[2596]! }
- public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[2597]! }
- public var Conversation_ContextMenuReply: String { return self._s[2598]! }
- public var WallpaperSearch_ColorBrown: String { return self._s[2599]! }
- public var Chat_AttachmentMultipleForwardDisabled: String { return self._s[2600]! }
- public var Tour_Title1: String { return self._s[2601]! }
- public var Conversation_ClearGroupHistory: String { return self._s[2603]! }
- public var Wallet_TransactionInfo_RecipientHeader: String { return self._s[2604]! }
- public var WallpaperPreview_Motion: String { return self._s[2605]! }
+ public var Settings_Search: String { return self._s[2598]! }
+ public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[2599]! }
+ public var Conversation_ContextMenuReply: String { return self._s[2600]! }
+ public var WallpaperSearch_ColorBrown: String { return self._s[2601]! }
+ public var Chat_AttachmentMultipleForwardDisabled: String { return self._s[2602]! }
+ public var Tour_Title1: String { return self._s[2603]! }
+ public var Conversation_ClearGroupHistory: String { return self._s[2605]! }
+ public var Wallet_TransactionInfo_RecipientHeader: String { return self._s[2606]! }
+ public var WallpaperPreview_Motion: String { return self._s[2607]! }
public func Checkout_PasswordEntry_Text(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2606]!, self._r[2606]!, [_0])
+ return formatWithArgumentRanges(self._s[2608]!, self._r[2608]!, [_0])
}
- public var Call_RateCall: String { return self._s[2607]! }
- public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[2608]! }
- public var Passport_PasswordCompleteSetup: String { return self._s[2609]! }
- public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[2610]! }
- public var UserInfo_LastNamePlaceholder: String { return self._s[2612]! }
+ public var Call_RateCall: String { return self._s[2609]! }
+ public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[2610]! }
+ public var Passport_PasswordCompleteSetup: String { return self._s[2611]! }
+ public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[2612]! }
+ public var UserInfo_LastNamePlaceholder: String { return self._s[2614]! }
public func Login_WillCallYou(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2614]!, self._r[2614]!, [_0])
+ return formatWithArgumentRanges(self._s[2616]!, self._r[2616]!, [_0])
}
- public var Compose_Create: String { return self._s[2615]! }
- public var Contacts_InviteToTelegram: String { return self._s[2616]! }
- public var GroupInfo_Notifications: String { return self._s[2617]! }
- public var Message_PinnedLiveLocationMessage: String { return self._s[2619]! }
- public var Month_GenApril: String { return self._s[2620]! }
- public var Appearance_AutoNightTheme: String { return self._s[2621]! }
- public var ChatSettings_AutomaticAudioDownload: String { return self._s[2623]! }
- public var Login_CodeSentSms: String { return self._s[2625]! }
+ public var Compose_Create: String { return self._s[2617]! }
+ public var Contacts_InviteToTelegram: String { return self._s[2618]! }
+ public var GroupInfo_Notifications: String { return self._s[2619]! }
+ public var Message_PinnedLiveLocationMessage: String { return self._s[2621]! }
+ public var Month_GenApril: String { return self._s[2622]! }
+ public var Appearance_AutoNightTheme: String { return self._s[2623]! }
+ public var ChatSettings_AutomaticAudioDownload: String { return self._s[2625]! }
+ public var Login_CodeSentSms: String { return self._s[2627]! }
public func UserInfo_UnblockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2626]!, self._r[2626]!, [_0])
+ return formatWithArgumentRanges(self._s[2628]!, self._r[2628]!, [_0])
}
- public var EmptyGroupInfo_Line3: String { return self._s[2627]! }
- public var LogoutOptions_ContactSupportText: String { return self._s[2628]! }
- public var Passport_Language_hr: String { return self._s[2629]! }
- public var Common_ActionNotAllowedError: String { return self._s[2630]! }
+ public var EmptyGroupInfo_Line3: String { return self._s[2629]! }
+ public var LogoutOptions_ContactSupportText: String { return self._s[2630]! }
+ public var Passport_Language_hr: String { return self._s[2631]! }
+ public var Common_ActionNotAllowedError: String { return self._s[2632]! }
public func Channel_AdminLog_MessageRestrictedNewSetting(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2631]!, self._r[2631]!, [_0])
+ return formatWithArgumentRanges(self._s[2633]!, self._r[2633]!, [_0])
}
- public var GroupInfo_InviteLink_CopyLink: String { return self._s[2632]! }
- public var Wallet_Info_TransactionFrom: String { return self._s[2633]! }
- public var Wallet_Send_ErrorDecryptionFailed: String { return self._s[2634]! }
- public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[2635]! }
- public var Privacy_SecretChatsTitle: String { return self._s[2636]! }
- public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[2638]! }
- public var GroupInfo_AddUserLeftError: String { return self._s[2639]! }
- public var AutoDownloadSettings_TypePrivateChats: String { return self._s[2640]! }
- public var LogoutOptions_ContactSupportTitle: String { return self._s[2641]! }
- public var Channel_AddBotErrorHaveRights: String { return self._s[2642]! }
- public var Preview_DeleteGif: String { return self._s[2643]! }
- public var GroupInfo_Permissions_Exceptions: String { return self._s[2644]! }
- public var Group_ErrorNotMutualContact: String { return self._s[2645]! }
- public var Notification_MessageLifetime5s: String { return self._s[2646]! }
+ public var GroupInfo_InviteLink_CopyLink: String { return self._s[2634]! }
+ public var Wallet_Info_TransactionFrom: String { return self._s[2635]! }
+ public var Wallet_Send_ErrorDecryptionFailed: String { return self._s[2636]! }
+ public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[2637]! }
+ public var Privacy_SecretChatsTitle: String { return self._s[2638]! }
+ public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[2640]! }
+ public var GroupInfo_AddUserLeftError: String { return self._s[2641]! }
+ public var AutoDownloadSettings_TypePrivateChats: String { return self._s[2642]! }
+ public var LogoutOptions_ContactSupportTitle: String { return self._s[2643]! }
+ public var Channel_AddBotErrorHaveRights: String { return self._s[2644]! }
+ public var Preview_DeleteGif: String { return self._s[2645]! }
+ public var GroupInfo_Permissions_Exceptions: String { return self._s[2646]! }
+ public var Group_ErrorNotMutualContact: String { return self._s[2647]! }
+ public var Notification_MessageLifetime5s: String { return self._s[2648]! }
public func Watch_LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2647]!, self._r[2647]!, [_0])
+ return formatWithArgumentRanges(self._s[2649]!, self._r[2649]!, [_0])
}
- public var VoiceOver_Chat_Video: String { return self._s[2648]! }
- public var Channel_OwnershipTransfer_ErrorPublicChannelsTooMuch: String { return self._s[2650]! }
- public var ReportSpam_DeleteThisChat: String { return self._s[2651]! }
- public var Passport_Address_AddBankStatement: String { return self._s[2652]! }
- public var Notification_CallIncoming: String { return self._s[2653]! }
- public var Wallet_Words_NotDoneTitle: String { return self._s[2654]! }
- public var Compose_NewGroupTitle: String { return self._s[2655]! }
- public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[2657]! }
- public var Passport_Address_Postcode: String { return self._s[2659]! }
+ public var VoiceOver_Chat_Video: String { return self._s[2650]! }
+ public var Channel_OwnershipTransfer_ErrorPublicChannelsTooMuch: String { return self._s[2652]! }
+ public var ReportSpam_DeleteThisChat: String { return self._s[2653]! }
+ public var Passport_Address_AddBankStatement: String { return self._s[2654]! }
+ public var Notification_CallIncoming: String { return self._s[2655]! }
+ public var Wallet_Words_NotDoneTitle: String { return self._s[2656]! }
+ public var Compose_NewGroupTitle: String { return self._s[2657]! }
+ public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[2659]! }
+ public var Passport_Address_Postcode: String { return self._s[2661]! }
public func LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2660]!, self._r[2660]!, [_0])
+ return formatWithArgumentRanges(self._s[2662]!, self._r[2662]!, [_0])
}
- public var Checkout_NewCard_SaveInfoHelp: String { return self._s[2661]! }
- public var VoiceOver_Chat_YourMusic: String { return self._s[2662]! }
- public var WallpaperColors_Title: String { return self._s[2663]! }
- public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[2664]! }
- public var VoiceOver_MessageContextForward: String { return self._s[2665]! }
- public var GroupPermission_Duration: String { return self._s[2666]! }
+ public var Checkout_NewCard_SaveInfoHelp: String { return self._s[2663]! }
+ public var VoiceOver_Chat_YourMusic: String { return self._s[2664]! }
+ public var WallpaperColors_Title: String { return self._s[2665]! }
+ public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[2666]! }
+ public var VoiceOver_MessageContextForward: String { return self._s[2667]! }
+ public var GroupPermission_Duration: String { return self._s[2668]! }
public func Cache_Clear(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2667]!, self._r[2667]!, [_0])
+ return formatWithArgumentRanges(self._s[2669]!, self._r[2669]!, [_0])
}
- public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[2668]! }
- public var Username_Placeholder: String { return self._s[2669]! }
- public var CallFeedback_WhatWentWrong: String { return self._s[2670]! }
- public var Passport_FieldAddressUploadHelp: String { return self._s[2671]! }
- public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[2672]! }
+ public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[2670]! }
+ public var Username_Placeholder: String { return self._s[2671]! }
+ public var CallFeedback_WhatWentWrong: String { return self._s[2672]! }
+ public var Passport_FieldAddressUploadHelp: String { return self._s[2673]! }
+ public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[2674]! }
public func Channel_AdminLog_MessageChangedUnlinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2674]!, self._r[2674]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[2676]!, self._r[2676]!, [_1, _2])
}
- public var Passport_PasswordDescription: String { return self._s[2675]! }
- public var Channel_MessagePhotoUpdated: String { return self._s[2676]! }
- public var MediaPicker_TapToUngroupDescription: String { return self._s[2677]! }
- public var SettingsSearch_Synonyms_Notifications_BadgeCountUnreadMessages: String { return self._s[2678]! }
- public var AttachmentMenu_PhotoOrVideo: String { return self._s[2679]! }
- public var Conversation_ContextMenuMore: String { return self._s[2680]! }
- public var Privacy_PaymentsClearInfo: String { return self._s[2681]! }
- public var CallSettings_TabIcon: String { return self._s[2682]! }
- public var KeyCommand_Find: String { return self._s[2683]! }
- public var Appearance_ThemePreview_ChatList_7_Text: String { return self._s[2684]! }
- public var EditTheme_Edit_Preview_IncomingText: String { return self._s[2685]! }
- public var Message_PinnedGame: String { return self._s[2686]! }
- public var VoiceOver_Chat_ForwardedFromYou: String { return self._s[2687]! }
- public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2689]! }
- public var Login_CallRequestState2: String { return self._s[2691]! }
- public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[2693]! }
+ public var Passport_PasswordDescription: String { return self._s[2677]! }
+ public var Channel_MessagePhotoUpdated: String { return self._s[2678]! }
+ public var MediaPicker_TapToUngroupDescription: String { return self._s[2679]! }
+ public var SettingsSearch_Synonyms_Notifications_BadgeCountUnreadMessages: String { return self._s[2680]! }
+ public var AttachmentMenu_PhotoOrVideo: String { return self._s[2681]! }
+ public var Conversation_ContextMenuMore: String { return self._s[2682]! }
+ public var Privacy_PaymentsClearInfo: String { return self._s[2683]! }
+ public var CallSettings_TabIcon: String { return self._s[2684]! }
+ public var KeyCommand_Find: String { return self._s[2685]! }
+ public var Appearance_ThemePreview_ChatList_7_Text: String { return self._s[2686]! }
+ public var EditTheme_Edit_Preview_IncomingText: String { return self._s[2687]! }
+ public var Message_PinnedGame: String { return self._s[2688]! }
+ public var VoiceOver_Chat_ForwardedFromYou: String { return self._s[2689]! }
+ public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2691]! }
+ public var Login_CallRequestState2: String { return self._s[2693]! }
+ public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[2695]! }
public func VoiceOver_Chat_PhotoFrom(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2694]!, self._r[2694]!, [_0])
- }
- public func Checkout_PayPrice(_ _0: String) -> (String, [(Int, NSRange)]) {
return formatWithArgumentRanges(self._s[2696]!, self._r[2696]!, [_0])
}
- public var WallpaperPreview_Blurred: String { return self._s[2697]! }
- public var Conversation_InstantPagePreview: String { return self._s[2698]! }
+ public func Checkout_PayPrice(_ _0: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[2698]!, self._r[2698]!, [_0])
+ }
+ public var WallpaperPreview_Blurred: String { return self._s[2699]! }
+ public var Conversation_InstantPagePreview: String { return self._s[2700]! }
public func DialogList_SingleUploadingVideoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2699]!, self._r[2699]!, [_0])
+ return formatWithArgumentRanges(self._s[2701]!, self._r[2701]!, [_0])
}
- public var SecretTimer_VideoDescription: String { return self._s[2702]! }
- public var WallpaperSearch_ColorRed: String { return self._s[2703]! }
- public var GroupPermission_NoPinMessages: String { return self._s[2704]! }
- public var Passport_Language_es: String { return self._s[2705]! }
- public var Permissions_ContactsAllow_v0: String { return self._s[2707]! }
- public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[2708]! }
+ public var SecretTimer_VideoDescription: String { return self._s[2704]! }
+ public var WallpaperSearch_ColorRed: String { return self._s[2705]! }
+ public var GroupPermission_NoPinMessages: String { return self._s[2706]! }
+ public var Passport_Language_es: String { return self._s[2707]! }
+ public var Permissions_ContactsAllow_v0: String { return self._s[2709]! }
+ public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[2710]! }
public func PUSH_CHAT_MESSAGE_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2709]!, self._r[2709]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[2711]!, self._r[2711]!, [_1, _2])
}
- public var Privacy_Forwards_CustomHelp: String { return self._s[2710]! }
- public var WebPreview_GettingLinkInfo: String { return self._s[2711]! }
- public var Watch_UserInfo_Unmute: String { return self._s[2712]! }
- public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[2713]! }
- public var AccessDenied_CameraRestricted: String { return self._s[2715]! }
+ public var Privacy_Forwards_CustomHelp: String { return self._s[2712]! }
+ public var WebPreview_GettingLinkInfo: String { return self._s[2713]! }
+ public var Watch_UserInfo_Unmute: String { return self._s[2714]! }
+ public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[2715]! }
+ public var AccessDenied_CameraRestricted: String { return self._s[2717]! }
public func Conversation_Kilobytes(_ _0: Int) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2716]!, self._r[2716]!, ["\(_0)"])
+ return formatWithArgumentRanges(self._s[2718]!, self._r[2718]!, ["\(_0)"])
}
- public var ChatList_ReadAll: String { return self._s[2718]! }
- public var Settings_CopyUsername: String { return self._s[2719]! }
- public var Contacts_SearchLabel: String { return self._s[2720]! }
- public var Map_OpenInYandexNavigator: String { return self._s[2722]! }
- public var PasscodeSettings_EncryptData: String { return self._s[2723]! }
- public var WallpaperSearch_ColorPrefix: String { return self._s[2724]! }
- public var Notifications_GroupNotificationsPreview: String { return self._s[2725]! }
- public var DialogList_AdNoticeAlert: String { return self._s[2726]! }
- public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2728]! }
- public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2729]! }
- public var Localization_LanguageCustom: String { return self._s[2730]! }
- public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2731]! }
- public var CallFeedback_Title: String { return self._s[2732]! }
- public var VoiceOver_Chat_RecordPreviewVoiceMessage: String { return self._s[2735]! }
- public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2736]! }
- public var Wallet_Intro_CreateErrorTitle: String { return self._s[2737]! }
- public var Conversation_InfoGroup: String { return self._s[2738]! }
- public var Compose_NewMessage: String { return self._s[2739]! }
- public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2740]! }
- public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[2741]! }
- public var Wallet_SecureStorageReset_BiometryFaceId: String { return self._s[2742]! }
- public var Channel_DiscussionGroup_UnlinkChannel: String { return self._s[2743]! }
+ public var ChatList_ReadAll: String { return self._s[2720]! }
+ public var Settings_CopyUsername: String { return self._s[2721]! }
+ public var Contacts_SearchLabel: String { return self._s[2722]! }
+ public var Map_OpenInYandexNavigator: String { return self._s[2724]! }
+ public var PasscodeSettings_EncryptData: String { return self._s[2725]! }
+ public var WallpaperSearch_ColorPrefix: String { return self._s[2726]! }
+ public var Notifications_GroupNotificationsPreview: String { return self._s[2727]! }
+ public var DialogList_AdNoticeAlert: String { return self._s[2728]! }
+ public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2730]! }
+ public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2731]! }
+ public var Localization_LanguageCustom: String { return self._s[2732]! }
+ public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2733]! }
+ public var CallFeedback_Title: String { return self._s[2734]! }
+ public var VoiceOver_Chat_RecordPreviewVoiceMessage: String { return self._s[2737]! }
+ public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2738]! }
+ public var Wallet_Intro_CreateErrorTitle: String { return self._s[2739]! }
+ public var Conversation_InfoGroup: String { return self._s[2740]! }
+ public var Compose_NewMessage: String { return self._s[2741]! }
+ public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2742]! }
+ public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[2743]! }
+ public var Wallet_SecureStorageReset_BiometryFaceId: String { return self._s[2744]! }
+ public var Channel_DiscussionGroup_UnlinkChannel: String { return self._s[2745]! }
public func Passport_Scans_ScanIndex(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2744]!, self._r[2744]!, [_0])
+ return formatWithArgumentRanges(self._s[2746]!, self._r[2746]!, [_0])
}
- public var Channel_AdminLog_CanDeleteMessages: String { return self._s[2745]! }
- public var Login_CancelSignUpConfirmation: String { return self._s[2746]! }
- public var ChangePhoneNumberCode_Help: String { return self._s[2747]! }
- public var PrivacySettings_DeleteAccountHelp: String { return self._s[2748]! }
- public var Channel_BlackList_Title: String { return self._s[2749]! }
- public var UserInfo_PhoneCall: String { return self._s[2750]! }
- public var Passport_Address_OneOfTypeBankStatement: String { return self._s[2752]! }
- public var State_connecting: String { return self._s[2753]! }
- public var Appearance_ThemePreview_ChatList_6_Text: String { return self._s[2754]! }
- public var EditTheme_Expand_BottomInfo: String { return self._s[2755]! }
+ public var Channel_AdminLog_CanDeleteMessages: String { return self._s[2747]! }
+ public var Login_CancelSignUpConfirmation: String { return self._s[2748]! }
+ public var ChangePhoneNumberCode_Help: String { return self._s[2749]! }
+ public var PrivacySettings_DeleteAccountHelp: String { return self._s[2750]! }
+ public var Channel_BlackList_Title: String { return self._s[2751]! }
+ public var UserInfo_PhoneCall: String { return self._s[2752]! }
+ public var Passport_Address_OneOfTypeBankStatement: String { return self._s[2754]! }
+ public var State_connecting: String { return self._s[2755]! }
+ public var Appearance_ThemePreview_ChatList_6_Text: String { return self._s[2756]! }
+ public var EditTheme_Expand_BottomInfo: String { return self._s[2757]! }
public func LastSeen_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2756]!, self._r[2756]!, [_0])
+ return formatWithArgumentRanges(self._s[2758]!, self._r[2758]!, [_0])
}
public func DialogList_SingleRecordingAudioSuffix(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2757]!, self._r[2757]!, [_0])
+ return formatWithArgumentRanges(self._s[2759]!, self._r[2759]!, [_0])
}
- public var Notifications_GroupNotifications: String { return self._s[2758]! }
- public var Conversation_SendMessageErrorTooMuchScheduled: String { return self._s[2759]! }
- public var Passport_Identity_EditPassport: String { return self._s[2760]! }
- public var EnterPasscode_RepeatNewPasscode: String { return self._s[2762]! }
- public var Localization_EnglishLanguageName: String { return self._s[2763]! }
- public var Share_AuthDescription: String { return self._s[2764]! }
- public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsAlert: String { return self._s[2765]! }
- public var Passport_Identity_Surname: String { return self._s[2766]! }
- public var Compose_TokenListPlaceholder: String { return self._s[2767]! }
- public var Passport_Identity_OneOfTypePassport: String { return self._s[2768]! }
- public var Settings_AboutEmpty: String { return self._s[2769]! }
- public var Conversation_Unmute: String { return self._s[2770]! }
- public var CreateGroup_ChannelsTooMuch: String { return self._s[2772]! }
- public var Wallet_Sending_Text: String { return self._s[2773]! }
+ public var Notifications_GroupNotifications: String { return self._s[2760]! }
+ public var Conversation_SendMessageErrorTooMuchScheduled: String { return self._s[2761]! }
+ public var Passport_Identity_EditPassport: String { return self._s[2762]! }
+ public var EnterPasscode_RepeatNewPasscode: String { return self._s[2764]! }
+ public var Localization_EnglishLanguageName: String { return self._s[2765]! }
+ public var Share_AuthDescription: String { return self._s[2766]! }
+ public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsAlert: String { return self._s[2767]! }
+ public var Passport_Identity_Surname: String { return self._s[2768]! }
+ public var Compose_TokenListPlaceholder: String { return self._s[2769]! }
+ public var Passport_Identity_OneOfTypePassport: String { return self._s[2770]! }
+ public var Settings_AboutEmpty: String { return self._s[2771]! }
+ public var Conversation_Unmute: String { return self._s[2772]! }
+ public var CreateGroup_ChannelsTooMuch: String { return self._s[2774]! }
+ public var Wallet_Sending_Text: String { return self._s[2775]! }
public func PUSH_CONTACT_JOINED(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2774]!, self._r[2774]!, [_1])
+ return formatWithArgumentRanges(self._s[2776]!, self._r[2776]!, [_1])
}
- public var Login_CodeSentCall: String { return self._s[2775]! }
- public var ContactInfo_PhoneLabelHomeFax: String { return self._s[2777]! }
- public var ChatSettings_Appearance: String { return self._s[2778]! }
- public var Appearance_PickAccentColor: String { return self._s[2779]! }
+ public var Login_CodeSentCall: String { return self._s[2777]! }
+ public var ContactInfo_PhoneLabelHomeFax: String { return self._s[2779]! }
+ public var ChatSettings_Appearance: String { return self._s[2780]! }
+ public var Appearance_PickAccentColor: String { return self._s[2781]! }
public func PUSH_CHAT_MESSAGE_NOTEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2780]!, self._r[2780]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[2782]!, self._r[2782]!, [_1, _2])
}
public func PUSH_MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2781]!, self._r[2781]!, [_1])
+ return formatWithArgumentRanges(self._s[2783]!, self._r[2783]!, [_1])
}
- public var Notification_CallMissed: String { return self._s[2782]! }
- public var SettingsSearch_Synonyms_Appearance_ChatBackground_Custom: String { return self._s[2783]! }
- public var Channel_AdminLogFilter_EventsInfo: String { return self._s[2784]! }
- public var ChatAdmins_AdminLabel: String { return self._s[2786]! }
- public var KeyCommand_JumpToNextChat: String { return self._s[2787]! }
- public var Conversation_StopPollConfirmationTitle: String { return self._s[2789]! }
- public var ChangePhoneNumberCode_CodePlaceholder: String { return self._s[2790]! }
- public var Month_GenJune: String { return self._s[2791]! }
- public var Watch_Location_Current: String { return self._s[2792]! }
- public var Wallet_Receive_CopyInvoiceUrl: String { return self._s[2793]! }
- public var Conversation_TitleMute: String { return self._s[2794]! }
+ public var Notification_CallMissed: String { return self._s[2784]! }
+ public var SettingsSearch_Synonyms_Appearance_ChatBackground_Custom: String { return self._s[2785]! }
+ public var Channel_AdminLogFilter_EventsInfo: String { return self._s[2786]! }
+ public var ChatAdmins_AdminLabel: String { return self._s[2788]! }
+ public var KeyCommand_JumpToNextChat: String { return self._s[2789]! }
+ public var Conversation_StopPollConfirmationTitle: String { return self._s[2791]! }
+ public var ChangePhoneNumberCode_CodePlaceholder: String { return self._s[2792]! }
+ public var Month_GenJune: String { return self._s[2793]! }
+ public var Watch_Location_Current: String { return self._s[2794]! }
+ public var Wallet_Receive_CopyInvoiceUrl: String { return self._s[2795]! }
+ public var Conversation_TitleMute: String { return self._s[2796]! }
public func PUSH_CHANNEL_MESSAGE_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2795]!, self._r[2795]!, [_1])
+ return formatWithArgumentRanges(self._s[2797]!, self._r[2797]!, [_1])
}
- public var GroupInfo_DeleteAndExit: String { return self._s[2796]! }
+ public var GroupInfo_DeleteAndExit: String { return self._s[2798]! }
public func Conversation_Moderate_DeleteAllMessages(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2797]!, self._r[2797]!, [_0])
+ return formatWithArgumentRanges(self._s[2799]!, self._r[2799]!, [_0])
}
- public var Call_ReportPlaceholder: String { return self._s[2798]! }
- public var Chat_SlowmodeSendError: String { return self._s[2799]! }
- public var MaskStickerSettings_Info: String { return self._s[2800]! }
- public var EditTheme_Expand_TopInfo: String { return self._s[2801]! }
+ public var Call_ReportPlaceholder: String { return self._s[2800]! }
+ public var Chat_SlowmodeSendError: String { return self._s[2801]! }
+ public var MaskStickerSettings_Info: String { return self._s[2802]! }
+ public var EditTheme_Expand_TopInfo: String { return self._s[2803]! }
public func GroupInfo_AddParticipantConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2802]!, self._r[2802]!, [_0])
+ return formatWithArgumentRanges(self._s[2804]!, self._r[2804]!, [_0])
}
- public var Checkout_NewCard_PostcodeTitle: String { return self._s[2803]! }
- public var Passport_Address_RegionPlaceholder: String { return self._s[2805]! }
- public var Contacts_ShareTelegram: String { return self._s[2806]! }
- public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[2807]! }
- public var Channel_ErrorAccessDenied: String { return self._s[2808]! }
- public var UserInfo_ScamBotWarning: String { return self._s[2810]! }
- public var Stickers_GroupChooseStickerPack: String { return self._s[2811]! }
- public var Call_ConnectionErrorTitle: String { return self._s[2812]! }
- public var UserInfo_NotificationsEnable: String { return self._s[2813]! }
- public var ArchivedChats_IntroText1: String { return self._s[2814]! }
- public var Tour_Text4: String { return self._s[2817]! }
- public var WallpaperSearch_Recent: String { return self._s[2818]! }
- public var GroupInfo_ScamGroupWarning: String { return self._s[2819]! }
- public var Profile_MessageLifetime2s: String { return self._s[2821]! }
- public var Appearance_ThemePreview_ChatList_5_Text: String { return self._s[2822]! }
- public var Notification_MessageLifetime2s: String { return self._s[2823]! }
+ public var Checkout_NewCard_PostcodeTitle: String { return self._s[2805]! }
+ public var Passport_Address_RegionPlaceholder: String { return self._s[2807]! }
+ public var Contacts_ShareTelegram: String { return self._s[2808]! }
+ public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[2809]! }
+ public var Channel_ErrorAccessDenied: String { return self._s[2810]! }
+ public var UserInfo_ScamBotWarning: String { return self._s[2812]! }
+ public var Stickers_GroupChooseStickerPack: String { return self._s[2813]! }
+ public var Call_ConnectionErrorTitle: String { return self._s[2814]! }
+ public var UserInfo_NotificationsEnable: String { return self._s[2815]! }
+ public var ArchivedChats_IntroText1: String { return self._s[2816]! }
+ public var Tour_Text4: String { return self._s[2819]! }
+ public var WallpaperSearch_Recent: String { return self._s[2820]! }
+ public var GroupInfo_ScamGroupWarning: String { return self._s[2821]! }
+ public var Profile_MessageLifetime2s: String { return self._s[2823]! }
+ public var Appearance_ThemePreview_ChatList_5_Text: String { return self._s[2824]! }
+ public var Notification_MessageLifetime2s: String { return self._s[2825]! }
public func Time_PreciseDate_m10(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2824]!, self._r[2824]!, [_1, _2, _3])
+ return formatWithArgumentRanges(self._s[2826]!, self._r[2826]!, [_1, _2, _3])
}
- public var Cache_ClearCache: String { return self._s[2825]! }
- public var AutoNightTheme_UpdateLocation: String { return self._s[2826]! }
- public var Permissions_NotificationsUnreachableText_v0: String { return self._s[2827]! }
+ public var Cache_ClearCache: String { return self._s[2827]! }
+ public var AutoNightTheme_UpdateLocation: String { return self._s[2828]! }
+ public var Permissions_NotificationsUnreachableText_v0: String { return self._s[2829]! }
public func Channel_AdminLog_MessageChangedGroupUsername(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2832]!, self._r[2832]!, [_0])
- }
- public func Conversation_ShareMyPhoneNumber_StatusSuccess(_ _0: String) -> (String, [(Int, NSRange)]) {
return formatWithArgumentRanges(self._s[2834]!, self._r[2834]!, [_0])
}
- public var LocalGroup_Text: String { return self._s[2835]! }
- public var Channel_AdminLog_EmptyFilterTitle: String { return self._s[2836]! }
- public var SocksProxySetup_TypeSocks: String { return self._s[2837]! }
- public var ChatList_UnarchiveAction: String { return self._s[2838]! }
- public var AutoNightTheme_Title: String { return self._s[2839]! }
- public var InstantPage_FeedbackButton: String { return self._s[2840]! }
- public var Passport_FieldAddress: String { return self._s[2841]! }
- public func Channel_AdminLog_SetSlowmode(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2842]!, self._r[2842]!, [_1, _2])
+ public func Conversation_ShareMyPhoneNumber_StatusSuccess(_ _0: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[2836]!, self._r[2836]!, [_0])
}
- public var Month_ShortMarch: String { return self._s[2843]! }
- public func PUSH_MESSAGE_INVOICE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
+ public var LocalGroup_Text: String { return self._s[2837]! }
+ public var Channel_AdminLog_EmptyFilterTitle: String { return self._s[2838]! }
+ public var SocksProxySetup_TypeSocks: String { return self._s[2839]! }
+ public var ChatList_UnarchiveAction: String { return self._s[2840]! }
+ public var AutoNightTheme_Title: String { return self._s[2841]! }
+ public var InstantPage_FeedbackButton: String { return self._s[2842]! }
+ public var Passport_FieldAddress: String { return self._s[2843]! }
+ public func Channel_AdminLog_SetSlowmode(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
return formatWithArgumentRanges(self._s[2844]!, self._r[2844]!, [_1, _2])
}
- public var SocksProxySetup_UsernamePlaceholder: String { return self._s[2845]! }
- public var Conversation_ShareInlineBotLocationConfirmation: String { return self._s[2846]! }
- public var Passport_FloodError: String { return self._s[2847]! }
- public var SecretGif_Title: String { return self._s[2848]! }
- public var NotificationSettings_ShowNotificationsAllAccountsInfoOn: String { return self._s[2849]! }
- public var ChatList_Context_UnhideArchive: String { return self._s[2850]! }
- public var Passport_Language_th: String { return self._s[2852]! }
- public var Passport_Address_Address: String { return self._s[2853]! }
- public var Login_InvalidLastNameError: String { return self._s[2854]! }
- public var Notifications_InAppNotificationsPreview: String { return self._s[2855]! }
- public var Notifications_PermissionsUnreachableTitle: String { return self._s[2856]! }
- public var ChatList_Context_Archive: String { return self._s[2857]! }
- public var SettingsSearch_FAQ: String { return self._s[2858]! }
- public var ShareMenu_Send: String { return self._s[2859]! }
- public var WallpaperSearch_ColorYellow: String { return self._s[2861]! }
- public var Month_GenNovember: String { return self._s[2863]! }
- public var SettingsSearch_Synonyms_Appearance_LargeEmoji: String { return self._s[2865]! }
+ public var Month_ShortMarch: String { return self._s[2845]! }
+ public func PUSH_MESSAGE_INVOICE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[2846]!, self._r[2846]!, [_1, _2])
+ }
+ public var SocksProxySetup_UsernamePlaceholder: String { return self._s[2847]! }
+ public var Conversation_ShareInlineBotLocationConfirmation: String { return self._s[2848]! }
+ public var Passport_FloodError: String { return self._s[2849]! }
+ public var SecretGif_Title: String { return self._s[2850]! }
+ public var NotificationSettings_ShowNotificationsAllAccountsInfoOn: String { return self._s[2851]! }
+ public var ChatList_Context_UnhideArchive: String { return self._s[2852]! }
+ public var Passport_Language_th: String { return self._s[2854]! }
+ public var Passport_Address_Address: String { return self._s[2855]! }
+ public var Login_InvalidLastNameError: String { return self._s[2856]! }
+ public var Notifications_InAppNotificationsPreview: String { return self._s[2857]! }
+ public var Notifications_PermissionsUnreachableTitle: String { return self._s[2858]! }
+ public var ChatList_Context_Archive: String { return self._s[2859]! }
+ public var SettingsSearch_FAQ: String { return self._s[2860]! }
+ public var ShareMenu_Send: String { return self._s[2861]! }
+ public var WallpaperSearch_ColorYellow: String { return self._s[2863]! }
+ public var Month_GenNovember: String { return self._s[2865]! }
+ public var SettingsSearch_Synonyms_Appearance_LargeEmoji: String { return self._s[2867]! }
public func Conversation_ShareMyPhoneNumberConfirmation(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2866]!, self._r[2866]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[2868]!, self._r[2868]!, [_1, _2])
}
- public var Checkout_Email: String { return self._s[2868]! }
- public var NotificationsSound_Tritone: String { return self._s[2869]! }
- public var StickerPacksSettings_ManagingHelp: String { return self._s[2871]! }
+ public var Checkout_Email: String { return self._s[2870]! }
+ public var NotificationsSound_Tritone: String { return self._s[2871]! }
+ public var StickerPacksSettings_ManagingHelp: String { return self._s[2873]! }
public func PUSH_PINNED_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2874]!, self._r[2874]!, [_1])
+ return formatWithArgumentRanges(self._s[2876]!, self._r[2876]!, [_1])
}
- public var ChangePhoneNumberNumber_Help: String { return self._s[2875]! }
+ public var ChangePhoneNumberNumber_Help: String { return self._s[2877]! }
public func Checkout_LiabilityAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2876]!, self._r[2876]!, [_1, _1, _1, _2])
+ return formatWithArgumentRanges(self._s[2878]!, self._r[2878]!, [_1, _1, _1, _2])
}
- public var ChatList_UndoArchiveTitle: String { return self._s[2877]! }
- public var Notification_Exceptions_Add: String { return self._s[2878]! }
- public var DialogList_You: String { return self._s[2879]! }
- public var MediaPicker_Send: String { return self._s[2882]! }
- public var SettingsSearch_Synonyms_Stickers_Title: String { return self._s[2883]! }
- public var Appearance_ThemePreview_ChatList_4_Text: String { return self._s[2884]! }
- public var Call_AudioRouteSpeaker: String { return self._s[2885]! }
- public var Watch_UserInfo_Title: String { return self._s[2886]! }
- public var VoiceOver_Chat_PollFinalResults: String { return self._s[2887]! }
- public var Appearance_AccentColor: String { return self._s[2888]! }
+ public var ChatList_UndoArchiveTitle: String { return self._s[2879]! }
+ public var Notification_Exceptions_Add: String { return self._s[2880]! }
+ public var DialogList_You: String { return self._s[2881]! }
+ public var MediaPicker_Send: String { return self._s[2884]! }
+ public var SettingsSearch_Synonyms_Stickers_Title: String { return self._s[2885]! }
+ public var Appearance_ThemePreview_ChatList_4_Text: String { return self._s[2886]! }
+ public var Call_AudioRouteSpeaker: String { return self._s[2887]! }
+ public var Watch_UserInfo_Title: String { return self._s[2888]! }
+ public var VoiceOver_Chat_PollFinalResults: String { return self._s[2889]! }
+ public var Appearance_AccentColor: String { return self._s[2890]! }
public func Login_EmailPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2889]!, self._r[2889]!, [_0])
+ return formatWithArgumentRanges(self._s[2891]!, self._r[2891]!, [_0])
}
- public var Permissions_ContactsAllowInSettings_v0: String { return self._s[2890]! }
+ public var Permissions_ContactsAllowInSettings_v0: String { return self._s[2892]! }
public func PUSH_CHANNEL_MESSAGE_GAME(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2891]!, self._r[2891]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[2893]!, self._r[2893]!, [_1, _2])
}
- public var Conversation_ClousStorageInfo_Description2: String { return self._s[2892]! }
- public var WebSearch_RecentClearConfirmation: String { return self._s[2893]! }
- public var Notification_CallOutgoing: String { return self._s[2894]! }
- public var PrivacySettings_PasscodeAndFaceId: String { return self._s[2895]! }
- public var Channel_DiscussionGroup_MakeHistoryPublic: String { return self._s[2896]! }
- public var Call_RecordingDisabledMessage: String { return self._s[2897]! }
- public var Message_Game: String { return self._s[2898]! }
- public var Conversation_PressVolumeButtonForSound: String { return self._s[2899]! }
- public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[2900]! }
- public var Channel_DiscussionGroup_PrivateGroup: String { return self._s[2901]! }
- public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[2902]! }
- public var Date_DialogDateFormat: String { return self._s[2903]! }
- public var WallpaperColors_SetCustomColor: String { return self._s[2904]! }
- public var Notifications_InAppNotifications: String { return self._s[2905]! }
+ public var Conversation_ClousStorageInfo_Description2: String { return self._s[2894]! }
+ public var WebSearch_RecentClearConfirmation: String { return self._s[2895]! }
+ public var Notification_CallOutgoing: String { return self._s[2896]! }
+ public var PrivacySettings_PasscodeAndFaceId: String { return self._s[2897]! }
+ public var Channel_DiscussionGroup_MakeHistoryPublic: String { return self._s[2898]! }
+ public var Call_RecordingDisabledMessage: String { return self._s[2899]! }
+ public var Message_Game: String { return self._s[2900]! }
+ public var Conversation_PressVolumeButtonForSound: String { return self._s[2901]! }
+ public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[2902]! }
+ public var Channel_DiscussionGroup_PrivateGroup: String { return self._s[2903]! }
+ public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[2904]! }
+ public var Date_DialogDateFormat: String { return self._s[2905]! }
+ public var WallpaperColors_SetCustomColor: String { return self._s[2906]! }
+ public var Notifications_InAppNotifications: String { return self._s[2907]! }
public func Channel_Management_RemovedBy(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2906]!, self._r[2906]!, [_0])
+ return formatWithArgumentRanges(self._s[2908]!, self._r[2908]!, [_0])
}
public func Settings_ApplyProxyAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2907]!, self._r[2907]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[2909]!, self._r[2909]!, [_1, _2])
}
- public var NewContact_Title: String { return self._s[2908]! }
+ public var NewContact_Title: String { return self._s[2910]! }
public func AutoDownloadSettings_UpToForAll(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2909]!, self._r[2909]!, [_0])
+ return formatWithArgumentRanges(self._s[2911]!, self._r[2911]!, [_0])
}
- public var Conversation_ViewContactDetails: String { return self._s[2910]! }
+ public var Conversation_ViewContactDetails: String { return self._s[2912]! }
public func PUSH_CHANNEL_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2912]!, self._r[2912]!, [_1])
+ return formatWithArgumentRanges(self._s[2914]!, self._r[2914]!, [_1])
}
- public var Checkout_NewCard_CardholderNameTitle: String { return self._s[2913]! }
- public var Passport_Identity_ExpiryDateNone: String { return self._s[2914]! }
- public var PrivacySettings_Title: String { return self._s[2915]! }
- public var Conversation_SilentBroadcastTooltipOff: String { return self._s[2918]! }
- public var GroupRemoved_UsersSectionTitle: String { return self._s[2919]! }
- public var VoiceOver_Chat_ContactEmail: String { return self._s[2920]! }
- public var Contacts_PhoneNumber: String { return self._s[2921]! }
- public var Map_ShowPlaces: String { return self._s[2923]! }
- public var ChatAdmins_Title: String { return self._s[2924]! }
- public var InstantPage_Reference: String { return self._s[2926]! }
- public var Wallet_Info_Updating: String { return self._s[2927]! }
- public var ReportGroupLocation_Text: String { return self._s[2928]! }
+ public var Checkout_NewCard_CardholderNameTitle: String { return self._s[2915]! }
+ public var Passport_Identity_ExpiryDateNone: String { return self._s[2916]! }
+ public var PrivacySettings_Title: String { return self._s[2917]! }
+ public var Conversation_SilentBroadcastTooltipOff: String { return self._s[2920]! }
+ public var GroupRemoved_UsersSectionTitle: String { return self._s[2921]! }
+ public var VoiceOver_Chat_ContactEmail: String { return self._s[2922]! }
+ public var Contacts_PhoneNumber: String { return self._s[2923]! }
+ public var Map_ShowPlaces: String { return self._s[2925]! }
+ public var ChatAdmins_Title: String { return self._s[2926]! }
+ public var InstantPage_Reference: String { return self._s[2928]! }
+ public var Wallet_Info_Updating: String { return self._s[2929]! }
+ public var ReportGroupLocation_Text: String { return self._s[2930]! }
public func PUSH_CHAT_MESSAGE_FWD(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2929]!, self._r[2929]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[2931]!, self._r[2931]!, [_1, _2])
}
- public var Camera_FlashOff: String { return self._s[2930]! }
- public var Wallet_Intro_TermsUrl: String { return self._s[2931]! }
- public var Watch_UserInfo_Block: String { return self._s[2932]! }
- public var ChatSettings_Stickers: String { return self._s[2933]! }
- public var ChatSettings_DownloadInBackground: String { return self._s[2934]! }
- public var Appearance_ThemeCarouselTintedNight: String { return self._s[2935]! }
+ public var Camera_FlashOff: String { return self._s[2932]! }
+ public var Wallet_Intro_TermsUrl: String { return self._s[2933]! }
+ public var Watch_UserInfo_Block: String { return self._s[2934]! }
+ public var ChatSettings_Stickers: String { return self._s[2935]! }
+ public var ChatSettings_DownloadInBackground: String { return self._s[2936]! }
+ public var Appearance_ThemeCarouselTintedNight: String { return self._s[2937]! }
public func UserInfo_BlockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2936]!, self._r[2936]!, [_0])
+ return formatWithArgumentRanges(self._s[2938]!, self._r[2938]!, [_0])
}
- public var Settings_ViewPhoto: String { return self._s[2937]! }
- public var Login_CheckOtherSessionMessages: String { return self._s[2938]! }
- public var AutoDownloadSettings_Cellular: String { return self._s[2939]! }
- public var Wallet_Created_ExportErrorTitle: String { return self._s[2940]! }
- public var SettingsSearch_Synonyms_Notifications_GroupNotificationsExceptions: String { return self._s[2941]! }
- public var VoiceOver_MessageContextShare: String { return self._s[2942]! }
+ public var Settings_ViewPhoto: String { return self._s[2939]! }
+ public var Login_CheckOtherSessionMessages: String { return self._s[2940]! }
+ public var AutoDownloadSettings_Cellular: String { return self._s[2941]! }
+ public var Wallet_Created_ExportErrorTitle: String { return self._s[2942]! }
+ public var SettingsSearch_Synonyms_Notifications_GroupNotificationsExceptions: String { return self._s[2943]! }
+ public var VoiceOver_MessageContextShare: String { return self._s[2944]! }
public func Target_InviteToGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2944]!, self._r[2944]!, [_0])
+ return formatWithArgumentRanges(self._s[2946]!, self._r[2946]!, [_0])
}
- public var Privacy_DeleteDrafts: String { return self._s[2945]! }
- public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[2946]! }
+ public var Privacy_DeleteDrafts: String { return self._s[2947]! }
+ public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[2948]! }
public func LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2947]!, self._r[2947]!, [_0])
+ return formatWithArgumentRanges(self._s[2949]!, self._r[2949]!, [_0])
}
- public var DialogList_SavedMessagesHelp: String { return self._s[2948]! }
- public var Wallet_SecureStorageNotAvailable_Title: String { return self._s[2949]! }
- public var DialogList_SavedMessages: String { return self._s[2950]! }
- public var GroupInfo_UpgradeButton: String { return self._s[2951]! }
- public var Appearance_ThemePreview_ChatList_3_Text: String { return self._s[2953]! }
- public var DialogList_Pin: String { return self._s[2954]! }
+ public var DialogList_SavedMessagesHelp: String { return self._s[2950]! }
+ public var Wallet_SecureStorageNotAvailable_Title: String { return self._s[2951]! }
+ public var DialogList_SavedMessages: String { return self._s[2952]! }
+ public var GroupInfo_UpgradeButton: String { return self._s[2953]! }
+ public var Appearance_ThemePreview_ChatList_3_Text: String { return self._s[2955]! }
+ public var DialogList_Pin: String { return self._s[2956]! }
public func ForwardedAuthors2(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2955]!, self._r[2955]!, [_0, _1])
+ return formatWithArgumentRanges(self._s[2957]!, self._r[2957]!, [_0, _1])
}
public func Login_PhoneGenericEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2956]!, self._r[2956]!, [_0])
+ return formatWithArgumentRanges(self._s[2958]!, self._r[2958]!, [_0])
}
- public var Notification_Exceptions_AlwaysOn: String { return self._s[2957]! }
- public var UserInfo_NotificationsDisable: String { return self._s[2958]! }
- public var Paint_Outlined: String { return self._s[2959]! }
- public var Activity_PlayingGame: String { return self._s[2960]! }
- public var SearchImages_NoImagesFound: String { return self._s[2961]! }
- public var SocksProxySetup_ProxyType: String { return self._s[2962]! }
- public var AppleWatch_ReplyPresetsHelp: String { return self._s[2964]! }
- public var Conversation_ContextMenuCancelSending: String { return self._s[2965]! }
- public var Settings_AppLanguage: String { return self._s[2966]! }
- public var TwoStepAuth_ResetAccountHelp: String { return self._s[2967]! }
- public var Common_ChoosePhoto: String { return self._s[2968]! }
- public var CallFeedback_ReasonEcho: String { return self._s[2969]! }
+ public var Notification_Exceptions_AlwaysOn: String { return self._s[2959]! }
+ public var UserInfo_NotificationsDisable: String { return self._s[2960]! }
+ public var Paint_Outlined: String { return self._s[2961]! }
+ public var Activity_PlayingGame: String { return self._s[2962]! }
+ public var SearchImages_NoImagesFound: String { return self._s[2963]! }
+ public var SocksProxySetup_ProxyType: String { return self._s[2964]! }
+ public var AppleWatch_ReplyPresetsHelp: String { return self._s[2966]! }
+ public var Conversation_ContextMenuCancelSending: String { return self._s[2967]! }
+ public var Settings_AppLanguage: String { return self._s[2968]! }
+ public var TwoStepAuth_ResetAccountHelp: String { return self._s[2969]! }
+ public var Common_ChoosePhoto: String { return self._s[2970]! }
+ public var CallFeedback_ReasonEcho: String { return self._s[2971]! }
public func PUSH_PINNED_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2970]!, self._r[2970]!, [_1])
+ return formatWithArgumentRanges(self._s[2972]!, self._r[2972]!, [_1])
}
- public var Privacy_Calls_AlwaysAllow: String { return self._s[2971]! }
- public var Activity_UploadingVideo: String { return self._s[2972]! }
- public var Conversation_WalletRequiredNotNow: String { return self._s[2973]! }
- public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[2974]! }
- public var NetworkUsageSettings_Wifi: String { return self._s[2975]! }
- public var VoiceOver_Editing_ClearText: String { return self._s[2976]! }
- public var PUSH_SENDER_YOU: String { return self._s[2977]! }
- public var Channel_BanUser_PermissionReadMessages: String { return self._s[2978]! }
- public var Checkout_PayWithTouchId: String { return self._s[2979]! }
- public var Wallpaper_ResetWallpapersConfirmation: String { return self._s[2980]! }
+ public var Privacy_Calls_AlwaysAllow: String { return self._s[2973]! }
+ public var Activity_UploadingVideo: String { return self._s[2974]! }
+ public var Conversation_WalletRequiredNotNow: String { return self._s[2975]! }
+ public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[2976]! }
+ public var NetworkUsageSettings_Wifi: String { return self._s[2977]! }
+ public var VoiceOver_Editing_ClearText: String { return self._s[2978]! }
+ public var PUSH_SENDER_YOU: String { return self._s[2979]! }
+ public var Channel_BanUser_PermissionReadMessages: String { return self._s[2980]! }
+ public var Checkout_PayWithTouchId: String { return self._s[2981]! }
+ public var Wallpaper_ResetWallpapersConfirmation: String { return self._s[2982]! }
public func PUSH_LOCKED_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2982]!, self._r[2982]!, [_1])
+ return formatWithArgumentRanges(self._s[2984]!, self._r[2984]!, [_1])
}
- public var Notifications_ExceptionsNone: String { return self._s[2983]! }
+ public var Notifications_ExceptionsNone: String { return self._s[2985]! }
public func Message_ForwardedMessageShort(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2984]!, self._r[2984]!, [_0])
+ return formatWithArgumentRanges(self._s[2986]!, self._r[2986]!, [_0])
}
public func PUSH_PINNED_GEO(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[2985]!, self._r[2985]!, [_1])
+ return formatWithArgumentRanges(self._s[2987]!, self._r[2987]!, [_1])
}
- public var AuthSessions_IncompleteAttempts: String { return self._s[2987]! }
- public var Passport_Address_Region: String { return self._s[2990]! }
- public var ChatList_DeleteChat: String { return self._s[2991]! }
- public var LogoutOptions_ClearCacheTitle: String { return self._s[2992]! }
- public var PhotoEditor_TiltShift: String { return self._s[2993]! }
- public var Settings_FAQ_URL: String { return self._s[2994]! }
- public var Passport_Language_sl: String { return self._s[2995]! }
- public var Settings_PrivacySettings: String { return self._s[2997]! }
- public var SharedMedia_TitleLink: String { return self._s[2998]! }
- public var Passport_Identity_TypePassportUploadScan: String { return self._s[2999]! }
- public var Settings_SetProfilePhoto: String { return self._s[3000]! }
- public var Channel_About_Help: String { return self._s[3001]! }
- public var Contacts_PermissionsEnable: String { return self._s[3002]! }
- public var Wallet_Sending_Title: String { return self._s[3003]! }
- public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[3004]! }
- public var AttachmentMenu_SendAsFiles: String { return self._s[3005]! }
- public var CallFeedback_ReasonInterruption: String { return self._s[3007]! }
- public var Passport_Address_AddTemporaryRegistration: String { return self._s[3008]! }
- public var AutoDownloadSettings_AutodownloadVideos: String { return self._s[3009]! }
- public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[3010]! }
- public var PrivacySettings_DeleteAccountTitle: String { return self._s[3011]! }
- public var AccessDenied_VideoMessageCamera: String { return self._s[3013]! }
- public var Map_OpenInYandexMaps: String { return self._s[3015]! }
- public var CreateGroup_ErrorLocatedGroupsTooMuch: String { return self._s[3016]! }
- public var VoiceOver_MessageContextReply: String { return self._s[3017]! }
- public var PhotoEditor_SaturationTool: String { return self._s[3018]! }
+ public var AuthSessions_IncompleteAttempts: String { return self._s[2989]! }
+ public var Passport_Address_Region: String { return self._s[2992]! }
+ public var ChatList_DeleteChat: String { return self._s[2993]! }
+ public var LogoutOptions_ClearCacheTitle: String { return self._s[2994]! }
+ public var PhotoEditor_TiltShift: String { return self._s[2995]! }
+ public var Settings_FAQ_URL: String { return self._s[2996]! }
+ public var Passport_Language_sl: String { return self._s[2997]! }
+ public var Settings_PrivacySettings: String { return self._s[2999]! }
+ public var SharedMedia_TitleLink: String { return self._s[3000]! }
+ public var Passport_Identity_TypePassportUploadScan: String { return self._s[3001]! }
+ public var Settings_SetProfilePhoto: String { return self._s[3002]! }
+ public var Channel_About_Help: String { return self._s[3003]! }
+ public var Contacts_PermissionsEnable: String { return self._s[3004]! }
+ public var Wallet_Sending_Title: String { return self._s[3005]! }
+ public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[3006]! }
+ public var AttachmentMenu_SendAsFiles: String { return self._s[3007]! }
+ public var CallFeedback_ReasonInterruption: String { return self._s[3009]! }
+ public var Passport_Address_AddTemporaryRegistration: String { return self._s[3010]! }
+ public var AutoDownloadSettings_AutodownloadVideos: String { return self._s[3011]! }
+ public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[3012]! }
+ public var PrivacySettings_DeleteAccountTitle: String { return self._s[3013]! }
+ public var AccessDenied_VideoMessageCamera: String { return self._s[3015]! }
+ public var Map_OpenInYandexMaps: String { return self._s[3017]! }
+ public var CreateGroup_ErrorLocatedGroupsTooMuch: String { return self._s[3018]! }
+ public var VoiceOver_MessageContextReply: String { return self._s[3019]! }
+ public var PhotoEditor_SaturationTool: String { return self._s[3020]! }
public func PUSH_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3019]!, self._r[3019]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3021]!, self._r[3021]!, [_1, _2])
}
- public var PrivacyPhoneNumberSettings_CustomHelp: String { return self._s[3020]! }
- public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[3021]! }
- public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[3022]! }
- public var Appearance_TextSize: String { return self._s[3023]! }
+ public var PrivacyPhoneNumberSettings_CustomHelp: String { return self._s[3022]! }
+ public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[3023]! }
+ public var Wallet_Send_NetworkError: String { return self._s[3024]! }
+ public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[3025]! }
+ public var Appearance_TextSize: String { return self._s[3026]! }
public func LOCAL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3024]!, self._r[3024]!, [_1, "\(_2)"])
+ return formatWithArgumentRanges(self._s[3027]!, self._r[3027]!, [_1, "\(_2)"])
}
- public var Appearance_ThemePreview_ChatList_2_Text: String { return self._s[3025]! }
- public var Channel_Username_InvalidTooShort: String { return self._s[3027]! }
+ public var Appearance_ThemePreview_ChatList_2_Text: String { return self._s[3028]! }
+ public var Channel_Username_InvalidTooShort: String { return self._s[3030]! }
public func Group_OwnershipTransfer_DescriptionInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3028]!, self._r[3028]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3031]!, self._r[3031]!, [_1, _2])
}
public func PUSH_CHAT_MESSAGE_GAME(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3029]!, self._r[3029]!, [_1, _2, _3])
+ return formatWithArgumentRanges(self._s[3032]!, self._r[3032]!, [_1, _2, _3])
}
- public var GroupInfo_PublicLinkAdd: String { return self._s[3030]! }
- public var Passport_PassportInformation: String { return self._s[3033]! }
- public var Theme_Unsupported: String { return self._s[3034]! }
- public var WatchRemote_AlertTitle: String { return self._s[3035]! }
- public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[3036]! }
- public var ConvertToSupergroup_HelpText: String { return self._s[3038]! }
+ public var GroupInfo_PublicLinkAdd: String { return self._s[3033]! }
+ public var Passport_PassportInformation: String { return self._s[3036]! }
+ public var Theme_Unsupported: String { return self._s[3037]! }
+ public var WatchRemote_AlertTitle: String { return self._s[3038]! }
+ public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[3039]! }
+ public var ConvertToSupergroup_HelpText: String { return self._s[3041]! }
public func Time_MonthOfYear_m7(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3039]!, self._r[3039]!, [_0])
+ return formatWithArgumentRanges(self._s[3042]!, self._r[3042]!, [_0])
}
public func PUSH_PHONE_CALL_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3040]!, self._r[3040]!, [_1])
+ return formatWithArgumentRanges(self._s[3043]!, self._r[3043]!, [_1])
}
- public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[3041]! }
- public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[3043]! }
- public var AccessDenied_CameraDisabled: String { return self._s[3044]! }
+ public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[3044]! }
+ public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[3046]! }
+ public var AccessDenied_CameraDisabled: String { return self._s[3047]! }
public func Channel_Username_UsernameIsAvailable(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3045]!, self._r[3045]!, [_0])
+ return formatWithArgumentRanges(self._s[3048]!, self._r[3048]!, [_0])
}
- public var PhotoEditor_ContrastTool: String { return self._s[3048]! }
+ public var PhotoEditor_ContrastTool: String { return self._s[3051]! }
public func PUSH_PINNED_DOC(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3049]!, self._r[3049]!, [_1])
+ return formatWithArgumentRanges(self._s[3052]!, self._r[3052]!, [_1])
}
- public var DialogList_Draft: String { return self._s[3050]! }
- public var Privacy_TopPeersDelete: String { return self._s[3052]! }
- public var LoginPassword_PasswordPlaceholder: String { return self._s[3053]! }
- public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[3054]! }
- public var WebSearch_RecentSectionClear: String { return self._s[3055]! }
- public var EditTheme_ErrorInvalidCharacters: String { return self._s[3056]! }
- public var Watch_ChatList_NoConversationsTitle: String { return self._s[3058]! }
- public var Common_Done: String { return self._s[3060]! }
- public var AuthSessions_EmptyText: String { return self._s[3061]! }
- public var Conversation_ShareBotContactConfirmation: String { return self._s[3062]! }
- public var Tour_Title5: String { return self._s[3063]! }
- public var Wallet_Settings_Title: String { return self._s[3064]! }
+ public var DialogList_Draft: String { return self._s[3053]! }
+ public var Privacy_TopPeersDelete: String { return self._s[3055]! }
+ public var LoginPassword_PasswordPlaceholder: String { return self._s[3056]! }
+ public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[3057]! }
+ public var WebSearch_RecentSectionClear: String { return self._s[3058]! }
+ public var EditTheme_ErrorInvalidCharacters: String { return self._s[3059]! }
+ public var Watch_ChatList_NoConversationsTitle: String { return self._s[3061]! }
+ public var Common_Done: String { return self._s[3063]! }
+ public var AuthSessions_EmptyText: String { return self._s[3064]! }
+ public var Conversation_ShareBotContactConfirmation: String { return self._s[3065]! }
+ public var Tour_Title5: String { return self._s[3066]! }
+ public var Wallet_Settings_Title: String { return self._s[3067]! }
public func Map_DirectionsDriveEta(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3065]!, self._r[3065]!, [_0])
+ return formatWithArgumentRanges(self._s[3068]!, self._r[3068]!, [_0])
}
- public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[3066]! }
- public var Conversation_LinkDialogSave: String { return self._s[3067]! }
- public var GroupInfo_ActionRestrict: String { return self._s[3068]! }
- public var Checkout_Title: String { return self._s[3069]! }
- public var Channel_DiscussionGroup_HeaderLabel: String { return self._s[3071]! }
- public var Channel_AdminLog_CanChangeInfo: String { return self._s[3073]! }
- public var Notification_RenamedGroup: String { return self._s[3074]! }
- public var PeopleNearby_Groups: String { return self._s[3075]! }
- public var Checkout_PayWithFaceId: String { return self._s[3076]! }
- public var Channel_BanList_BlockedTitle: String { return self._s[3077]! }
- public var SettingsSearch_Synonyms_Notifications_InAppNotificationsSound: String { return self._s[3079]! }
- public var Checkout_WebConfirmation_Title: String { return self._s[3080]! }
- public var Notifications_MessageNotificationsAlert: String { return self._s[3081]! }
+ public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[3069]! }
+ public var Conversation_LinkDialogSave: String { return self._s[3070]! }
+ public var GroupInfo_ActionRestrict: String { return self._s[3071]! }
+ public var Checkout_Title: String { return self._s[3072]! }
+ public var Channel_DiscussionGroup_HeaderLabel: String { return self._s[3074]! }
+ public var Channel_AdminLog_CanChangeInfo: String { return self._s[3076]! }
+ public var Notification_RenamedGroup: String { return self._s[3077]! }
+ public var PeopleNearby_Groups: String { return self._s[3078]! }
+ public var Checkout_PayWithFaceId: String { return self._s[3079]! }
+ public var Channel_BanList_BlockedTitle: String { return self._s[3080]! }
+ public var SettingsSearch_Synonyms_Notifications_InAppNotificationsSound: String { return self._s[3082]! }
+ public var Checkout_WebConfirmation_Title: String { return self._s[3083]! }
+ public var Notifications_MessageNotificationsAlert: String { return self._s[3084]! }
public func Activity_RemindAboutGroup(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3082]!, self._r[3082]!, [_0])
+ return formatWithArgumentRanges(self._s[3085]!, self._r[3085]!, [_0])
}
- public var Profile_AddToExisting: String { return self._s[3084]! }
+ public var Profile_AddToExisting: String { return self._s[3087]! }
public func Profile_CreateEncryptedChatOutdatedError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3085]!, self._r[3085]!, [_0, _1])
+ return formatWithArgumentRanges(self._s[3088]!, self._r[3088]!, [_0, _1])
}
- public var Cache_Files: String { return self._s[3087]! }
- public var Permissions_PrivacyPolicy: String { return self._s[3088]! }
- public var SocksProxySetup_ConnectAndSave: String { return self._s[3089]! }
- public var UserInfo_NotificationsDefaultDisabled: String { return self._s[3090]! }
- public var AutoDownloadSettings_TypeContacts: String { return self._s[3092]! }
- public var Appearance_ThemePreview_ChatList_1_Text: String { return self._s[3094]! }
- public var Calls_NoCallsPlaceholder: String { return self._s[3095]! }
- public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[3096]! }
- public var VoiceOver_AttachMedia: String { return self._s[3098]! }
- public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[3099]! }
+ public var Cache_Files: String { return self._s[3090]! }
+ public var Permissions_PrivacyPolicy: String { return self._s[3091]! }
+ public var SocksProxySetup_ConnectAndSave: String { return self._s[3092]! }
+ public var UserInfo_NotificationsDefaultDisabled: String { return self._s[3093]! }
+ public var AutoDownloadSettings_TypeContacts: String { return self._s[3095]! }
+ public var Appearance_ThemePreview_ChatList_1_Text: String { return self._s[3097]! }
+ public var Calls_NoCallsPlaceholder: String { return self._s[3098]! }
+ public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[3099]! }
+ public var VoiceOver_AttachMedia: String { return self._s[3101]! }
+ public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[3102]! }
public func PUSH_CHAT_MESSAGE_INVOICE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3100]!, self._r[3100]!, [_1, _2, _3])
+ return formatWithArgumentRanges(self._s[3103]!, self._r[3103]!, [_1, _2, _3])
}
- public var SettingsSearch_Synonyms_Notifications_GroupNotificationsSound: String { return self._s[3101]! }
- public var Conversation_SetReminder_Title: String { return self._s[3102]! }
- public var Passport_FieldAddressHelp: String { return self._s[3103]! }
- public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[3104]! }
- public var PUSH_REMINDER_TITLE: String { return self._s[3105]! }
+ public var SettingsSearch_Synonyms_Notifications_GroupNotificationsSound: String { return self._s[3104]! }
+ public var Conversation_SetReminder_Title: String { return self._s[3105]! }
+ public var Passport_FieldAddressHelp: String { return self._s[3106]! }
+ public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[3107]! }
+ public var PUSH_REMINDER_TITLE: String { return self._s[3108]! }
public func Login_TermsOfService_ProceedBot(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3106]!, self._r[3106]!, [_0])
+ return formatWithArgumentRanges(self._s[3109]!, self._r[3109]!, [_0])
}
- public var Channel_AdminLog_EmptyTitle: String { return self._s[3107]! }
- public var Privacy_Calls_NeverAllow_Title: String { return self._s[3108]! }
- public var Login_UnknownError: String { return self._s[3109]! }
- public var Group_UpgradeNoticeText2: String { return self._s[3112]! }
- public var Watch_Compose_AddContact: String { return self._s[3113]! }
- public var Web_Error: String { return self._s[3114]! }
- public var Gif_Search: String { return self._s[3115]! }
- public var Profile_MessageLifetime1h: String { return self._s[3116]! }
- public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[3117]! }
- public var Channel_Username_CheckingUsername: String { return self._s[3118]! }
- public var CallFeedback_ReasonSilentRemote: String { return self._s[3119]! }
- public var AutoDownloadSettings_TypeChannels: String { return self._s[3120]! }
- public var Channel_AboutItem: String { return self._s[3121]! }
- public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[3123]! }
- public var VoiceOver_Chat_VoiceMessage: String { return self._s[3124]! }
- public var GroupInfo_SharedMedia: String { return self._s[3125]! }
+ public var Channel_AdminLog_EmptyTitle: String { return self._s[3110]! }
+ public var Privacy_Calls_NeverAllow_Title: String { return self._s[3111]! }
+ public var Login_UnknownError: String { return self._s[3112]! }
+ public var Group_UpgradeNoticeText2: String { return self._s[3115]! }
+ public var Watch_Compose_AddContact: String { return self._s[3116]! }
+ public var Web_Error: String { return self._s[3117]! }
+ public var Gif_Search: String { return self._s[3118]! }
+ public var Profile_MessageLifetime1h: String { return self._s[3119]! }
+ public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[3120]! }
+ public var Channel_Username_CheckingUsername: String { return self._s[3121]! }
+ public var CallFeedback_ReasonSilentRemote: String { return self._s[3122]! }
+ public var AutoDownloadSettings_TypeChannels: String { return self._s[3123]! }
+ public var Channel_AboutItem: String { return self._s[3124]! }
+ public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[3126]! }
+ public var VoiceOver_Chat_VoiceMessage: String { return self._s[3127]! }
+ public var GroupInfo_SharedMedia: String { return self._s[3128]! }
public func Channel_AdminLog_MessagePromotedName(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3126]!, self._r[3126]!, [_1])
+ return formatWithArgumentRanges(self._s[3129]!, self._r[3129]!, [_1])
}
- public var Call_PhoneCallInProgressMessage: String { return self._s[3127]! }
+ public var Call_PhoneCallInProgressMessage: String { return self._s[3130]! }
public func PUSH_CHANNEL_ALBUM(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3128]!, self._r[3128]!, [_1])
+ return formatWithArgumentRanges(self._s[3131]!, self._r[3131]!, [_1])
}
- public var ChatList_UndoArchiveRevealedText: String { return self._s[3129]! }
- public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[3130]! }
- public var Conversation_SearchByName_Placeholder: String { return self._s[3131]! }
- public var CreatePoll_AddOption: String { return self._s[3132]! }
- public var GroupInfo_Permissions_SearchPlaceholder: String { return self._s[3133]! }
- public var Group_UpgradeNoticeHeader: String { return self._s[3134]! }
- public var Channel_Management_AddModerator: String { return self._s[3135]! }
- public var AutoDownloadSettings_MaxFileSize: String { return self._s[3136]! }
- public var StickerPacksSettings_ShowStickersButton: String { return self._s[3137]! }
- public var NotificationsSound_Hello: String { return self._s[3138]! }
- public var SocksProxySetup_SavedProxies: String { return self._s[3139]! }
- public var Channel_Stickers_Placeholder: String { return self._s[3141]! }
+ public var ChatList_UndoArchiveRevealedText: String { return self._s[3132]! }
+ public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[3133]! }
+ public var Conversation_SearchByName_Placeholder: String { return self._s[3134]! }
+ public var CreatePoll_AddOption: String { return self._s[3135]! }
+ public var GroupInfo_Permissions_SearchPlaceholder: String { return self._s[3136]! }
+ public var Group_UpgradeNoticeHeader: String { return self._s[3137]! }
+ public var Channel_Management_AddModerator: String { return self._s[3138]! }
+ public var AutoDownloadSettings_MaxFileSize: String { return self._s[3139]! }
+ public var StickerPacksSettings_ShowStickersButton: String { return self._s[3140]! }
+ public var Wallet_Info_RefreshErrorNetworkText: String { return self._s[3141]! }
+ public var NotificationsSound_Hello: String { return self._s[3142]! }
+ public var SocksProxySetup_SavedProxies: String { return self._s[3143]! }
+ public var Channel_Stickers_Placeholder: String { return self._s[3145]! }
public func Login_EmailCodeBody(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3142]!, self._r[3142]!, [_0])
+ return formatWithArgumentRanges(self._s[3146]!, self._r[3146]!, [_0])
}
- public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[3143]! }
- public var Channel_Management_AddModeratorHelp: String { return self._s[3144]! }
- public var ContactInfo_BirthdayLabel: String { return self._s[3145]! }
- public var ChangePhoneNumberCode_RequestingACall: String { return self._s[3146]! }
- public var AutoDownloadSettings_Channels: String { return self._s[3147]! }
- public var Passport_Language_mn: String { return self._s[3148]! }
- public var Notifications_ResetAllNotificationsHelp: String { return self._s[3151]! }
- public var GroupInfo_Permissions_SlowmodeValue_Off: String { return self._s[3152]! }
- public var Passport_Language_ja: String { return self._s[3154]! }
- public var Settings_About_Title: String { return self._s[3155]! }
- public var Settings_NotificationsAndSounds: String { return self._s[3156]! }
- public var ChannelInfo_DeleteGroup: String { return self._s[3157]! }
- public var Settings_BlockedUsers: String { return self._s[3158]! }
+ public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[3147]! }
+ public var Channel_Management_AddModeratorHelp: String { return self._s[3148]! }
+ public var ContactInfo_BirthdayLabel: String { return self._s[3149]! }
+ public var ChangePhoneNumberCode_RequestingACall: String { return self._s[3150]! }
+ public var AutoDownloadSettings_Channels: String { return self._s[3151]! }
+ public var Passport_Language_mn: String { return self._s[3152]! }
+ public var Notifications_ResetAllNotificationsHelp: String { return self._s[3155]! }
+ public var GroupInfo_Permissions_SlowmodeValue_Off: String { return self._s[3156]! }
+ public var Passport_Language_ja: String { return self._s[3158]! }
+ public var Settings_About_Title: String { return self._s[3159]! }
+ public var Settings_NotificationsAndSounds: String { return self._s[3160]! }
+ public var ChannelInfo_DeleteGroup: String { return self._s[3161]! }
+ public var Settings_BlockedUsers: String { return self._s[3162]! }
public func Time_MonthOfYear_m4(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3159]!, self._r[3159]!, [_0])
+ return formatWithArgumentRanges(self._s[3163]!, self._r[3163]!, [_0])
}
- public var EditTheme_Create_Preview_OutgoingText: String { return self._s[3160]! }
- public var AutoDownloadSettings_PreloadVideo: String { return self._s[3161]! }
- public var Passport_Address_AddResidentialAddress: String { return self._s[3162]! }
- public var Channel_Username_Title: String { return self._s[3163]! }
+ public var EditTheme_Create_Preview_OutgoingText: String { return self._s[3164]! }
+ public var AutoDownloadSettings_PreloadVideo: String { return self._s[3165]! }
+ public var Passport_Address_AddResidentialAddress: String { return self._s[3166]! }
+ public var Channel_Username_Title: String { return self._s[3167]! }
public func Notification_RemovedGroupPhoto(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3164]!, self._r[3164]!, [_0])
+ return formatWithArgumentRanges(self._s[3168]!, self._r[3168]!, [_0])
}
- public var AttachmentMenu_File: String { return self._s[3166]! }
- public var AppleWatch_Title: String { return self._s[3167]! }
- public var Activity_RecordingVideoMessage: String { return self._s[3168]! }
+ public var AttachmentMenu_File: String { return self._s[3170]! }
+ public var AppleWatch_Title: String { return self._s[3171]! }
+ public var Activity_RecordingVideoMessage: String { return self._s[3172]! }
public func Channel_DiscussionGroup_PublicChannelLink(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3169]!, self._r[3169]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3173]!, self._r[3173]!, [_1, _2])
}
- public var Weekday_Saturday: String { return self._s[3170]! }
- public var WallpaperPreview_SwipeColorsTopText: String { return self._s[3171]! }
- public var Profile_CreateEncryptedChatError: String { return self._s[3172]! }
- public var Common_Next: String { return self._s[3174]! }
- public var Channel_Stickers_YourStickers: String { return self._s[3176]! }
- public var Message_Theme: String { return self._s[3177]! }
- public var Call_AudioRouteHeadphones: String { return self._s[3178]! }
- public var TwoStepAuth_EnterPasswordForgot: String { return self._s[3180]! }
- public var Watch_Contacts_NoResults: String { return self._s[3182]! }
- public var PhotoEditor_TintTool: String { return self._s[3185]! }
- public var LoginPassword_ResetAccount: String { return self._s[3187]! }
- public var Settings_SavedMessages: String { return self._s[3188]! }
- public var SettingsSearch_Synonyms_Appearance_Animations: String { return self._s[3189]! }
- public var Bot_GenericSupportStatus: String { return self._s[3190]! }
- public var StickerPack_Add: String { return self._s[3191]! }
- public var Checkout_TotalAmount: String { return self._s[3192]! }
- public var Your_cards_number_is_invalid: String { return self._s[3193]! }
- public var SettingsSearch_Synonyms_Appearance_AutoNightTheme: String { return self._s[3194]! }
- public var VoiceOver_Chat_VideoMessage: String { return self._s[3195]! }
+ public var Weekday_Saturday: String { return self._s[3174]! }
+ public var WallpaperPreview_SwipeColorsTopText: String { return self._s[3175]! }
+ public var Profile_CreateEncryptedChatError: String { return self._s[3176]! }
+ public var Common_Next: String { return self._s[3178]! }
+ public var Channel_Stickers_YourStickers: String { return self._s[3180]! }
+ public var Message_Theme: String { return self._s[3181]! }
+ public var Call_AudioRouteHeadphones: String { return self._s[3182]! }
+ public var TwoStepAuth_EnterPasswordForgot: String { return self._s[3184]! }
+ public var Watch_Contacts_NoResults: String { return self._s[3186]! }
+ public var PhotoEditor_TintTool: String { return self._s[3189]! }
+ public var LoginPassword_ResetAccount: String { return self._s[3191]! }
+ public var Settings_SavedMessages: String { return self._s[3192]! }
+ public var SettingsSearch_Synonyms_Appearance_Animations: String { return self._s[3193]! }
+ public var Bot_GenericSupportStatus: String { return self._s[3194]! }
+ public var StickerPack_Add: String { return self._s[3195]! }
+ public var Checkout_TotalAmount: String { return self._s[3196]! }
+ public var Your_cards_number_is_invalid: String { return self._s[3197]! }
+ public var SettingsSearch_Synonyms_Appearance_AutoNightTheme: String { return self._s[3198]! }
+ public var VoiceOver_Chat_VideoMessage: String { return self._s[3199]! }
public func ChangePhoneNumberCode_CallTimer(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3196]!, self._r[3196]!, [_0])
+ return formatWithArgumentRanges(self._s[3200]!, self._r[3200]!, [_0])
}
public func GroupPermission_AddedInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3197]!, self._r[3197]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3201]!, self._r[3201]!, [_1, _2])
}
- public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[3198]! }
+ public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[3202]! }
public func PUSH_CHAT_PHOTO_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3200]!, self._r[3200]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3204]!, self._r[3204]!, [_1, _2])
}
public func Conversation_RestrictedTextTimed(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3201]!, self._r[3201]!, [_0])
+ return formatWithArgumentRanges(self._s[3205]!, self._r[3205]!, [_0])
}
- public var GroupInfo_InviteLink_ShareLink: String { return self._s[3202]! }
- public var StickerPack_Share: String { return self._s[3203]! }
- public var Passport_DeleteAddress: String { return self._s[3204]! }
- public var Settings_Passport: String { return self._s[3205]! }
- public var SharedMedia_EmptyFilesText: String { return self._s[3206]! }
- public var Conversation_DeleteMessagesForMe: String { return self._s[3207]! }
- public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[3208]! }
- public var Contacts_PermissionsText: String { return self._s[3209]! }
- public var Group_Setup_HistoryVisible: String { return self._s[3210]! }
- public var Passport_Address_AddRentalAgreement: String { return self._s[3212]! }
- public var SocksProxySetup_Title: String { return self._s[3213]! }
- public var Notification_Mute1h: String { return self._s[3214]! }
+ public var GroupInfo_InviteLink_ShareLink: String { return self._s[3206]! }
+ public var StickerPack_Share: String { return self._s[3207]! }
+ public var Passport_DeleteAddress: String { return self._s[3208]! }
+ public var Settings_Passport: String { return self._s[3209]! }
+ public var SharedMedia_EmptyFilesText: String { return self._s[3210]! }
+ public var Conversation_DeleteMessagesForMe: String { return self._s[3211]! }
+ public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[3212]! }
+ public var Contacts_PermissionsText: String { return self._s[3213]! }
+ public var Group_Setup_HistoryVisible: String { return self._s[3214]! }
+ public var Passport_Address_AddRentalAgreement: String { return self._s[3216]! }
+ public var SocksProxySetup_Title: String { return self._s[3217]! }
+ public var Notification_Mute1h: String { return self._s[3218]! }
public func Passport_Email_CodeHelp(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3215]!, self._r[3215]!, [_0])
+ return formatWithArgumentRanges(self._s[3219]!, self._r[3219]!, [_0])
}
- public var NotificationSettings_ShowNotificationsAllAccountsInfoOff: String { return self._s[3217]! }
+ public var NotificationSettings_ShowNotificationsAllAccountsInfoOff: String { return self._s[3221]! }
public func PUSH_PINNED_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3218]!, self._r[3218]!, [_1])
+ return formatWithArgumentRanges(self._s[3222]!, self._r[3222]!, [_1])
}
- public var FastTwoStepSetup_PasswordSection: String { return self._s[3219]! }
- public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[3222]! }
- public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[3224]! }
- public var DialogList_NoMessagesText: String { return self._s[3225]! }
- public var Privacy_ContactsResetConfirmation: String { return self._s[3226]! }
- public var Privacy_Calls_P2PHelp: String { return self._s[3227]! }
- public var Channel_DiscussionGroup_SearchPlaceholder: String { return self._s[3229]! }
- public var Your_cards_expiration_year_is_invalid: String { return self._s[3230]! }
- public var Common_TakePhotoOrVideo: String { return self._s[3231]! }
- public var Wallet_Words_Text: String { return self._s[3232]! }
- public var Call_StatusBusy: String { return self._s[3233]! }
- public var Conversation_PinnedMessage: String { return self._s[3234]! }
- public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[3235]! }
- public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[3236]! }
- public var Undo_ChatCleared: String { return self._s[3237]! }
- public var AppleWatch_ReplyPresets: String { return self._s[3238]! }
- public var Passport_DiscardMessageDescription: String { return self._s[3240]! }
- public var Login_NetworkError: String { return self._s[3241]! }
+ public var FastTwoStepSetup_PasswordSection: String { return self._s[3223]! }
+ public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[3226]! }
+ public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[3228]! }
+ public var DialogList_NoMessagesText: String { return self._s[3229]! }
+ public var Privacy_ContactsResetConfirmation: String { return self._s[3230]! }
+ public var Privacy_Calls_P2PHelp: String { return self._s[3231]! }
+ public var Channel_DiscussionGroup_SearchPlaceholder: String { return self._s[3233]! }
+ public var Your_cards_expiration_year_is_invalid: String { return self._s[3234]! }
+ public var Common_TakePhotoOrVideo: String { return self._s[3235]! }
+ public var Wallet_Words_Text: String { return self._s[3236]! }
+ public var Call_StatusBusy: String { return self._s[3237]! }
+ public var Conversation_PinnedMessage: String { return self._s[3238]! }
+ public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[3239]! }
+ public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[3240]! }
+ public var Undo_ChatCleared: String { return self._s[3241]! }
+ public var AppleWatch_ReplyPresets: String { return self._s[3242]! }
+ public var Passport_DiscardMessageDescription: String { return self._s[3244]! }
+ public var Login_NetworkError: String { return self._s[3245]! }
public func Notification_PinnedRoundMessage(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3242]!, self._r[3242]!, [_0])
+ return formatWithArgumentRanges(self._s[3246]!, self._r[3246]!, [_0])
}
public func Channel_AdminLog_MessageRemovedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3243]!, self._r[3243]!, [_0])
+ return formatWithArgumentRanges(self._s[3247]!, self._r[3247]!, [_0])
}
- public var SocksProxySetup_PasswordPlaceholder: String { return self._s[3244]! }
- public var Wallet_WordCheck_ViewWords: String { return self._s[3246]! }
- public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[3247]! }
+ public var SocksProxySetup_PasswordPlaceholder: String { return self._s[3248]! }
+ public var Wallet_WordCheck_ViewWords: String { return self._s[3250]! }
+ public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[3251]! }
public func Watch_LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3249]!, self._r[3249]!, [_0])
+ return formatWithArgumentRanges(self._s[3253]!, self._r[3253]!, [_0])
}
- public var Call_ConnectionErrorMessage: String { return self._s[3250]! }
- public var VoiceOver_Chat_Music: String { return self._s[3251]! }
- public var SettingsSearch_Synonyms_Notifications_MessageNotificationsSound: String { return self._s[3252]! }
- public var Compose_GroupTokenListPlaceholder: String { return self._s[3254]! }
- public var ConversationMedia_Title: String { return self._s[3255]! }
- public var EncryptionKey_Title: String { return self._s[3257]! }
- public var TwoStepAuth_EnterPasswordTitle: String { return self._s[3258]! }
- public var Notification_Exceptions_AddException: String { return self._s[3259]! }
- public var PrivacySettings_BlockedPeersEmpty: String { return self._s[3260]! }
- public var Profile_MessageLifetime1m: String { return self._s[3261]! }
+ public var Call_ConnectionErrorMessage: String { return self._s[3254]! }
+ public var VoiceOver_Chat_Music: String { return self._s[3255]! }
+ public var SettingsSearch_Synonyms_Notifications_MessageNotificationsSound: String { return self._s[3256]! }
+ public var Compose_GroupTokenListPlaceholder: String { return self._s[3258]! }
+ public var ConversationMedia_Title: String { return self._s[3259]! }
+ public var EncryptionKey_Title: String { return self._s[3261]! }
+ public var TwoStepAuth_EnterPasswordTitle: String { return self._s[3262]! }
+ public var Notification_Exceptions_AddException: String { return self._s[3263]! }
+ public var PrivacySettings_BlockedPeersEmpty: String { return self._s[3264]! }
+ public var Profile_MessageLifetime1m: String { return self._s[3265]! }
public func Channel_AdminLog_MessageUnkickedName(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3262]!, self._r[3262]!, [_1])
+ return formatWithArgumentRanges(self._s[3266]!, self._r[3266]!, [_1])
}
- public var Month_GenMay: String { return self._s[3263]! }
+ public var Month_GenMay: String { return self._s[3267]! }
public func LiveLocationUpdated_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3264]!, self._r[3264]!, [_0])
+ return formatWithArgumentRanges(self._s[3268]!, self._r[3268]!, [_0])
}
- public var PeopleNearby_Users: String { return self._s[3265]! }
- public var Wallet_Send_AddressInfo: String { return self._s[3266]! }
- public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[3267]! }
- public var AutoDownloadSettings_ResetSettings: String { return self._s[3268]! }
- public var Conversation_EmptyPlaceholder: String { return self._s[3270]! }
- public var Passport_Address_AddPassportRegistration: String { return self._s[3271]! }
- public var Notifications_ChannelNotificationsAlert: String { return self._s[3272]! }
- public var ChatSettings_AutoDownloadUsingCellular: String { return self._s[3273]! }
- public var Camera_TapAndHoldForVideo: String { return self._s[3274]! }
- public var Channel_JoinChannel: String { return self._s[3276]! }
- public var Appearance_Animations: String { return self._s[3279]! }
+ public var PeopleNearby_Users: String { return self._s[3269]! }
+ public var Wallet_Send_AddressInfo: String { return self._s[3270]! }
+ public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[3271]! }
+ public var AutoDownloadSettings_ResetSettings: String { return self._s[3272]! }
+ public var Conversation_EmptyPlaceholder: String { return self._s[3274]! }
+ public var Passport_Address_AddPassportRegistration: String { return self._s[3275]! }
+ public var Notifications_ChannelNotificationsAlert: String { return self._s[3276]! }
+ public var ChatSettings_AutoDownloadUsingCellular: String { return self._s[3277]! }
+ public var Camera_TapAndHoldForVideo: String { return self._s[3278]! }
+ public var Channel_JoinChannel: String { return self._s[3280]! }
+ public var Appearance_Animations: String { return self._s[3283]! }
public func Notification_MessageLifetimeChanged(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3280]!, self._r[3280]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3284]!, self._r[3284]!, [_1, _2])
}
- public var Stickers_GroupStickers: String { return self._s[3282]! }
- public var Appearance_ShareTheme: String { return self._s[3283]! }
- public var ConvertToSupergroup_HelpTitle: String { return self._s[3285]! }
- public var Passport_Address_Street: String { return self._s[3286]! }
- public var Conversation_AddContact: String { return self._s[3287]! }
- public var Login_PhonePlaceholder: String { return self._s[3288]! }
- public var Channel_Members_InviteLink: String { return self._s[3290]! }
- public var Bot_Stop: String { return self._s[3291]! }
- public var SettingsSearch_Synonyms_Proxy_UseForCalls: String { return self._s[3293]! }
- public var Notification_PassportValueAddress: String { return self._s[3294]! }
- public var Month_ShortJuly: String { return self._s[3295]! }
- public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[3296]! }
- public var Channel_AdminLog_BanSendMedia: String { return self._s[3297]! }
- public var Passport_Identity_ReverseSide: String { return self._s[3298]! }
- public var Watch_Stickers_Recents: String { return self._s[3301]! }
- public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[3303]! }
- public var Map_SendThisLocation: String { return self._s[3304]! }
+ public var Stickers_GroupStickers: String { return self._s[3286]! }
+ public var Appearance_ShareTheme: String { return self._s[3287]! }
+ public var ConvertToSupergroup_HelpTitle: String { return self._s[3289]! }
+ public var Passport_Address_Street: String { return self._s[3290]! }
+ public var Conversation_AddContact: String { return self._s[3291]! }
+ public var Login_PhonePlaceholder: String { return self._s[3292]! }
+ public var Channel_Members_InviteLink: String { return self._s[3294]! }
+ public var Bot_Stop: String { return self._s[3295]! }
+ public var SettingsSearch_Synonyms_Proxy_UseForCalls: String { return self._s[3297]! }
+ public var Notification_PassportValueAddress: String { return self._s[3298]! }
+ public var Month_ShortJuly: String { return self._s[3299]! }
+ public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[3300]! }
+ public var Channel_AdminLog_BanSendMedia: String { return self._s[3301]! }
+ public var Passport_Identity_ReverseSide: String { return self._s[3302]! }
+ public var Watch_Stickers_Recents: String { return self._s[3305]! }
+ public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[3307]! }
+ public var Map_SendThisLocation: String { return self._s[3308]! }
public func Time_MonthOfYear_m1(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3305]!, self._r[3305]!, [_0])
- }
- public func InviteText_SingleContact(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3306]!, self._r[3306]!, [_0])
- }
- public var ConvertToSupergroup_Note: String { return self._s[3307]! }
- public var Wallet_Intro_NotNow: String { return self._s[3308]! }
- public func FileSize_MB(_ _0: String) -> (String, [(Int, NSRange)]) {
return formatWithArgumentRanges(self._s[3309]!, self._r[3309]!, [_0])
}
- public var NetworkUsageSettings_GeneralDataSection: String { return self._s[3310]! }
+ public func InviteText_SingleContact(_ _0: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[3310]!, self._r[3310]!, [_0])
+ }
+ public var ConvertToSupergroup_Note: String { return self._s[3311]! }
+ public var Wallet_Intro_NotNow: String { return self._s[3312]! }
+ public func FileSize_MB(_ _0: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[3313]!, self._r[3313]!, [_0])
+ }
+ public var NetworkUsageSettings_GeneralDataSection: String { return self._s[3314]! }
public func Compatibility_SecretMediaVersionTooLow(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3311]!, self._r[3311]!, [_0, _1])
+ return formatWithArgumentRanges(self._s[3315]!, self._r[3315]!, [_0, _1])
}
- public var Login_CallRequestState3: String { return self._s[3313]! }
- public var Wallpaper_SearchShort: String { return self._s[3314]! }
- public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[3316]! }
- public var PasscodeSettings_UnlockWithFaceId: String { return self._s[3317]! }
- public var Channel_BotDoesntSupportGroups: String { return self._s[3318]! }
+ public var Login_CallRequestState3: String { return self._s[3317]! }
+ public var Wallpaper_SearchShort: String { return self._s[3318]! }
+ public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[3320]! }
+ public var PasscodeSettings_UnlockWithFaceId: String { return self._s[3321]! }
+ public var Channel_BotDoesntSupportGroups: String { return self._s[3322]! }
public func PUSH_CHAT_MESSAGE_GEOLIVE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3319]!, self._r[3319]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3323]!, self._r[3323]!, [_1, _2])
}
- public var Channel_AdminLogFilter_Title: String { return self._s[3320]! }
- public var Notifications_GroupNotificationsExceptions: String { return self._s[3325]! }
+ public var Channel_AdminLogFilter_Title: String { return self._s[3324]! }
+ public var Notifications_GroupNotificationsExceptions: String { return self._s[3329]! }
public func FileSize_B(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3326]!, self._r[3326]!, [_0])
+ return formatWithArgumentRanges(self._s[3330]!, self._r[3330]!, [_0])
}
- public var Passport_CorrectErrors: String { return self._s[3327]! }
- public var VoiceOver_Chat_YourAnonymousPoll: String { return self._s[3328]! }
+ public var Passport_CorrectErrors: String { return self._s[3331]! }
+ public var VoiceOver_Chat_YourAnonymousPoll: String { return self._s[3332]! }
public func Channel_MessageTitleUpdated(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3329]!, self._r[3329]!, [_0])
+ return formatWithArgumentRanges(self._s[3333]!, self._r[3333]!, [_0])
}
- public var Map_SendMyCurrentLocation: String { return self._s[3330]! }
- public var Channel_DiscussionGroup: String { return self._s[3331]! }
+ public var Map_SendMyCurrentLocation: String { return self._s[3334]! }
+ public var Channel_DiscussionGroup: String { return self._s[3335]! }
public func PUSH_PINNED_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3332]!, self._r[3332]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3336]!, self._r[3336]!, [_1, _2])
}
- public var SharedMedia_SearchNoResults: String { return self._s[3333]! }
- public var Permissions_NotificationsText_v0: String { return self._s[3334]! }
- public var Channel_EditAdmin_PermissionDeleteMessagesOfOthers: String { return self._s[3335]! }
- public var Appearance_AppIcon: String { return self._s[3336]! }
- public var Appearance_ThemePreview_ChatList_3_AuthorName: String { return self._s[3337]! }
- public var LoginPassword_FloodError: String { return self._s[3338]! }
- public var Group_Setup_HistoryHiddenHelp: String { return self._s[3340]! }
+ public var SharedMedia_SearchNoResults: String { return self._s[3337]! }
+ public var Permissions_NotificationsText_v0: String { return self._s[3338]! }
+ public var Channel_EditAdmin_PermissionDeleteMessagesOfOthers: String { return self._s[3339]! }
+ public var Appearance_AppIcon: String { return self._s[3340]! }
+ public var Appearance_ThemePreview_ChatList_3_AuthorName: String { return self._s[3341]! }
+ public var LoginPassword_FloodError: String { return self._s[3342]! }
+ public var Group_Setup_HistoryHiddenHelp: String { return self._s[3344]! }
public func TwoStepAuth_PendingEmailHelp(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3341]!, self._r[3341]!, [_0])
- }
- public var Passport_Language_bn: String { return self._s[3342]! }
- public func DialogList_SingleUploadingPhotoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3343]!, self._r[3343]!, [_0])
- }
- public var ChatList_Context_Pin: String { return self._s[3344]! }
- public func Notification_PinnedAudioMessage(_ _0: String) -> (String, [(Int, NSRange)]) {
return formatWithArgumentRanges(self._s[3345]!, self._r[3345]!, [_0])
}
+ public var Passport_Language_bn: String { return self._s[3346]! }
+ public func DialogList_SingleUploadingPhotoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[3347]!, self._r[3347]!, [_0])
+ }
+ public var ChatList_Context_Pin: String { return self._s[3348]! }
+ public func Notification_PinnedAudioMessage(_ _0: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[3349]!, self._r[3349]!, [_0])
+ }
public func Channel_AdminLog_MessageChangedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3346]!, self._r[3346]!, [_0])
+ return formatWithArgumentRanges(self._s[3350]!, self._r[3350]!, [_0])
}
- public var GroupInfo_InvitationLinkGroupFull: String { return self._s[3349]! }
- public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[3351]! }
- public var Contacts_PermissionsAllow: String { return self._s[3352]! }
- public var ReportPeer_ReasonCopyright: String { return self._s[3353]! }
- public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[3354]! }
- public var WallpaperPreview_Pattern: String { return self._s[3355]! }
- public var Paint_Duplicate: String { return self._s[3356]! }
- public var Passport_Address_Country: String { return self._s[3357]! }
- public var Notification_RenamedChannel: String { return self._s[3359]! }
- public var ChatList_Context_Unmute: String { return self._s[3360]! }
- public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[3361]! }
- public var Group_MessagePhotoUpdated: String { return self._s[3362]! }
- public var Channel_BanUser_PermissionSendMedia: String { return self._s[3363]! }
- public var Conversation_ContextMenuBan: String { return self._s[3364]! }
- public var TwoStepAuth_EmailSent: String { return self._s[3365]! }
- public var MessagePoll_NoVotes: String { return self._s[3366]! }
- public var Passport_Language_is: String { return self._s[3367]! }
- public var PeopleNearby_UsersEmpty: String { return self._s[3369]! }
- public var Tour_Text5: String { return self._s[3370]! }
+ public var GroupInfo_InvitationLinkGroupFull: String { return self._s[3353]! }
+ public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[3355]! }
+ public var Contacts_PermissionsAllow: String { return self._s[3356]! }
+ public var ReportPeer_ReasonCopyright: String { return self._s[3357]! }
+ public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[3358]! }
+ public var WallpaperPreview_Pattern: String { return self._s[3359]! }
+ public var Paint_Duplicate: String { return self._s[3360]! }
+ public var Passport_Address_Country: String { return self._s[3361]! }
+ public var Notification_RenamedChannel: String { return self._s[3363]! }
+ public var ChatList_Context_Unmute: String { return self._s[3364]! }
+ public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[3365]! }
+ public var Group_MessagePhotoUpdated: String { return self._s[3366]! }
+ public var Channel_BanUser_PermissionSendMedia: String { return self._s[3367]! }
+ public var Conversation_ContextMenuBan: String { return self._s[3368]! }
+ public var TwoStepAuth_EmailSent: String { return self._s[3369]! }
+ public var MessagePoll_NoVotes: String { return self._s[3370]! }
+ public var Passport_Language_is: String { return self._s[3371]! }
+ public var PeopleNearby_UsersEmpty: String { return self._s[3373]! }
+ public var Tour_Text5: String { return self._s[3374]! }
public func Call_GroupFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3372]!, self._r[3372]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3376]!, self._r[3376]!, [_1, _2])
}
- public var Undo_SecretChatDeleted: String { return self._s[3373]! }
- public var SocksProxySetup_ShareQRCode: String { return self._s[3374]! }
+ public var Undo_SecretChatDeleted: String { return self._s[3377]! }
+ public var SocksProxySetup_ShareQRCode: String { return self._s[3378]! }
public func VoiceOver_Chat_Size(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3375]!, self._r[3375]!, [_0])
+ return formatWithArgumentRanges(self._s[3379]!, self._r[3379]!, [_0])
}
- public var LogoutOptions_ChangePhoneNumberText: String { return self._s[3376]! }
- public var Paint_Edit: String { return self._s[3378]! }
- public var ScheduledMessages_ReminderNotification: String { return self._s[3380]! }
- public var Undo_DeletedGroup: String { return self._s[3382]! }
- public var LoginPassword_ForgotPassword: String { return self._s[3383]! }
- public var Wallet_WordImport_IncorrectTitle: String { return self._s[3384]! }
- public var GroupInfo_GroupNamePlaceholder: String { return self._s[3385]! }
+ public var LogoutOptions_ChangePhoneNumberText: String { return self._s[3380]! }
+ public var Paint_Edit: String { return self._s[3382]! }
+ public var ScheduledMessages_ReminderNotification: String { return self._s[3384]! }
+ public var Undo_DeletedGroup: String { return self._s[3386]! }
+ public var LoginPassword_ForgotPassword: String { return self._s[3387]! }
+ public var Wallet_WordImport_IncorrectTitle: String { return self._s[3388]! }
+ public var GroupInfo_GroupNamePlaceholder: String { return self._s[3389]! }
public func Notification_Kicked(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3386]!, self._r[3386]!, [_0, _1])
+ return formatWithArgumentRanges(self._s[3390]!, self._r[3390]!, [_0, _1])
}
- public var Conversation_InputTextCaptionPlaceholder: String { return self._s[3387]! }
- public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[3388]! }
- public var Passport_Language_uz: String { return self._s[3389]! }
- public var Conversation_PinMessageAlertGroup: String { return self._s[3390]! }
- public var SettingsSearch_Synonyms_Privacy_GroupsAndChannels: String { return self._s[3391]! }
- public var Map_StopLiveLocation: String { return self._s[3393]! }
- public var VoiceOver_MessageContextSend: String { return self._s[3395]! }
- public var PasscodeSettings_Help: String { return self._s[3396]! }
- public var NotificationsSound_Input: String { return self._s[3397]! }
- public var Share_Title: String { return self._s[3400]! }
- public var LogoutOptions_Title: String { return self._s[3401]! }
- public var Wallet_Send_AddressText: String { return self._s[3402]! }
- public var Login_TermsOfServiceAgree: String { return self._s[3403]! }
- public var Compose_NewEncryptedChatTitle: String { return self._s[3404]! }
- public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[3405]! }
- public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[3406]! }
- public var EnterPasscode_EnterTitle: String { return self._s[3407]! }
+ public var Conversation_InputTextCaptionPlaceholder: String { return self._s[3391]! }
+ public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[3392]! }
+ public var Passport_Language_uz: String { return self._s[3393]! }
+ public var Conversation_PinMessageAlertGroup: String { return self._s[3394]! }
+ public var SettingsSearch_Synonyms_Privacy_GroupsAndChannels: String { return self._s[3395]! }
+ public var Map_StopLiveLocation: String { return self._s[3397]! }
+ public var VoiceOver_MessageContextSend: String { return self._s[3399]! }
+ public var PasscodeSettings_Help: String { return self._s[3400]! }
+ public var NotificationsSound_Input: String { return self._s[3401]! }
+ public var Share_Title: String { return self._s[3404]! }
+ public var LogoutOptions_Title: String { return self._s[3405]! }
+ public var Wallet_Send_AddressText: String { return self._s[3406]! }
+ public var Login_TermsOfServiceAgree: String { return self._s[3407]! }
+ public var Compose_NewEncryptedChatTitle: String { return self._s[3408]! }
+ public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[3409]! }
+ public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[3410]! }
+ public var EnterPasscode_EnterTitle: String { return self._s[3411]! }
public func Call_PrivacyErrorMessage(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3408]!, self._r[3408]!, [_0])
+ return formatWithArgumentRanges(self._s[3412]!, self._r[3412]!, [_0])
}
- public var Settings_CopyPhoneNumber: String { return self._s[3409]! }
- public var Conversation_AddToContacts: String { return self._s[3410]! }
+ public var Settings_CopyPhoneNumber: String { return self._s[3413]! }
+ public var Conversation_AddToContacts: String { return self._s[3414]! }
public func VoiceOver_Chat_ReplyFrom(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3411]!, self._r[3411]!, [_0])
+ return formatWithArgumentRanges(self._s[3415]!, self._r[3415]!, [_0])
}
- public var NotificationsSound_Keys: String { return self._s[3412]! }
+ public var NotificationsSound_Keys: String { return self._s[3416]! }
public func Call_ParticipantVersionOutdatedError(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3413]!, self._r[3413]!, [_0])
+ return formatWithArgumentRanges(self._s[3417]!, self._r[3417]!, [_0])
}
- public var Notification_MessageLifetime1w: String { return self._s[3414]! }
- public var Message_Video: String { return self._s[3415]! }
- public var AutoDownloadSettings_CellularTitle: String { return self._s[3416]! }
+ public var Notification_MessageLifetime1w: String { return self._s[3418]! }
+ public var Message_Video: String { return self._s[3419]! }
+ public var AutoDownloadSettings_CellularTitle: String { return self._s[3420]! }
public func PUSH_CHANNEL_MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3417]!, self._r[3417]!, [_1])
+ return formatWithArgumentRanges(self._s[3421]!, self._r[3421]!, [_1])
}
- public var Wallet_Receive_AmountInfo: String { return self._s[3420]! }
+ public var Wallet_Receive_AmountInfo: String { return self._s[3424]! }
public func Notification_JoinedChat(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3421]!, self._r[3421]!, [_0])
+ return formatWithArgumentRanges(self._s[3425]!, self._r[3425]!, [_0])
}
public func PrivacySettings_LastSeenContactsPlus(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3422]!, self._r[3422]!, [_0])
+ return formatWithArgumentRanges(self._s[3426]!, self._r[3426]!, [_0])
}
- public var Passport_Language_mk: String { return self._s[3423]! }
- public var CreatePoll_CancelConfirmation: String { return self._s[3424]! }
- public var Conversation_SilentBroadcastTooltipOn: String { return self._s[3426]! }
- public var PrivacyPolicy_Decline: String { return self._s[3427]! }
- public var Passport_Identity_DoesNotExpire: String { return self._s[3428]! }
- public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[3429]! }
- public var Permissions_SiriAllow_v0: String { return self._s[3431]! }
- public var Appearance_ThemeCarouselNight: String { return self._s[3432]! }
+ public var Passport_Language_mk: String { return self._s[3427]! }
+ public var CreatePoll_CancelConfirmation: String { return self._s[3428]! }
+ public var Conversation_SilentBroadcastTooltipOn: String { return self._s[3430]! }
+ public var PrivacyPolicy_Decline: String { return self._s[3431]! }
+ public var Passport_Identity_DoesNotExpire: String { return self._s[3432]! }
+ public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[3433]! }
+ public var Permissions_SiriAllow_v0: String { return self._s[3435]! }
+ public var Appearance_ThemeCarouselNight: String { return self._s[3436]! }
public func LOCAL_CHAT_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3433]!, self._r[3433]!, [_1, "\(_2)"])
+ return formatWithArgumentRanges(self._s[3437]!, self._r[3437]!, [_1, "\(_2)"])
}
public func Notification_RenamedChat(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3434]!, self._r[3434]!, [_0])
+ return formatWithArgumentRanges(self._s[3438]!, self._r[3438]!, [_0])
}
- public var Paint_Regular: String { return self._s[3435]! }
- public var ChatSettings_AutoDownloadReset: String { return self._s[3436]! }
- public var SocksProxySetup_ShareLink: String { return self._s[3437]! }
- public var Wallet_Qr_Title: String { return self._s[3438]! }
- public var BlockedUsers_SelectUserTitle: String { return self._s[3439]! }
- public var VoiceOver_Chat_RecordModeVoiceMessage: String { return self._s[3441]! }
- public var GroupInfo_InviteByLink: String { return self._s[3442]! }
- public var MessageTimer_Custom: String { return self._s[3443]! }
- public var UserInfo_NotificationsDefaultEnabled: String { return self._s[3444]! }
- public var Passport_Address_TypeTemporaryRegistration: String { return self._s[3446]! }
- public var Conversation_SendMessage_SetReminder: String { return self._s[3447]! }
- public var VoiceOver_Chat_Selected: String { return self._s[3448]! }
- public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[3449]! }
- public var Channel_Username_InvalidTaken: String { return self._s[3450]! }
- public var Conversation_ClousStorageInfo_Description3: String { return self._s[3451]! }
- public var Wallet_WordCheck_TryAgain: String { return self._s[3452]! }
- public var Settings_ChatBackground: String { return self._s[3453]! }
- public var Channel_Subscribers_Title: String { return self._s[3454]! }
- public var Wallet_Receive_InvoiceUrlHeader: String { return self._s[3455]! }
- public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[3456]! }
- public var Watch_ConnectionDescription: String { return self._s[3457]! }
- public var ChatList_ArchivedChatsTitle: String { return self._s[3461]! }
- public var Wallpaper_ResetWallpapers: String { return self._s[3462]! }
- public var EditProfile_Title: String { return self._s[3463]! }
- public var NotificationsSound_Bamboo: String { return self._s[3465]! }
- public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[3467]! }
- public var Login_SmsRequestState2: String { return self._s[3468]! }
- public var Passport_Language_ar: String { return self._s[3469]! }
+ public var Paint_Regular: String { return self._s[3439]! }
+ public var ChatSettings_AutoDownloadReset: String { return self._s[3440]! }
+ public var SocksProxySetup_ShareLink: String { return self._s[3441]! }
+ public var Wallet_Qr_Title: String { return self._s[3442]! }
+ public var BlockedUsers_SelectUserTitle: String { return self._s[3443]! }
+ public var VoiceOver_Chat_RecordModeVoiceMessage: String { return self._s[3445]! }
+ public var GroupInfo_InviteByLink: String { return self._s[3446]! }
+ public var MessageTimer_Custom: String { return self._s[3447]! }
+ public var UserInfo_NotificationsDefaultEnabled: String { return self._s[3448]! }
+ public var Passport_Address_TypeTemporaryRegistration: String { return self._s[3450]! }
+ public var Conversation_SendMessage_SetReminder: String { return self._s[3451]! }
+ public var VoiceOver_Chat_Selected: String { return self._s[3452]! }
+ public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[3453]! }
+ public var Channel_Username_InvalidTaken: String { return self._s[3454]! }
+ public var Conversation_ClousStorageInfo_Description3: String { return self._s[3455]! }
+ public var Wallet_WordCheck_TryAgain: String { return self._s[3456]! }
+ public var Settings_ChatBackground: String { return self._s[3457]! }
+ public var Channel_Subscribers_Title: String { return self._s[3458]! }
+ public var Wallet_Receive_InvoiceUrlHeader: String { return self._s[3459]! }
+ public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[3460]! }
+ public var Watch_ConnectionDescription: String { return self._s[3461]! }
+ public var ChatList_ArchivedChatsTitle: String { return self._s[3465]! }
+ public var Wallpaper_ResetWallpapers: String { return self._s[3466]! }
+ public var EditProfile_Title: String { return self._s[3467]! }
+ public var NotificationsSound_Bamboo: String { return self._s[3469]! }
+ public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[3471]! }
+ public var Login_SmsRequestState2: String { return self._s[3472]! }
+ public var Passport_Language_ar: String { return self._s[3473]! }
public func Message_AuthorPinnedGame(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3470]!, self._r[3470]!, [_0])
+ return formatWithArgumentRanges(self._s[3474]!, self._r[3474]!, [_0])
}
- public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[3471]! }
- public var Wallet_Created_Text: String { return self._s[3472]! }
- public var Conversation_MessageDialogEdit: String { return self._s[3473]! }
- public var Wallet_Created_Proceed: String { return self._s[3474]! }
- public var Wallet_Words_Done: String { return self._s[3475]! }
- public var VoiceOver_Media_PlaybackPause: String { return self._s[3476]! }
+ public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[3475]! }
+ public var Wallet_Created_Text: String { return self._s[3476]! }
+ public var Conversation_MessageDialogEdit: String { return self._s[3477]! }
+ public var Wallet_Created_Proceed: String { return self._s[3478]! }
+ public var Wallet_Words_Done: String { return self._s[3479]! }
+ public var VoiceOver_Media_PlaybackPause: String { return self._s[3480]! }
public func PUSH_AUTH_UNKNOWN(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3477]!, self._r[3477]!, [_1])
+ return formatWithArgumentRanges(self._s[3481]!, self._r[3481]!, [_1])
}
- public var Common_Close: String { return self._s[3478]! }
- public var GroupInfo_PublicLink: String { return self._s[3479]! }
- public var Channel_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[3480]! }
- public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[3481]! }
+ public var Common_Close: String { return self._s[3482]! }
+ public var GroupInfo_PublicLink: String { return self._s[3483]! }
+ public var Channel_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[3484]! }
+ public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[3485]! }
public func Channel_AdminLog_MessageToggleInvitesOff(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3485]!, self._r[3485]!, [_0])
+ return formatWithArgumentRanges(self._s[3489]!, self._r[3489]!, [_0])
}
- public var UserInfo_About_Placeholder: String { return self._s[3486]! }
+ public var UserInfo_About_Placeholder: String { return self._s[3490]! }
public func Conversation_FileHowToText(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3487]!, self._r[3487]!, [_0])
- }
- public var GroupInfo_Permissions_SectionTitle: String { return self._s[3488]! }
- public var Channel_Info_Banned: String { return self._s[3490]! }
- public func Time_MonthOfYear_m11(_ _0: String) -> (String, [(Int, NSRange)]) {
return formatWithArgumentRanges(self._s[3491]!, self._r[3491]!, [_0])
}
- public var Appearance_Other: String { return self._s[3492]! }
- public var Passport_Language_my: String { return self._s[3493]! }
- public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[3494]! }
+ public var GroupInfo_Permissions_SectionTitle: String { return self._s[3492]! }
+ public var Channel_Info_Banned: String { return self._s[3494]! }
+ public func Time_MonthOfYear_m11(_ _0: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[3495]!, self._r[3495]!, [_0])
+ }
+ public var Appearance_Other: String { return self._s[3496]! }
+ public var Passport_Language_my: String { return self._s[3497]! }
+ public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[3498]! }
public func Time_PreciseDate_m9(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3495]!, self._r[3495]!, [_1, _2, _3])
+ return formatWithArgumentRanges(self._s[3499]!, self._r[3499]!, [_1, _2, _3])
}
- public var SettingsSearch_Synonyms_Privacy_PasscodeAndFaceId: String { return self._s[3496]! }
- public var Preview_CopyAddress: String { return self._s[3497]! }
+ public var SettingsSearch_Synonyms_Privacy_PasscodeAndFaceId: String { return self._s[3500]! }
+ public var Preview_CopyAddress: String { return self._s[3501]! }
public func DialogList_SinglePlayingGameSuffix(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3498]!, self._r[3498]!, [_0])
+ return formatWithArgumentRanges(self._s[3502]!, self._r[3502]!, [_0])
}
- public var KeyCommand_JumpToPreviousChat: String { return self._s[3499]! }
- public var UserInfo_BotSettings: String { return self._s[3500]! }
- public var LiveLocation_MenuStopAll: String { return self._s[3502]! }
- public var Passport_PasswordCreate: String { return self._s[3503]! }
- public var StickerSettings_MaskContextInfo: String { return self._s[3504]! }
- public var Message_PinnedLocationMessage: String { return self._s[3505]! }
- public var Map_Satellite: String { return self._s[3506]! }
- public var Watch_Message_Unsupported: String { return self._s[3507]! }
- public var Username_TooManyPublicUsernamesError: String { return self._s[3508]! }
- public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[3509]! }
+ public var KeyCommand_JumpToPreviousChat: String { return self._s[3503]! }
+ public var UserInfo_BotSettings: String { return self._s[3504]! }
+ public var LiveLocation_MenuStopAll: String { return self._s[3506]! }
+ public var Passport_PasswordCreate: String { return self._s[3507]! }
+ public var StickerSettings_MaskContextInfo: String { return self._s[3508]! }
+ public var Message_PinnedLocationMessage: String { return self._s[3509]! }
+ public var Map_Satellite: String { return self._s[3510]! }
+ public var Watch_Message_Unsupported: String { return self._s[3511]! }
+ public var Username_TooManyPublicUsernamesError: String { return self._s[3512]! }
+ public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[3513]! }
public func Notification_PinnedTextMessage(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3510]!, self._r[3510]!, [_0, _1])
+ return formatWithArgumentRanges(self._s[3514]!, self._r[3514]!, [_0, _1])
}
public func Conversation_OpenBotLinkText(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3511]!, self._r[3511]!, [_0])
+ return formatWithArgumentRanges(self._s[3515]!, self._r[3515]!, [_0])
}
- public var Wallet_WordImport_Continue: String { return self._s[3512]! }
- public var Notifications_ChannelNotificationsHelp: String { return self._s[3513]! }
- public var Privacy_Calls_P2PContacts: String { return self._s[3514]! }
- public var NotificationsSound_None: String { return self._s[3515]! }
- public var Channel_DiscussionGroup_UnlinkGroup: String { return self._s[3517]! }
- public var AccessDenied_VoiceMicrophone: String { return self._s[3518]! }
+ public var Wallet_WordImport_Continue: String { return self._s[3516]! }
+ public var Notifications_ChannelNotificationsHelp: String { return self._s[3517]! }
+ public var Privacy_Calls_P2PContacts: String { return self._s[3518]! }
+ public var NotificationsSound_None: String { return self._s[3519]! }
+ public var Channel_DiscussionGroup_UnlinkGroup: String { return self._s[3521]! }
+ public var AccessDenied_VoiceMicrophone: String { return self._s[3522]! }
public func ApplyLanguage_ChangeLanguageAlreadyActive(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3519]!, self._r[3519]!, [_1])
+ return formatWithArgumentRanges(self._s[3523]!, self._r[3523]!, [_1])
}
- public var Cache_Indexing: String { return self._s[3520]! }
- public var DialogList_RecentTitlePeople: String { return self._s[3522]! }
- public var DialogList_EncryptionRejected: String { return self._s[3523]! }
- public var GroupInfo_Administrators: String { return self._s[3524]! }
- public var Passport_ScanPassportHelp: String { return self._s[3525]! }
- public var Application_Name: String { return self._s[3526]! }
- public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[3527]! }
- public var Appearance_ThemeCarouselDay: String { return self._s[3529]! }
- public var Passport_Identity_TranslationHelp: String { return self._s[3530]! }
+ public var Cache_Indexing: String { return self._s[3524]! }
+ public var DialogList_RecentTitlePeople: String { return self._s[3526]! }
+ public var DialogList_EncryptionRejected: String { return self._s[3527]! }
+ public var GroupInfo_Administrators: String { return self._s[3528]! }
+ public var Passport_ScanPassportHelp: String { return self._s[3529]! }
+ public var Application_Name: String { return self._s[3530]! }
+ public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[3531]! }
+ public var Appearance_ThemeCarouselDay: String { return self._s[3533]! }
+ public var Passport_Identity_TranslationHelp: String { return self._s[3534]! }
public func VoiceOver_Chat_VideoMessageFrom(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3531]!, self._r[3531]!, [_0])
+ return formatWithArgumentRanges(self._s[3535]!, self._r[3535]!, [_0])
}
public func Notification_JoinedGroupByLink(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3532]!, self._r[3532]!, [_0])
+ return formatWithArgumentRanges(self._s[3536]!, self._r[3536]!, [_0])
}
public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3533]!, self._r[3533]!, [_0])
+ return formatWithArgumentRanges(self._s[3537]!, self._r[3537]!, [_0])
}
- public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[3534]! }
- public var Privacy_ChatsTitle: String { return self._s[3535]! }
- public var DialogList_ClearHistoryConfirmation: String { return self._s[3536]! }
- public var SettingsSearch_Synonyms_Data_Storage_ClearCache: String { return self._s[3537]! }
- public var Watch_Suggestion_HoldOn: String { return self._s[3538]! }
- public var Group_EditAdmin_TransferOwnership: String { return self._s[3539]! }
- public var Group_LinkedChannel: String { return self._s[3540]! }
- public var VoiceOver_Chat_SeenByRecipient: String { return self._s[3541]! }
- public var SocksProxySetup_RequiredCredentials: String { return self._s[3542]! }
- public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[3543]! }
- public var TwoStepAuth_EmailSkipAlert: String { return self._s[3544]! }
- public var ScheduledMessages_RemindersTitle: String { return self._s[3546]! }
- public var Channel_Setup_TypePublic: String { return self._s[3548]! }
+ public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[3538]! }
+ public var Privacy_ChatsTitle: String { return self._s[3539]! }
+ public var DialogList_ClearHistoryConfirmation: String { return self._s[3540]! }
+ public var SettingsSearch_Synonyms_Data_Storage_ClearCache: String { return self._s[3541]! }
+ public var Watch_Suggestion_HoldOn: String { return self._s[3542]! }
+ public var Group_EditAdmin_TransferOwnership: String { return self._s[3543]! }
+ public var Group_LinkedChannel: String { return self._s[3544]! }
+ public var VoiceOver_Chat_SeenByRecipient: String { return self._s[3545]! }
+ public var SocksProxySetup_RequiredCredentials: String { return self._s[3546]! }
+ public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[3547]! }
+ public var TwoStepAuth_EmailSkipAlert: String { return self._s[3548]! }
+ public var ScheduledMessages_RemindersTitle: String { return self._s[3550]! }
+ public var Channel_Setup_TypePublic: String { return self._s[3552]! }
public func Channel_AdminLog_MessageToggleInvitesOn(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3549]!, self._r[3549]!, [_0])
+ return formatWithArgumentRanges(self._s[3553]!, self._r[3553]!, [_0])
}
- public var Channel_TypeSetup_Title: String { return self._s[3551]! }
- public var Map_OpenInMaps: String { return self._s[3553]! }
+ public var Channel_TypeSetup_Title: String { return self._s[3555]! }
+ public var Map_OpenInMaps: String { return self._s[3557]! }
public func PUSH_PINNED_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3554]!, self._r[3554]!, [_1])
+ return formatWithArgumentRanges(self._s[3558]!, self._r[3558]!, [_1])
}
- public var NotificationsSound_Tremolo: String { return self._s[3556]! }
+ public var NotificationsSound_Tremolo: String { return self._s[3560]! }
public func Date_ChatDateHeaderYear(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3557]!, self._r[3557]!, [_1, _2, _3])
+ return formatWithArgumentRanges(self._s[3561]!, self._r[3561]!, [_1, _2, _3])
}
- public var ConversationProfile_UnknownAddMemberError: String { return self._s[3558]! }
- public var Channel_OwnershipTransfer_PasswordPlaceholder: String { return self._s[3559]! }
- public var Passport_PasswordHelp: String { return self._s[3560]! }
- public var Login_CodeExpiredError: String { return self._s[3561]! }
- public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[3562]! }
- public var Conversation_TitleUnmute: String { return self._s[3563]! }
- public var Passport_Identity_ScansHelp: String { return self._s[3564]! }
- public var Passport_Language_lo: String { return self._s[3565]! }
- public var Camera_FlashAuto: String { return self._s[3566]! }
- public var Conversation_OpenBotLinkOpen: String { return self._s[3567]! }
- public var Common_Cancel: String { return self._s[3568]! }
- public var DialogList_SavedMessagesTooltip: String { return self._s[3569]! }
- public var TwoStepAuth_SetupPasswordTitle: String { return self._s[3570]! }
- public var Appearance_TintAllColors: String { return self._s[3571]! }
+ public var ConversationProfile_UnknownAddMemberError: String { return self._s[3562]! }
+ public var Channel_OwnershipTransfer_PasswordPlaceholder: String { return self._s[3563]! }
+ public var Passport_PasswordHelp: String { return self._s[3564]! }
+ public var Login_CodeExpiredError: String { return self._s[3565]! }
+ public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[3566]! }
+ public var Conversation_TitleUnmute: String { return self._s[3567]! }
+ public var Passport_Identity_ScansHelp: String { return self._s[3568]! }
+ public var Passport_Language_lo: String { return self._s[3569]! }
+ public var Camera_FlashAuto: String { return self._s[3570]! }
+ public var Conversation_OpenBotLinkOpen: String { return self._s[3571]! }
+ public var Common_Cancel: String { return self._s[3572]! }
+ public var DialogList_SavedMessagesTooltip: String { return self._s[3573]! }
+ public var TwoStepAuth_SetupPasswordTitle: String { return self._s[3574]! }
+ public var Appearance_TintAllColors: String { return self._s[3575]! }
public func PUSH_MESSAGE_FWD(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3572]!, self._r[3572]!, [_1])
+ return formatWithArgumentRanges(self._s[3576]!, self._r[3576]!, [_1])
}
- public var Conversation_ReportSpamConfirmation: String { return self._s[3573]! }
- public var ChatSettings_Title: String { return self._s[3575]! }
- public var Passport_PasswordReset: String { return self._s[3576]! }
- public var SocksProxySetup_TypeNone: String { return self._s[3577]! }
- public var EditTheme_Title: String { return self._s[3579]! }
- public var PhoneNumberHelp_Help: String { return self._s[3580]! }
- public var Checkout_EnterPassword: String { return self._s[3581]! }
- public var Share_AuthTitle: String { return self._s[3583]! }
- public var Activity_UploadingDocument: String { return self._s[3584]! }
- public var State_Connecting: String { return self._s[3585]! }
- public var Profile_MessageLifetime1w: String { return self._s[3586]! }
- public var Conversation_ContextMenuReport: String { return self._s[3587]! }
- public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[3588]! }
- public var AutoNightTheme_ScheduledTo: String { return self._s[3589]! }
+ public var Conversation_ReportSpamConfirmation: String { return self._s[3577]! }
+ public var ChatSettings_Title: String { return self._s[3579]! }
+ public var Passport_PasswordReset: String { return self._s[3580]! }
+ public var SocksProxySetup_TypeNone: String { return self._s[3581]! }
+ public var EditTheme_Title: String { return self._s[3583]! }
+ public var PhoneNumberHelp_Help: String { return self._s[3584]! }
+ public var Checkout_EnterPassword: String { return self._s[3585]! }
+ public var Share_AuthTitle: String { return self._s[3587]! }
+ public var Activity_UploadingDocument: String { return self._s[3588]! }
+ public var State_Connecting: String { return self._s[3589]! }
+ public var Profile_MessageLifetime1w: String { return self._s[3590]! }
+ public var Conversation_ContextMenuReport: String { return self._s[3591]! }
+ public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[3592]! }
+ public var AutoNightTheme_ScheduledTo: String { return self._s[3593]! }
public func VoiceOver_Chat_AnonymousPollFrom(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3590]!, self._r[3590]!, [_0])
+ return formatWithArgumentRanges(self._s[3594]!, self._r[3594]!, [_0])
}
- public var AuthSessions_Terminate: String { return self._s[3591]! }
- public var Wallet_WordImport_CanNotRemember: String { return self._s[3592]! }
- public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[3593]! }
- public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[3594]! }
- public var PhotoEditor_Set: String { return self._s[3595]! }
- public var EmptyGroupInfo_Title: String { return self._s[3596]! }
- public var Login_PadPhoneHelp: String { return self._s[3597]! }
- public var AutoDownloadSettings_TypeGroupChats: String { return self._s[3600]! }
- public var PrivacyPolicy_DeclineLastWarning: String { return self._s[3602]! }
- public var NotificationsSound_Complete: String { return self._s[3603]! }
- public var SettingsSearch_Synonyms_Privacy_Data_Title: String { return self._s[3604]! }
- public var Group_Info_AdminLog: String { return self._s[3605]! }
- public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[3606]! }
- public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[3607]! }
- public var Conversation_Admin: String { return self._s[3609]! }
- public var Conversation_GifTooltip: String { return self._s[3610]! }
- public var Passport_NotLoggedInMessage: String { return self._s[3611]! }
+ public var AuthSessions_Terminate: String { return self._s[3595]! }
+ public var Wallet_WordImport_CanNotRemember: String { return self._s[3596]! }
+ public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[3597]! }
+ public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[3598]! }
+ public var PhotoEditor_Set: String { return self._s[3599]! }
+ public var EmptyGroupInfo_Title: String { return self._s[3600]! }
+ public var Login_PadPhoneHelp: String { return self._s[3601]! }
+ public var AutoDownloadSettings_TypeGroupChats: String { return self._s[3604]! }
+ public var PrivacyPolicy_DeclineLastWarning: String { return self._s[3606]! }
+ public var NotificationsSound_Complete: String { return self._s[3607]! }
+ public var SettingsSearch_Synonyms_Privacy_Data_Title: String { return self._s[3608]! }
+ public var Group_Info_AdminLog: String { return self._s[3609]! }
+ public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[3610]! }
+ public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[3611]! }
+ public var Conversation_Admin: String { return self._s[3613]! }
+ public var Conversation_GifTooltip: String { return self._s[3614]! }
+ public var Passport_NotLoggedInMessage: String { return self._s[3615]! }
public func AutoDownloadSettings_OnFor(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3613]!, self._r[3613]!, [_0])
+ return formatWithArgumentRanges(self._s[3617]!, self._r[3617]!, [_0])
}
- public var Profile_MessageLifetimeForever: String { return self._s[3614]! }
- public var SharedMedia_EmptyTitle: String { return self._s[3616]! }
- public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[3618]! }
- public var Username_Help: String { return self._s[3619]! }
- public var DialogList_LanguageTooltip: String { return self._s[3621]! }
- public var Map_LoadError: String { return self._s[3622]! }
- public var Login_PhoneNumberAlreadyAuthorized: String { return self._s[3623]! }
- public var Channel_AdminLog_AddMembers: String { return self._s[3624]! }
- public var ArchivedChats_IntroTitle2: String { return self._s[3625]! }
- public var Notification_Exceptions_NewException: String { return self._s[3626]! }
- public var TwoStepAuth_EmailTitle: String { return self._s[3627]! }
- public var WatchRemote_AlertText: String { return self._s[3628]! }
+ public var Profile_MessageLifetimeForever: String { return self._s[3618]! }
+ public var SharedMedia_EmptyTitle: String { return self._s[3620]! }
+ public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[3622]! }
+ public var Username_Help: String { return self._s[3623]! }
+ public var DialogList_LanguageTooltip: String { return self._s[3625]! }
+ public var Map_LoadError: String { return self._s[3626]! }
+ public var Login_PhoneNumberAlreadyAuthorized: String { return self._s[3627]! }
+ public var Channel_AdminLog_AddMembers: String { return self._s[3628]! }
+ public var ArchivedChats_IntroTitle2: String { return self._s[3629]! }
+ public var Notification_Exceptions_NewException: String { return self._s[3630]! }
+ public var TwoStepAuth_EmailTitle: String { return self._s[3631]! }
+ public var WatchRemote_AlertText: String { return self._s[3632]! }
public func Wallet_Send_ConfirmationText(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3629]!, self._r[3629]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3633]!, self._r[3633]!, [_1, _2])
}
- public var ChatSettings_ConnectionType_Title: String { return self._s[3632]! }
+ public var ChatSettings_ConnectionType_Title: String { return self._s[3636]! }
public func Settings_CheckPhoneNumberTitle(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3633]!, self._r[3633]!, [_0])
+ return formatWithArgumentRanges(self._s[3637]!, self._r[3637]!, [_0])
}
- public var SettingsSearch_Synonyms_Calls_CallTab: String { return self._s[3634]! }
- public var Passport_Address_CountryPlaceholder: String { return self._s[3635]! }
+ public var SettingsSearch_Synonyms_Calls_CallTab: String { return self._s[3638]! }
+ public var Passport_Address_CountryPlaceholder: String { return self._s[3639]! }
public func DialogList_AwaitingEncryption(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3636]!, self._r[3636]!, [_0])
+ return formatWithArgumentRanges(self._s[3640]!, self._r[3640]!, [_0])
}
public func Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3637]!, self._r[3637]!, [_1, _2, _3])
+ return formatWithArgumentRanges(self._s[3641]!, self._r[3641]!, [_1, _2, _3])
}
- public var Group_AdminLog_EmptyText: String { return self._s[3638]! }
- public var SettingsSearch_Synonyms_Appearance_Title: String { return self._s[3639]! }
- public var Conversation_PrivateChannelTooltip: String { return self._s[3641]! }
- public var Wallet_Created_ExportErrorText: String { return self._s[3642]! }
- public var ChatList_UndoArchiveText1: String { return self._s[3643]! }
- public var AccessDenied_VideoMicrophone: String { return self._s[3644]! }
- public var Conversation_ContextMenuStickerPackAdd: String { return self._s[3645]! }
- public var Cache_ClearNone: String { return self._s[3646]! }
- public var SocksProxySetup_FailedToConnect: String { return self._s[3647]! }
- public var Permissions_NotificationsTitle_v0: String { return self._s[3648]! }
+ public var Group_AdminLog_EmptyText: String { return self._s[3642]! }
+ public var SettingsSearch_Synonyms_Appearance_Title: String { return self._s[3643]! }
+ public var Conversation_PrivateChannelTooltip: String { return self._s[3645]! }
+ public var Wallet_Created_ExportErrorText: String { return self._s[3646]! }
+ public var ChatList_UndoArchiveText1: String { return self._s[3647]! }
+ public var AccessDenied_VideoMicrophone: String { return self._s[3648]! }
+ public var Conversation_ContextMenuStickerPackAdd: String { return self._s[3649]! }
+ public var Cache_ClearNone: String { return self._s[3650]! }
+ public var SocksProxySetup_FailedToConnect: String { return self._s[3651]! }
+ public var Permissions_NotificationsTitle_v0: String { return self._s[3652]! }
public func Channel_AdminLog_MessageEdited(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3649]!, self._r[3649]!, [_0])
+ return formatWithArgumentRanges(self._s[3653]!, self._r[3653]!, [_0])
}
- public var Passport_Identity_Country: String { return self._s[3650]! }
+ public var Passport_Identity_Country: String { return self._s[3654]! }
public func ChatSettings_AutoDownloadSettings_TypeFile(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3651]!, self._r[3651]!, [_0])
+ return formatWithArgumentRanges(self._s[3655]!, self._r[3655]!, [_0])
}
public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3652]!, self._r[3652]!, [_0])
+ return formatWithArgumentRanges(self._s[3656]!, self._r[3656]!, [_0])
}
- public var Exceptions_AddToExceptions: String { return self._s[3653]! }
- public var AccessDenied_Settings: String { return self._s[3654]! }
- public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[3655]! }
- public var Month_ShortMay: String { return self._s[3656]! }
- public var Compose_NewGroup: String { return self._s[3658]! }
- public var Group_Setup_TypePrivate: String { return self._s[3660]! }
- public var Login_PadPhoneHelpTitle: String { return self._s[3662]! }
- public var Appearance_ThemeDayClassic: String { return self._s[3663]! }
- public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[3664]! }
- public var AutoDownloadSettings_OffForAll: String { return self._s[3665]! }
- public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[3666]! }
- public var Conversation_typing: String { return self._s[3668]! }
- public var Undo_ScheduledMessagesCleared: String { return self._s[3669]! }
- public var Paint_Masks: String { return self._s[3670]! }
- public var Contacts_DeselectAll: String { return self._s[3671]! }
- public var Username_InvalidTaken: String { return self._s[3672]! }
- public var Call_StatusNoAnswer: String { return self._s[3673]! }
- public var TwoStepAuth_EmailAddSuccess: String { return self._s[3674]! }
- public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[3675]! }
- public var Passport_Identity_Selfie: String { return self._s[3676]! }
- public var Login_InfoLastNamePlaceholder: String { return self._s[3677]! }
- public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[3678]! }
- public var Conversation_ClearSecretHistory: String { return self._s[3679]! }
- public var PeopleNearby_Description: String { return self._s[3681]! }
- public var NetworkUsageSettings_Title: String { return self._s[3682]! }
- public var Your_cards_security_code_is_invalid: String { return self._s[3684]! }
+ public var Exceptions_AddToExceptions: String { return self._s[3657]! }
+ public var AccessDenied_Settings: String { return self._s[3658]! }
+ public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[3659]! }
+ public var Month_ShortMay: String { return self._s[3660]! }
+ public var Compose_NewGroup: String { return self._s[3662]! }
+ public var Group_Setup_TypePrivate: String { return self._s[3664]! }
+ public var Login_PadPhoneHelpTitle: String { return self._s[3666]! }
+ public var Appearance_ThemeDayClassic: String { return self._s[3667]! }
+ public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[3668]! }
+ public var AutoDownloadSettings_OffForAll: String { return self._s[3669]! }
+ public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[3670]! }
+ public var Conversation_typing: String { return self._s[3672]! }
+ public var Undo_ScheduledMessagesCleared: String { return self._s[3673]! }
+ public var Paint_Masks: String { return self._s[3674]! }
+ public var Contacts_DeselectAll: String { return self._s[3675]! }
+ public var Username_InvalidTaken: String { return self._s[3676]! }
+ public var Call_StatusNoAnswer: String { return self._s[3677]! }
+ public var TwoStepAuth_EmailAddSuccess: String { return self._s[3678]! }
+ public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[3679]! }
+ public var Passport_Identity_Selfie: String { return self._s[3680]! }
+ public var Login_InfoLastNamePlaceholder: String { return self._s[3681]! }
+ public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[3682]! }
+ public var Conversation_ClearSecretHistory: String { return self._s[3683]! }
+ public var PeopleNearby_Description: String { return self._s[3685]! }
+ public var NetworkUsageSettings_Title: String { return self._s[3686]! }
+ public var Your_cards_security_code_is_invalid: String { return self._s[3688]! }
public func Notification_LeftChannel(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3686]!, self._r[3686]!, [_0])
+ return formatWithArgumentRanges(self._s[3690]!, self._r[3690]!, [_0])
}
public func Call_CallInProgressMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3687]!, self._r[3687]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3691]!, self._r[3691]!, [_1, _2])
}
- public var SaveIncomingPhotosSettings_From: String { return self._s[3689]! }
- public var VoiceOver_Navigation_Search: String { return self._s[3690]! }
- public var Map_LiveLocationTitle: String { return self._s[3691]! }
- public var Login_InfoAvatarAdd: String { return self._s[3692]! }
- public var Passport_Identity_FilesView: String { return self._s[3693]! }
- public var UserInfo_GenericPhoneLabel: String { return self._s[3694]! }
- public var Privacy_Calls_NeverAllow: String { return self._s[3695]! }
- public var VoiceOver_Chat_File: String { return self._s[3696]! }
- public var Wallet_Settings_DeleteWalletInfo: String { return self._s[3697]! }
+ public var SaveIncomingPhotosSettings_From: String { return self._s[3693]! }
+ public var VoiceOver_Navigation_Search: String { return self._s[3694]! }
+ public var Map_LiveLocationTitle: String { return self._s[3695]! }
+ public var Login_InfoAvatarAdd: String { return self._s[3696]! }
+ public var Passport_Identity_FilesView: String { return self._s[3697]! }
+ public var UserInfo_GenericPhoneLabel: String { return self._s[3698]! }
+ public var Privacy_Calls_NeverAllow: String { return self._s[3699]! }
+ public var VoiceOver_Chat_File: String { return self._s[3700]! }
+ public var Wallet_Settings_DeleteWalletInfo: String { return self._s[3701]! }
public func Contacts_AddPhoneNumber(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3698]!, self._r[3698]!, [_0])
+ return formatWithArgumentRanges(self._s[3702]!, self._r[3702]!, [_0])
}
- public var ContactInfo_PhoneNumberHidden: String { return self._s[3699]! }
- public var TwoStepAuth_ConfirmationText: String { return self._s[3700]! }
- public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[3701]! }
+ public var ContactInfo_PhoneNumberHidden: String { return self._s[3703]! }
+ public var TwoStepAuth_ConfirmationText: String { return self._s[3704]! }
+ public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[3705]! }
public func PUSH_CHAT_MESSAGE_VIDEOS(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3702]!, self._r[3702]!, [_1, _2, _3])
+ return formatWithArgumentRanges(self._s[3706]!, self._r[3706]!, [_1, _2, _3])
}
- public var Channel_AdminLogFilter_AdminsAll: String { return self._s[3703]! }
- public var Wallet_Intro_CreateErrorText: String { return self._s[3704]! }
- public var Tour_Title2: String { return self._s[3705]! }
- public var Wallet_Sent_ViewWallet: String { return self._s[3706]! }
- public var Conversation_FileOpenIn: String { return self._s[3707]! }
- public var Checkout_ErrorPrecheckoutFailed: String { return self._s[3708]! }
- public var Wallet_Send_ErrorInvalidAddress: String { return self._s[3709]! }
- public var Wallpaper_Set: String { return self._s[3710]! }
- public var Passport_Identity_Translations: String { return self._s[3712]! }
+ public var Channel_AdminLogFilter_AdminsAll: String { return self._s[3707]! }
+ public var Wallet_Intro_CreateErrorText: String { return self._s[3708]! }
+ public var Tour_Title2: String { return self._s[3709]! }
+ public var Wallet_Sent_ViewWallet: String { return self._s[3710]! }
+ public var Conversation_FileOpenIn: String { return self._s[3711]! }
+ public var Checkout_ErrorPrecheckoutFailed: String { return self._s[3712]! }
+ public var Wallet_Send_ErrorInvalidAddress: String { return self._s[3713]! }
+ public var Wallpaper_Set: String { return self._s[3714]! }
+ public var Passport_Identity_Translations: String { return self._s[3716]! }
public func Channel_AdminLog_MessageChangedChannelAbout(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3713]!, self._r[3713]!, [_0])
+ return formatWithArgumentRanges(self._s[3717]!, self._r[3717]!, [_0])
}
- public var Channel_LeaveChannel: String { return self._s[3714]! }
+ public var Channel_LeaveChannel: String { return self._s[3718]! }
public func PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3715]!, self._r[3715]!, [_1])
+ return formatWithArgumentRanges(self._s[3719]!, self._r[3719]!, [_1])
}
- public var SettingsSearch_Synonyms_Proxy_AddProxy: String { return self._s[3717]! }
- public var PhotoEditor_HighlightsTint: String { return self._s[3718]! }
- public var Passport_Email_Delete: String { return self._s[3719]! }
- public var Conversation_Mute: String { return self._s[3721]! }
- public var Channel_AddBotAsAdmin: String { return self._s[3722]! }
- public var Channel_AdminLog_CanSendMessages: String { return self._s[3724]! }
- public var Channel_Management_LabelOwner: String { return self._s[3726]! }
+ public var SettingsSearch_Synonyms_Proxy_AddProxy: String { return self._s[3721]! }
+ public var PhotoEditor_HighlightsTint: String { return self._s[3722]! }
+ public var Passport_Email_Delete: String { return self._s[3723]! }
+ public var Conversation_Mute: String { return self._s[3725]! }
+ public var Channel_AddBotAsAdmin: String { return self._s[3726]! }
+ public var Channel_AdminLog_CanSendMessages: String { return self._s[3728]! }
+ public var Channel_Management_LabelOwner: String { return self._s[3730]! }
public func Notification_PassportValuesSentMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3727]!, self._r[3727]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3731]!, self._r[3731]!, [_1, _2])
}
- public var Calls_CallTabDescription: String { return self._s[3728]! }
- public var Passport_Identity_NativeNameHelp: String { return self._s[3729]! }
- public var Common_No: String { return self._s[3730]! }
- public var Weekday_Sunday: String { return self._s[3731]! }
- public var Notification_Reply: String { return self._s[3732]! }
- public var Conversation_ViewMessage: String { return self._s[3733]! }
+ public var Calls_CallTabDescription: String { return self._s[3732]! }
+ public var Passport_Identity_NativeNameHelp: String { return self._s[3733]! }
+ public var Common_No: String { return self._s[3734]! }
+ public var Weekday_Sunday: String { return self._s[3735]! }
+ public var Notification_Reply: String { return self._s[3736]! }
+ public var Conversation_ViewMessage: String { return self._s[3737]! }
public func Checkout_SavePasswordTimeoutAndFaceId(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3734]!, self._r[3734]!, [_0])
+ return formatWithArgumentRanges(self._s[3738]!, self._r[3738]!, [_0])
}
public func Map_LiveLocationPrivateDescription(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3735]!, self._r[3735]!, [_0])
+ return formatWithArgumentRanges(self._s[3739]!, self._r[3739]!, [_0])
}
- public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[3736]! }
- public var Wallet_Send_Title: String { return self._s[3737]! }
- public var Message_PinnedDocumentMessage: String { return self._s[3738]! }
- public var Wallet_Info_RefreshErrorText: String { return self._s[3739]! }
- public var DialogList_TabTitle: String { return self._s[3741]! }
- public var ChatSettings_AutoPlayTitle: String { return self._s[3742]! }
- public var Passport_FieldEmail: String { return self._s[3743]! }
- public var Conversation_UnpinMessageAlert: String { return self._s[3744]! }
- public var Passport_Address_TypeBankStatement: String { return self._s[3745]! }
- public var Wallet_SecureStorageReset_Title: String { return self._s[3746]! }
- public var Passport_Identity_ExpiryDate: String { return self._s[3747]! }
- public var Privacy_Calls_P2P: String { return self._s[3748]! }
+ public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[3740]! }
+ public var Wallet_Send_Title: String { return self._s[3741]! }
+ public var Message_PinnedDocumentMessage: String { return self._s[3742]! }
+ public var Wallet_Info_RefreshErrorText: String { return self._s[3743]! }
+ public var DialogList_TabTitle: String { return self._s[3745]! }
+ public var ChatSettings_AutoPlayTitle: String { return self._s[3746]! }
+ public var Passport_FieldEmail: String { return self._s[3747]! }
+ public var Conversation_UnpinMessageAlert: String { return self._s[3748]! }
+ public var Passport_Address_TypeBankStatement: String { return self._s[3749]! }
+ public var Wallet_SecureStorageReset_Title: String { return self._s[3750]! }
+ public var Passport_Identity_ExpiryDate: String { return self._s[3751]! }
+ public var Privacy_Calls_P2P: String { return self._s[3752]! }
public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3750]!, self._r[3750]!, [_0])
+ return formatWithArgumentRanges(self._s[3754]!, self._r[3754]!, [_0])
}
- public var SocksProxySetup_UseForCallsHelp: String { return self._s[3751]! }
+ public var SocksProxySetup_UseForCallsHelp: String { return self._s[3755]! }
public func PUSH_CHAT_ALBUM(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3752]!, self._r[3752]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3756]!, self._r[3756]!, [_1, _2])
}
- public var Stickers_ClearRecent: String { return self._s[3753]! }
- public var EnterPasscode_ChangeTitle: String { return self._s[3754]! }
- public var Passport_InfoText: String { return self._s[3755]! }
- public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[3756]! }
+ public var Stickers_ClearRecent: String { return self._s[3757]! }
+ public var EnterPasscode_ChangeTitle: String { return self._s[3758]! }
+ public var Passport_InfoText: String { return self._s[3759]! }
+ public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[3760]! }
public func Login_InvalidPhoneEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3757]!, self._r[3757]!, [_0])
+ return formatWithArgumentRanges(self._s[3761]!, self._r[3761]!, [_0])
}
public func Time_PreciseDate_m3(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3758]!, self._r[3758]!, [_1, _2, _3])
+ return formatWithArgumentRanges(self._s[3762]!, self._r[3762]!, [_1, _2, _3])
}
- public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChannels: String { return self._s[3759]! }
- public var ScheduledMessages_PollUnavailable: String { return self._s[3760]! }
- public var VoiceOver_Navigation_Compose: String { return self._s[3761]! }
- public var Passport_Identity_EditDriversLicense: String { return self._s[3762]! }
- public var Conversation_TapAndHoldToRecord: String { return self._s[3764]! }
- public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[3765]! }
+ public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChannels: String { return self._s[3763]! }
+ public var ScheduledMessages_PollUnavailable: String { return self._s[3764]! }
+ public var VoiceOver_Navigation_Compose: String { return self._s[3765]! }
+ public var Passport_Identity_EditDriversLicense: String { return self._s[3766]! }
+ public var Conversation_TapAndHoldToRecord: String { return self._s[3768]! }
+ public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[3769]! }
public func Notification_CallTimeFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3766]!, self._r[3766]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3770]!, self._r[3770]!, [_1, _2])
}
- public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[3768]! }
+ public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[3772]! }
public func Generic_OpenHiddenLinkAlert(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3770]!, self._r[3770]!, [_0])
+ return formatWithArgumentRanges(self._s[3774]!, self._r[3774]!, [_0])
}
- public var DialogList_Unread: String { return self._s[3771]! }
+ public var DialogList_Unread: String { return self._s[3775]! }
public func PUSH_CHAT_MESSAGE_GIF(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3772]!, self._r[3772]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3776]!, self._r[3776]!, [_1, _2])
}
public func Updated_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3773]!, self._r[3773]!, [_0])
+ return formatWithArgumentRanges(self._s[3777]!, self._r[3777]!, [_0])
}
- public var User_DeletedAccount: String { return self._s[3774]! }
- public var OwnershipTransfer_SetupTwoStepAuth: String { return self._s[3775]! }
+ public var User_DeletedAccount: String { return self._s[3778]! }
+ public var OwnershipTransfer_SetupTwoStepAuth: String { return self._s[3779]! }
public func Watch_Time_ShortYesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3776]!, self._r[3776]!, [_0])
+ return formatWithArgumentRanges(self._s[3780]!, self._r[3780]!, [_0])
}
- public var UserInfo_NotificationsDefault: String { return self._s[3777]! }
- public var SharedMedia_CategoryMedia: String { return self._s[3778]! }
- public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[3779]! }
- public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[3780]! }
- public var Watch_ChatList_Compose: String { return self._s[3781]! }
- public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[3782]! }
- public var AutoDownloadSettings_Delimeter: String { return self._s[3783]! }
- public var Watch_Microphone_Access: String { return self._s[3784]! }
- public var Group_Setup_HistoryHeader: String { return self._s[3785]! }
- public var Map_SetThisLocation: String { return self._s[3786]! }
- public var Appearance_ThemePreview_Chat_2_ReplyName: String { return self._s[3787]! }
- public var Activity_UploadingPhoto: String { return self._s[3788]! }
- public var Conversation_Edit: String { return self._s[3790]! }
- public var Group_ErrorSendRestrictedMedia: String { return self._s[3791]! }
- public var Login_TermsOfServiceDecline: String { return self._s[3792]! }
- public var Message_PinnedContactMessage: String { return self._s[3793]! }
+ public var UserInfo_NotificationsDefault: String { return self._s[3781]! }
+ public var SharedMedia_CategoryMedia: String { return self._s[3782]! }
+ public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[3783]! }
+ public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[3784]! }
+ public var Watch_ChatList_Compose: String { return self._s[3785]! }
+ public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[3786]! }
+ public var AutoDownloadSettings_Delimeter: String { return self._s[3787]! }
+ public var Watch_Microphone_Access: String { return self._s[3788]! }
+ public var Group_Setup_HistoryHeader: String { return self._s[3789]! }
+ public var Map_SetThisLocation: String { return self._s[3790]! }
+ public var Appearance_ThemePreview_Chat_2_ReplyName: String { return self._s[3791]! }
+ public var Activity_UploadingPhoto: String { return self._s[3792]! }
+ public var Conversation_Edit: String { return self._s[3794]! }
+ public var Group_ErrorSendRestrictedMedia: String { return self._s[3795]! }
+ public var Login_TermsOfServiceDecline: String { return self._s[3796]! }
+ public var Message_PinnedContactMessage: String { return self._s[3797]! }
public func Channel_AdminLog_MessageRestrictedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3794]!, self._r[3794]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3798]!, self._r[3798]!, [_1, _2])
}
public func Login_PhoneBannedEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3795]!, self._r[3795]!, [_1, _2, _3, _4, _5])
+ return formatWithArgumentRanges(self._s[3799]!, self._r[3799]!, [_1, _2, _3, _4, _5])
}
- public var Appearance_LargeEmoji: String { return self._s[3796]! }
- public var TwoStepAuth_AdditionalPassword: String { return self._s[3798]! }
- public var EditTheme_Edit_Preview_IncomingReplyText: String { return self._s[3799]! }
+ public var Appearance_LargeEmoji: String { return self._s[3800]! }
+ public var TwoStepAuth_AdditionalPassword: String { return self._s[3802]! }
+ public var EditTheme_Edit_Preview_IncomingReplyText: String { return self._s[3803]! }
public func PUSH_CHAT_DELETE_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3800]!, self._r[3800]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3804]!, self._r[3804]!, [_1, _2])
}
- public var Passport_Phone_EnterOtherNumber: String { return self._s[3801]! }
- public var Message_PinnedPhotoMessage: String { return self._s[3802]! }
- public var Passport_FieldPhone: String { return self._s[3803]! }
- public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[3804]! }
- public var ChatSettings_AutoPlayGifs: String { return self._s[3805]! }
- public var InfoPlist_NSCameraUsageDescription: String { return self._s[3807]! }
- public var Conversation_Call: String { return self._s[3808]! }
- public var Common_TakePhoto: String { return self._s[3810]! }
- public var Group_EditAdmin_RankTitle: String { return self._s[3811]! }
- public var Wallet_Receive_CommentHeader: String { return self._s[3812]! }
- public var Channel_NotificationLoading: String { return self._s[3813]! }
+ public var Passport_Phone_EnterOtherNumber: String { return self._s[3805]! }
+ public var Message_PinnedPhotoMessage: String { return self._s[3806]! }
+ public var Passport_FieldPhone: String { return self._s[3807]! }
+ public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[3808]! }
+ public var ChatSettings_AutoPlayGifs: String { return self._s[3809]! }
+ public var InfoPlist_NSCameraUsageDescription: String { return self._s[3811]! }
+ public var Conversation_Call: String { return self._s[3812]! }
+ public var Common_TakePhoto: String { return self._s[3814]! }
+ public var Group_EditAdmin_RankTitle: String { return self._s[3815]! }
+ public var Wallet_Receive_CommentHeader: String { return self._s[3816]! }
+ public var Channel_NotificationLoading: String { return self._s[3817]! }
public func Notification_Exceptions_Sound(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3814]!, self._r[3814]!, [_0])
- }
- public func ScheduledMessages_ScheduledDate(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3815]!, self._r[3815]!, [_0])
- }
- public func PUSH_CHANNEL_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3816]!, self._r[3816]!, [_1])
- }
- public var Permissions_SiriTitle_v0: String { return self._s[3817]! }
- public func VoiceOver_Chat_VoiceMessageFrom(_ _0: String) -> (String, [(Int, NSRange)]) {
return formatWithArgumentRanges(self._s[3818]!, self._r[3818]!, [_0])
}
- public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) {
+ public func ScheduledMessages_ScheduledDate(_ _0: String) -> (String, [(Int, NSRange)]) {
return formatWithArgumentRanges(self._s[3819]!, self._r[3819]!, [_0])
}
- public var Channel_MessagePhotoRemoved: String { return self._s[3820]! }
- public var Common_edit: String { return self._s[3821]! }
- public var PrivacySettings_AuthSessions: String { return self._s[3822]! }
- public var Month_ShortJune: String { return self._s[3823]! }
- public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[3824]! }
- public var Call_ReportSend: String { return self._s[3825]! }
- public var Watch_LastSeen_JustNow: String { return self._s[3826]! }
- public var Notifications_MessageNotifications: String { return self._s[3827]! }
- public var WallpaperSearch_ColorGreen: String { return self._s[3828]! }
- public var BroadcastListInfo_AddRecipient: String { return self._s[3830]! }
- public var Group_Status: String { return self._s[3831]! }
+ public func PUSH_CHANNEL_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[3820]!, self._r[3820]!, [_1])
+ }
+ public var Permissions_SiriTitle_v0: String { return self._s[3821]! }
+ public func VoiceOver_Chat_VoiceMessageFrom(_ _0: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[3822]!, self._r[3822]!, [_0])
+ }
+ public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) {
+ return formatWithArgumentRanges(self._s[3823]!, self._r[3823]!, [_0])
+ }
+ public var Channel_MessagePhotoRemoved: String { return self._s[3824]! }
+ public var Common_edit: String { return self._s[3825]! }
+ public var PrivacySettings_AuthSessions: String { return self._s[3826]! }
+ public var Month_ShortJune: String { return self._s[3827]! }
+ public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[3828]! }
+ public var Call_ReportSend: String { return self._s[3829]! }
+ public var Watch_LastSeen_JustNow: String { return self._s[3830]! }
+ public var Notifications_MessageNotifications: String { return self._s[3831]! }
+ public var WallpaperSearch_ColorGreen: String { return self._s[3832]! }
+ public var BroadcastListInfo_AddRecipient: String { return self._s[3834]! }
+ public var Group_Status: String { return self._s[3835]! }
public func AutoNightTheme_LocationHelp(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3832]!, self._r[3832]!, [_0, _1])
+ return formatWithArgumentRanges(self._s[3836]!, self._r[3836]!, [_0, _1])
}
- public var TextFormat_AddLinkTitle: String { return self._s[3833]! }
- public var ShareMenu_ShareTo: String { return self._s[3834]! }
- public var Conversation_Moderate_Ban: String { return self._s[3835]! }
+ public var TextFormat_AddLinkTitle: String { return self._s[3837]! }
+ public var ShareMenu_ShareTo: String { return self._s[3838]! }
+ public var Conversation_Moderate_Ban: String { return self._s[3839]! }
public func Conversation_DeleteMessagesFor(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3836]!, self._r[3836]!, [_0])
+ return formatWithArgumentRanges(self._s[3840]!, self._r[3840]!, [_0])
}
- public var SharedMedia_ViewInChat: String { return self._s[3837]! }
- public var Map_LiveLocationFor8Hours: String { return self._s[3838]! }
+ public var SharedMedia_ViewInChat: String { return self._s[3841]! }
+ public var Map_LiveLocationFor8Hours: String { return self._s[3842]! }
public func PUSH_PINNED_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3839]!, self._r[3839]!, [_1])
+ return formatWithArgumentRanges(self._s[3843]!, self._r[3843]!, [_1])
}
public func PUSH_PINNED_POLL(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3840]!, self._r[3840]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3844]!, self._r[3844]!, [_1, _2])
}
public func Map_AccurateTo(_ _0: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3842]!, self._r[3842]!, [_0])
+ return formatWithArgumentRanges(self._s[3846]!, self._r[3846]!, [_0])
}
- public var Map_OpenInHereMaps: String { return self._s[3843]! }
- public var Appearance_ReduceMotion: String { return self._s[3844]! }
+ public var Map_OpenInHereMaps: String { return self._s[3847]! }
+ public var Appearance_ReduceMotion: String { return self._s[3848]! }
public func PUSH_MESSAGE_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) {
- return formatWithArgumentRanges(self._s[3845]!, self._r[3845]!, [_1, _2])
+ return formatWithArgumentRanges(self._s[3849]!, self._r[3849]!, [_1, _2])
}
- public var Channel_Setup_TypePublicHelp: String { return self._s[3846]! }
- public var Passport_Identity_EditInternalPassport: String { return self._s[3847]! }
- public var PhotoEditor_Skip: String { return self._s[3848]! }
- public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String {
+ public var Channel_Setup_TypePublicHelp: String { return self._s[3850]! }
+ public var Passport_Identity_EditInternalPassport: String { return self._s[3851]! }
+ public var PhotoEditor_Skip: String { return self._s[3852]! }
+ public func AttachmentMenu_SendGif(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func ForwardedPolls(_ value: Int32) -> String {
+ public func MuteExpires_Hours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, selector)
- return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, _1, _2)
- }
- public func MessageTimer_Years(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func SharedMedia_Video(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MuteFor_Days(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func QuickSend_Photos(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, selector)
- return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, _1, _2)
- }
- public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, selector)
- return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, _1, _2)
- }
- public func Call_ShortSeconds(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func SharedMedia_File(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, selector)
- return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, _2, _1, _3)
- }
- public func MessageTimer_Days(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Invitation_Members(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func StickerPack_RemoveStickerCount(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func AttachmentMenu_SendVideo(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Conversation_SelectedMessages(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MessagePoll_VotedCount(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ForwardedContacts(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ForwardedGifs(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, selector)
- return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, _1, _2)
- }
- public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func StickerPack_AddStickerCount(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MessageTimer_ShortDays(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Updated_HoursAgo(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, selector)
- return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, _2, _1, _3)
- }
- public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, selector)
- return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, _2, _1, _3)
- }
- public func ForwardedPhotos(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func InviteText_ContactsCountText(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Map_ETAMinutes(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, selector)
- return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, _2, _1, _3)
- }
- public func SharedMedia_Photo(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Map_ETAHours(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Notifications_Exceptions(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MessageTimer_Weeks(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, selector)
- return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, _1, _2)
- }
- public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, selector)
- return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, _1, _2)
- }
- public func MessageTimer_Hours(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Media_ShareItem(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MessageTimer_Seconds(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Call_Seconds(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue)
- }
public func StickerPack_AddMaskCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func LiveLocation_MenuChatsCount(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func SharedMedia_Link(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MuteExpires_Hours(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func AttachmentMenu_SendGif(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MuteFor_Hours(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ForwardedAudios(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Media_ShareVideo(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, selector)
- return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, _1, _2)
- }
- public func StickerPack_RemoveMaskCount(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ForwardedStickers(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func AttachmentMenu_SendItem(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, selector)
- return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, _1, _2)
- }
- public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MessageTimer_ShortSeconds(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func CreatePoll_AddMoreOptions(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ChatList_SelectedChats(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, selector)
- return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, _1, _2)
- }
- public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, selector)
- return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, _1, _2)
- }
- public func ForwardedFiles(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, selector)
- return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, _2, _1, _3)
+ return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Conversation_StatusMembers(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func LastSeen_HoursAgo(_ value: Int32) -> String {
+ public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String {
+ public func MessagePoll_VotedCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Theme_UsersCount(_ value: Int32) -> String {
+ public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, selector)
+ return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, _1, _2)
+ }
+ public func SharedMedia_File(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Notification_GameScoreSelfExtended(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MuteExpires_Minutes(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Notification_GameScoreSelfSimple(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Notification_GameScoreSimple(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func AttachmentMenu_SendPhoto(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Media_SharePhoto(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MuteExpires_Days(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MessageTimer_Minutes(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MessageTimer_ShortHours(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Passport_Scans(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MessageTimer_ShortWeeks(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MessageTimer_Months(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Conversation_StatusSubscribers(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MessageTimer_ShortMinutes(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ForwardedLocations(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ForwardedVideos(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Call_ShortMinutes(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue)
+ public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, selector)
+ return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func Watch_UserInfo_Mute(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func StickerPack_StickerCount(_ value: Int32) -> String {
+ public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func ForwardedMessages(_ value: Int32) -> String {
+ public func MessageTimer_Weeks(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Notification_GameScoreExtended(_ value: Int32) -> String {
+ public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func SharedMedia_Generic(_ value: Int32) -> String {
+ public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String {
+ public func MessageTimer_Months(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Updated_MinutesAgo(_ value: Int32) -> String {
+ public func SharedMedia_Video(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func LastSeen_MinutesAgo(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ForwardedVideoMessages(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Call_Minutes(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func GroupInfo_ParticipantCount(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func UserCount(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String {
- let form = presentationStringsPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Contacts_ImportersCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(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[16 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func ChatList_DeleteConfirmation(_ value: Int32) -> String {
+ public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, selector)
+ return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, _2, _1, _3)
+ }
+ public func MessageTimer_Seconds(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(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[18 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String {
- let form = presentationStringsPluralizationForm(self.lc, selector)
- return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, _0, _1)
+ public func Theme_UsersCount(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func StickerPack_StickerCount(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func AttachmentMenu_SendPhoto(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Conversation_StatusOnline(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[115 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func LiveLocation_MenuChatsCount(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func LastSeen_MinutesAgo(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func MuteFor_Days(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, selector)
+ return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, _1, _2)
+ }
+ public func InviteText_ContactsCountText(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, selector)
+ return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, _1, _2)
+ }
+ public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, selector)
+ return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, _2, _1, _3)
+ }
+ public func MuteFor_Hours(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, selector)
+ return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, _1, _2)
+ }
+ public func Media_SharePhoto(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Call_ShortSeconds(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Map_ETAHours(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func StickerPack_AddStickerCount(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func AttachmentMenu_SendItem(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ForwardedFiles(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func MuteExpires_Minutes(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Conversation_SelectedMessages(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, selector)
+ return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, _1, _2)
+ }
+ public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func StickerPack_RemoveStickerCount(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func AttachmentMenu_SendVideo(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, selector)
+ return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, _1, _2)
+ }
+ public func QuickSend_Photos(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func SharedMedia_Photo(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Conversation_StatusSubscribers(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func MessageTimer_Minutes(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ForwardedLocations(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ForwardedMessages(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Updated_HoursAgo(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Notification_GameScoreSelfSimple(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func MessageTimer_ShortSeconds(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, selector)
+ return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, _1, _2)
+ }
+ public func Call_Minutes(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, selector)
+ return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, _0, _1)
+ }
+ public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, selector)
+ return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, _2, _1, _3)
+ }
+ public func ChatList_DeleteConfirmation(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func MessageTimer_Hours(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(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 {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func MuteExpires_Days(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Media_ShareVideo(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Updated_MinutesAgo(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func MessageTimer_Days(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func LastSeen_HoursAgo(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func GroupInfo_ParticipantCount(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ChatList_SelectedChats(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func UserCount(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Call_Seconds(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ForwardedPolls(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Invitation_Members(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Map_ETAMinutes(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ForwardedStickers(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func StickerPack_RemoveMaskCount(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func MessageTimer_ShortHours(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func MessageTimer_ShortDays(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ForwardedGifs(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ForwardedVideos(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, selector)
+ return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, _1, _2)
+ }
+ public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func SharedMedia_Link(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Media_ShareItem(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, selector)
+ return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, _1, _2)
+ }
+ public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Notification_GameScoreSelfExtended(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Notification_GameScoreSimple(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func MessageTimer_Years(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, selector)
+ return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, _2, _1, _3)
+ }
+ public func MessageTimer_ShortWeeks(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Call_ShortMinutes(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func MessageTimer_ShortMinutes(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Notifications_Exceptions(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func SharedMedia_Generic(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Notification_GameScoreExtended(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ForwardedContacts(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ForwardedPhotos(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ForwardedVideoMessages(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func CreatePoll_AddMoreOptions(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ForwardedAudios(_ value: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
+ let form = presentationStringsPluralizationForm(self.lc, selector)
+ return String(format: self._ps[115 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
public init(primaryComponent: PresentationStringsComponent, secondaryComponent: PresentationStringsComponent?, groupingSeparator: String) {
diff --git a/submodules/TelegramUI/Images.xcassets/Wallet/RefreshIcon.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Wallet/RefreshIcon.imageset/Contents.json
index f35b36343a..0940c4ae6d 100644
--- a/submodules/TelegramUI/Images.xcassets/Wallet/RefreshIcon.imageset/Contents.json
+++ b/submodules/TelegramUI/Images.xcassets/Wallet/RefreshIcon.imageset/Contents.json
@@ -2,7 +2,7 @@
"images" : [
{
"idiom" : "universal",
- "filename" : "􀊯 2.pdf"
+ "filename" : "ic_walletupdate.pdf"
}
],
"info" : {
diff --git a/submodules/TelegramUI/Images.xcassets/Wallet/RefreshIcon.imageset/ic_walletupdate.pdf b/submodules/TelegramUI/Images.xcassets/Wallet/RefreshIcon.imageset/ic_walletupdate.pdf
new file mode 100644
index 0000000000..62702732c7
Binary files /dev/null and b/submodules/TelegramUI/Images.xcassets/Wallet/RefreshIcon.imageset/ic_walletupdate.pdf differ
diff --git a/submodules/TelegramUI/Images.xcassets/Wallet/RefreshIcon.imageset/􀊯 2.pdf b/submodules/TelegramUI/Images.xcassets/Wallet/RefreshIcon.imageset/􀊯 2.pdf
deleted file mode 100644
index d557394c0a..0000000000
Binary files a/submodules/TelegramUI/Images.xcassets/Wallet/RefreshIcon.imageset/􀊯 2.pdf and /dev/null differ
diff --git a/submodules/TelegramUI/TelegramUI/AppDelegate.swift b/submodules/TelegramUI/TelegramUI/AppDelegate.swift
index 55b3a7ae91..70c464b897 100644
--- a/submodules/TelegramUI/TelegramUI/AppDelegate.swift
+++ b/submodules/TelegramUI/TelegramUI/AppDelegate.swift
@@ -56,6 +56,15 @@ private let keyboardWindowClass: AnyClass? = {
private class ApplicationStatusBarHost: StatusBarHost {
private let application = UIApplication.shared
+ var isApplicationInForeground: Bool {
+ switch self.application.applicationState {
+ case .background:
+ return false
+ default:
+ return true
+ }
+ }
+
var statusBarFrame: CGRect {
return self.application.statusBarFrame
}
@@ -71,6 +80,10 @@ private class ApplicationStatusBarHost: StatusBarHost {
self.application.setStatusBarStyle(style, animated: animated)
}
+ func setStatusBarHidden(_ value: Bool, animated: Bool) {
+ self.application.setStatusBarHidden(value, with: animated ? .fade : .none)
+ }
+
var statusBarWindow: UIView? {
return self.application.value(forKey: "statusBarWindow") as? UIView
}
@@ -231,8 +244,6 @@ final class SharedApplicationContext {
private let deviceToken = Promise(nil)
- private var cloudDataContext: Any?
-
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool {
precondition(!testIsLaunched)
testIsLaunched = true
@@ -249,8 +260,6 @@ final class SharedApplicationContext {
self.window = window
self.nativeWindow = window
- self.cloudDataContext = makeCloudDataContext()
-
let clearNotificationsManager = ClearNotificationsManager(getNotificationIds: { completion in
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().getDeliveredNotifications(completionHandler: { notifications in
@@ -664,6 +673,7 @@ final class SharedApplicationContext {
#if targetEnvironment(simulator)
tonKeychain = TonKeychain(encryptionPublicKey: {
//return .single(nil)
+ //return .single("1".data(using: .utf8)!)
return .single(Data())
}, encrypt: { data in
return Signal { subscriber in
@@ -701,11 +711,17 @@ final class SharedApplicationContext {
}
}, decrypt: { encryptedData in
return Signal { subscriber in
- BuildConfig.decryptApplicationSecret(encryptedData.data, publicKey: encryptedData.publicKey, baseAppBundleId: baseAppBundleId, completion: { result in
+ BuildConfig.decryptApplicationSecret(encryptedData.data, publicKey: encryptedData.publicKey, baseAppBundleId: baseAppBundleId, completion: { result, cancelled in
if let result = result {
subscriber.putNext(result)
} else {
- subscriber.putError(.generic)
+ let error: TonKeychainDecryptDataError
+ if cancelled {
+ error = .cancelled
+ } else {
+ error = .generic
+ }
+ subscriber.putError(error)
}
subscriber.putCompletion()
})
@@ -1259,9 +1275,12 @@ final class SharedApplicationContext {
#endif
}
+ if UIApplication.shared.isStatusBarHidden {
+ UIApplication.shared.setStatusBarHidden(false, with: .none)
+ }
NotificationCenter.default.addObserver(forName: UIWindow.didBecomeHiddenNotification, object: nil, queue: nil, using: { notification in
if UIApplication.shared.isStatusBarHidden {
- UIApplication.shared.setStatusBarHidden(false, with: .none)
+ //UIApplication.shared.setStatusBarHidden(false, with: .none)
}
})
return true
diff --git a/submodules/TelegramUI/TelegramUI/ApplicationContext.swift b/submodules/TelegramUI/TelegramUI/ApplicationContext.swift
index 1525646fc4..f08b8ca648 100644
--- a/submodules/TelegramUI/TelegramUI/ApplicationContext.swift
+++ b/submodules/TelegramUI/TelegramUI/ApplicationContext.swift
@@ -456,6 +456,7 @@ final class AuthorizedApplicationContext {
}, expandAction: { expandData in
if let strongSelf = self {
let chatController = ChatControllerImpl(context: strongSelf.context, chatLocation: .peer(firstMessage.id.peerId), mode: .overlay)
+ //chatController.navigation_setNavigationController(strongSelf.rootController)
(strongSelf.rootController.viewControllers.last as? ViewController)?.present(chatController, in: .window(.root), with: ChatControllerOverlayPresentationData(expandData: expandData()))
}
}))
diff --git a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceCodeEntryController.swift b/submodules/TelegramUI/TelegramUI/AuthorizationSequenceCodeEntryController.swift
index 7f894be7a6..f82156a376 100644
--- a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceCodeEntryController.swift
+++ b/submodules/TelegramUI/TelegramUI/AuthorizationSequenceCodeEntryController.swift
@@ -70,6 +70,8 @@ final class AuthorizationSequenceCodeEntryController: ViewController {
self.displayNode = AuthorizationSequenceCodeEntryControllerNode(strings: self.strings, theme: self.theme)
self.displayNodeDidLoad()
+ self.controllerNode.view.disableAutomaticKeyboardHandling = [.forward, .backward]
+
self.controllerNode.loginWithCode = { [weak self] code in
self?.continueWithCode(code)
}
diff --git a/submodules/TelegramUI/TelegramUI/AuthorizationSequencePasswordEntryController.swift b/submodules/TelegramUI/TelegramUI/AuthorizationSequencePasswordEntryController.swift
index 5d6523cc89..8c744c5e3b 100644
--- a/submodules/TelegramUI/TelegramUI/AuthorizationSequencePasswordEntryController.swift
+++ b/submodules/TelegramUI/TelegramUI/AuthorizationSequencePasswordEntryController.swift
@@ -74,6 +74,8 @@ final class AuthorizationSequencePasswordEntryController: ViewController {
self.displayNode = AuthorizationSequencePasswordEntryControllerNode(strings: self.strings, theme: self.theme)
self.displayNodeDidLoad()
+ self.controllerNode.view.disableAutomaticKeyboardHandling = [.forward, .backward]
+
self.controllerNode.loginWithCode = { [weak self] _ in
self?.nextPressed()
}
diff --git a/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryController.swift b/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryController.swift
index 5321ea1cab..cc5f9298be 100644
--- a/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryController.swift
+++ b/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryController.swift
@@ -106,6 +106,9 @@ final class AuthorizationSequencePhoneEntryController: ViewController {
self.controllerNode.codeAndNumber = (code, name, number)
}
self.displayNodeDidLoad()
+
+ self.controllerNode.view.disableAutomaticKeyboardHandling = [.forward, .backward]
+
self.controllerNode.selectCountryCode = { [weak self] in
if let strongSelf = self {
let controller = AuthorizationSequenceCountrySelectionController(strings: strongSelf.strings, theme: strongSelf.theme)
@@ -118,8 +121,7 @@ final class AuthorizationSequencePhoneEntryController: ViewController {
controller.dismissed = {
self?.controllerNode.activateInput()
}
- strongSelf.controllerNode.view.endEditing(true)
- strongSelf.present(controller, in: .window(.root))
+ strongSelf.push(controller)
}
}
self.controllerNode.checkPhone = { [weak self] in
diff --git a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceSignUpController.swift b/submodules/TelegramUI/TelegramUI/AuthorizationSequenceSignUpController.swift
index e7d751f90f..11ccd23f80 100644
--- a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceSignUpController.swift
+++ b/submodules/TelegramUI/TelegramUI/AuthorizationSequenceSignUpController.swift
@@ -93,6 +93,8 @@ final class AuthorizationSequenceSignUpController: ViewController {
})
self.displayNodeDidLoad()
+ self.controllerNode.view.disableAutomaticKeyboardHandling = [.forward, .backward]
+
self.controllerNode.signUpWithName = { [weak self] _, _ in
self?.nextPressed()
}
diff --git a/submodules/TelegramUI/TelegramUI/ChatController.swift b/submodules/TelegramUI/TelegramUI/ChatController.swift
index 611fd8e293..64fefe25e5 100644
--- a/submodules/TelegramUI/TelegramUI/ChatController.swift
+++ b/submodules/TelegramUI/TelegramUI/ChatController.swift
@@ -2313,7 +2313,16 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
private func themeAndStringsUpdated() {
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: self.presentationData.strings.Common_Back, style: .plain, target: nil, action: nil)
- self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBarStyle.style
+ switch self.presentationInterfaceState.mode {
+ case .standard:
+ self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBarStyle.style
+ self.deferScreenEdgeGestures = []
+ case .overlay:
+ self.statusBar.statusBarStyle = .Hide
+ self.deferScreenEdgeGestures = [.top]
+ case .inline:
+ self.statusBar.statusBarStyle = .Ignore
+ }
self.navigationBar?.updatePresentationData(NavigationBarPresentationData(presentationData: self.presentationData))
self.chatTitleView?.updateThemeAndStrings(theme: self.presentationData.theme, strings: self.presentationData.strings)
self.updateChatPresentationInterfaceState(animated: false, interactive: false, { state in
@@ -2590,22 +2599,19 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
self.chatDisplayNode.historyNode.contentPositionChanged = { [weak self] offset in
if let strongSelf = self {
let offsetAlpha: CGFloat
- if case let .standard(previewing) = strongSelf.presentationInterfaceState.mode, previewing {
- offsetAlpha = 0.0
- } else {
- switch offset {
- case let .known(offset):
- if offset < 40.0 {
- offsetAlpha = 0.0
- } else {
- offsetAlpha = 1.0
- }
- case .unknown:
- offsetAlpha = 1.0
- case .none:
+ switch offset {
+ case let .known(offset):
+ if offset < 40.0 {
offsetAlpha = 0.0
- }
+ } else {
+ offsetAlpha = 1.0
+ }
+ case .unknown:
+ offsetAlpha = 1.0
+ case .none:
+ offsetAlpha = 0.0
}
+
strongSelf.chatDisplayNode.navigateButtons.displayDownButton = !offsetAlpha.isZero
}
}
diff --git a/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift b/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift
index e894672ebe..e8b0d009e0 100644
--- a/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift
+++ b/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift
@@ -1903,6 +1903,9 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate {
switch self.chatPresentationInterfaceState.mode {
case .standard(previewing: true):
+ if let result = self.navigateButtons.hitTest(self.view.convert(point, to: self.navigateButtons.view), with: event) {
+ return result
+ }
if self.bounds.contains(point) {
return self.historyNode.view
}
diff --git a/submodules/TelegramUI/TelegramUI/ChatScheduleTimeController.swift b/submodules/TelegramUI/TelegramUI/ChatScheduleTimeController.swift
index 36a6aea0d8..6d3c765d1b 100644
--- a/submodules/TelegramUI/TelegramUI/ChatScheduleTimeController.swift
+++ b/submodules/TelegramUI/TelegramUI/ChatScheduleTimeController.swift
@@ -38,6 +38,8 @@ final class ChatScheduleTimeController: ViewController {
super.init(navigationBarPresentationData: nil)
+ self.statusBar.statusBarStyle = .Ignore
+
self.blocksBackgroundWhenInOverlay = true
self.presentationDataDisposable = (context.sharedContext.presentationData
@@ -74,8 +76,6 @@ final class ChatScheduleTimeController: ViewController {
override public func loadView() {
super.loadView()
-
- self.statusBar.removeFromSupernode()
}
override public func viewDidAppear(_ animated: Bool) {
diff --git a/submodules/TelegramUI/TelegramUI/NotificationContainerController.swift b/submodules/TelegramUI/TelegramUI/NotificationContainerController.swift
index f68ff574a2..bf8dd951d1 100644
--- a/submodules/TelegramUI/TelegramUI/NotificationContainerController.swift
+++ b/submodules/TelegramUI/TelegramUI/NotificationContainerController.swift
@@ -15,6 +15,8 @@ public final class NotificationContainerController: ViewController {
private var presentationData: PresentationData
private var presentationDataDisposable: Disposable?
+ private var validLayout: ContainerViewLayout?
+
public init(context: AccountContext) {
self.presentationData = context.sharedContext.currentPresentationData.with { $0 }
@@ -61,7 +63,15 @@ public final class NotificationContainerController: ViewController {
self.controllerNode.displayingItemsUpdated = { [weak self] value in
if let strongSelf = self {
- strongSelf.statusBar.statusBarStyle = value ? .Hide : .Ignore
+ var statusBarHidden = false
+ if value, let layout = strongSelf.validLayout {
+ if let statusBarHeight = layout.statusBarHeight, statusBarHeight > 20.0 {
+ statusBarHidden = false
+ } else {
+ statusBarHidden = true
+ }
+ }
+ strongSelf.statusBar.statusBarStyle = statusBarHidden ? .Hide : .Ignore
if value {
strongSelf.deferScreenEdgeGestures = [.top]
} else {
@@ -72,6 +82,8 @@ public final class NotificationContainerController: ViewController {
}
override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
+ self.validLayout = layout
+
super.containerLayoutUpdated(layout, transition: transition)
self.controllerNode.containerLayoutUpdated(layout, transition: transition)
diff --git a/submodules/TelegramUI/TelegramUI/NotificationContainerControllerNode.swift b/submodules/TelegramUI/TelegramUI/NotificationContainerControllerNode.swift
index 3fa4ed39c7..189ee12d1c 100644
--- a/submodules/TelegramUI/TelegramUI/NotificationContainerControllerNode.swift
+++ b/submodules/TelegramUI/TelegramUI/NotificationContainerControllerNode.swift
@@ -68,29 +68,19 @@ final class NotificationContainerControllerNode: ASDisplayNode {
if let (item, topItemNode) = self.topItemAndNode {
if item.groupingKey == key {
self.topItemAndNode = nil
+ self.displayingItemsUpdated?(false)
topItemNode.animateOut(completion: { [weak self, weak topItemNode] in
topItemNode?.removeFromSupernode()
-
- if let strongSelf = self, strongSelf.topItemAndNode == nil {
- strongSelf.displayingItemsUpdated?(false)
- }
})
}
}
}
func enqueue(_ item: NotificationItem) {
- var updatedDisplayingItems = false
if let (_, topItemNode) = self.topItemAndNode {
topItemNode.animateOut(completion: { [weak self, weak topItemNode] in
topItemNode?.removeFromSupernode()
-
- if let strongSelf = self, strongSelf.topItemAndNode == nil {
- strongSelf.displayingItemsUpdated?(false)
- }
})
- } else {
- updatedDisplayingItems = true
}
var useCompactLayout = false
@@ -138,9 +128,7 @@ final class NotificationContainerControllerNode: ASDisplayNode {
containerNode.animateIn()
}
- if updatedDisplayingItems {
- self.displayingItemsUpdated?(true)
- }
+ self.displayingItemsUpdated?(true)
self.resetTimeoutTimer()
}
@@ -172,12 +160,9 @@ final class NotificationContainerControllerNode: ASDisplayNode {
if let strongSelf = self {
if let (_, topItemNode) = strongSelf.topItemAndNode {
strongSelf.topItemAndNode = nil
+ strongSelf.displayingItemsUpdated?(false)
topItemNode.animateOut(completion: { [weak topItemNode] in
topItemNode?.removeFromSupernode()
-
- if let strongSelf = self, strongSelf.topItemAndNode == nil {
- strongSelf.displayingItemsUpdated?(false)
- }
})
}
}
diff --git a/submodules/TelegramUI/TelegramUI/OverlayAudioPlayerController.swift b/submodules/TelegramUI/TelegramUI/OverlayAudioPlayerController.swift
index 22ebc5062e..49468c7175 100644
--- a/submodules/TelegramUI/TelegramUI/OverlayAudioPlayerController.swift
+++ b/submodules/TelegramUI/TelegramUI/OverlayAudioPlayerController.swift
@@ -79,8 +79,6 @@ final class OverlayAudioPlayerControllerImpl: ViewController, OverlayAudioPlayer
override public func loadView() {
super.loadView()
-
- self.statusBar.removeFromSupernode()
}
override public func viewDidAppear(_ animated: Bool) {
diff --git a/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping b/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping
index 8e369f0cd0..c51ae99f9a 100644
Binary files a/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping and b/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping differ
diff --git a/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift b/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift
index 9a3040e309..23cafe5f67 100644
--- a/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift
+++ b/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift
@@ -843,10 +843,13 @@ public final class SharedAccountContextImpl: SharedAccountContext {
} else {
text = presentationData.strings.Call_StatusBar("").0
}
-
- self.mainWindow?.setForceInCallStatusBar(text)
+ if let navigationController = self.mainWindow?.viewController as? NavigationController {
+ navigationController.setForceInCallStatusBar(text)
+ }
} else {
- self.mainWindow?.setForceInCallStatusBar(nil)
+ if let navigationController = self.mainWindow?.viewController as? NavigationController {
+ navigationController.setForceInCallStatusBar(nil)
+ }
}
}
diff --git a/submodules/WalletUI/Sources/WalletInfoScreen.swift b/submodules/WalletUI/Sources/WalletInfoScreen.swift
index cc1a73bafc..dbce13d1a5 100644
--- a/submodules/WalletUI/Sources/WalletInfoScreen.swift
+++ b/submodules/WalletUI/Sources/WalletInfoScreen.swift
@@ -692,6 +692,7 @@ private final class WalletInfoScreenNode: ViewControllerTracingNode {
return
}
let combinedState: CombinedWalletState?
+ var isUpdated = false
switch value {
case let .cached(state):
if strongSelf.combinedState != nil {
@@ -705,6 +706,7 @@ private final class WalletInfoScreenNode: ViewControllerTracingNode {
}
combinedState = state
case let .updated(state):
+ isUpdated = true
strongSelf.loadingIndicator.stopAnimating()
strongSelf.loadingIndicator.isHidden = true
combinedState = state
@@ -729,7 +731,9 @@ private final class WalletInfoScreenNode: ViewControllerTracingNode {
strongSelf.transactionsLoaded(isReload: true, transactions: combinedState.topTransactions)
- strongSelf.headerNode.isRefreshing = false
+ if isUpdated {
+ strongSelf.headerNode.isRefreshing = false
+ }
if strongSelf.isReady, let (layout, navigationHeight) = strongSelf.validLayout {
strongSelf.headerNode.update(size: strongSelf.headerNode.bounds.size, navigationHeight: navigationHeight, offset: strongSelf.listOffset ?? 0.0, transition: .animated(duration: 0.2, curve: .easeInOut), isScrolling: false)
@@ -751,7 +755,7 @@ private final class WalletInfoScreenNode: ViewControllerTracingNode {
strongSelf.didSetContentReady = true
strongSelf.contentReady.set(.single(true))
}
- }, error: { [weak self] _ in
+ }, error: { [weak self] error in
guard let strongSelf = self else {
return
}
@@ -780,7 +784,14 @@ private final class WalletInfoScreenNode: ViewControllerTracingNode {
strongSelf.contentReady.set(.single(true))
}
- strongSelf.present(standardTextAlertController(theme: AlertControllerTheme(presentationTheme: strongSelf.presentationData.theme), title: strongSelf.presentationData.strings.Wallet_Info_RefreshErrorTitle, text: strongSelf.presentationData.strings.Wallet_Info_RefreshErrorText, actions: [
+ let text: String
+ switch error {
+ case .generic:
+ text = strongSelf.presentationData.strings.Wallet_Info_RefreshErrorText
+ case .network:
+ text = strongSelf.presentationData.strings.Wallet_Info_RefreshErrorNetworkText
+ }
+ strongSelf.present(standardTextAlertController(theme: AlertControllerTheme(presentationTheme: strongSelf.presentationData.theme), title: strongSelf.presentationData.strings.Wallet_Info_RefreshErrorTitle, text: text, actions: [
TextAlertAction(type: .defaultAction, title: strongSelf.presentationData.strings.Common_OK, action: {
})
], actionLayout: .vertical), nil)
diff --git a/submodules/WalletUI/Sources/WalletRefreshNode.swift b/submodules/WalletUI/Sources/WalletRefreshNode.swift
index 3337601153..333bb3775b 100644
--- a/submodules/WalletUI/Sources/WalletRefreshNode.swift
+++ b/submodules/WalletUI/Sources/WalletRefreshNode.swift
@@ -83,7 +83,7 @@ final class WalletRefreshNode: ASDisplayNode {
self.iconNode = ASImageNode()
self.iconNode.displaysAsynchronously = false
self.iconNode.displayWithoutProcessing = true
- self.iconNode.image = UIImage(bundleImageName: "Wallet/RefreshIcon")
+ self.iconNode.image = generateTintedImage(image: UIImage(bundleImageName: "Wallet/RefreshIcon"), color: UIColor(white: 0.6, alpha: 1.0))
if let image = self.iconNode.image {
self.iconNode.frame = CGRect(origin: CGPoint(), size: image.size)
}
@@ -199,7 +199,7 @@ final class WalletRefreshNode: ASDisplayNode {
let iconSize = self.iconNode.image?.size ?? CGSize(width: 20.0, height: 20.0)
let titleSize = self.titleNode.updateLayout(CGSize(width: 200.0, height: 100.0))
- let iconSpacing: CGFloat = 5.0
+ let iconSpacing: CGFloat = 1.0
let contentWidth = iconSize.width + titleSize.width + iconSpacing
let contentOrigin = floor(-contentWidth / 2.0)
diff --git a/submodules/WalletUI/Sources/WalletSettingsScreen.swift b/submodules/WalletUI/Sources/WalletSettingsScreen.swift
index 1f972444e8..c243df64f8 100644
--- a/submodules/WalletUI/Sources/WalletSettingsScreen.swift
+++ b/submodules/WalletUI/Sources/WalletSettingsScreen.swift
@@ -104,10 +104,20 @@ public func walletSettingsController(context: AccountContext, tonContext: TonCon
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
let controller = OverlayStatusController(theme: presentationData.theme, strings: presentationData.strings, type: .loading(cancelled: nil))
presentControllerImpl?(controller, nil)
- let _ = (walletRestoreWords(network: context.account.network, walletInfo: walletInfo, tonInstance: tonContext.instance, keychain: tonContext.keychain)
- |> deliverOnMainQueue).start(next: { [weak controller] wordList in
- controller?.dismiss()
- pushControllerImpl?(WalletWordDisplayScreen(context: context, tonContext: tonContext, walletInfo: walletInfo, wordList: wordList, mode: .export, walletCreatedPreloadState: nil))
+ let _ = (tonContext.keychain.decrypt(walletInfo.encryptedSecret)
+ |> deliverOnMainQueue).start(next: { [weak controller] decryptedSecret in
+ let _ = (getServerWalletSalt(network: context.account.network)
+ |> deliverOnMainQueue).start(next: { serverSalt in
+ let _ = (walletRestoreWords(tonInstance: tonContext.instance, publicKey: walletInfo.publicKey, decryptedSecret: decryptedSecret, localPassword: serverSalt)
+ |> deliverOnMainQueue).start(next: { [weak controller] wordList in
+ controller?.dismiss()
+ pushControllerImpl?(WalletWordDisplayScreen(context: context, tonContext: tonContext, walletInfo: walletInfo, wordList: wordList, mode: .export, walletCreatedPreloadState: nil))
+ }, error: { [weak controller] _ in
+ controller?.dismiss()
+ })
+ }, error: { [weak controller] _ in
+ controller?.dismiss()
+ })
}, error: { [weak controller] _ in
controller?.dismiss()
})
@@ -120,7 +130,7 @@ public func walletSettingsController(context: AccountContext, tonContext: TonCon
actionSheet?.dismissAnimated()
let controller = OverlayStatusController(theme: presentationData.theme, strings: presentationData.strings, type: .loading(cancelled: nil))
presentControllerImpl?(controller, nil)
- let _ = (deleteLocalWalletData(postbox: context.account.postbox, network: context.account.network, tonInstance: tonContext.instance, keychain: tonContext.keychain, walletInfo: walletInfo)
+ let _ = (deleteAllLocalWalletsData(postbox: context.account.postbox, network: context.account.network, tonInstance: tonContext.instance)
|> deliverOnMainQueue).start(error: { [weak controller] _ in
controller?.dismiss()
}, completed: { [weak controller] in
diff --git a/submodules/WalletUI/Sources/WalletSplashScreen.swift b/submodules/WalletUI/Sources/WalletSplashScreen.swift
index a6de99fec9..db8340a8ec 100644
--- a/submodules/WalletUI/Sources/WalletSplashScreen.swift
+++ b/submodules/WalletUI/Sources/WalletSplashScreen.swift
@@ -93,17 +93,21 @@ public final class WalletSplashScreen: ViewController {
guard let strongSelf = self else {
return
}
- strongSelf.sendGrams(walletInfo: walletInfo, decryptedSecret: decryptedSecret, address: address, amount: amount, textMessage: textMessage, forceIfDestinationNotInitialized: false, randomId: randomId, serverSalt: serverSalt)
- }, error: { [weak self] _ in
+ strongSelf.sendGrams(walletInfo: walletInfo, decryptedSecret: decryptedSecret, address: address, amount: amount, textMessage: textMessage, forceIfDestinationNotInitialized: true, randomId: randomId, serverSalt: serverSalt)
+ }, error: { [weak self] error in
guard let strongSelf = self else {
return
}
- let text = strongSelf.presentationData.strings.Wallet_Send_ErrorDecryptionFailed
- let controller = textAlertController(context: strongSelf.context, title: nil, text: text, actions: [TextAlertAction(type: .defaultAction, title: strongSelf.presentationData.strings.Common_OK, action: {
- self?.dismiss()
- })])
- strongSelf.present(controller, in: .window(.root))
- strongSelf.dismiss()
+ if case .cancelled = error {
+ strongSelf.dismiss()
+ } else {
+ let text = strongSelf.presentationData.strings.Wallet_Send_ErrorDecryptionFailed
+ let controller = textAlertController(context: strongSelf.context, title: nil, text: text, actions: [TextAlertAction(type: .defaultAction, title: strongSelf.presentationData.strings.Common_OK, action: {
+ self?.dismiss()
+ })])
+ strongSelf.present(controller, in: .window(.root))
+ strongSelf.dismiss()
+ }
})
case .sent:
self.navigationItem.setLeftBarButton(UIBarButtonItem(customDisplayNode: ASDisplayNode())!, animated: false)
@@ -129,7 +133,7 @@ public final class WalletSplashScreen: ViewController {
}
private func sendGrams(walletInfo: WalletInfo, decryptedSecret: Data, address: String, amount: Int64, textMessage: String, forceIfDestinationNotInitialized: Bool, randomId: Int64, serverSalt: Data) {
- let _ = (sendGramsFromWallet(network: self.context.account.network, tonInstance: self.tonContext.instance, walletInfo: walletInfo, decryptedSecret: decryptedSecret, serverSalt: serverSalt, toAddress: address, amount: amount, textMessage: textMessage, forceIfDestinationNotInitialized: forceIfDestinationNotInitialized, timeout: 0, randomId: randomId)
+ let _ = (sendGramsFromWallet(network: self.context.account.network, tonInstance: self.tonContext.instance, walletInfo: walletInfo, decryptedSecret: decryptedSecret, localPassword: serverSalt, toAddress: address, amount: amount, textMessage: textMessage, forceIfDestinationNotInitialized: forceIfDestinationNotInitialized, timeout: 0, randomId: randomId)
|> deliverOnMainQueue).start(error: { [weak self] error in
guard let strongSelf = self else {
return
@@ -138,14 +142,20 @@ public final class WalletSplashScreen: ViewController {
switch error {
case .generic:
text = strongSelf.presentationData.strings.Login_UnknownError
+ case .network:
+ text = strongSelf.presentationData.strings.Wallet_Send_NetworkError
+ case .notEnoughFunds:
+ text = strongSelf.presentationData.strings.Wallet_Send_ErrorNotEnoughFunds
+ case .messageTooLong:
+ text = strongSelf.presentationData.strings.Login_UnknownError
case .invalidAddress:
text = strongSelf.presentationData.strings.Wallet_Send_ErrorInvalidAddress
case .secretDecryptionFailed:
text = strongSelf.presentationData.strings.Wallet_Send_ErrorDecryptionFailed
case .destinationIsNotInitialized:
if !forceIfDestinationNotInitialized {
- text = "This address belongs to an empty wallet. Are you sure you want to transfer grams to it?"
- let controller = textAlertController(context: strongSelf.context, title: "Warning", text: text, actions: [
+ text = strongSelf.presentationData.strings.Wallet_Send_UninitializedText
+ let controller = textAlertController(context: strongSelf.context, title: strongSelf.presentationData.strings.Wallet_Send_UninitializedTitle, text: text, actions: [
TextAlertAction(type: .genericAction, title: strongSelf.presentationData.strings.Common_Cancel, action: {
if let navigationController = strongSelf.navigationController as? NavigationController {
navigationController.popViewController(animated: true)
@@ -203,15 +213,7 @@ public final class WalletSplashScreen: ViewController {
switch strongSelf.mode {
case .intro:
let controller = OverlayStatusController(theme: strongSelf.presentationData.theme, strings: strongSelf.presentationData.strings, type: .loading(cancelled: nil))
- strongSelf.present(controller, in: .window(.root))
- let _ = (createWallet(postbox: strongSelf.context.account.postbox, network: strongSelf.context.account.network, tonInstance: strongSelf.tonContext.instance, keychain: strongSelf.tonContext.keychain)
- |> deliverOnMainQueue).start(next: { walletInfo, wordList in
- guard let strongSelf = self else {
- return
- }
- controller.dismiss()
- (strongSelf.navigationController as? NavigationController)?.replaceController(strongSelf, with: WalletSplashScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, mode: .created(walletInfo, wordList), walletCreatedPreloadState: nil), animated: true)
- }, error: { _ in
+ let displayError: () -> Void = {
guard let strongSelf = self else {
return
}
@@ -220,6 +222,22 @@ public final class WalletSplashScreen: ViewController {
TextAlertAction(type: .defaultAction, title: strongSelf.presentationData.strings.Common_OK, action: {
})
], actionLayout: .vertical), in: .window(.root))
+ }
+ strongSelf.present(controller, in: .window(.root))
+ let _ = (getServerWalletSalt(network: strongSelf.context.account.network)
+ |> deliverOnMainQueue).start(next: { serverSalt in
+ let _ = (createWallet(postbox: strongSelf.context.account.postbox, tonInstance: strongSelf.tonContext.instance, keychain: strongSelf.tonContext.keychain, localPassword: serverSalt)
+ |> deliverOnMainQueue).start(next: { walletInfo, wordList in
+ guard let strongSelf = self else {
+ return
+ }
+ controller.dismiss()
+ (strongSelf.navigationController as? NavigationController)?.replaceController(strongSelf, with: WalletSplashScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, mode: .created(walletInfo, wordList), walletCreatedPreloadState: nil), animated: true)
+ }, error: { _ in
+ displayError()
+ })
+ }, error: { _ in
+ displayError()
})
case let .created(walletInfo, wordList):
if let wordList = wordList {
@@ -227,23 +245,56 @@ public final class WalletSplashScreen: ViewController {
} else {
let controller = OverlayStatusController(theme: strongSelf.presentationData.theme, strings: strongSelf.presentationData.strings, type: .loading(cancelled: nil))
strongSelf.present(controller, in: .window(.root))
- let _ = (walletRestoreWords(network: strongSelf.context.account.network, walletInfo: walletInfo, tonInstance: strongSelf.tonContext.instance, keychain: strongSelf.tonContext.keychain)
- |> deliverOnMainQueue).start(next: { wordList in
- guard let strongSelf = self else {
- return
- }
- strongSelf.mode = .created(walletInfo, wordList)
- controller.dismiss()
- strongSelf.push(WalletWordDisplayScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, walletInfo: walletInfo, wordList: wordList, mode: .check, walletCreatedPreloadState: strongSelf.walletCreatedPreloadState))
- }, error: { _ in
- guard let strongSelf = self else {
- return
- }
- controller.dismiss()
- strongSelf.present(standardTextAlertController(theme: AlertControllerTheme(presentationTheme: strongSelf.presentationData.theme), title: strongSelf.presentationData.strings.Wallet_Created_ExportErrorTitle, text: strongSelf.presentationData.strings.Wallet_Created_ExportErrorText, actions: [
- TextAlertAction(type: .defaultAction, title: strongSelf.presentationData.strings.Common_OK, action: {
+
+ let context = strongSelf.context
+ let tonContext = strongSelf.tonContext
+ let _ = (strongSelf.tonContext.keychain.decrypt(walletInfo.encryptedSecret)
+ |> deliverOnMainQueue).start(next: { [weak controller] decryptedSecret in
+ let _ = (getServerWalletSalt(network: context.account.network)
+ |> deliverOnMainQueue).start(next: { [weak controller] serverSalt in
+ let _ = (walletRestoreWords(tonInstance: tonContext.instance, publicKey: walletInfo.publicKey, decryptedSecret: decryptedSecret, localPassword: serverSalt)
+ |> deliverOnMainQueue).start(next: { wordList in
+ controller?.dismiss()
+
+ guard let strongSelf = self else {
+ return
+ }
+
+ strongSelf.mode = .created(walletInfo, wordList)
+ strongSelf.push(WalletWordDisplayScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, walletInfo: walletInfo, wordList: wordList, mode: .check, walletCreatedPreloadState: strongSelf.walletCreatedPreloadState))
+ }, error: { _ in
+ guard let strongSelf = self else {
+ return
+ }
+
+ controller?.dismiss()
+
+ strongSelf.present(standardTextAlertController(theme: AlertControllerTheme(presentationTheme: strongSelf.presentationData.theme), title: strongSelf.presentationData.strings.Wallet_Created_ExportErrorTitle, text: strongSelf.presentationData.strings.Wallet_Created_ExportErrorText, actions: [
+ TextAlertAction(type: .defaultAction, title: strongSelf.presentationData.strings.Common_OK, action: {
+ })
+ ], actionLayout: .vertical), in: .window(.root))
})
- ], actionLayout: .vertical), in: .window(.root))
+ }, error: { [weak controller] _ in
+ guard let strongSelf = self else {
+ return
+ }
+
+ controller?.dismiss()
+
+ strongSelf.present(standardTextAlertController(theme: AlertControllerTheme(presentationTheme: strongSelf.presentationData.theme), title: strongSelf.presentationData.strings.Wallet_Created_ExportErrorTitle, text: strongSelf.presentationData.strings.Wallet_Created_ExportErrorText, actions: [
+ TextAlertAction(type: .defaultAction, title: strongSelf.presentationData.strings.Common_OK, action: {
+ })
+ ], actionLayout: .vertical), in: .window(.root))
+ })
+ }, error: { [weak controller] error in
+ controller?.dismiss()
+ if case .cancelled = error {
+ } else {
+ strongSelf.present(standardTextAlertController(theme: AlertControllerTheme(presentationTheme: strongSelf.presentationData.theme), title: strongSelf.presentationData.strings.Wallet_Created_ExportErrorTitle, text: strongSelf.presentationData.strings.Wallet_Created_ExportErrorText, actions: [
+ TextAlertAction(type: .defaultAction, title: strongSelf.presentationData.strings.Common_OK, action: {
+ })
+ ], actionLayout: .vertical), in: .window(.root))
+ }
})
}
case let .success(walletInfo):
@@ -720,16 +771,7 @@ private final class WalletSplashScreenNode: ViewControllerTracingNode {
let secondaryActionSize = self.secondaryActionTitleNode.updateLayout(CGSize(width: layout.size.width - sideInset * 2.0, height: layout.size.height))
let contentHeight = iconSize.height + iconSpacing + titleSize.height + titleSpacing + textSize.height
- let contentVerticalOrigin = floor((layout.size.height - contentHeight - iconSize.height / 2.0) / 2.0)
-
- let iconFrame = CGRect(origin: CGPoint(x: floor((layout.size.width - iconSize.width) / 2.0), y: contentVerticalOrigin), size: iconSize).offsetBy(dx: iconOffset.x, dy: iconOffset.y)
- transition.updateFrameAdditive(node: self.iconNode, frame: iconFrame)
- self.animationNode.updateLayout(size: iconFrame.size)
- transition.updateFrameAdditive(node: self.animationNode, frame: iconFrame)
- let titleFrame = CGRect(origin: CGPoint(x: floor((layout.size.width - titleSize.width) / 2.0), y: iconFrame.maxY + iconSpacing), size: titleSize)
- transition.updateFrameAdditive(node: self.titleNode, frame: titleFrame)
- let textFrame = CGRect(origin: CGPoint(x: floor((layout.size.width - textSize.width) / 2.0), y: titleFrame.maxY + titleSpacing), size: textSize)
- transition.updateFrameAdditive(node: self.textNode, frame: textFrame)
+ var contentVerticalOrigin = floor((layout.size.height - contentHeight - iconSize.height / 2.0) / 2.0)
let minimalBottomInset: CGFloat = 60.0
let bottomInset = layout.intrinsicInsets.bottom + max(minimalBottomInset, termsSize.height + termsSpacing * 2.0)
@@ -740,12 +782,27 @@ private final class WalletSplashScreenNode: ViewControllerTracingNode {
transition.updateFrame(node: self.buttonNode, frame: buttonFrame)
self.buttonNode.updateLayout(width: buttonFrame.width, transition: transition)
+ var maxContentVerticalOrigin = buttonFrame.minY - 12.0 - contentHeight
+
if !secondaryActionSize.width.isZero {
let secondaryActionFrame = CGRect(origin: CGPoint(x: floor((layout.size.width - secondaryActionSize.width) / 2.0), y: buttonFrame.minY - 20.0 - secondaryActionSize.height), size: secondaryActionSize)
transition.updateFrameAdditive(node: self.secondaryActionTitleNode, frame: secondaryActionFrame)
transition.updateFrame(node: self.secondaryActionButtonNode, frame: secondaryActionFrame.insetBy(dx: -10.0, dy: -10.0))
+
+ maxContentVerticalOrigin = secondaryActionFrame.minY - 12.0 - contentHeight
}
+ contentVerticalOrigin = min(contentVerticalOrigin, maxContentVerticalOrigin)
+
+ let iconFrame = CGRect(origin: CGPoint(x: floor((layout.size.width - iconSize.width) / 2.0), y: contentVerticalOrigin), size: iconSize).offsetBy(dx: iconOffset.x, dy: iconOffset.y)
+ transition.updateFrameAdditive(node: self.iconNode, frame: iconFrame)
+ self.animationNode.updateLayout(size: iconFrame.size)
+ transition.updateFrameAdditive(node: self.animationNode, frame: iconFrame)
+ let titleFrame = CGRect(origin: CGPoint(x: floor((layout.size.width - titleSize.width) / 2.0), y: iconFrame.maxY + iconSpacing), size: titleSize)
+ transition.updateFrameAdditive(node: self.titleNode, frame: titleFrame)
+ let textFrame = CGRect(origin: CGPoint(x: floor((layout.size.width - textSize.width) / 2.0), y: titleFrame.maxY + titleSpacing), size: textSize)
+ transition.updateFrameAdditive(node: self.textNode, frame: textFrame)
+
let termsFrame = CGRect(origin: CGPoint(x: floor((layout.size.width - termsSize.width) / 2.0), y: buttonFrame.maxY + floor((layout.size.height - layout.intrinsicInsets.bottom - buttonFrame.maxY - termsSize.height) / 2.0)), size: termsSize)
transition.updateFrameAdditive(node: self.termsNode, frame: termsFrame)
}
diff --git a/submodules/WalletUI/Sources/WalletUtils.swift b/submodules/WalletUI/Sources/WalletUtils.swift
index 92cd45461c..8f63247cd5 100644
--- a/submodules/WalletUI/Sources/WalletUtils.swift
+++ b/submodules/WalletUI/Sources/WalletUtils.swift
@@ -3,7 +3,7 @@ import TelegramStringFormatting
import UrlEscaping
let walletAddressLength: Int = 48
-let walletTextLimit: Int = 124
+let walletTextLimit: Int = 1024
func formatAddress(_ address: String) -> String {
var address = address
diff --git a/submodules/WalletUI/Sources/WalletWordCheckScreen.swift b/submodules/WalletUI/Sources/WalletWordCheckScreen.swift
index aa2d08f272..def201ec20 100644
--- a/submodules/WalletUI/Sources/WalletWordCheckScreen.swift
+++ b/submodules/WalletUI/Sources/WalletWordCheckScreen.swift
@@ -2178,30 +2178,8 @@ public final class WalletWordCheckScreen: ViewController {
], actionLayout: .vertical), in: .window(.root))
return
}
- let _ = (importWallet(postbox: strongSelf.context.account.postbox, network: strongSelf.context.account.network, tonInstance: strongSelf.tonContext.instance, keychain: strongSelf.tonContext.keychain, wordList: enteredWords)
- |> deliverOnMainQueue).start(next: { walletInfo in
- guard let strongSelf = self else {
- return
- }
- if let navigationController = strongSelf.navigationController as? NavigationController {
- var controllers = navigationController.viewControllers
- controllers = controllers.filter { controller in
- if controller is WalletSplashScreen {
- return false
- }
- if controller is WalletWordDisplayScreen {
- return false
- }
- if controller is WalletWordCheckScreen {
- return false
- }
- return true
- }
- controllers.append(WalletSplashScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, mode: .success(walletInfo), walletCreatedPreloadState: strongSelf.walletCreatedPreloadState))
- strongSelf.view.endEditing(true)
- navigationController.setViewControllers(controllers, animated: true)
- }
- }, error: { error in
+
+ let displayError: () -> Void = {
guard let strongSelf = self else {
return
}
@@ -2210,6 +2188,38 @@ public final class WalletWordCheckScreen: ViewController {
TextAlertAction(type: .defaultAction, title: strongSelf.presentationData.strings.Common_OK, action: {
})
], actionLayout: .vertical), in: .window(.root))
+ }
+
+ let _ = (getServerWalletSalt(network: strongSelf.context.account.network)
+ |> deliverOnMainQueue).start(next: { serverSalt in
+ let _ = (importWallet(postbox: strongSelf.context.account.postbox, tonInstance: strongSelf.tonContext.instance, keychain: strongSelf.tonContext.keychain, wordList: enteredWords, localPassword: serverSalt)
+ |> deliverOnMainQueue).start(next: { walletInfo in
+ guard let strongSelf = self else {
+ return
+ }
+ if let navigationController = strongSelf.navigationController as? NavigationController {
+ var controllers = navigationController.viewControllers
+ controllers = controllers.filter { controller in
+ if controller is WalletSplashScreen {
+ return false
+ }
+ if controller is WalletWordDisplayScreen {
+ return false
+ }
+ if controller is WalletWordCheckScreen {
+ return false
+ }
+ return true
+ }
+ controllers.append(WalletSplashScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, mode: .success(walletInfo), walletCreatedPreloadState: strongSelf.walletCreatedPreloadState))
+ strongSelf.view.endEditing(true)
+ navigationController.setViewControllers(controllers, animated: true)
+ }
+ }, error: { error in
+ displayError()
+ })
+ }, error: { _ in
+ displayError()
})
}
}, secondaryAction: { [weak self] in
diff --git a/submodules/ton/tonlib-src/crypto/CMakeLists.txt b/submodules/ton/tonlib-src/crypto/CMakeLists.txt
index c76de707c9..acf88eeef6 100644
--- a/submodules/ton/tonlib-src/crypto/CMakeLists.txt
+++ b/submodules/ton/tonlib-src/crypto/CMakeLists.txt
@@ -315,6 +315,8 @@ if (NOT CMAKE_CROSSCOMPILING)
GenFif(DEST smartcont/config-code.fif SOURCE smartcont/config-code.fc)
GenFif(DEST smartcont/wallet-code.fif SOURCE smartcont/wallet-code.fc)
GenFif(DEST smartcont/simple-wallet-code.fif SOURCE smartcont/simple-wallet-code.fc)
+ GenFif(DEST smartcont/highload-wallet-code.fif SOURCE smartcont/highload-wallet-code.fc)
+ GenFif(DEST smartcont/highload-wallet-v2-code.fif SOURCE smartcont/highload-wallet-v2-code.fc)
GenFif(DEST smartcont/elector-code.fif SOURCE smartcont/elector-code.fc)
endif()
@@ -333,3 +335,6 @@ target_link_libraries(dump-block PUBLIC ton_crypto fift-lib ton_block)
if (WINGETOPT_FOUND)
target_link_libraries_system(dump-block wingetopt)
endif()
+
+install(TARGETS fift func RUNTIME DESTINATION bin)
+install(DIRECTORY fift/lib/ DESTINATION lib/fift)
diff --git a/submodules/ton/tonlib-src/crypto/block/block-auto.cpp b/submodules/ton/tonlib-src/crypto/block/block-auto.cpp
index 14b34ee6bf..75dd9f659e 100644
--- a/submodules/ton/tonlib-src/crypto/block/block-auto.cpp
+++ b/submodules/ton/tonlib-src/crypto/block/block-auto.cpp
@@ -8891,6 +8891,7 @@ bool TransactionDescr::skip(vm::CellSlice& cs) const {
&& cs.advance(2);
case trans_split_prepare:
return cs.advance(528)
+ && t_Maybe_TrStoragePhase.skip(cs)
&& t_TrComputePhase.skip(cs)
&& t_Maybe_Ref_TrActionPhase.skip(cs)
&& cs.advance(2);
@@ -8902,6 +8903,7 @@ bool TransactionDescr::skip(vm::CellSlice& cs) const {
&& cs.advance(1);
case trans_merge_install:
return cs.advance_ext(0x10210)
+ && t_Maybe_TrStoragePhase.skip(cs)
&& t_Maybe_TrCreditPhase.skip(cs)
&& t_TrComputePhase.skip(cs)
&& t_Maybe_Ref_TrActionPhase.skip(cs)
@@ -8932,6 +8934,7 @@ bool TransactionDescr::validate_skip(vm::CellSlice& cs, bool weak) const {
&& cs.advance(2);
case trans_split_prepare:
return cs.advance(528)
+ && t_Maybe_TrStoragePhase.validate_skip(cs, weak)
&& t_TrComputePhase.validate_skip(cs, weak)
&& t_Maybe_Ref_TrActionPhase.validate_skip(cs, weak)
&& cs.advance(2);
@@ -8947,6 +8950,7 @@ bool TransactionDescr::validate_skip(vm::CellSlice& cs, bool weak) const {
return cs.fetch_ulong(4) == 7
&& cs.advance(524)
&& t_Transaction.validate_skip_ref(cs, weak)
+ && t_Maybe_TrStoragePhase.validate_skip(cs, weak)
&& t_Maybe_TrCreditPhase.validate_skip(cs, weak)
&& t_TrComputePhase.validate_skip(cs, weak)
&& t_Maybe_Ref_TrActionPhase.validate_skip(cs, weak)
@@ -8998,7 +9002,7 @@ bool TransactionDescr::cell_unpack_trans_storage(Ref cell_ref, Ref cell_ref, TransactionDescr::Rec
bool TransactionDescr::unpack(vm::CellSlice& cs, TransactionDescr::Record_trans_split_prepare& data) const {
return cs.fetch_ulong(4) == 4
&& cs.fetch_subslice_to(524, data.split_info)
+ && t_Maybe_TrStoragePhase.fetch_to(cs, data.storage_ph)
&& t_TrComputePhase.fetch_to(cs, data.compute_ph)
&& t_Maybe_Ref_TrActionPhase.fetch_to(cs, data.action)
&& cs.fetch_bool_to(data.aborted)
@@ -9082,6 +9087,7 @@ bool TransactionDescr::unpack(vm::CellSlice& cs, TransactionDescr::Record_trans_
return cs.fetch_ulong(4) == 7
&& cs.fetch_subslice_to(524, data.split_info)
&& cs.fetch_ref_to(data.prepare_transaction)
+ && t_Maybe_TrStoragePhase.fetch_to(cs, data.storage_ph)
&& t_Maybe_TrCreditPhase.fetch_to(cs, data.credit_ph)
&& t_TrComputePhase.fetch_to(cs, data.compute_ph)
&& t_Maybe_Ref_TrActionPhase.fetch_to(cs, data.action)
@@ -9135,7 +9141,7 @@ bool TransactionDescr::cell_pack_trans_storage(Ref& cell_ref, Ref& cell_ref, const TransactionDescr
bool TransactionDescr::pack(vm::CellBuilder& cb, const TransactionDescr::Record_trans_split_prepare& data) const {
return cb.store_long_bool(4, 4)
&& cb.append_cellslice_chk(data.split_info, 524)
+ && t_Maybe_TrStoragePhase.store_from(cb, data.storage_ph)
&& t_TrComputePhase.store_from(cb, data.compute_ph)
&& t_Maybe_Ref_TrActionPhase.store_from(cb, data.action)
&& cb.store_ulong_rchk_bool(data.aborted, 1)
@@ -9213,6 +9220,7 @@ bool TransactionDescr::pack(vm::CellBuilder& cb, const TransactionDescr::Record_
return cb.store_long_bool(7, 4)
&& cb.append_cellslice_chk(data.split_info, 524)
&& cb.store_ref_bool(data.prepare_transaction)
+ && t_Maybe_TrStoragePhase.store_from(cb, data.storage_ph)
&& t_Maybe_TrCreditPhase.store_from(cb, data.credit_ph)
&& t_TrComputePhase.store_from(cb, data.compute_ph)
&& t_Maybe_Ref_TrActionPhase.store_from(cb, data.action)
@@ -9254,7 +9262,7 @@ bool TransactionDescr::print_skip(PrettyPrinter& pp, vm::CellSlice& cs) const {
return cs.advance(3)
&& pp.open("trans_tick_tock")
&& pp.fetch_uint_field(cs, 1, "is_tock")
- && pp.field("storage")
+ && pp.field("storage_ph")
&& t_TrStoragePhase.print_skip(pp, cs)
&& pp.field("compute_ph")
&& t_TrComputePhase.print_skip(pp, cs)
@@ -9268,6 +9276,8 @@ bool TransactionDescr::print_skip(PrettyPrinter& pp, vm::CellSlice& cs) const {
&& pp.open("trans_split_prepare")
&& pp.field("split_info")
&& t_SplitMergeInfo.print_skip(pp, cs)
+ && pp.field("storage_ph")
+ && t_Maybe_TrStoragePhase.print_skip(pp, cs)
&& pp.field("compute_ph")
&& t_TrComputePhase.print_skip(pp, cs)
&& pp.field("action")
@@ -9300,6 +9310,8 @@ bool TransactionDescr::print_skip(PrettyPrinter& pp, vm::CellSlice& cs) const {
&& t_SplitMergeInfo.print_skip(pp, cs)
&& pp.field("prepare_transaction")
&& t_Transaction.print_ref(pp, cs.fetch_ref())
+ && pp.field("storage_ph")
+ && t_Maybe_TrStoragePhase.print_skip(pp, cs)
&& pp.field("credit_ph")
&& t_Maybe_TrCreditPhase.print_skip(pp, cs)
&& pp.field("compute_ph")
@@ -14089,11 +14101,13 @@ const StoragePrices t_StoragePrices;
//
// code for type `GasLimitsPrices`
//
-constexpr unsigned char GasLimitsPrices::cons_tag[2];
+constexpr unsigned char GasLimitsPrices::cons_tag[3];
int GasLimitsPrices::get_tag(const vm::CellSlice& cs) const {
- switch (cs.bselect(6, 0x180000000000000ULL)) {
+ switch (cs.bselect(6, 0x1b0000000000000ULL)) {
case 0:
+ return gas_flat_pfx;
+ case 2:
return cs.bit_at(6) ? gas_prices_ext : gas_prices;
default:
return -1;
@@ -14106,6 +14120,8 @@ int GasLimitsPrices::check_tag(const vm::CellSlice& cs) const {
return cs.prefetch_ulong(8) == 0xdd ? gas_prices : -1;
case gas_prices_ext:
return cs.prefetch_ulong(8) == 0xde ? gas_prices_ext : -1;
+ case gas_flat_pfx:
+ return cs.prefetch_ulong(8) == 0xd1 ? gas_flat_pfx : -1;
}
return -1;
}
@@ -14116,6 +14132,9 @@ bool GasLimitsPrices::skip(vm::CellSlice& cs) const {
return cs.advance(392);
case gas_prices_ext:
return cs.advance(456);
+ case gas_flat_pfx:
+ return cs.advance(136)
+ && skip(cs);
}
return false;
}
@@ -14128,6 +14147,10 @@ bool GasLimitsPrices::validate_skip(vm::CellSlice& cs, bool weak) const {
case gas_prices_ext:
return cs.fetch_ulong(8) == 0xde
&& cs.advance(448);
+ case gas_flat_pfx:
+ return cs.fetch_ulong(8) == 0xd1
+ && cs.advance(128)
+ && validate_skip(cs, weak);
}
return false;
}
@@ -14165,6 +14188,32 @@ bool GasLimitsPrices::cell_unpack(Ref cell_ref, GasLimitsPrices::Recor
return unpack(cs, data) && cs.empty_ext();
}
+bool GasLimitsPrices::unpack(vm::CellSlice& cs, GasLimitsPrices::Record_gas_flat_pfx& data) const {
+ return cs.fetch_ulong(8) == 0xd1
+ && cs.fetch_uint_to(64, data.flat_gas_limit)
+ && cs.fetch_uint_to(64, data.flat_gas_price)
+ && fetch_to(cs, data.other);
+}
+
+bool GasLimitsPrices::unpack_gas_flat_pfx(vm::CellSlice& cs, unsigned long long& flat_gas_limit, unsigned long long& flat_gas_price, Ref& other) const {
+ return cs.fetch_ulong(8) == 0xd1
+ && cs.fetch_uint_to(64, flat_gas_limit)
+ && cs.fetch_uint_to(64, flat_gas_price)
+ && fetch_to(cs, other);
+}
+
+bool GasLimitsPrices::cell_unpack(Ref cell_ref, GasLimitsPrices::Record_gas_flat_pfx& data) const {
+ if (cell_ref.is_null()) { return false; }
+ auto cs = load_cell_slice(std::move(cell_ref));
+ return unpack(cs, data) && cs.empty_ext();
+}
+
+bool GasLimitsPrices::cell_unpack_gas_flat_pfx(Ref cell_ref, unsigned long long& flat_gas_limit, unsigned long long& flat_gas_price, Ref& other) const {
+ if (cell_ref.is_null()) { return false; }
+ auto cs = load_cell_slice(std::move(cell_ref));
+ return unpack_gas_flat_pfx(cs, flat_gas_limit, flat_gas_price, other) && cs.empty_ext();
+}
+
bool GasLimitsPrices::pack(vm::CellBuilder& cb, const GasLimitsPrices::Record_gas_prices& data) const {
return cb.store_long_bool(0xdd, 8)
&& cb.store_ulong_rchk_bool(data.gas_price, 64)
@@ -14196,6 +14245,30 @@ bool GasLimitsPrices::cell_pack(Ref& cell_ref, const GasLimitsPrices::
return pack(cb, data) && std::move(cb).finalize_to(cell_ref);
}
+bool GasLimitsPrices::pack(vm::CellBuilder& cb, const GasLimitsPrices::Record_gas_flat_pfx& data) const {
+ return cb.store_long_bool(0xd1, 8)
+ && cb.store_ulong_rchk_bool(data.flat_gas_limit, 64)
+ && cb.store_ulong_rchk_bool(data.flat_gas_price, 64)
+ && store_from(cb, data.other);
+}
+
+bool GasLimitsPrices::pack_gas_flat_pfx(vm::CellBuilder& cb, unsigned long long flat_gas_limit, unsigned long long flat_gas_price, Ref other) const {
+ return cb.store_long_bool(0xd1, 8)
+ && cb.store_ulong_rchk_bool(flat_gas_limit, 64)
+ && cb.store_ulong_rchk_bool(flat_gas_price, 64)
+ && store_from(cb, other);
+}
+
+bool GasLimitsPrices::cell_pack(Ref& cell_ref, const GasLimitsPrices::Record_gas_flat_pfx& data) const {
+ vm::CellBuilder cb;
+ return pack(cb, data) && std::move(cb).finalize_to(cell_ref);
+}
+
+bool GasLimitsPrices::cell_pack_gas_flat_pfx(Ref& cell_ref, unsigned long long flat_gas_limit, unsigned long long flat_gas_price, Ref other) const {
+ vm::CellBuilder cb;
+ return pack_gas_flat_pfx(cb, flat_gas_limit, flat_gas_price, std::move(other)) && std::move(cb).finalize_to(cell_ref);
+}
+
bool GasLimitsPrices::print_skip(PrettyPrinter& pp, vm::CellSlice& cs) const {
switch (get_tag(cs)) {
case gas_prices:
@@ -14219,6 +14292,14 @@ bool GasLimitsPrices::print_skip(PrettyPrinter& pp, vm::CellSlice& cs) const {
&& pp.fetch_uint_field(cs, 64, "freeze_due_limit")
&& pp.fetch_uint_field(cs, 64, "delete_due_limit")
&& pp.close();
+ case gas_flat_pfx:
+ return cs.fetch_ulong(8) == 0xd1
+ && pp.open("gas_flat_pfx")
+ && pp.fetch_uint_field(cs, 64, "flat_gas_limit")
+ && pp.fetch_uint_field(cs, 64, "flat_gas_price")
+ && pp.field("other")
+ && print_skip(pp, cs)
+ && pp.close();
}
return pp.fail("unknown constructor for GasLimitsPrices");
}
diff --git a/submodules/ton/tonlib-src/crypto/block/block-auto.h b/submodules/ton/tonlib-src/crypto/block/block-auto.h
index 66b9700333..fb9e1770d6 100644
--- a/submodules/ton/tonlib-src/crypto/block/block-auto.h
+++ b/submodules/ton/tonlib-src/crypto/block/block-auto.h
@@ -3831,24 +3831,25 @@ struct TransactionDescr::Record_trans_ord {
struct TransactionDescr::Record_trans_tick_tock {
typedef TransactionDescr type_class;
bool is_tock; // is_tock : Bool
- Ref storage; // storage : TrStoragePhase
+ Ref storage_ph; // storage_ph : TrStoragePhase
Ref compute_ph; // compute_ph : TrComputePhase
Ref action; // action : Maybe ^TrActionPhase
bool aborted; // aborted : Bool
bool destroyed; // destroyed : Bool
Record_trans_tick_tock() = default;
- Record_trans_tick_tock(bool _is_tock, Ref _storage, Ref _compute_ph, Ref _action, bool _aborted, bool _destroyed) : is_tock(_is_tock), storage(std::move(_storage)), compute_ph(std::move(_compute_ph)), action(std::move(_action)), aborted(_aborted), destroyed(_destroyed) {}
+ Record_trans_tick_tock(bool _is_tock, Ref _storage_ph, Ref _compute_ph, Ref _action, bool _aborted, bool _destroyed) : is_tock(_is_tock), storage_ph(std::move(_storage_ph)), compute_ph(std::move(_compute_ph)), action(std::move(_action)), aborted(_aborted), destroyed(_destroyed) {}
};
struct TransactionDescr::Record_trans_split_prepare {
typedef TransactionDescr type_class;
Ref split_info; // split_info : SplitMergeInfo
+ Ref storage_ph; // storage_ph : Maybe TrStoragePhase
Ref compute_ph; // compute_ph : TrComputePhase
Ref action; // action : Maybe ^TrActionPhase
bool aborted; // aborted : Bool
bool destroyed; // destroyed : Bool
Record_trans_split_prepare() = default;
- Record_trans_split_prepare(Ref _split_info, Ref _compute_ph, Ref _action, bool _aborted, bool _destroyed) : split_info(std::move(_split_info)), compute_ph(std::move(_compute_ph)), action(std::move(_action)), aborted(_aborted), destroyed(_destroyed) {}
+ Record_trans_split_prepare(Ref _split_info, Ref _storage_ph, Ref _compute_ph, Ref _action, bool _aborted, bool _destroyed) : split_info(std::move(_split_info)), storage_ph(std::move(_storage_ph)), compute_ph(std::move(_compute_ph)), action(std::move(_action)), aborted(_aborted), destroyed(_destroyed) {}
};
struct TransactionDescr::Record_trans_split_install {
@@ -3873,13 +3874,14 @@ struct TransactionDescr::Record_trans_merge_install {
typedef TransactionDescr type_class;
Ref split_info; // split_info : SplitMergeInfo
Ref prepare_transaction; // prepare_transaction : ^Transaction
+ Ref storage_ph; // storage_ph : Maybe TrStoragePhase
Ref credit_ph; // credit_ph : Maybe TrCreditPhase
Ref compute_ph; // compute_ph : TrComputePhase
Ref action; // action : Maybe ^TrActionPhase
bool aborted; // aborted : Bool
bool destroyed; // destroyed : Bool
Record_trans_merge_install() = default;
- Record_trans_merge_install(Ref _split_info, Ref _prepare_transaction, Ref _credit_ph, Ref _compute_ph, Ref _action, bool _aborted, bool _destroyed) : split_info(std::move(_split_info)), prepare_transaction(std::move(_prepare_transaction)), credit_ph(std::move(_credit_ph)), compute_ph(std::move(_compute_ph)), action(std::move(_action)), aborted(_aborted), destroyed(_destroyed) {}
+ Record_trans_merge_install(Ref _split_info, Ref _prepare_transaction, Ref _storage_ph, Ref _credit_ph, Ref _compute_ph, Ref _action, bool _aborted, bool _destroyed) : split_info(std::move(_split_info)), prepare_transaction(std::move(_prepare_transaction)), storage_ph(std::move(_storage_ph)), credit_ph(std::move(_credit_ph)), compute_ph(std::move(_compute_ph)), action(std::move(_action)), aborted(_aborted), destroyed(_destroyed) {}
};
extern const TransactionDescr t_TransactionDescr;
@@ -6166,11 +6168,12 @@ extern const StoragePrices t_StoragePrices;
//
struct GasLimitsPrices final : TLB_Complex {
- enum { gas_prices, gas_prices_ext };
+ enum { gas_flat_pfx, gas_prices, gas_prices_ext };
static constexpr int cons_len_exact = 8;
- static constexpr unsigned char cons_tag[2] = { 0xdd, 0xde };
+ static constexpr unsigned char cons_tag[3] = { 0xd1, 0xdd, 0xde };
struct Record_gas_prices;
struct Record_gas_prices_ext;
+ struct Record_gas_flat_pfx;
bool skip(vm::CellSlice& cs) const override;
bool validate_skip(vm::CellSlice& cs, bool weak = false) const override;
bool unpack(vm::CellSlice& cs, Record_gas_prices& data) const;
@@ -6181,6 +6184,14 @@ struct GasLimitsPrices final : TLB_Complex {
bool cell_unpack(Ref cell_ref, Record_gas_prices_ext& data) const;
bool pack(vm::CellBuilder& cb, const Record_gas_prices_ext& data) const;
bool cell_pack(Ref& cell_ref, const Record_gas_prices_ext& data) const;
+ bool unpack(vm::CellSlice& cs, Record_gas_flat_pfx& data) const;
+ bool unpack_gas_flat_pfx(vm::CellSlice& cs, unsigned long long& flat_gas_limit, unsigned long long& flat_gas_price, Ref& other) const;
+ bool cell_unpack(Ref cell_ref, Record_gas_flat_pfx& data) const;
+ bool cell_unpack_gas_flat_pfx(Ref cell_ref, unsigned long long& flat_gas_limit, unsigned long long& flat_gas_price, Ref& other) const;
+ bool pack(vm::CellBuilder& cb, const Record_gas_flat_pfx& data) const;
+ bool pack_gas_flat_pfx(vm::CellBuilder& cb, unsigned long long flat_gas_limit, unsigned long long flat_gas_price, Ref other) const;
+ bool cell_pack(Ref& cell_ref, const Record_gas_flat_pfx& data) const;
+ bool cell_pack_gas_flat_pfx(Ref& cell_ref, unsigned long long flat_gas_limit, unsigned long long flat_gas_price, Ref other) const;
bool print_skip(PrettyPrinter& pp, vm::CellSlice& cs) const override;
std::ostream& print_type(std::ostream& os) const override {
return os << "GasLimitsPrices";
@@ -6214,6 +6225,15 @@ struct GasLimitsPrices::Record_gas_prices_ext {
Record_gas_prices_ext(unsigned long long _gas_price, unsigned long long _gas_limit, unsigned long long _special_gas_limit, unsigned long long _gas_credit, unsigned long long _block_gas_limit, unsigned long long _freeze_due_limit, unsigned long long _delete_due_limit) : gas_price(_gas_price), gas_limit(_gas_limit), special_gas_limit(_special_gas_limit), gas_credit(_gas_credit), block_gas_limit(_block_gas_limit), freeze_due_limit(_freeze_due_limit), delete_due_limit(_delete_due_limit) {}
};
+struct GasLimitsPrices::Record_gas_flat_pfx {
+ typedef GasLimitsPrices type_class;
+ unsigned long long flat_gas_limit; // flat_gas_limit : uint64
+ unsigned long long flat_gas_price; // flat_gas_price : uint64
+ Ref other; // other : GasLimitsPrices
+ Record_gas_flat_pfx() = default;
+ Record_gas_flat_pfx(unsigned long long _flat_gas_limit, unsigned long long _flat_gas_price, Ref _other) : flat_gas_limit(_flat_gas_limit), flat_gas_price(_flat_gas_price), other(std::move(_other)) {}
+};
+
extern const GasLimitsPrices t_GasLimitsPrices;
//
@@ -6522,7 +6542,7 @@ extern const ValidatorSignedTempKey t_ValidatorSignedTempKey;
//
struct ConfigParam final : TLB_Complex {
- enum { cons32, cons33, cons34, cons35, cons36, cons37, config_mc_block_limits, config_block_limits, cons14, cons0, cons1, cons2, cons3, cons4, cons6, cons7, cons9, cons12, cons15, cons16, cons17, cons18, cons31, cons39, cons28, cons8, cons29, config_mc_gas_prices, config_gas_prices, config_mc_fwd_prices, config_fwd_prices };
+ enum { cons32, cons33, cons34, cons35, cons36, cons37, config_mc_block_limits, config_block_limits, cons14, cons0, cons1, cons2, cons3, cons4, cons6, cons7, cons9, cons12, cons15, cons16, cons17, cons18, cons31, cons39, cons28, cons8, config_mc_gas_prices, config_gas_prices, cons29, config_mc_fwd_prices, config_fwd_prices };
static constexpr int cons_len_exact = 0;
int m_;
ConfigParam(int m) : m_(m) {}
diff --git a/submodules/ton/tonlib-src/crypto/block/block-parse.cpp b/submodules/ton/tonlib-src/crypto/block/block-parse.cpp
index 89fc3d6f02..c410e2cb53 100644
--- a/submodules/ton/tonlib-src/crypto/block/block-parse.cpp
+++ b/submodules/ton/tonlib-src/crypto/block/block-parse.cpp
@@ -1143,6 +1143,20 @@ bool TrStoragePhase::validate_skip(vm::CellSlice& cs, bool weak) const {
&& t_AccStatusChange.validate_skip(cs, weak); // status_change:AccStatusChange
}
+bool TrStoragePhase::get_storage_fees(vm::CellSlice& cs, td::RefInt256& storage_fees) const {
+ return t_Grams.as_integer_skip_to(cs, storage_fees); // storage_fees_collected:Grams
+}
+
+bool TrStoragePhase::maybe_get_storage_fees(vm::CellSlice& cs, td::RefInt256& storage_fees) const {
+ auto z = cs.fetch_ulong(1);
+ if (!z) {
+ storage_fees = td::make_refint(0);
+ return true;
+ } else {
+ return z == 1 && get_storage_fees(cs, storage_fees);
+ }
+}
+
const TrStoragePhase t_TrStoragePhase;
bool TrCreditPhase::skip(vm::CellSlice& cs) const {
@@ -1322,13 +1336,14 @@ bool TransactionDescr::skip(vm::CellSlice& cs) const {
&& t_TrStoragePhase.skip(cs); // storage_ph:TrStoragePhase
case trans_tick_tock:
return cs.advance(4) // trans_tick_tock$001 is_tock:Bool
- && t_TrStoragePhase.skip(cs) // storage:TrStoragePhase
+ && t_TrStoragePhase.skip(cs) // storage_ph:TrStoragePhase
&& t_TrComputePhase.skip(cs) // compute_ph:TrComputePhase
&& Maybe>{}.skip(cs) // action:(Maybe ^TrActionPhase)
&& cs.advance(2); // aborted:Bool destroyed:Bool
case trans_split_prepare:
return cs.advance(4) // trans_split_prepare$0100
&& t_SplitMergeInfo.skip(cs) // split_info:SplitMergeInfo
+ && Maybe{}.skip(cs) // storage_ph:(Maybe TrStoragePhase)
&& t_TrComputePhase.skip(cs) // compute_ph:TrComputePhase
&& Maybe>{}.skip(cs) // action:(Maybe ^TrActionPhase)
&& cs.advance(2); // aborted:Bool destroyed:Bool
@@ -1346,6 +1361,7 @@ bool TransactionDescr::skip(vm::CellSlice& cs) const {
return cs.advance(4) // trans_merge_install$0111
&& t_SplitMergeInfo.skip(cs) // split_info:SplitMergeInfo
&& t_Ref_Transaction.skip(cs) // prepare_transaction:^Transaction
+ && Maybe{}.skip(cs) // storage_ph:(Maybe TrStoragePhase)
&& Maybe{}.skip(cs) // credit_ph:(Maybe TrCreditPhase)
&& Maybe{}.skip(cs) // compute_ph:TrComputePhase
&& Maybe>{}.skip(cs) // action:(Maybe ^TrActionPhase)
@@ -1370,13 +1386,14 @@ bool TransactionDescr::validate_skip(vm::CellSlice& cs, bool weak) const {
&& t_TrStoragePhase.validate_skip(cs, weak); // storage_ph:TrStoragePhase
case trans_tick_tock:
return cs.advance(4) // trans_tick_tock$001 is_tock:Bool
- && t_TrStoragePhase.validate_skip(cs, weak) // storage:TrStoragePhase
+ && t_TrStoragePhase.validate_skip(cs, weak) // storage_ph:TrStoragePhase
&& t_TrComputePhase.validate_skip(cs, weak) // compute_ph:TrComputePhase
&& Maybe>{}.validate_skip(cs, weak) // action:(Maybe ^TrActionPhase)
&& cs.advance(2); // aborted:Bool destroyed:Bool
case trans_split_prepare:
return cs.advance(4) // trans_split_prepare$0100
&& t_SplitMergeInfo.validate_skip(cs, weak) // split_info:SplitMergeInfo
+ && Maybe{}.validate_skip(cs, weak) // storage_ph:(Maybe TrStoragePhase)
&& t_TrComputePhase.validate_skip(cs, weak) // compute_ph:TrComputePhase
&& Maybe>{}.validate_skip(cs, weak) // action:(Maybe ^TrActionPhase)
&& cs.advance(2); // aborted:Bool destroyed:Bool
@@ -1394,6 +1411,7 @@ bool TransactionDescr::validate_skip(vm::CellSlice& cs, bool weak) const {
return cs.advance(4) // trans_merge_install$0111
&& t_SplitMergeInfo.validate_skip(cs, weak) // split_info:SplitMergeInfo
&& t_Ref_Transaction.validate_skip(cs, weak) // prepare_transaction:^Transaction
+ && Maybe{}.validate_skip(cs, weak) // storage_ph:(Maybe TrStoragePhase)
&& Maybe{}.validate_skip(cs, weak) // credit_ph:(Maybe TrCreditPhase)
&& Maybe{}.validate_skip(cs, weak) // compute_ph:TrComputePhase
&& Maybe>{}.validate_skip(cs, weak) // action:(Maybe ^TrActionPhase)
@@ -1407,6 +1425,53 @@ int TransactionDescr::get_tag(const vm::CellSlice& cs) const {
return (t >= 0 && t <= 7) ? (t == 3 ? 2 : t) : -1;
}
+bool TransactionDescr::skip_to_storage_phase(vm::CellSlice& cs, bool& found) const {
+ found = false;
+ switch (get_tag(cs)) {
+ case trans_ord:
+ return cs.advance(4 + 1) // trans_ord$0000 storage_first:Bool
+ && cs.fetch_bool_to(found); // storage_ph:(Maybe TrStoragePhase)
+ case trans_storage:
+ return cs.advance(4) // trans_storage$0001
+ && (found = true); // storage_ph:TrStoragePhase
+ case trans_tick_tock:
+ return cs.advance(4) // trans_tick_tock$001 is_tock:Bool
+ && (found = true); // storage_ph:TrStoragePhase
+ case trans_split_prepare:
+ return cs.advance(4) // trans_split_prepare$0100
+ && t_SplitMergeInfo.skip(cs) // split_info:SplitMergeInfo
+ && cs.fetch_bool_to(found); // storage_ph:(Maybe TrStoragePhase)
+ case trans_split_install:
+ return true;
+ case trans_merge_prepare:
+ return cs.advance(4) // trans_merge_prepare$0110
+ && t_SplitMergeInfo.skip(cs) // split_info:SplitMergeInfo
+ && (found = true); // storage_ph:TrStoragePhase
+ case trans_merge_install:
+ return cs.advance(4) // trans_merge_install$0111
+ && t_SplitMergeInfo.skip(cs) // split_info:SplitMergeInfo
+ && t_Ref_Transaction.skip(cs) // prepare_transaction:^Transaction
+ && cs.fetch_bool_to(found); // storage_ph:(Maybe TrStoragePhase)
+ }
+ return false;
+}
+
+bool TransactionDescr::get_storage_fees(Ref cell, td::RefInt256& storage_fees) const {
+ if (cell.is_null()) {
+ return false;
+ }
+ auto cs = vm::load_cell_slice(std::move(cell));
+ bool found;
+ if (!skip_to_storage_phase(cs, found)) {
+ return false;
+ } else if (found) {
+ return t_TrStoragePhase.get_storage_fees(cs, storage_fees);
+ } else {
+ storage_fees = td::make_refint(0);
+ return true;
+ }
+}
+
const TransactionDescr t_TransactionDescr;
bool Transaction_aux::skip(vm::CellSlice& cs) const {
@@ -1447,6 +1512,32 @@ bool Transaction::validate_skip(vm::CellSlice& cs, bool weak) const {
&& RefTo{}.validate_skip(cs, weak); // description:^TransactionDescr
}
+bool Transaction::get_storage_fees(Ref cell, td::RefInt256& storage_fees) const {
+ Ref tdescr;
+ return get_descr(std::move(cell), tdescr) && t_TransactionDescr.get_storage_fees(std::move(tdescr), storage_fees);
+}
+
+bool Transaction::get_descr(Ref cell, Ref& tdescr) const {
+ if (cell.is_null()) {
+ return false;
+ } else {
+ auto cs = vm::load_cell_slice(std::move(cell));
+ return cs.is_valid() && get_descr(cs, tdescr) && cs.empty_ext();
+ }
+}
+
+bool Transaction::get_descr(vm::CellSlice& cs, Ref& tdescr) const {
+ return cs.advance(
+ 4 + 256 + 64 + 256 + 64 + 32 +
+ 15) // transaction$0111 account_addr:uint256 lt:uint64 prev_trans_hash:bits256 prev_trans_lt:uint64 now:uint32 outmsg_cnt:uint15
+ && t_AccountStatus.skip(cs) // orig_status:AccountStatus
+ && t_AccountStatus.skip(cs) // end_status:AccountStatus
+ && cs.advance_refs(1) // ^[ in_msg:(Maybe ^Message) out_msgs:(HashmapE 15 ^Message) ]
+ && t_CurrencyCollection.skip(cs) // total_fees:CurrencyCollection
+ && cs.advance_refs(1) // state_update:^(MERKLE_UPDATE Account)
+ && cs.fetch_ref_to(tdescr); // description:^TransactionDescr
+}
+
bool Transaction::get_total_fees(vm::CellSlice&& cs, block::CurrencyCollection& total_fees) const {
return cs.is_valid() && cs.fetch_ulong(4) == 7 // transaction$0111
&&
diff --git a/submodules/ton/tonlib-src/crypto/block/block-parse.h b/submodules/ton/tonlib-src/crypto/block/block-parse.h
index 381dc149f3..acbe9dd426 100644
--- a/submodules/ton/tonlib-src/crypto/block/block-parse.h
+++ b/submodules/ton/tonlib-src/crypto/block/block-parse.h
@@ -614,6 +614,8 @@ extern const AccStatusChange t_AccStatusChange;
struct TrStoragePhase final : TLB_Complex {
bool skip(vm::CellSlice& cs) const override;
bool validate_skip(vm::CellSlice& cs, bool weak = false) const override;
+ bool get_storage_fees(vm::CellSlice& cs, td::RefInt256& storage_fees) const;
+ bool maybe_get_storage_fees(vm::CellSlice& cs, td::RefInt256& storage_fees) const;
};
extern const TrStoragePhase t_TrStoragePhase;
@@ -693,6 +695,8 @@ struct TransactionDescr final : TLB_Complex {
bool skip(vm::CellSlice& cs) const override;
bool validate_skip(vm::CellSlice& cs, bool weak = false) const override;
int get_tag(const vm::CellSlice& cs) const override;
+ bool skip_to_storage_phase(vm::CellSlice& cs, bool& found) const;
+ bool get_storage_fees(Ref cell, td::RefInt256& storage_fees) const;
};
extern const TransactionDescr t_TransactionDescr;
@@ -708,6 +712,9 @@ struct Transaction final : TLB_Complex {
bool skip(vm::CellSlice& cs) const override;
bool validate_skip(vm::CellSlice& cs, bool weak = false) const override;
bool get_total_fees(vm::CellSlice&& cs, block::CurrencyCollection& total_fees) const;
+ bool get_descr(Ref cell, Ref& tdescr) const;
+ bool get_descr(vm::CellSlice& cs, Ref& tdescr) const;
+ bool get_storage_fees(Ref cell, td::RefInt256& storage_fees) const;
};
extern const Transaction t_Transaction;
diff --git a/submodules/ton/tonlib-src/crypto/block/block.cpp b/submodules/ton/tonlib-src/crypto/block/block.cpp
index 6a0234f3ab..7b8074bfbc 100644
--- a/submodules/ton/tonlib-src/crypto/block/block.cpp
+++ b/submodules/ton/tonlib-src/crypto/block/block.cpp
@@ -368,14 +368,14 @@ std::unique_ptr MsgProcessedUptoCollection::unpack(t
return v && v->valid ? std::move(v) : std::unique_ptr{};
}
-bool MsgProcessedUpto::contains(const MsgProcessedUpto& other) const& {
+bool MsgProcessedUpto::contains(const MsgProcessedUpto& other) const & {
return ton::shard_is_ancestor(shard, other.shard) && mc_seqno >= other.mc_seqno &&
(last_inmsg_lt > other.last_inmsg_lt ||
(last_inmsg_lt == other.last_inmsg_lt && !(last_inmsg_hash < other.last_inmsg_hash)));
}
bool MsgProcessedUpto::contains(ton::ShardId other_shard, ton::LogicalTime other_lt, td::ConstBitPtr other_hash,
- ton::BlockSeqno other_mc_seqno) const& {
+ ton::BlockSeqno other_mc_seqno) const & {
return ton::shard_is_ancestor(shard, other_shard) && mc_seqno >= other_mc_seqno &&
(last_inmsg_lt > other_lt || (last_inmsg_lt == other_lt && !(last_inmsg_hash < other_hash)));
}
@@ -552,7 +552,9 @@ bool MsgProcessedUpto::already_processed(const EnqueuedMsgDescr& msg) const {
if (msg.lt_ == last_inmsg_lt && last_inmsg_hash < msg.hash_) {
return false;
}
- if (ton::shard_contains(shard, msg.cur_prefix_.account_id_prefix)) {
+ if (msg.same_workchain() && ton::shard_contains(shard, msg.cur_prefix_.account_id_prefix)) {
+ // this branch is needed only for messages generated in the same shard
+ // (such messages could have been processed without a reference from the masterchain)
// ? enable this branch only if an extra boolean parameter is set ?
return true;
}
diff --git a/submodules/ton/tonlib-src/crypto/block/block.h b/submodules/ton/tonlib-src/crypto/block/block.h
index 377f99c2b8..9fbeedf29f 100644
--- a/submodules/ton/tonlib-src/crypto/block/block.h
+++ b/submodules/ton/tonlib-src/crypto/block/block.h
@@ -145,6 +145,9 @@ struct EnqueuedMsgDescr {
return false;
}
bool unpack(vm::CellSlice& cs);
+ bool same_workchain() const {
+ return cur_prefix_.workchain == next_prefix_.workchain;
+ }
};
using compute_shard_end_lt_func_t = std::function;
diff --git a/submodules/ton/tonlib-src/crypto/block/block.tlb b/submodules/ton/tonlib-src/crypto/block/block.tlb
index b9db5fe6ec..5108294770 100644
--- a/submodules/ton/tonlib-src/crypto/block/block.tlb
+++ b/submodules/ton/tonlib-src/crypto/block/block.tlb
@@ -325,7 +325,7 @@ trans_ord$0000 credit_first:Bool
trans_storage$0001 storage_ph:TrStoragePhase
= TransactionDescr;
-trans_tick_tock$001 is_tock:Bool storage:TrStoragePhase
+trans_tick_tock$001 is_tock:Bool storage_ph:TrStoragePhase
compute_ph:TrComputePhase action:(Maybe ^TrActionPhase)
aborted:Bool destroyed:Bool = TransactionDescr;
//
@@ -333,6 +333,7 @@ split_merge_info$_ cur_shard_pfx_len:(## 6)
acc_split_depth:(## 6) this_addr:bits256 sibling_addr:bits256
= SplitMergeInfo;
trans_split_prepare$0100 split_info:SplitMergeInfo
+ storage_ph:(Maybe TrStoragePhase)
compute_ph:TrComputePhase action:(Maybe ^TrActionPhase)
aborted:Bool destroyed:Bool
= TransactionDescr;
@@ -345,6 +346,7 @@ trans_merge_prepare$0110 split_info:SplitMergeInfo
= TransactionDescr;
trans_merge_install$0111 split_info:SplitMergeInfo
prepare_transaction:^Transaction
+ storage_ph:(Maybe TrStoragePhase)
credit_ph:(Maybe TrCreditPhase)
compute_ph:TrComputePhase action:(Maybe ^TrActionPhase)
aborted:Bool destroyed:Bool
@@ -609,6 +611,9 @@ gas_prices_ext#de gas_price:uint64 gas_limit:uint64 special_gas_limit:uint64 gas
block_gas_limit:uint64 freeze_due_limit:uint64 delete_due_limit:uint64
= GasLimitsPrices;
+gas_flat_pfx#d1 flat_gas_limit:uint64 flat_gas_price:uint64 other:GasLimitsPrices
+ = GasLimitsPrices;
+
config_mc_gas_prices#_ GasLimitsPrices = ConfigParam 20;
config_gas_prices#_ GasLimitsPrices = ConfigParam 21;
diff --git a/submodules/ton/tonlib-src/crypto/block/transaction.cpp b/submodules/ton/tonlib-src/crypto/block/transaction.cpp
index 11f118d4d3..24fc731ee4 100644
--- a/submodules/ton/tonlib-src/crypto/block/transaction.cpp
+++ b/submodules/ton/tonlib-src/crypto/block/transaction.cpp
@@ -672,9 +672,56 @@ bool Transaction::prepare_credit_phase() {
return true;
}
+bool ComputePhaseConfig::parse_GasLimitsPrices(Ref cell, td::RefInt256& freeze_due_limit,
+ td::RefInt256& delete_due_limit) {
+ return cell.not_null() &&
+ parse_GasLimitsPrices(vm::load_cell_slice_ref(std::move(cell)), freeze_due_limit, delete_due_limit);
+}
+
+bool ComputePhaseConfig::parse_GasLimitsPrices(Ref cs, td::RefInt256& freeze_due_limit,
+ td::RefInt256& delete_due_limit) {
+ if (cs.is_null()) {
+ return false;
+ }
+ block::gen::GasLimitsPrices::Record_gas_flat_pfx flat;
+ if (tlb::csr_unpack(cs, flat)) {
+ bool ok = parse_GasLimitsPrices(std::move(flat.other), freeze_due_limit, delete_due_limit);
+ flat_gas_limit = flat.flat_gas_limit;
+ flat_gas_price = flat.flat_gas_price;
+ return ok;
+ }
+ flat_gas_limit = flat_gas_price = 0;
+ auto f = [&](const auto& r, td::uint64 spec_limit) {
+ gas_limit = r.gas_limit;
+ special_gas_limit = spec_limit;
+ gas_credit = r.gas_credit;
+ gas_price = r.gas_price;
+ freeze_due_limit = td::RefInt256{true, r.freeze_due_limit};
+ delete_due_limit = td::RefInt256{true, r.delete_due_limit};
+ };
+ block::gen::GasLimitsPrices::Record_gas_prices_ext rec;
+ if (tlb::csr_unpack(cs, rec)) {
+ f(rec, rec.special_gas_limit);
+ } else {
+ block::gen::GasLimitsPrices::Record_gas_prices rec0;
+ if (tlb::csr_unpack(std::move(cs), rec0)) {
+ f(rec0, rec0.gas_limit);
+ } else {
+ return false;
+ }
+ }
+ compute_threshold();
+ return true;
+}
+
void ComputePhaseConfig::compute_threshold() {
gas_price256 = td::RefInt256{true, gas_price};
- max_gas_threshold = td::rshift(gas_price256 * gas_limit, 16, 1);
+ if (gas_limit > flat_gas_limit) {
+ max_gas_threshold =
+ td::rshift(gas_price256 * (gas_limit - flat_gas_limit), 16, 1) + td::make_refint(flat_gas_price);
+ } else {
+ max_gas_threshold = td::make_refint(flat_gas_price);
+ }
}
td::uint64 ComputePhaseConfig::gas_bought_for(td::RefInt256 nanograms) const {
@@ -684,8 +731,11 @@ td::uint64 ComputePhaseConfig::gas_bought_for(td::RefInt256 nanograms) const {
if (nanograms >= max_gas_threshold) {
return gas_limit;
}
- auto res = td::div(std::move(nanograms) << 16, gas_price256);
- return res->to_long();
+ if (nanograms < flat_gas_price) {
+ return 0;
+ }
+ auto res = td::div((std::move(nanograms) - flat_gas_price) << 16, gas_price256);
+ return res->to_long() + flat_gas_limit;
}
td::RefInt256 ComputePhaseConfig::compute_gas_price(td::uint64 gas_used) const {
@@ -855,6 +905,16 @@ bool Transaction::prepare_compute_phase(const ComputePhaseConfig& cfg) {
cp.skip_reason = ComputePhase::sk_no_gas;
return true;
}
+ // Compute gas limits
+ if (!compute_gas_limits(cp, cfg)) {
+ compute_phase.reset();
+ return false;
+ }
+ if (!cp.gas_limit && !cp.gas_credit) {
+ // no gas
+ cp.skip_reason = ComputePhase::sk_no_gas;
+ return true;
+ }
if (in_msg_state.not_null()) {
LOG(DEBUG) << "HASH(in_msg_state) = " << in_msg_state->get_hash().bits().to_hex(256)
<< ", account_state_hash = " << account.state_hash.to_hex();
@@ -883,11 +943,6 @@ bool Transaction::prepare_compute_phase(const ComputePhaseConfig& cfg) {
} else if (in_msg_state.not_null()) {
unpack_msg_state(true); // use only libraries
}
- // Compute gas limits
- if (!compute_gas_limits(cp, cfg)) {
- compute_phase.reset();
- return false;
- }
// initialize VM
Ref stack = prepare_vm_stack(cp);
if (stack.is_null()) {
diff --git a/submodules/ton/tonlib-src/crypto/block/transaction.h b/submodules/ton/tonlib-src/crypto/block/transaction.h
index 45e824c1e8..015dc3f39e 100644
--- a/submodules/ton/tonlib-src/crypto/block/transaction.h
+++ b/submodules/ton/tonlib-src/crypto/block/transaction.h
@@ -98,6 +98,8 @@ struct ComputePhaseConfig {
td::uint64 gas_limit;
td::uint64 special_gas_limit;
td::uint64 gas_credit;
+ td::uint64 flat_gas_limit = 0;
+ td::uint64 flat_gas_price = 0;
static constexpr td::uint64 gas_infty = (1ULL << 63) - 1;
td::RefInt256 gas_price256;
td::RefInt256 max_gas_threshold;
@@ -126,6 +128,8 @@ struct ComputePhaseConfig {
Ref get_lib_root() const {
return libraries ? libraries->get_root_cell() : Ref{};
}
+ bool parse_GasLimitsPrices(Ref cs, td::RefInt256& freeze_due_limit, td::RefInt256& delete_due_limit);
+ bool parse_GasLimitsPrices(Ref cell, td::RefInt256& freeze_due_limit, td::RefInt256& delete_due_limit);
};
// msg_fwd_fees = (lump_price + ceil((bit_price * msg.bits + cell_price * msg.cells)/2^16)) nanograms
diff --git a/submodules/ton/tonlib-src/crypto/fift/SourceLookup.h b/submodules/ton/tonlib-src/crypto/fift/SourceLookup.h
index 33ee71d4ef..7d51396cb3 100644
--- a/submodules/ton/tonlib-src/crypto/fift/SourceLookup.h
+++ b/submodules/ton/tonlib-src/crypto/fift/SourceLookup.h
@@ -79,7 +79,7 @@ class SourceLookup {
if (os_time_) {
return os_time_->now();
}
- return static_cast(td::Time::now());
+ return static_cast(td::Clocks::system());
}
protected:
diff --git a/submodules/ton/tonlib-src/crypto/fift/lib/Fift.fif b/submodules/ton/tonlib-src/crypto/fift/lib/Fift.fif
index 59cbcb713f..65fecb3116 100644
--- a/submodules/ton/tonlib-src/crypto/fift/lib/Fift.fif
+++ b/submodules/ton/tonlib-src/crypto/fift/lib/Fift.fif
@@ -25,7 +25,7 @@
{ bl word 1 { -rot 2 'nop does swap 0 (create) }
} :: 2=:
{ } : s>c
-{ s>c hash } : shash
+{ s>c hashB } : shash
// to be more efficiently re-implemented in C++ in the future
{ dup 0< ' negate if } : abs
{ 2dup > ' swap if } : minmax
diff --git a/submodules/ton/tonlib-src/crypto/fift/words.cpp b/submodules/ton/tonlib-src/crypto/fift/words.cpp
index 01dcf802c8..0b97ece94e 100644
--- a/submodules/ton/tonlib-src/crypto/fift/words.cpp
+++ b/submodules/ton/tonlib-src/crypto/fift/words.cpp
@@ -764,13 +764,17 @@ void interpret_string_to_bytes(vm::Stack& stack) {
stack.push_bytes(stack.pop_string());
}
-void interpret_bytes_hash(vm::Stack& stack) {
+void interpret_bytes_hash(vm::Stack& stack, bool as_uint) {
std::string str = stack.pop_bytes();
unsigned char buffer[32];
digest::hash_str(buffer, str.c_str(), str.size());
- td::RefInt256 x{true};
- x.write().import_bytes(buffer, 32, false);
- stack.push_int(std::move(x));
+ if (as_uint) {
+ td::RefInt256 x{true};
+ x.write().import_bytes(buffer, 32, false);
+ stack.push_int(std::move(x));
+ } else {
+ stack.push_bytes(std::string{(char*)buffer, 32});
+ }
}
void interpret_empty(vm::Stack& stack) {
@@ -892,11 +896,15 @@ void interpret_builder_remaining_bitrefs(vm::Stack& stack, int mode) {
}
}
-void interpret_cell_hash(vm::Stack& stack) {
+void interpret_cell_hash(vm::Stack& stack, bool as_uint) {
auto cell = stack.pop_cell();
- td::RefInt256 hash{true};
- hash.write().import_bytes(cell->get_hash().as_slice().ubegin(), 32, false);
- stack.push_int(std::move(hash));
+ if (as_uint) {
+ td::RefInt256 hash{true};
+ hash.write().import_bytes(cell->get_hash().as_slice().ubegin(), 32, false);
+ stack.push_int(std::move(hash));
+ } else {
+ stack.push_bytes(cell->get_hash().as_slice().str());
+ }
}
void interpret_store_ref(vm::Stack& stack) {
@@ -934,7 +942,9 @@ void interpret_fetch(vm::Stack& stack, int mode) {
auto n = stack.pop_smallint_range(256 + (mode & 1));
auto cs = stack.pop_cellslice();
if (!cs->have(n)) {
- stack.push(std::move(cs));
+ if (mode & 2) {
+ stack.push(std::move(cs));
+ }
stack.push_bool(false);
if (!(mode & 4)) {
throw IntError{"end of data while reading integer from cell"};
@@ -959,7 +969,9 @@ void interpret_fetch_bytes(vm::Stack& stack, int mode) {
unsigned n = stack.pop_smallint_range(127);
auto cs = stack.pop_cellslice();
if (!cs->have(n * 8)) {
- stack.push(std::move(cs));
+ if (mode & 2) {
+ stack.push(std::move(cs));
+ }
stack.push_bool(false);
if (!(mode & 4)) {
throw IntError{"end of data while reading byte string from cell"};
@@ -970,7 +982,7 @@ void interpret_fetch_bytes(vm::Stack& stack, int mode) {
if (mode & 2) {
cs.write().fetch_bytes(tmp, n);
} else {
- cs.write().prefetch_bytes(tmp, n);
+ cs->prefetch_bytes(tmp, n);
}
std::string s{tmp, tmp + n};
if (mode & 1) {
@@ -978,7 +990,9 @@ void interpret_fetch_bytes(vm::Stack& stack, int mode) {
} else {
stack.push_string(std::move(s));
}
- stack.push(std::move(cs));
+ if (mode & 2) {
+ stack.push(std::move(cs));
+ }
if (mode & 4) {
stack.push_bool(true);
}
@@ -1009,13 +1023,15 @@ void interpret_cell_remaining(vm::Stack& stack) {
void interpret_fetch_ref(vm::Stack& stack, int mode) {
auto cs = stack.pop_cellslice();
if (!cs->have_refs(1)) {
- stack.push(std::move(cs));
+ if (mode & 2) {
+ stack.push(std::move(cs));
+ }
stack.push_bool(false);
if (!(mode & 4)) {
throw IntError{"end of data while reading reference from cell"};
}
} else {
- auto cell = (mode & 2) ? cs.write().fetch_ref() : cs.write().prefetch_ref();
+ auto cell = (mode & 2) ? cs.write().fetch_ref() : cs->prefetch_ref();
if (mode & 2) {
stack.push(std::move(cs));
}
@@ -2474,7 +2490,9 @@ void init_words_common(Dictionary& d) {
d.def_stack_word("B>Lu@+ ", std::bind(interpret_bytes_fetch_int, _1, 0x12));
d.def_stack_word("B>Li@+ ", std::bind(interpret_bytes_fetch_int, _1, 0x13));
d.def_stack_word("$>B ", interpret_string_to_bytes);
- d.def_stack_word("Bhash ", interpret_bytes_hash);
+ d.def_stack_word("Bhash ", std::bind(interpret_bytes_hash, _1, true));
+ d.def_stack_word("Bhashu ", std::bind(interpret_bytes_hash, _1, true));
+ d.def_stack_word("BhashB ", std::bind(interpret_bytes_hash, _1, false));
// cell manipulation (create, write and modify cells)
d.def_stack_word("is_empty();
- stack.o << (next_empty ? "WHILEEND:<{" : "WHILE:<{");
+ stack.o << "WHILE:<{";
stack.o.indent();
stack.forget_const();
block0->generate_code_all(stack);
@@ -638,7 +638,7 @@ bool Op::generate_code_step(Stack& stack) {
stack.modified();
stack.o.undent();
Stack stack_copy{stack};
- stack.o << (next_empty ? "}>" : "}>DO<{");
+ stack.o << (next_empty ? "}>DO:" : "}>DO<{");
if (!next_empty) {
stack.o.indent();
}
diff --git a/submodules/ton/tonlib-src/crypto/parser/srcread.cpp b/submodules/ton/tonlib-src/crypto/parser/srcread.cpp
index ac031e1e14..3b363242ba 100644
--- a/submodules/ton/tonlib-src/crypto/parser/srcread.cpp
+++ b/submodules/ton/tonlib-src/crypto/parser/srcread.cpp
@@ -169,6 +169,11 @@ bool SourceReader::load_line() {
error("line too long");
return false;
}
+ if (len && cur_line.back() == '\r') {
+ // CP/M line breaks support
+ cur_line.pop_back();
+ --len;
+ }
loc.text = cur_line;
cur_line_len = (int)len;
loc.line_pos = 0;
diff --git a/submodules/ton/tonlib-src/crypto/smartcont/gen-zerostate-test.fif b/submodules/ton/tonlib-src/crypto/smartcont/gen-zerostate-test.fif
index 58161a2318..2e6d87a75e 100644
--- a/submodules/ton/tonlib-src/crypto/smartcont/gen-zerostate-test.fif
+++ b/submodules/ton/tonlib-src/crypto/smartcont/gen-zerostate-test.fif
@@ -15,10 +15,10 @@ cr ."initial basechain state is:" cr dup B dup Bx. cr
dup "basestate0" +suffix +".boc" tuck B>file
."(Initial basechain state saved to file " type .")" cr
-Bhash dup =: basestate0_fhash
+Bhashu dup =: basestate0_fhash
."file hash=" dup x. space 256 u>B dup B>base64url type cr
"basestate0" +suffix +".fhash" B>file
-hash dup =: basestate0_rhash
+hashu dup =: basestate0_rhash
."root hash=" dup x. space 256 u>B dup B>base64url type cr
"basestate0" +suffix +".rhash" B>file
@@ -227,10 +227,10 @@ cr cr ."new state is:" cr dup B dup Bx. cr
dup "zerostate" +suffix +".boc" tuck B>file
."(Initial masterchain state saved to file " type .")" cr
-Bhash dup =: zerostate_fhash
+Bhashu dup =: zerostate_fhash
."file hash=" dup x. space 256 u>B dup B>base64url type cr
"zerostate" +suffix +".fhash" B>file
-hash dup =: zerostate_rhash ."root hash=" dup x. space 256 u>B dup B>base64url type cr
+hashu dup =: zerostate_rhash ."root hash=" dup x. space 256 u>B dup B>base64url type cr
"zerostate" +suffix +".rhash" B>file
basestate0_rhash ."Basestate0 root hash=" dup x. space 256 u>B B>base64url type cr
basestate0_fhash ."Basestate0 file hash=" dup x. space 256 u>B B>base64url type cr
diff --git a/submodules/ton/tonlib-src/crypto/smartcont/gen-zerostate.fif b/submodules/ton/tonlib-src/crypto/smartcont/gen-zerostate.fif
index f5f9aac39e..43ba07b156 100644
--- a/submodules/ton/tonlib-src/crypto/smartcont/gen-zerostate.fif
+++ b/submodules/ton/tonlib-src/crypto/smartcont/gen-zerostate.fif
@@ -15,10 +15,10 @@ cr ."initial basechain state is:" cr dup B dup Bx. cr
dup "basestate0" +suffix +".boc" tuck B>file
."(Initial basechain state saved to file " type .")" cr
-Bhash dup =: basestate0_fhash
+Bhashu dup =: basestate0_fhash
."file hash=" dup x. space 256 u>B dup B>base64url type cr
"basestate0" +suffix +".fhash" B>file
-hash dup =: basestate0_rhash
+hashu dup =: basestate0_rhash
."root hash=" dup x. space 256 u>B dup B>base64url type cr
"basestate0" +suffix +".rhash" B>file
@@ -231,10 +231,10 @@ cr cr ."new state is:" cr dup B dup Bx. cr
dup "zerostate" +suffix +".boc" tuck B>file
."(Initial masterchain state saved to file " type .")" cr
-Bhash dup =: zerostate_fhash
+Bhashu dup =: zerostate_fhash
."file hash= " dup X. space 256 u>B dup B>base64url type cr
"zerostate" +suffix +".fhash" B>file
-hash dup =: zerostate_rhash ."root hash= " dup X. space 256 u>B dup B>base64url type cr
+hashu dup =: zerostate_rhash ."root hash= " dup X. space 256 u>B dup B>base64url type cr
"zerostate" +suffix +".rhash" B>file
basestate0_rhash ."Basestate0 root hash= " dup X. space 256 u>B B>base64url type cr
basestate0_fhash ."Basestate0 file hash= " dup X. space 256 u>B B>base64url type cr
diff --git a/submodules/ton/tonlib-src/crypto/smartcont/highload-wallet-code.fc b/submodules/ton/tonlib-src/crypto/smartcont/highload-wallet-code.fc
new file mode 100644
index 0000000000..70abb48e23
--- /dev/null
+++ b/submodules/ton/tonlib-src/crypto/smartcont/highload-wallet-code.fc
@@ -0,0 +1,41 @@
+;; Heavy-duty wallet for mass transfers (e.g., for cryptocurrency exchanges)
+;; accepts orders for up to 254 internal messages (transfers) in one external message
+
+() recv_internal(slice in_msg) impure {
+ ;; do nothing for internal messages
+}
+
+() recv_external(slice in_msg) impure {
+ var signature = in_msg~load_bits(512);
+ var cs = in_msg;
+ var (subwallet_id, valid_until, msg_seqno) = (cs~load_uint(32), cs~load_uint(32), cs~load_uint(32));
+ throw_if(35, valid_until <= now());
+ var ds = get_data().begin_parse();
+ var (stored_seqno, stored_subwallet, public_key) = (ds~load_uint(32), ds~load_uint(32), ds~load_uint(256));
+ ds.end_parse();
+ throw_unless(33, msg_seqno == stored_seqno);
+ throw_unless(34, subwallet_id == stored_subwallet);
+ throw_unless(35, check_signature(slice_hash(in_msg), signature, public_key));
+ var dict = cs~load_dict();
+ cs.end_parse();
+ accept_message();
+ int i = -1;
+ do {
+ (i, var cs, var f) = dict.idict_get_next?(16, i);
+ if (f) {
+ var mode = cs~load_uint(8);
+ send_raw_message(cs~load_ref(), mode);
+ }
+ } until (~ f);
+ set_data(begin_cell()
+ .store_uint(stored_seqno + 1, 32)
+ .store_uint(stored_subwallet, 32)
+ .store_uint(public_key, 256)
+ .end_cell());
+}
+
+;; Get methods
+
+int seqno() method_id {
+ return get_data().begin_parse().preload_uint(32);
+}
diff --git a/submodules/ton/tonlib-src/crypto/smartcont/highload-wallet-code.fif b/submodules/ton/tonlib-src/crypto/smartcont/highload-wallet-code.fif
new file mode 100644
index 0000000000..d2122a96fb
--- /dev/null
+++ b/submodules/ton/tonlib-src/crypto/smartcont/highload-wallet-code.fif
@@ -0,0 +1,79 @@
+// automatically generated from `smartcont/stdlib.fc` `smartcont/highload-wallet-code.fc`
+PROGRAM{
+ DECLPROC recv_internal
+ DECLPROC recv_external
+ 85143 DECLMETHOD seqno
+ recv_internal PROC:<{
+ // in_msg
+ DROP //
+ }>
+ recv_external PROC:<{
+ // in_msg
+ 9 PUSHPOW2 // in_msg _3=512
+ LDSLICEX // signature in_msg
+ DUP // signature in_msg cs
+ 32 LDU // signature in_msg _9 cs
+ 32 LDU // signature in_msg _9 _12 cs
+ 32 LDU // signature in_msg subwallet_id valid_until msg_seqno cs
+ NOW // signature in_msg subwallet_id valid_until msg_seqno cs _19
+ s1 s3 XCHG // signature in_msg subwallet_id cs msg_seqno valid_until _19
+ LEQ // signature in_msg subwallet_id cs msg_seqno _20
+ 35 THROWIF
+ c4 PUSH // signature in_msg subwallet_id cs msg_seqno _23
+ CTOS // signature in_msg subwallet_id cs msg_seqno ds
+ 32 LDU // signature in_msg subwallet_id cs msg_seqno _28 ds
+ 32 LDU // signature in_msg subwallet_id cs msg_seqno _28 _31 ds
+ 256 LDU // signature in_msg subwallet_id cs msg_seqno stored_seqno stored_subwallet public_key ds
+ ENDS
+ s3 s2 XCPU // signature in_msg subwallet_id cs public_key stored_seqno stored_subwallet msg_seqno stored_seqno
+ EQUAL // signature in_msg subwallet_id cs public_key stored_seqno stored_subwallet _39
+ 33 THROWIFNOT
+ s4 s4 XCPU // signature in_msg stored_subwallet cs public_key stored_seqno subwallet_id stored_subwallet
+ EQUAL // signature in_msg stored_subwallet cs public_key stored_seqno _42
+ 34 THROWIFNOT
+ s0 s4 XCHG // signature stored_seqno stored_subwallet cs public_key in_msg
+ HASHSU // signature stored_seqno stored_subwallet cs public_key _45
+ s0 s5 s5 XC2PU // public_key stored_seqno stored_subwallet cs _45 signature public_key
+ CHKSIGNU // public_key stored_seqno stored_subwallet cs _46
+ 35 THROWIFNOT
+ LDDICT // public_key stored_seqno stored_subwallet dict cs
+ ENDS
+ ACCEPT
+ -1 PUSHINT // public_key stored_seqno stored_subwallet dict i=-1
+ UNTIL:<{
+ OVER
+ 16 PUSHINT // public_key stored_seqno stored_subwallet dict i dict _57=16
+ DICTIGETNEXT
+ NULLSWAPIFNOT
+ NULLSWAPIFNOT // public_key stored_seqno stored_subwallet dict cs i f
+ DUP // public_key stored_seqno stored_subwallet dict cs i f f
+ IF:<{ // public_key stored_seqno stored_subwallet dict cs i f
+ s0 s2 XCHG // public_key stored_seqno stored_subwallet dict f i cs
+ 8 LDU // public_key stored_seqno stored_subwallet dict f i mode cs
+ LDREF // public_key stored_seqno stored_subwallet dict f i mode _100 _99
+ DROP // public_key stored_seqno stored_subwallet dict f i mode _63
+ SWAP // public_key stored_seqno stored_subwallet dict f i _63 mode
+ SENDRAWMSG
+ }>ELSE<{
+ s2 POP // public_key stored_seqno stored_subwallet dict f i
+ }>
+ SWAP // public_key stored_seqno stored_subwallet dict i f
+ NOT // public_key stored_seqno stored_subwallet dict i _66
+ }> // public_key stored_seqno stored_subwallet dict i
+ 2DROP // public_key stored_seqno stored_subwallet
+ SWAP // public_key stored_subwallet stored_seqno
+ INC // public_key stored_subwallet _68
+ NEWC // public_key stored_subwallet _68 _69
+ 32 STU // public_key stored_subwallet _71
+ 32 STU // public_key _73
+ 256 STU // _75
+ ENDC // _76
+ c4 POP
+ }>
+ seqno PROC:<{
+ //
+ c4 PUSH // _0
+ CTOS // _1
+ 32 PLDU // _3
+ }>
+}END>c
diff --git a/submodules/ton/tonlib-src/crypto/smartcont/highload-wallet-v2-code.fc b/submodules/ton/tonlib-src/crypto/smartcont/highload-wallet-v2-code.fc
new file mode 100644
index 0000000000..88d7885563
--- /dev/null
+++ b/submodules/ton/tonlib-src/crypto/smartcont/highload-wallet-v2-code.fc
@@ -0,0 +1,65 @@
+;; Heavy-duty wallet for mass transfers (e.g., for cryptocurrency exchanges)
+;; accepts orders for up to 254 internal messages (transfers) in one external message
+;; this version does not use seqno for replay protection; instead, it remembers all recent query_ids
+;; in this way several external messages with different query_id can be sent in parallel
+
+() recv_internal(slice in_msg) impure {
+ ;; do nothing for internal messages
+}
+
+() recv_external(slice in_msg) impure {
+ var signature = in_msg~load_bits(512);
+ var cs = in_msg;
+ var (subwallet_id, query_id) = (cs~load_uint(32), cs~load_uint(64));
+ var bound = (now() << 32);
+ throw_if(35, query_id < bound);
+ var ds = get_data().begin_parse();
+ var (stored_subwallet, last_cleaned, public_key, old_queries) = (ds~load_uint(32), ds~load_uint(64), ds~load_uint(256), ds~load_dict());
+ ds.end_parse();
+ (_, var found?) = old_queries.udict_get?(64, query_id);
+ throw_if(32, found?);
+ throw_unless(34, subwallet_id == stored_subwallet);
+ throw_unless(35, check_signature(slice_hash(in_msg), signature, public_key));
+ var dict = cs~load_dict();
+ cs.end_parse();
+ accept_message();
+ int i = -1;
+ do {
+ (i, var cs, var f) = dict.idict_get_next?(16, i);
+ if (f) {
+ var mode = cs~load_uint(8);
+ send_raw_message(cs~load_ref(), mode);
+ }
+ } until (~ f);
+ bound -= (64 << 32); ;; clean up records expired more than 64 seconds ago
+ old_queries~udict_set_builder(64, query_id, begin_cell());
+ var queries = old_queries;
+ do {
+ var (old_queries', i, _, f) = old_queries.udict_delete_get_min(64);
+ f~touch();
+ if (f) {
+ f = (i < bound);
+ }
+ if (f) {
+ old_queries = old_queries';
+ last_cleaned = i;
+ }
+ } until (~ f);
+ set_data(begin_cell()
+ .store_uint(stored_subwallet, 32)
+ .store_uint(last_cleaned, 64)
+ .store_uint(public_key, 256)
+ .store_dict(old_queries)
+ .end_cell());
+}
+
+;; Get methods
+
+;; returns -1 for processed queries, 0 for unprocessed, 1 for unknown (forgotten)
+int processed?(int query_id) method_id {
+ var ds = get_data().begin_parse();
+ var (_, last_cleaned, _, old_queries) = (ds~load_uint(32), ds~load_uint(64), ds~load_uint(256), ds~load_dict());
+ ds.end_parse();
+ (_, var found) = old_queries.udict_get?(64, query_id);
+ return found ? true : - (query_id <= last_cleaned);
+}
diff --git a/submodules/ton/tonlib-src/crypto/smartcont/highload-wallet-v2-code.fif b/submodules/ton/tonlib-src/crypto/smartcont/highload-wallet-v2-code.fif
new file mode 100644
index 0000000000..9d5e467de5
--- /dev/null
+++ b/submodules/ton/tonlib-src/crypto/smartcont/highload-wallet-v2-code.fif
@@ -0,0 +1,134 @@
+// automatically generated from `smartcont/stdlib.fc` `smartcont/highload-wallet-v2-code.fc`
+PROGRAM{
+ DECLPROC recv_internal
+ DECLPROC recv_external
+ 117746 DECLMETHOD processed?
+ recv_internal PROC:<{
+ // in_msg
+ DROP //
+ }>
+ recv_external PROC:<{
+ // in_msg
+ 9 PUSHPOW2 // in_msg _3=512
+ LDSLICEX // signature in_msg
+ DUP // signature in_msg cs
+ 32 LDU // signature in_msg _8 cs
+ 64 LDU // signature in_msg subwallet_id query_id cs
+ NOW // signature in_msg subwallet_id query_id cs _15
+ 32 LSHIFT# // signature in_msg subwallet_id query_id cs bound
+ s2 s0 PUSH2 // signature in_msg subwallet_id query_id cs bound query_id bound
+ LESS // signature in_msg subwallet_id query_id cs bound _19
+ 35 THROWIF
+ c4 PUSH // signature in_msg subwallet_id query_id cs bound _22
+ CTOS // signature in_msg subwallet_id query_id cs bound ds
+ 32 LDU // signature in_msg subwallet_id query_id cs bound _28 ds
+ 64 LDU // signature in_msg subwallet_id query_id cs bound _28 _31 ds
+ 256 LDU // signature in_msg subwallet_id query_id cs bound _28 _31 _34 ds
+ LDDICT // signature in_msg subwallet_id query_id cs bound stored_subwallet last_cleaned public_key old_queries ds
+ ENDS
+ s6 s0 PUSH2
+ 64 PUSHINT // signature in_msg subwallet_id query_id cs bound stored_subwallet last_cleaned public_key old_queries query_id old_queries _42=64
+ DICTUGET
+ NULLSWAPIFNOT // signature in_msg subwallet_id query_id cs bound stored_subwallet last_cleaned public_key old_queries _115 _116
+ NIP // signature in_msg subwallet_id query_id cs bound stored_subwallet last_cleaned public_key old_queries found?
+ 32 THROWIF
+ s7 s3 XCPU // signature in_msg old_queries query_id cs bound stored_subwallet last_cleaned public_key subwallet_id stored_subwallet
+ EQUAL // signature in_msg old_queries query_id cs bound stored_subwallet last_cleaned public_key _47
+ 34 THROWIFNOT
+ s0 s7 XCHG // signature public_key old_queries query_id cs bound stored_subwallet last_cleaned in_msg
+ HASHSU // signature public_key old_queries query_id cs bound stored_subwallet last_cleaned _50
+ s0 s8 s7 XC2PU // last_cleaned public_key old_queries query_id cs bound stored_subwallet _50 signature public_key
+ CHKSIGNU // last_cleaned public_key old_queries query_id cs bound stored_subwallet _51
+ 35 THROWIFNOT
+ s0 s2 XCHG // last_cleaned public_key old_queries query_id stored_subwallet bound cs
+ LDDICT // last_cleaned public_key old_queries query_id stored_subwallet bound dict cs
+ ENDS
+ ACCEPT
+ -1 PUSHINT // last_cleaned public_key old_queries query_id stored_subwallet bound dict i=-1
+ UNTIL:<{
+ OVER
+ 16 PUSHINT // last_cleaned public_key old_queries query_id stored_subwallet bound dict i dict _62=16
+ DICTIGETNEXT
+ NULLSWAPIFNOT
+ NULLSWAPIFNOT // last_cleaned public_key old_queries query_id stored_subwallet bound dict cs i f
+ DUP // last_cleaned public_key old_queries query_id stored_subwallet bound dict cs i f f
+ IF:<{ // last_cleaned public_key old_queries query_id stored_subwallet bound dict cs i f
+ s0 s2 XCHG // last_cleaned public_key old_queries query_id stored_subwallet bound dict f i cs
+ 8 LDU // last_cleaned public_key old_queries query_id stored_subwallet bound dict f i mode cs
+ LDREF // last_cleaned public_key old_queries query_id stored_subwallet bound dict f i mode _125 _124
+ DROP // last_cleaned public_key old_queries query_id stored_subwallet bound dict f i mode _68
+ SWAP // last_cleaned public_key old_queries query_id stored_subwallet bound dict f i _68 mode
+ SENDRAWMSG
+ }>ELSE<{
+ s2 POP // last_cleaned public_key old_queries query_id stored_subwallet bound dict f i
+ }>
+ SWAP // last_cleaned public_key old_queries query_id stored_subwallet bound dict i f
+ NOT // last_cleaned public_key old_queries query_id stored_subwallet bound dict i _71
+ }> // last_cleaned public_key old_queries query_id stored_subwallet bound dict i
+ 2DROP // last_cleaned public_key old_queries query_id stored_subwallet bound
+ 38 PUSHPOW2 // last_cleaned public_key old_queries query_id stored_subwallet bound _74
+ SUB // last_cleaned public_key old_queries query_id stored_subwallet bound
+ NEWC // last_cleaned public_key old_queries query_id stored_subwallet bound _77
+ s0 s3 s4 XCHG3
+ 64 PUSHINT // last_cleaned public_key stored_subwallet bound _77 query_id old_queries _78=64
+ DICTUSETB // last_cleaned public_key stored_subwallet bound old_queries
+ UNTIL:<{
+ DUP
+ 64 PUSHINT // last_cleaned public_key stored_subwallet bound old_queries old_queries _85=64
+ DICTUREMMIN
+ NULLSWAPIFNOT
+ NULLSWAPIFNOT // last_cleaned public_key stored_subwallet bound old_queries _126 _128 _127 _129
+ s2 POP // last_cleaned public_key stored_subwallet bound old_queries old_queries' f i
+ s1 s0 XCPU // last_cleaned public_key stored_subwallet bound old_queries old_queries' i f f
+ IF:<{ // last_cleaned public_key stored_subwallet bound old_queries old_queries' i f
+ DROP // last_cleaned public_key stored_subwallet bound old_queries old_queries' i
+ s0 s3 PUSH2 // last_cleaned public_key stored_subwallet bound old_queries old_queries' i i bound
+ LESS // last_cleaned public_key stored_subwallet bound old_queries old_queries' i f
+ }> // last_cleaned public_key stored_subwallet bound old_queries old_queries' i f
+ DUP // last_cleaned public_key stored_subwallet bound old_queries old_queries' i f f
+ IF:<{ // last_cleaned public_key stored_subwallet bound old_queries old_queries' i f
+ s3 POP
+ s6 POP // last_cleaned public_key stored_subwallet bound f old_queries
+ }>ELSE<{
+ s3 s1 s3 XCHG3
+ 2DROP // last_cleaned public_key stored_subwallet bound f old_queries
+ }>
+ SWAP // last_cleaned public_key stored_subwallet bound old_queries f
+ NOT // last_cleaned public_key stored_subwallet bound old_queries _90
+ }> // last_cleaned public_key stored_subwallet bound old_queries
+ NIP // last_cleaned public_key stored_subwallet old_queries
+ NEWC // last_cleaned public_key stored_subwallet old_queries _91
+ s1 s2 XCHG // last_cleaned public_key old_queries stored_subwallet _91
+ 32 STU // last_cleaned public_key old_queries _93
+ s1 s3 XCHG // old_queries public_key last_cleaned _93
+ 64 STU // old_queries public_key _95
+ 256 STU // old_queries _97
+ STDICT // _98
+ ENDC // _99
+ c4 POP
+ }>
+ processed? PROC:<{
+ // query_id
+ c4 PUSH // query_id _2
+ CTOS // query_id ds
+ 32 LDU // query_id _29 _28
+ NIP // query_id ds
+ 64 LDU // query_id _11 ds
+ 256 LDU // query_id _11 _33 _32
+ NIP // query_id _11 ds
+ LDDICT // query_id last_cleaned old_queries ds
+ ENDS
+ s2 s(-1) PUXC
+ 64 PUSHINT // query_id last_cleaned query_id old_queries _22=64
+ DICTUGET
+ NULLSWAPIFNOT // query_id last_cleaned _36 _37
+ NIP // query_id last_cleaned found
+ IF:<{ // query_id last_cleaned
+ 2DROP //
+ TRUE // _24
+ }>ELSE<{ // query_id last_cleaned
+ LEQ // _26
+ NEGATE // _24
+ }>
+ }>
+}END>c
diff --git a/submodules/ton/tonlib-src/crypto/smartcont/highload-wallet-v2.fif b/submodules/ton/tonlib-src/crypto/smartcont/highload-wallet-v2.fif
new file mode 100644
index 0000000000..76f06ed590
--- /dev/null
+++ b/submodules/ton/tonlib-src/crypto/smartcont/highload-wallet-v2.fif
@@ -0,0 +1,69 @@
+#!/usr/bin/env fift -s
+"TonUtil.fif" include
+
+{ ."usage: " @' $0 type ." []" cr
+ ."Creates a request with up to 254 orders loaded from to high-load v2 (sub)wallet created by new-highload-v2-wallet.fif, with private key loaded from file .pk "
+ ."and address from .addr, and saves it into .boc ('wallet-query.boc' by default)" cr
+ ." is a text file with lines `SEND `" cr 1 halt
+} : usage
+$# dup 3 < swap 4 > or ' usage if
+
+$1 =: file-base
+$2 parse-int dup 32 fits ' usage ifnot =: subwallet-id // parse subwallet-id
+{ subwallet-id (.) $+ } : +subwallet
+$3 =: order-file
+def? $4 { @' $4 } { "wallet-query" } cond constant savefile
+3 constant send-mode // mode for SENDRAWMSG: +1 - sender pays fees, +2 - ignore errors
+60 constant timeout // external message expires in 60 seconds
+
+file-base +subwallet +".addr" load-address
+2dup 2constant wallet_addr
+."Source wallet address = " 2dup .addr cr 6 .Addr cr
+file-base +".pk" load-keypair nip constant wallet_pk
+
+variable orders dictnew orders !
+variable order# order# 0!
+// c --
+{ = abort"more than 254 orders"
+ orders @ 16 udict!+ not abort"cannot add order to dictionary"
+ orders ! order# 1+!
+} : add-order
+// b body -- b'
+{ tuck
+} : create-int-msg
+// ng wc addr bnc --
+{ ."Transferring " 3 roll .GR ."to account "
+ -rot 2dup 4 pick 7 + .Addr ." = " .addr ." bounce=" . cr
+} : .transfer
+// addr$ ng -- c
+{ swap parse-smc-addr // ng wc addr bnc
+ 2over 2over .transfer
+ create-int-msg
+} : create-simple-transfer
+// c m -- c'
+{ } : create-order
+
+// addr$ ng --
+{ create-simple-transfer send-mode create-order add-order } : send
+{ bl word bl word $>GR send } : SEND
+
+// parse order file
+order-file include
+
+// create external message
+now timeout + 32 << hashu 32 1<<1- and + =: query_id
+
+dup ."signing message: "
+dup ."resulting external message: " B dup Bx. cr
+."Query_id is " query_id dup . ."= 0x" X. cr
+savefile +".boc" tuck B>file
+."(Saved to file " type .")" cr
diff --git a/submodules/ton/tonlib-src/crypto/smartcont/highload-wallet.fif b/submodules/ton/tonlib-src/crypto/smartcont/highload-wallet.fif
new file mode 100644
index 0000000000..ab69fdf368
--- /dev/null
+++ b/submodules/ton/tonlib-src/crypto/smartcont/highload-wallet.fif
@@ -0,0 +1,68 @@
+#!/usr/bin/env fift -s
+"TonUtil.fif" include
+
+{ ."usage: " @' $0 type ." []" cr
+ ."Creates a request with up to 254 orders loaded from to high-load (sub)wallet created by new-highload-wallet.fif, with private key loaded from file .pk "
+ ."and address from .addr, and saves it into .boc ('wallet-query.boc' by default)" cr
+ ." is a text file with lines `SEND `" cr 1 halt
+} : usage
+$# dup 4 < swap 5 > or ' usage if
+
+$1 =: file-base
+$2 parse-int dup 32 fits ' usage ifnot =: subwallet-id // parse subwallet-id
+{ subwallet-id (.) $+ } : +subwallet
+$3 parse-int =: seqno
+$4 =: order-file
+def? $5 { @' $5 } { "wallet-query" } cond constant savefile
+3 constant send-mode // mode for SENDRAWMSG: +1 - sender pays fees, +2 - ignore errors
+60 constant timeout // external message expires in 60 seconds
+
+file-base +subwallet +".addr" load-address
+2dup 2constant wallet_addr
+."Source wallet address = " 2dup .addr cr 6 .Addr cr
+file-base +".pk" load-keypair nip constant wallet_pk
+
+variable orders dictnew orders !
+variable order# order# 0!
+// c --
+{ = abort"more than 254 orders"
+ orders @ 16 udict!+ not abort"cannot add order to dictionary"
+ orders ! order# 1+!
+} : add-order
+// b body -- b'
+{ tuck
+} : create-int-msg
+// ng wc addr bnc --
+{ ."Transferring " 3 roll .GR ."to account "
+ -rot 2dup 4 pick 7 + .Addr ." = " .addr ." bounce=" . cr
+} : .transfer
+// addr$ ng -- c
+{ swap parse-smc-addr // ng wc addr bnc
+ 2over 2over .transfer
+ create-int-msg
+} : create-simple-transfer
+// c m -- c'
+{ } : create-order
+
+// addr$ ng --
+{ create-simple-transfer send-mode create-order add-order } : send
+{ bl word bl word $>GR send } : SEND
+
+// parse order file
+order-file include
+
+// create external message
+
+dup ."signing message: "
+dup ."resulting external message: " B dup Bx. cr
+savefile +".boc" tuck B>file
+."(Saved to file " type .")" cr
diff --git a/submodules/ton/tonlib-src/crypto/smartcont/new-highload-wallet-v2.fif b/submodules/ton/tonlib-src/crypto/smartcont/new-highload-wallet-v2.fif
new file mode 100644
index 0000000000..df386cc72a
--- /dev/null
+++ b/submodules/ton/tonlib-src/crypto/smartcont/new-highload-wallet-v2.fif
@@ -0,0 +1,47 @@
+#!/usr/bin/env fift -s
+"TonUtil.fif" include
+"Asm.fif" include
+
+{ ."usage: " @' $0 type ." []" cr
+ ."Creates a new v2 high-load wallet in the specified workchain, with the controlling private key saved to or loaded from .pk "
+ ."('new-wallet.pk' by default)" cr
+ ." is the 32-bit identifier of this subwallet among all controlled by the same private key" cr 1 halt
+} : usage
+$# 2- -2 and ' usage if
+
+$1 parse-workchain-id =: wc // set workchain id from command line argument
+$2 parse-int dup =: subwallet-id // parse subwallet-id
+32 fits ' usage ifnot
+{ subwallet-id (.) $+ } : +subwallet
+def? $3 { @' $3 } { "new-wallet" } cond constant file-base
+65536 constant timeout // init query times out in 65536 seconds
+
+."Creating new v2 high-load wallet in workchain " wc .
+."with subwallet id " subwallet-id . cr
+
+// Create new high-load wallet; source code included from `highload-wallet-v2-code.fif`
+"highload-wallet-v2-code.fif" include
+// code
+ // data
+null // no libraries
+ // create StateInit
+dup ."StateInit: "
+dup ."signing message: "
+dup ."External message for initialization is " B dup Bx. cr
+file-base +subwallet +"-query.boc" tuck B>file
+."(Saved wallet creating query to file " type .")" cr
diff --git a/submodules/ton/tonlib-src/crypto/smartcont/new-highload-wallet.fif b/submodules/ton/tonlib-src/crypto/smartcont/new-highload-wallet.fif
new file mode 100644
index 0000000000..57be6a2311
--- /dev/null
+++ b/submodules/ton/tonlib-src/crypto/smartcont/new-highload-wallet.fif
@@ -0,0 +1,44 @@
+#!/usr/bin/env fift -s
+"TonUtil.fif" include
+"Asm.fif" include
+
+{ ."usage: " @' $0 type ." []" cr
+ ."Creates a new high-load wallet in the specified workchain, with the controlling private key saved to or loaded from .pk "
+ ."('new-wallet.pk' by default)" cr
+ ." is the 32-bit identifier of this subwallet among all controlled by the same private key" cr 1 halt
+} : usage
+$# 2- -2 and ' usage if
+
+$1 parse-workchain-id =: wc // set workchain id from command line argument
+$2 parse-int dup =: subwallet-id // parse subwallet-id
+32 fits ' usage ifnot
+{ subwallet-id (.) $+ } : +subwallet
+def? $3 { @' $3 } { "new-wallet" } cond constant file-base
+
+."Creating new high-load wallet in workchain " wc .
+."with subwallet id " subwallet-id . cr
+
+// Create new high-load wallet; source code included from `highload-wallet-code.fif`
+"highload-wallet-code.fif" include
+// code
+ // data
+null // no libraries
+ // create StateInit
+dup ."StateInit: "
+dup ."signing message: "
+dup ."External message for initialization is " B dup Bx. cr
+file-base +subwallet +"-query.boc" tuck B>file
+."(Saved wallet creating query to file " type .")" cr
diff --git a/submodules/ton/tonlib-src/crypto/smartcont/new-pinger.fif b/submodules/ton/tonlib-src/crypto/smartcont/new-pinger.fif
index b833268889..646bfdf68c 100644
--- a/submodules/ton/tonlib-src/crypto/smartcont/new-pinger.fif
+++ b/submodules/ton/tonlib-src/crypto/smartcont/new-pinger.fif
@@ -41,7 +41,7 @@ def? $3 { @' $3 } { "new-pinger" } cond constant file-base
// no libraries
// create StateInit
dup ."StateInit: " // create StateInit
dup ."StateInit: " // data
null // no libraries
// create StateInit
dup ."StateInit: "
dup ."signing message: "
dup ."External message for initialization is " B dup Bx. cr
diff --git a/submodules/ton/tonlib-src/crypto/smartcont/new-wallet.fif b/submodules/ton/tonlib-src/crypto/smartcont/new-wallet.fif
index c1ad403ca5..9bdb0bdb38 100644
--- a/submodules/ton/tonlib-src/crypto/smartcont/new-wallet.fif
+++ b/submodules/ton/tonlib-src/crypto/smartcont/new-wallet.fif
@@ -47,14 +47,14 @@ null // no libraries
// Libs{ x{ABACABADABACABA} drop x{AAAA} s>c public_lib x{1234} x{5678} |_ s>c public_lib }Libs
// create StateInit
dup ."StateInit: "
dup ."signing message: "
dup ."External message for initialization is " B dup Bx. cr
diff --git a/submodules/ton/tonlib-src/crypto/smartcont/stdlib.fc b/submodules/ton/tonlib-src/crypto/smartcont/stdlib.fc
index 4fb30bdd10..fb9b49f56a 100644
--- a/submodules/ton/tonlib-src/crypto/smartcont/stdlib.fc
+++ b/submodules/ton/tonlib-src/crypto/smartcont/stdlib.fc
@@ -86,6 +86,8 @@ cell dict_set_builder(cell dict, int key_len, slice index, builder value) asm(va
(cell, (slice, slice, int)) ~dict::delete_get_min(cell dict, int key_len) asm(-> 0 2 1 3) "DICTREMMIN" "NULLSWAPIFNOT" "NULLSWAPIFNOT";
(int, slice, int) udict_get_next?(cell dict, int key_len, int pivot) asm(pivot dict key_len -> 1 0 2) "DICTUGETNEXT" "NULLSWAPIFNOT" "NULLSWAPIFNOT";
(int, slice, int) udict_get_prev?(cell dict, int key_len, int pivot) asm(pivot dict key_len -> 1 0 2) "DICTUGETPREV" "NULLSWAPIFNOT" "NULLSWAPIFNOT";
+(int, slice, int) idict_get_next?(cell dict, int key_len, int pivot) asm(pivot dict key_len -> 1 0 2) "DICTIGETNEXT" "NULLSWAPIFNOT" "NULLSWAPIFNOT";
+(int, slice, int) idict_get_prev?(cell dict, int key_len, int pivot) asm(pivot dict key_len -> 1 0 2) "DICTIGETPREV" "NULLSWAPIFNOT" "NULLSWAPIFNOT";
cell new_dict() asm "NEWDICT";
int dict_empty?(cell c) asm "DICTEMPTY";
diff --git a/submodules/ton/tonlib-src/crypto/smartcont/update-config-smc.fif b/submodules/ton/tonlib-src/crypto/smartcont/update-config-smc.fif
index 3840e128f8..22f01f0456 100644
--- a/submodules/ton/tonlib-src/crypto/smartcont/update-config-smc.fif
+++ b/submodules/ton/tonlib-src/crypto/smartcont/update-config-smc.fif
@@ -6,7 +6,7 @@
."with private key loaded from file .pk, "
."and saves it into .boc ('config-query.boc' by default)" cr 1 halt
} : usage
-def? $# { @' $# dup 2 < swap 3 > or ' usage if } if
+$# dup 2 < swap 3 > or ' usage if
"config-master" constant file-base
0 constant seqno
@@ -15,18 +15,16 @@ true constant bounce
"config-code.fif" constant config-source
100 constant interval // valid for 100 seconds
-def? $2 {
- @' $1 =: file-base
- @' $2 parse-int =: seqno
-} if
-def? $5 { @' $5 } { "config-query" } cond constant savefile
+$1 =: file-base
+$2 parse-int =: seqno
+def? $3 { @' $3 } { "config-query" } cond constant savefile
file-base +".addr" load-address
2dup 2constant config_addr
."Configuration smart contract address = " 2dup .addr cr 6 .Addr cr
file-base +".pk" load-keypair nip constant config_pk
-."Loading new configuration smart contract code from file file " config-source type cr
+."Loading new configuration smart contract code from file " config-source type cr
"Asm.fif" include
config-source include
dup
dup ."signing message: "
dup ."resulting external message: " .pk, "
."and saves it into .boc ('config-query.boc' by default)" cr 1 halt
} : usage
-def? $# { @' $# dup 4 < swap 5 > or ' usage if } if
+$# dup 4 < swap 5 > or ' usage if
"config-master" constant file-base
0 constant seqno
@@ -15,12 +15,10 @@ true constant bounce
"new-value.boc" constant boc-filename
100 constant interval // valid for 100 seconds
-def? $4 {
- @' $1 =: file-base
- @' $2 parse-int =: seqno
- @' $3 parse-int =: idx
- @' $4 =: boc-filename
-} if
+$1 =: file-base
+$2 parse-int =: seqno
+$3 parse-int =: idx
+$4 =: boc-filename
def? $5 { @' $5 } { "config-query" } cond constant savefile
file-base +".addr" load-address
@@ -39,7 +37,7 @@ dup idx is-valid-config? not abort"not a valid value for chosen configuration pa
// create a message
dup ."signing message: "
dup ."resulting external message: " | | | |